mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-20 15:29:10 +00:00
Added semicolon to do {} while ();
This commit is contained in:
parent
f1512af630
commit
09dd676363
@ -256,12 +256,6 @@ public class AsmFragment {
|
||||
return null;
|
||||
}
|
||||
|
||||
//@Override
|
||||
//public Object visitAsmComment(KickCParser.AsmCommentContext ctx) {
|
||||
// program.addLine(new AsmComment(ctx.getChild(1).getText()));
|
||||
// return null;
|
||||
//}
|
||||
|
||||
@Override
|
||||
public Object visitAsmInstruction(KickCParser.AsmInstructionContext ctx) {
|
||||
KickCParser.AsmParamModeContext paramModeCtx = ctx.asmParamMode();
|
||||
@ -374,6 +368,11 @@ public class AsmFragment {
|
||||
return new AsmParameter(param, isZp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object visitAsmExprChar(KickCParser.AsmExprCharContext ctx) {
|
||||
return new AsmParameter(ctx.getText(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AsmParameter visitAsmExprLabel(KickCParser.AsmExprLabelContext ctx) {
|
||||
String param = ctx.NAME().getSymbol().getText();
|
||||
|
@ -21,7 +21,7 @@ stmt
|
||||
| expr ';' #stmtExpr
|
||||
| 'if' '(' expr ')' stmt ( 'else' stmt )? #stmtIfElse
|
||||
| 'while' '(' expr ')' stmt #stmtWhile
|
||||
| 'do' stmt 'while' '(' expr ')' #stmtDoWhile
|
||||
| 'do' stmt 'while' '(' expr ')' ';' #stmtDoWhile
|
||||
| 'for' '(' forDeclaration? forIteration ')' stmt #stmtFor
|
||||
| 'return' expr? ';' #stmtReturn
|
||||
| 'asm' '{' asmLines '}' ';' #stmtAsm
|
||||
@ -124,6 +124,7 @@ asmExpr
|
||||
| ASMREL #asmExprLabelRel
|
||||
| '{' NAME '}' #asmExprReplace
|
||||
| NUMBER #asmExprInt
|
||||
| CHAR #asmExprChar
|
||||
;
|
||||
|
||||
MNEMONIC:
|
||||
|
@ -719,6 +719,18 @@ public class KickCBaseListener implements KickCListener {
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void enterAsmExprChar(KickCParser.AsmExprCharContext ctx) { }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation does nothing.</p>
|
||||
*/
|
||||
@Override public void exitAsmExprChar(KickCParser.AsmExprCharContext ctx) { }
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
|
@ -424,4 +424,11 @@ public class KickCBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx) { return visitChildren(ctx); }
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*
|
||||
* <p>The default implementation returns the result of calling
|
||||
* {@link #visitChildren} on {@code ctx}.</p>
|
||||
*/
|
||||
@Override public T visitAsmExprChar(KickCParser.AsmExprCharContext ctx) { return visitChildren(ctx); }
|
||||
}
|
@ -695,4 +695,16 @@ public interface KickCListener extends ParseTreeListener {
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx);
|
||||
/**
|
||||
* Enter a parse tree produced by the {@code asmExprChar}
|
||||
* labeled alternative in {@link KickCParser#asmExpr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void enterAsmExprChar(KickCParser.AsmExprCharContext ctx);
|
||||
/**
|
||||
* Exit a parse tree produced by the {@code asmExprChar}
|
||||
* labeled alternative in {@link KickCParser#asmExpr}.
|
||||
* @param ctx the parse tree
|
||||
*/
|
||||
void exitAsmExprChar(KickCParser.AsmExprCharContext ctx);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -413,4 +413,11 @@ public interface KickCVisitor<T> extends ParseTreeVisitor<T> {
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitAsmExprUnary(KickCParser.AsmExprUnaryContext ctx);
|
||||
/**
|
||||
* Visit a parse tree produced by the {@code asmExprChar}
|
||||
* labeled alternative in {@link KickCParser#asmExpr}.
|
||||
* @param ctx the parse tree
|
||||
* @return the visitor result
|
||||
*/
|
||||
T visitAsmExprChar(KickCParser.AsmExprCharContext ctx);
|
||||
}
|
@ -32,6 +32,10 @@ public class TestPrograms extends TestCase {
|
||||
compileAndCompare("inline-asm");
|
||||
}
|
||||
|
||||
public void testChargen() throws IOException, URISyntaxException {
|
||||
compileAndCompare("chargen");
|
||||
}
|
||||
|
||||
public void testBitmapPlotter() throws IOException, URISyntaxException {
|
||||
compileAndCompare("bitmap-plotter");
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ void main() {
|
||||
init_plot_tables();
|
||||
do {
|
||||
lines();
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
||||
void lines() {
|
||||
@ -96,7 +96,7 @@ void line_xdyi(byte x, byte y, byte x1, byte xd, byte yd) {
|
||||
y = y+1;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
||||
|
||||
void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
|
||||
@ -109,7 +109,7 @@ void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
|
||||
y = y-1;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
||||
|
||||
void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
@ -122,7 +122,7 @@ void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
x = x+1;
|
||||
e = e - yd;
|
||||
}
|
||||
} while (y<(y1+1))
|
||||
} while (y<(y1+1));
|
||||
}
|
||||
|
||||
void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
@ -135,7 +135,7 @@ void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
x = x-1;
|
||||
e = e - yd;
|
||||
}
|
||||
} while (y<(y1+1))
|
||||
} while (y<(y1+1));
|
||||
}
|
||||
|
||||
void plot(byte x, byte y) {
|
||||
|
@ -26,11 +26,11 @@ void main() {
|
||||
init_screen();
|
||||
init_plot_tables();
|
||||
do {
|
||||
do {} while (*RASTER!=$ff)
|
||||
do {} while (*RASTER!=$ff);
|
||||
*BGCOL = *BGCOL+1;
|
||||
plots();
|
||||
*BGCOL = *BGCOL-1;
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
||||
byte[] plots_x = { 60, 80, 110, 80, 60, 40, 10, 40 };
|
||||
|
@ -22,5 +22,5 @@ void main() {
|
||||
cursor = cursor + 40;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
@ -22,5 +22,5 @@ void main() {
|
||||
idx = idx + 40;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
25
src/main/java/dk/camelot64/kickc/test/chargen.kc
Normal file
25
src/main/java/dk/camelot64/kickc/test/chargen.kc
Normal file
@ -0,0 +1,25 @@
|
||||
byte* PROCPORT = $01;
|
||||
byte* CHARGEN = $d000;
|
||||
byte* SCREEN = $0400;
|
||||
|
||||
void main() {
|
||||
asm { sei };
|
||||
byte* CHAR_A = CHARGEN+8;
|
||||
*PROCPORT = $32;
|
||||
byte* sc = SCREEN;
|
||||
for(byte y:0..7) {
|
||||
byte bits = CHAR_A[y];
|
||||
for(byte x:0..7) {
|
||||
byte c = '.';
|
||||
if((bits & $80) != 0) {
|
||||
c = '*';
|
||||
}
|
||||
*sc = c;
|
||||
sc++;
|
||||
bits = bits<<1;
|
||||
}
|
||||
sc = sc+32;
|
||||
}
|
||||
*PROCPORT = $37;
|
||||
asm { cli };
|
||||
}
|
@ -8,7 +8,7 @@ void main() {
|
||||
}
|
||||
do {
|
||||
line(0, 10);
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
||||
void line(byte x0, byte x1) {
|
||||
|
@ -6,5 +6,5 @@ void main() {
|
||||
byte i = 0;
|
||||
do {
|
||||
fibs[i+2] = fibs[i]+fibs[i+1];
|
||||
} while(++i<15)
|
||||
} while(++i<15);
|
||||
}
|
@ -7,12 +7,12 @@ void main() {
|
||||
prepare();
|
||||
do {
|
||||
for( byte c : 25..1) {
|
||||
do { } while(*RASTER!=254)
|
||||
do { } while(*RASTER!=255)
|
||||
do { } while(*RASTER!=254);
|
||||
do { } while(*RASTER!=255);
|
||||
}
|
||||
flip();
|
||||
plot();
|
||||
} while(true)
|
||||
} while(true);
|
||||
}
|
||||
|
||||
// Prepare buffer
|
||||
|
@ -8,6 +8,7 @@ byte* CHARSET4 = $2800;
|
||||
byte[] bits_count = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
|
||||
|
||||
void main() {
|
||||
asm { sei };
|
||||
*PROCPORT = $32;
|
||||
byte* chargen = CHARGEN;
|
||||
byte* charset4 = CHARSET4;
|
||||
@ -29,9 +30,9 @@ void main() {
|
||||
*charset4 = bits_gen;
|
||||
charset4++;
|
||||
chargen = chargen+2;
|
||||
} while (chargen<CHARGEN+$800)
|
||||
} while (chargen<CHARGEN+$800);
|
||||
*PROCPORT = $37;
|
||||
|
||||
asm { cli };
|
||||
for(byte i : 0..255) {
|
||||
SCREEN[i] = i;
|
||||
}
|
||||
|
@ -7,5 +7,5 @@ void main() {
|
||||
if(i<50) {
|
||||
*SCREEN = i;
|
||||
}
|
||||
} while(++i<100)
|
||||
} while(++i<100);
|
||||
}
|
@ -1,25 +1,14 @@
|
||||
byte* PROCPORT = $01;
|
||||
byte* CHARGEN = $d000;
|
||||
byte* SCREEN = $0400;
|
||||
|
||||
void main() {
|
||||
asm { sei };
|
||||
byte* CHAR_A = CHARGEN+8;
|
||||
*PROCPORT = $32;
|
||||
byte* sc = SCREEN;
|
||||
for(byte y:0..7) {
|
||||
byte bits = CHAR_A[y];
|
||||
for(byte x:0..7) {
|
||||
if((bits & $80) != 0) {
|
||||
*sc = '*';
|
||||
} else {
|
||||
*sc = '.';
|
||||
}
|
||||
sc++;
|
||||
bits = bits<<1;
|
||||
}
|
||||
sc = sc+32;
|
||||
}
|
||||
*PROCPORT = $37;
|
||||
asm { cli };
|
||||
asm {
|
||||
lda #'a'
|
||||
ldx #$ff
|
||||
!:
|
||||
sta $0400,x
|
||||
sta $0500,x
|
||||
sta $0600,x
|
||||
sta $0700,x
|
||||
dex
|
||||
bne !-
|
||||
};
|
||||
}
|
||||
|
@ -10,5 +10,5 @@ void main() {
|
||||
if(++i==8) {
|
||||
i = 0;
|
||||
}
|
||||
} while(++cursor<SCREEN+1000)
|
||||
} while(++cursor<SCREEN+1000);
|
||||
}
|
@ -4,5 +4,5 @@ void main() {
|
||||
do {
|
||||
buf[i] = 2+i+2;
|
||||
i = i+1;
|
||||
} while(i<10)
|
||||
} while(i<10);
|
||||
}
|
@ -6,5 +6,5 @@ void main() {
|
||||
s=s+i;
|
||||
}
|
||||
i--;
|
||||
} while (i>0)
|
||||
} while (i>0);
|
||||
}
|
@ -4,12 +4,12 @@ void main() {
|
||||
byte i=100;
|
||||
do {
|
||||
nest();
|
||||
} while (--i>0)
|
||||
} while (--i>0);
|
||||
}
|
||||
|
||||
void nest() {
|
||||
byte j=100;
|
||||
do {
|
||||
*SCREEN = j;
|
||||
} while (--j>0)
|
||||
} while (--j>0);
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ void main() {
|
||||
byte j=100;
|
||||
do {
|
||||
nest1();
|
||||
} while (--j>0)
|
||||
} while (--i>0)
|
||||
} while (--j>0);
|
||||
} while (--i>0);
|
||||
}
|
||||
|
||||
void nest1() {
|
||||
@ -16,8 +16,8 @@ void nest1() {
|
||||
byte j=100;
|
||||
do {
|
||||
nest2();
|
||||
} while (--j>0)
|
||||
} while (--i>0)
|
||||
} while (--j>0);
|
||||
} while (--i>0);
|
||||
}
|
||||
|
||||
void nest2() {
|
||||
@ -26,6 +26,6 @@ void nest2() {
|
||||
byte j=100;
|
||||
do {
|
||||
*SCREEN = j;
|
||||
} while (--j>0)
|
||||
} while (--i>0)
|
||||
} while (--j>0);
|
||||
} while (--i>0);
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ void main() {
|
||||
init_plot_tables();
|
||||
do {
|
||||
lines();
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
||||
void lines() {
|
||||
@ -96,7 +96,7 @@ void line_xdyi(byte x, byte y, byte x1, byte xd, byte yd) {
|
||||
y = y+1;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
||||
|
||||
void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
|
||||
@ -109,7 +109,7 @@ void line_xdyd(byte x, byte y, byte x1, byte xd, byte yd) {
|
||||
y = y-1;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
||||
|
||||
void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
@ -122,7 +122,7 @@ void line_ydxi(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
x = x+1;
|
||||
e = e - yd;
|
||||
}
|
||||
} while (y<(y1+1))
|
||||
} while (y<(y1+1));
|
||||
}
|
||||
|
||||
void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
@ -135,7 +135,7 @@ void line_ydxd(byte y, byte x, byte y1, byte yd, byte xd) {
|
||||
x = x-1;
|
||||
e = e - yd;
|
||||
}
|
||||
} while (y<(y1+1))
|
||||
} while (y<(y1+1));
|
||||
}
|
||||
|
||||
void plot(byte x, byte y) {
|
||||
|
@ -26,11 +26,11 @@ void main() {
|
||||
init_screen();
|
||||
init_plot_tables();
|
||||
do {
|
||||
do {} while (*RASTER!=$ff)
|
||||
do {} while (*RASTER!=$ff);
|
||||
*BGCOL = *BGCOL+1;
|
||||
plots();
|
||||
*BGCOL = *BGCOL-1;
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
||||
byte[] plots_x = { 60, 80, 110, 80, 60, 40, 10, 40 };
|
||||
|
@ -22,7 +22,7 @@ void main() {
|
||||
cursor = cursor + 40;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
||||
PROGRAM
|
||||
(byte) STAR ← (byte) 81
|
||||
|
@ -22,7 +22,7 @@ void main() {
|
||||
idx = idx + 40;
|
||||
e = e - xd;
|
||||
}
|
||||
} while (x<(x1+1))
|
||||
} while (x<(x1+1));
|
||||
}
|
||||
PROGRAM
|
||||
proc (void()) main()
|
||||
|
62
src/main/java/dk/camelot64/kickc/test/ref/chargen.asm
Normal file
62
src/main/java/dk/camelot64/kickc/test/ref/chargen.asm
Normal file
@ -0,0 +1,62 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const PROCPORT = 1
|
||||
.const CHARGEN = $d000
|
||||
.const SCREEN = $400
|
||||
jsr main
|
||||
main: {
|
||||
.const CHAR_A = CHARGEN+8
|
||||
.label bits = 3
|
||||
.label sc = 4
|
||||
.label y = 2
|
||||
sei
|
||||
lda #$32
|
||||
sta PROCPORT
|
||||
lda #<SCREEN
|
||||
sta sc
|
||||
lda #>SCREEN
|
||||
sta sc+1
|
||||
lda #0
|
||||
sta y
|
||||
b1:
|
||||
ldx y
|
||||
lda CHAR_A,x
|
||||
sta bits
|
||||
ldx #0
|
||||
b2:
|
||||
lda bits
|
||||
and #$80
|
||||
cmp #0
|
||||
beq b3_from_b2
|
||||
lda #'*'
|
||||
jmp b3
|
||||
b3_from_b2:
|
||||
lda #'.'
|
||||
b3:
|
||||
ldy #0
|
||||
sta (sc),y
|
||||
inc sc
|
||||
bne !+
|
||||
inc sc+1
|
||||
!:
|
||||
asl bits
|
||||
inx
|
||||
cpx #8
|
||||
bne b2
|
||||
lda sc
|
||||
clc
|
||||
adc #$20
|
||||
sta sc
|
||||
bcc !+
|
||||
inc sc+1
|
||||
!:
|
||||
inc y
|
||||
lda y
|
||||
cmp #8
|
||||
bne b1
|
||||
lda #$37
|
||||
sta PROCPORT
|
||||
cli
|
||||
rts
|
||||
}
|
44
src/main/java/dk/camelot64/kickc/test/ref/chargen.cfg
Normal file
44
src/main/java/dk/camelot64/kickc/test/ref/chargen.cfg
Normal file
@ -0,0 +1,44 @@
|
||||
@begin: scope:[] from
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[0] call main param-assignment [ ]
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
main: scope:[main] from @1
|
||||
asm { sei }
|
||||
[2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[3] (byte*) main::sc#7 ← phi( main/(const byte*) SCREEN#0 main::@5/(byte*) main::sc#2 ) [ main::y#2 main::sc#7 ]
|
||||
[3] (byte) main::y#2 ← phi( main/(byte) 0 main::@5/(byte) main::y#1 ) [ main::y#2 main::sc#7 ]
|
||||
[4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#7 main::bits#0 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@3
|
||||
[5] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@3/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[5] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#7 main::@3/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[5] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@3/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
|
||||
[7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2 main::@4
|
||||
[8] (byte) main::c#2 ← phi( main::@2/(byte) '.' main::@4/(byte) '*' ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::c#2 ]
|
||||
[9] *((byte*) main::sc#3) ← (byte) main::c#2 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[10] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
|
||||
[11] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ]
|
||||
[12] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
|
||||
[13] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@3
|
||||
[14] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
|
||||
[15] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ]
|
||||
[16] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ]
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
[17] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
|
||||
asm { cli }
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@6
|
||||
[19] return [ ]
|
||||
to:@return
|
2461
src/main/java/dk/camelot64/kickc/test/ref/chargen.log
Normal file
2461
src/main/java/dk/camelot64/kickc/test/ref/chargen.log
Normal file
File diff suppressed because it is too large
Load Diff
44
src/main/java/dk/camelot64/kickc/test/ref/chargen.sym
Normal file
44
src/main/java/dk/camelot64/kickc/test/ref/chargen.sym
Normal file
@ -0,0 +1,44 @@
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) CHARGEN
|
||||
(const byte*) CHARGEN#0 CHARGEN = (word) 53248
|
||||
(byte*) PROCPORT
|
||||
(const byte*) PROCPORT#0 PROCPORT = (byte) 1
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = (word) 1024
|
||||
(void()) main()
|
||||
(byte~) main::$2 reg byte a 202.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@4
|
||||
(label) main::@5
|
||||
(label) main::@6
|
||||
(label) main::@return
|
||||
(byte*) main::CHAR_A
|
||||
(const byte*) main::CHAR_A#0 CHAR_A = (const byte*) CHARGEN#0+(byte) 8
|
||||
(byte) main::bits
|
||||
(byte) main::bits#0 bits zp ZP_BYTE:3 22.0
|
||||
(byte) main::bits#1 bits zp ZP_BYTE:3 67.33333333333333
|
||||
(byte) main::bits#2 bits zp ZP_BYTE:3 52.33333333333333
|
||||
(byte) main::c
|
||||
(byte) main::c#2 reg byte a 101.0
|
||||
(byte*) main::sc
|
||||
(byte*) main::sc#1 sc zp ZP_PTR_BYTE:4 53.25
|
||||
(byte*) main::sc#2 sc zp ZP_PTR_BYTE:4 7.333333333333333
|
||||
(byte*) main::sc#3 sc zp ZP_PTR_BYTE:4 62.8
|
||||
(byte*) main::sc#7 sc zp ZP_PTR_BYTE:4 11.0
|
||||
(byte) main::x
|
||||
(byte) main::x#1 reg byte x 151.5
|
||||
(byte) main::x#2 reg byte x 28.857142857142858
|
||||
(byte) main::y
|
||||
(byte) main::y#1 y zp ZP_BYTE:2 16.5
|
||||
(byte) main::y#2 y zp ZP_BYTE:2 2.75
|
||||
|
||||
zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#7 main::sc#2 main::sc#1 ]
|
||||
reg byte x [ main::x#2 main::x#1 ]
|
||||
reg byte a [ main::c#2 ]
|
||||
reg byte a [ main::$2 ]
|
@ -8,7 +8,7 @@ void main() {
|
||||
}
|
||||
do {
|
||||
line(0, 10);
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
||||
void line(byte x0, byte x1) {
|
||||
|
@ -6,7 +6,7 @@ void main() {
|
||||
byte i = 0;
|
||||
do {
|
||||
fibs[i+2] = fibs[i]+fibs[i+1];
|
||||
} while(++i<15)
|
||||
} while(++i<15);
|
||||
}
|
||||
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
|
||||
PROGRAM
|
||||
|
@ -7,12 +7,12 @@ void main() {
|
||||
prepare();
|
||||
do {
|
||||
for( byte c : 25..1) {
|
||||
do { } while(*RASTER!=254)
|
||||
do { } while(*RASTER!=255)
|
||||
do { } while(*RASTER!=254);
|
||||
do { } while(*RASTER!=255);
|
||||
}
|
||||
flip();
|
||||
plot();
|
||||
} while(true)
|
||||
} while(true);
|
||||
}
|
||||
|
||||
// Prepare buffer
|
||||
|
@ -18,6 +18,7 @@ main: {
|
||||
.label bits_gen = 6
|
||||
.label charset4 = 4
|
||||
.label chargen = 2
|
||||
sei
|
||||
lda #$32
|
||||
sta PROCPORT
|
||||
lda #<CHARSET4
|
||||
@ -75,8 +76,7 @@ main: {
|
||||
bcc b3
|
||||
inc bits_gen
|
||||
b3:
|
||||
asl
|
||||
sta bits_gen
|
||||
asl bits_gen
|
||||
ldy #0
|
||||
lda (chargen),y
|
||||
and #6
|
||||
@ -92,8 +92,7 @@ main: {
|
||||
bcc b4
|
||||
inc bits_gen
|
||||
b4:
|
||||
asl
|
||||
sta bits_gen
|
||||
asl bits_gen
|
||||
ldy #0
|
||||
lda (chargen),y
|
||||
and #1
|
||||
@ -134,6 +133,7 @@ main: {
|
||||
!:
|
||||
lda #$37
|
||||
sta PROCPORT
|
||||
cli
|
||||
ldx #0
|
||||
b6:
|
||||
txa
|
||||
|
@ -5,92 +5,94 @@
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
main: scope:[main] from @1
|
||||
[1] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
|
||||
asm { sei }
|
||||
[2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
[2] (byte*) main::charset4#10 ← phi( main/(const byte*) CHARSET4#0 main::@5/(byte*) main::charset4#1 ) [ main::chargen#10 main::charset4#10 ]
|
||||
[2] (byte*) main::chargen#10 ← phi( main/(const byte*) CHARGEN#0 main::@5/(byte*) main::chargen#1 ) [ main::chargen#10 main::charset4#10 ]
|
||||
[3] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
|
||||
[4] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ]
|
||||
[5] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ]
|
||||
[6] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ]
|
||||
[7] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ]
|
||||
[8] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
|
||||
[9] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
|
||||
[10] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
|
||||
[11] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
|
||||
[12] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
|
||||
[13] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
|
||||
[3] (byte*) main::charset4#10 ← phi( main/(const byte*) CHARSET4#0 main::@5/(byte*) main::charset4#1 ) [ main::chargen#10 main::charset4#10 ]
|
||||
[3] (byte*) main::chargen#10 ← phi( main/(const byte*) CHARGEN#0 main::@5/(byte*) main::chargen#1 ) [ main::chargen#10 main::charset4#10 ]
|
||||
[4] (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
|
||||
[5] (byte~) main::$1 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$1 ]
|
||||
[6] (byte~) main::$2 ← (byte~) main::$1 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 ]
|
||||
[7] (byte~) main::$3 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$3 ]
|
||||
[8] (byte~) main::$4 ← (byte~) main::$3 & (byte) 96 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$4 ]
|
||||
[9] (byte~) main::$5 ← (byte~) main::$4 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$2 main::$5 ]
|
||||
[10] (byte~) main::$6 ← (byte~) main::$2 | (byte~) main::$5 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$6 ]
|
||||
[11] (byte~) main::$7 ← (byte~) main::$6 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$7 ]
|
||||
[12] (byte~) main::$8 ← (byte~) main::$7 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::$8 ]
|
||||
[13] (byte) main::bits#0 ← (const byte[]) bits_count#0 *idx (byte~) main::$8 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits#0 ]
|
||||
[14] if((byte) main::bits#0<(byte) 2) goto main::@2 [ main::chargen#10 main::charset4#10 main::chargen1#0 ]
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@1
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@7
|
||||
[14] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
|
||||
[15] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
|
||||
[16] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
|
||||
[17] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
|
||||
[18] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
|
||||
[19] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
|
||||
[20] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
|
||||
[21] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
|
||||
[22] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
|
||||
[23] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
|
||||
[24] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
|
||||
[15] (byte) main::bits_gen#9 ← phi( main::@1/(byte) 0 main::@7/(byte) 0+(byte) 1 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#9 ]
|
||||
[16] (byte) main::bits_gen#1 ← (byte) main::bits_gen#9 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
|
||||
[17] (byte~) main::$14 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$14 ]
|
||||
[18] (byte~) main::$15 ← (byte~) main::$14 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 ]
|
||||
[19] (byte~) main::$16 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$16 ]
|
||||
[20] (byte~) main::$17 ← (byte~) main::$16 & (byte) 24 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$17 ]
|
||||
[21] (byte~) main::$18 ← (byte~) main::$17 >> (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$15 main::$18 ]
|
||||
[22] (byte~) main::$19 ← (byte~) main::$15 | (byte~) main::$18 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$19 ]
|
||||
[23] (byte~) main::$20 ← (byte~) main::$19 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::$20 ]
|
||||
[24] (byte) main::bits#1 ← (const byte[]) bits_count#0 *idx (byte~) main::$20 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 main::bits#1 ]
|
||||
[25] if((byte) main::bits#1<(byte) 2) goto main::@3 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#1 ]
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@2
|
||||
[25] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
|
||||
[26] (byte) main::bits_gen#4 ← (byte) main::bits_gen#1 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#4 ]
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2 main::@8
|
||||
[26] (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
|
||||
[27] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
|
||||
[28] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
|
||||
[29] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
|
||||
[30] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
|
||||
[31] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
|
||||
[32] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
|
||||
[33] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
|
||||
[34] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
|
||||
[35] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
|
||||
[36] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
|
||||
[27] (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#11 ]
|
||||
[28] (byte) main::bits_gen#14 ← (byte) main::bits_gen#11 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
|
||||
[29] (byte~) main::$26 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$26 ]
|
||||
[30] (byte~) main::$27 ← (byte~) main::$26 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$27 ]
|
||||
[31] (byte~) main::$28 ← (byte~) main::$27 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 ]
|
||||
[32] (byte~) main::$29 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$29 ]
|
||||
[33] (byte~) main::$30 ← (byte~) main::$29 & (byte) 6 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$30 ]
|
||||
[34] (byte~) main::$31 ← (byte~) main::$30 >> (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$28 main::$31 ]
|
||||
[35] (byte~) main::$32 ← (byte~) main::$28 | (byte~) main::$31 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::$32 ]
|
||||
[36] (byte) main::bits#2 ← (const byte[]) bits_count#0 *idx (byte~) main::$32 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 main::bits#2 ]
|
||||
[37] if((byte) main::bits#2<(byte) 2) goto main::@4 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#14 ]
|
||||
to:main::@9
|
||||
main::@9: scope:[main] from main::@3
|
||||
[37] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
|
||||
[38] (byte) main::bits_gen#6 ← (byte) main::bits_gen#14 + (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#6 ]
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3 main::@9
|
||||
[38] (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
|
||||
[39] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
|
||||
[40] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
|
||||
[41] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
|
||||
[42] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
|
||||
[43] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
|
||||
[44] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
|
||||
[45] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
|
||||
[46] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
|
||||
[47] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
|
||||
[39] (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#13 ]
|
||||
[40] (byte) main::bits_gen#16 ← (byte) main::bits_gen#13 << (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 ]
|
||||
[41] (byte~) main::$38 ← * (byte*) main::chargen#10 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$38 ]
|
||||
[42] (byte~) main::$39 ← (byte~) main::$38 & (byte) 1 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$39 ]
|
||||
[43] (byte~) main::$40 ← (byte~) main::$39 << (byte) 2 [ main::chargen#10 main::charset4#10 main::chargen1#0 main::bits_gen#16 main::$40 ]
|
||||
[44] (byte~) main::$41 ← * (byte*) main::chargen1#0 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$41 ]
|
||||
[45] (byte~) main::$42 ← (byte~) main::$41 & (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$40 main::$42 ]
|
||||
[46] (byte~) main::$43 ← (byte~) main::$40 | (byte~) main::$42 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::$43 ]
|
||||
[47] (byte) main::bits#3 ← (const byte[]) bits_count#0 *idx (byte~) main::$43 [ main::chargen#10 main::charset4#10 main::bits_gen#16 main::bits#3 ]
|
||||
[48] if((byte) main::bits#3<(byte) 2) goto main::@5 [ main::chargen#10 main::charset4#10 main::bits_gen#16 ]
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@4
|
||||
[48] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
|
||||
[49] (byte) main::bits_gen#8 ← (byte) main::bits_gen#16 + (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#8 ]
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@10 main::@4
|
||||
[49] (byte) main::bits_gen#15 ← phi( main::@10/(byte) main::bits_gen#8 main::@4/(byte) main::bits_gen#16 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
|
||||
[50] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
|
||||
[51] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
|
||||
[52] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
|
||||
[53] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ]
|
||||
[54] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ]
|
||||
[50] (byte) main::bits_gen#15 ← phi( main::@10/(byte) main::bits_gen#8 main::@4/(byte) main::bits_gen#16 ) [ main::chargen#10 main::charset4#10 main::bits_gen#15 ]
|
||||
[51] (byte) main::bits_gen#7 ← (byte) main::bits_gen#15 << (byte) 1 [ main::chargen#10 main::charset4#10 main::bits_gen#7 ]
|
||||
[52] *((byte*) main::charset4#10) ← (byte) main::bits_gen#7 [ main::chargen#10 main::charset4#10 ]
|
||||
[53] (byte*) main::charset4#1 ← ++ (byte*) main::charset4#10 [ main::chargen#10 main::charset4#1 ]
|
||||
[54] (byte*) main::chargen#1 ← (byte*) main::chargen#10 + (byte) 2 [ main::chargen#1 main::charset4#1 ]
|
||||
[55] if((byte*) main::chargen#1<(const byte*) CHARGEN#0+(word) 2048) goto main::@1 [ main::chargen#1 main::charset4#1 ]
|
||||
to:main::@11
|
||||
main::@11: scope:[main] from main::@5
|
||||
[55] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
|
||||
[56] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
|
||||
asm { cli }
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@11 main::@6
|
||||
[56] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[57] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
|
||||
[58] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[59] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ]
|
||||
[58] (byte) main::i#2 ← phi( main::@11/(byte) 0 main::@6/(byte) main::i#1 ) [ main::i#2 ]
|
||||
[59] *((const byte*) SCREEN#0 + (byte) main::i#2) ← (byte) main::i#2 [ main::i#2 ]
|
||||
[60] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
||||
[61] if((byte) main::i#1!=(byte) 0) goto main::@6 [ main::i#1 ]
|
||||
to:main::@12
|
||||
main::@12: scope:[main] from main::@6
|
||||
[60] *((const byte*) D018#0) ← (byte) 25 [ ]
|
||||
[62] *((const byte*) D018#0) ← (byte) 25 [ ]
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@12
|
||||
[61] return [ ]
|
||||
[63] return [ ]
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@ void main() {
|
||||
if(i<50) {
|
||||
*SCREEN = i;
|
||||
}
|
||||
} while(++i<100)
|
||||
} while(++i<100);
|
||||
}
|
||||
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
|
||||
PROGRAM
|
||||
|
@ -1,64 +1,16 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.const PROCPORT = 1
|
||||
.const CHARGEN = $d000
|
||||
.const SCREEN = $400
|
||||
jsr main
|
||||
main: {
|
||||
.const CHAR_A = CHARGEN+8
|
||||
.label bits = 3
|
||||
.label sc = 4
|
||||
.label y = 2
|
||||
sei
|
||||
lda #$32
|
||||
sta PROCPORT
|
||||
lda #<SCREEN
|
||||
sta sc
|
||||
lda #>SCREEN
|
||||
sta sc+1
|
||||
lda #0
|
||||
sta y
|
||||
b1:
|
||||
ldx y
|
||||
lda CHAR_A,x
|
||||
sta bits
|
||||
ldx #0
|
||||
b2:
|
||||
lda bits
|
||||
and #$80
|
||||
cmp #0
|
||||
beq b3
|
||||
ldy #0
|
||||
lda #'*'
|
||||
sta (sc),y
|
||||
b4:
|
||||
inc sc
|
||||
bne !+
|
||||
inc sc+1
|
||||
lda #'a'
|
||||
ldx #$ff
|
||||
!:
|
||||
asl bits
|
||||
inx
|
||||
cpx #8
|
||||
bne b2
|
||||
lda sc
|
||||
clc
|
||||
adc #$20
|
||||
sta sc
|
||||
bcc !+
|
||||
inc sc+1
|
||||
!:
|
||||
inc y
|
||||
lda y
|
||||
cmp #8
|
||||
bne b1
|
||||
lda #$37
|
||||
sta PROCPORT
|
||||
cli
|
||||
sta $400,x
|
||||
sta $500,x
|
||||
sta $600,x
|
||||
sta $700,x
|
||||
dex
|
||||
bne !-
|
||||
rts
|
||||
b3:
|
||||
ldy #0
|
||||
lda #'.'
|
||||
sta (sc),y
|
||||
jmp b4
|
||||
}
|
||||
|
@ -5,42 +5,8 @@
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
main: scope:[main] from @1
|
||||
asm { sei }
|
||||
[2] *((const byte*) PROCPORT#0) ← (byte) 50 [ ]
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@7
|
||||
[3] (byte*) main::sc#8 ← phi( main/(const byte*) SCREEN#0 main::@7/(byte*) main::sc#2 ) [ main::y#2 main::sc#8 ]
|
||||
[3] (byte) main::y#2 ← phi( main/(byte) 0 main::@7/(byte) main::y#1 ) [ main::y#2 main::sc#8 ]
|
||||
[4] (byte) main::bits#0 ← (const byte*) main::CHAR_A#0 *idx (byte) main::y#2 [ main::y#2 main::sc#8 main::bits#0 ]
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@4
|
||||
[5] (byte) main::x#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::x#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[5] (byte*) main::sc#3 ← phi( main::@1/(byte*) main::sc#8 main::@4/(byte*) main::sc#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[5] (byte) main::bits#2 ← phi( main::@1/(byte) main::bits#0 main::@4/(byte) main::bits#1 ) [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
[6] (byte~) main::$2 ← (byte) main::bits#2 & (byte) 128 [ main::y#2 main::bits#2 main::sc#3 main::x#2 main::$2 ]
|
||||
[7] if((byte~) main::$2==(byte) 0) goto main::@3 [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@2
|
||||
[8] *((byte*) main::sc#3) ← (byte) '*' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3 main::@5
|
||||
[9] (byte*) main::sc#1 ← ++ (byte*) main::sc#3 [ main::y#2 main::bits#2 main::x#2 main::sc#1 ]
|
||||
[10] (byte) main::bits#1 ← (byte) main::bits#2 << (byte) 1 [ main::y#2 main::x#2 main::bits#1 main::sc#1 ]
|
||||
[11] (byte) main::x#1 ← ++ (byte) main::x#2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
|
||||
[12] if((byte) main::x#1!=(byte) 8) goto main::@2 [ main::y#2 main::bits#1 main::sc#1 main::x#1 ]
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@4
|
||||
[13] (byte*) main::sc#2 ← (byte*) main::sc#1 + (byte) 32 [ main::y#2 main::sc#2 ]
|
||||
[14] (byte) main::y#1 ← ++ (byte) main::y#2 [ main::y#1 main::sc#2 ]
|
||||
[15] if((byte) main::y#1!=(byte) 8) goto main::@1 [ main::y#1 main::sc#2 ]
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@7
|
||||
[16] *((const byte*) PROCPORT#0) ← (byte) 55 [ ]
|
||||
asm { cli }
|
||||
asm { lda#'a'ldx#$ff!:sta$0400,xsta$0500,xsta$0600,xsta$0700,xdexbne!- }
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@8
|
||||
[18] return [ ]
|
||||
main::@return: scope:[main] from main
|
||||
[2] return [ ]
|
||||
to:@return
|
||||
main::@3: scope:[main] from main::@2
|
||||
[19] *((byte*) main::sc#3) ← (byte) '.' [ main::y#2 main::bits#2 main::sc#3 main::x#2 ]
|
||||
to:main::@4
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,42 +1,6 @@
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) CHARGEN
|
||||
(const byte*) CHARGEN#0 CHARGEN = (word) 53248
|
||||
(byte*) PROCPORT
|
||||
(const byte*) PROCPORT#0 PROCPORT = (byte) 1
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = (word) 1024
|
||||
(void()) main()
|
||||
(byte~) main::$2 reg byte a 202.0
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@4
|
||||
(label) main::@5
|
||||
(label) main::@7
|
||||
(label) main::@8
|
||||
(label) main::@return
|
||||
(byte*) main::CHAR_A
|
||||
(const byte*) main::CHAR_A#0 CHAR_A = (const byte*) CHARGEN#0+(byte) 8
|
||||
(byte) main::bits
|
||||
(byte) main::bits#0 bits zp ZP_BYTE:3 22.0
|
||||
(byte) main::bits#1 bits zp ZP_BYTE:3 67.33333333333333
|
||||
(byte) main::bits#2 bits zp ZP_BYTE:3 52.33333333333333
|
||||
(byte*) main::sc
|
||||
(byte*) main::sc#1 sc zp ZP_PTR_BYTE:4 53.25
|
||||
(byte*) main::sc#2 sc zp ZP_PTR_BYTE:4 7.333333333333333
|
||||
(byte*) main::sc#3 sc zp ZP_PTR_BYTE:4 83.0
|
||||
(byte*) main::sc#8 sc zp ZP_PTR_BYTE:4 11.0
|
||||
(byte) main::x
|
||||
(byte) main::x#1 reg byte x 151.5
|
||||
(byte) main::x#2 reg byte x 28.857142857142858
|
||||
(byte) main::y
|
||||
(byte) main::y#1 y zp ZP_BYTE:2 16.5
|
||||
(byte) main::y#2 y zp ZP_BYTE:2 2.75
|
||||
|
||||
zp ZP_BYTE:2 [ main::y#2 main::y#1 ]
|
||||
zp ZP_BYTE:3 [ main::bits#2 main::bits#0 main::bits#1 ]
|
||||
zp ZP_PTR_BYTE:4 [ main::sc#3 main::sc#8 main::sc#2 main::sc#1 ]
|
||||
reg byte x [ main::x#2 main::x#1 ]
|
||||
reg byte a [ main::$2 ]
|
||||
|
@ -10,7 +10,7 @@ void main() {
|
||||
if(++i==8) {
|
||||
i = 0;
|
||||
}
|
||||
} while(++cursor<SCREEN+1000)
|
||||
} while(++cursor<SCREEN+1000);
|
||||
}
|
||||
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
|
||||
Adding pre/post-modifier (byte*) main::cursor ← ++ (byte*) main::cursor
|
||||
|
@ -4,7 +4,7 @@ void main() {
|
||||
do {
|
||||
buf[i] = 2+i+2;
|
||||
i = i+1;
|
||||
} while(i<10)
|
||||
} while(i<10);
|
||||
}
|
||||
PROGRAM
|
||||
proc (void()) main()
|
||||
|
@ -6,7 +6,7 @@ void main() {
|
||||
s=s+i;
|
||||
}
|
||||
i--;
|
||||
} while (i>0)
|
||||
} while (i>0);
|
||||
}
|
||||
Adding pre/post-modifier (byte) main::i ← -- (byte) main::i
|
||||
PROGRAM
|
||||
|
@ -4,14 +4,14 @@ void main() {
|
||||
byte i=100;
|
||||
do {
|
||||
nest();
|
||||
} while (--i>0)
|
||||
} while (--i>0);
|
||||
}
|
||||
|
||||
void nest() {
|
||||
byte j=100;
|
||||
do {
|
||||
*SCREEN = j;
|
||||
} while (--j>0)
|
||||
} while (--j>0);
|
||||
}
|
||||
|
||||
Adding pre/post-modifier (byte) main::i ← -- (byte) main::i
|
||||
|
@ -6,8 +6,8 @@ void main() {
|
||||
byte j=100;
|
||||
do {
|
||||
nest1();
|
||||
} while (--j>0)
|
||||
} while (--i>0)
|
||||
} while (--j>0);
|
||||
} while (--i>0);
|
||||
}
|
||||
|
||||
void nest1() {
|
||||
@ -16,8 +16,8 @@ void nest1() {
|
||||
byte j=100;
|
||||
do {
|
||||
nest2();
|
||||
} while (--j>0)
|
||||
} while (--i>0)
|
||||
} while (--j>0);
|
||||
} while (--i>0);
|
||||
}
|
||||
|
||||
void nest2() {
|
||||
@ -26,8 +26,8 @@ void nest2() {
|
||||
byte j=100;
|
||||
do {
|
||||
*SCREEN = j;
|
||||
} while (--j>0)
|
||||
} while (--i>0)
|
||||
} while (--j>0);
|
||||
} while (--i>0);
|
||||
}
|
||||
|
||||
Adding pre/post-modifier (byte) main::j ← -- (byte) main::j
|
||||
|
@ -13,7 +13,7 @@ void main() {
|
||||
}
|
||||
SCREEN[++i] = c;
|
||||
nxt++;
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
||||
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
|
||||
|
@ -11,8 +11,8 @@ void main() {
|
||||
byte[] line = SCREEN+40;
|
||||
do {
|
||||
// Wait for raster
|
||||
do {} while(*RASTER!=$fe)
|
||||
do {} while(*RASTER!=$ff)
|
||||
do {} while(*RASTER!=$fe);
|
||||
do {} while(*RASTER!=$ff);
|
||||
*BGCOL = *BGCOL+1;
|
||||
// Soft scroll
|
||||
if(--scroll==$ff) {
|
||||
@ -32,7 +32,7 @@ void main() {
|
||||
}
|
||||
*SCROLL = scroll;
|
||||
*BGCOL = *BGCOL-1;
|
||||
} while(true)
|
||||
} while(true);
|
||||
}
|
||||
|
||||
void fillscreen(byte* screen, byte fill) {
|
||||
|
@ -17,7 +17,7 @@ void main() {
|
||||
do {
|
||||
render();
|
||||
animate();
|
||||
} while(true)
|
||||
} while(true);
|
||||
}
|
||||
|
||||
void animate() {
|
||||
|
@ -13,5 +13,5 @@ void main() {
|
||||
}
|
||||
SCREEN[++i] = c;
|
||||
nxt++;
|
||||
} while (true)
|
||||
} while (true);
|
||||
}
|
||||
|
@ -11,8 +11,8 @@ void main() {
|
||||
byte[] line = SCREEN+40;
|
||||
do {
|
||||
// Wait for raster
|
||||
do {} while(*RASTER!=$fe)
|
||||
do {} while(*RASTER!=$ff)
|
||||
do {} while(*RASTER!=$fe);
|
||||
do {} while(*RASTER!=$ff);
|
||||
*BGCOL = *BGCOL+1;
|
||||
// Soft scroll
|
||||
if(--scroll==$ff) {
|
||||
@ -32,7 +32,7 @@ void main() {
|
||||
}
|
||||
*SCROLL = scroll;
|
||||
*BGCOL = *BGCOL-1;
|
||||
} while(true)
|
||||
} while(true);
|
||||
}
|
||||
|
||||
void fillscreen(byte* screen, byte fill) {
|
||||
|
@ -17,7 +17,7 @@ void main() {
|
||||
do {
|
||||
render();
|
||||
animate();
|
||||
} while(true)
|
||||
} while(true);
|
||||
}
|
||||
|
||||
void animate() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user