1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-13 03:39:12 +00:00

Succesfully deprecated lo/hi operators. Closes

This commit is contained in:
jespergravgaard 2021-06-14 08:51:55 +02:00
parent 6e32444f9f
commit 0d2b08ef3b
86 changed files with 30211 additions and 17695 deletions
src
main
test

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE ee20482c1 ee204a320
//KICKC FRAGMENT CACHE f6e6ad7e1 f6e6af848
//FRAGMENT _deref_pbuc1=vbuc2
lda #{c2}
sta {c1}
@ -23,11 +23,8 @@ bcc {la1}
//FRAGMENT _deref_pbuc1=_deref_pbuc2
lda {c2}
sta {c1}
//FRAGMENT vbuz1=_lo_pbuz2
lda {z2}
sta {z1}
//FRAGMENT _deref_pbuz1=vbuz2
lda {z2}
//FRAGMENT _deref_pbuz1=_byte_pbuz1
lda {z1}
ldy #0
sta ({z1}),y
//FRAGMENT pbuz1=_inc_pbuz1
@ -36,29 +33,6 @@ inw {z1}
lda #{c1}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=_lo_pbuz1
lda {z1}
//FRAGMENT vbuxx=_lo_pbuz1
ldx {z1}
//FRAGMENT _deref_pbuz1=vbuaa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuxx
txa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuyy
tya
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuzz
tza
ldy #0
sta ({z1}),y
//FRAGMENT vbuyy=_lo_pbuz1
ldy {z1}
//FRAGMENT vbuzz=_lo_pbuz1
ldz {z1}
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}
@ -1187,6 +1161,79 @@ inc
stx {c1}
//FRAGMENT _deref_pbuc1=vbuzz
stz {c1}
//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1
ldy {z1}
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1
ldy {z1}
tya
sta {c1},y
//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1
tay
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1
lda {c1},x
cmp #0
bne {la1}
//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT 0_neq_pbuc1_derefidx_vbuzz_then_la1
tza
tay
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx
txa
sta {c1},x
//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy
tya
sta {c1},y
//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz
tza
tax
sta {c1},x
//FRAGMENT vduz1=vduc1
lda #<{c1}
sta {z1}
lda #>{c1}
sta {z1}+1
lda #<{c1}>>$10
sta {z1}+2
lda #>{c1}>>$10
sta {z1}+3
//FRAGMENT _deref_pduc1=vduz1
ldq {z1}
stq {c1}
//FRAGMENT vduz1=vduz1_plus_vduz2
clc
ldq {z1}
adcq {z2}
stq {z1}
//FRAGMENT vduz1=vduz1_plus_vbuz2
lda {z2}
clc
adc {z1}
sta {z1}
lda {z1}+1
adc #0
sta {z1}+1
lda {z1}+2
adc #0
sta {z1}+2
lda {z1}+3
adc #0
sta {z1}+3
//FRAGMENT vduz1=vwuc1
NO_SYNTHESIS
//FRAGMENT vduz1=vwsc1
NO_SYNTHESIS
//FRAGMENT vbuz1=_deref_pbuc1_plus_1
lda {c1}
inc
@ -1299,6 +1346,10 @@ sta {z1}
lda #0
adc {z2}+1
sta {z1}+1
//FRAGMENT _deref_pbuz1=vbuz2
lda {z2}
ldy #0
sta ({z1}),y
//FRAGMENT vbuaa=_deref_pbuc1_plus_1
lda {c1}
inc
@ -1342,6 +1393,18 @@ sta ({z1}),z
tza
ldz {z2}
sta ({z1}),z
//FRAGMENT _deref_pbuz1=vbuxx
txa
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuyy
tya
ldy #0
sta ({z1}),y
//FRAGMENT _deref_pbuz1=vbuzz
tza
ldy #0
sta ({z1}),y
//FRAGMENT 0_neq_vbuxx_then_la1
cpx #0
bne {la1}
@ -1639,10 +1702,10 @@ dec {c1}
//FRAGMENT pbuc1_derefidx_vbuz1=_inc_pbuc1_derefidx_vbuz1
ldx {z1}
inc {c1},x
//FRAGMENT vbuz1=_lo_vwuz2
//FRAGMENT vbuz1=_byte0_vwuz2
lda {z2}
sta {z1}
//FRAGMENT vbuz1=_hi_vwuz2
//FRAGMENT vbuz1=_byte1_vwuz2
lda {z2}+1
sta {z1}
//FRAGMENT vbuz1=vbuz2_bor_vbuz3
@ -1657,13 +1720,13 @@ tax
inc {c1},x
//FRAGMENT pbuc1_derefidx_vbuxx=_inc_pbuc1_derefidx_vbuxx
inc {c1},x
//FRAGMENT vbuaa=_lo_vwuz1
//FRAGMENT vbuaa=_byte0_vwuz1
lda {z1}
//FRAGMENT vbuxx=_lo_vwuz1
//FRAGMENT vbuxx=_byte0_vwuz1
ldx {z1}
//FRAGMENT vbuaa=_hi_vwuz1
//FRAGMENT vbuaa=_byte1_vwuz1
lda {z1}+1
//FRAGMENT vbuxx=_hi_vwuz1
//FRAGMENT vbuxx=_byte1_vwuz1
ldx {z1}+1
//FRAGMENT vbuz1=vbuxx_bor_vbuz2
txa
@ -1700,14 +1763,16 @@ ora {z2}
sta {z1}
//FRAGMENT vbuz1=vbuxx_bor_vbuxx
stx {z1}
//FRAGMENT vbuyy=_lo_vwuz1
//FRAGMENT vbuyy=_byte0_vwuz1
ldy {z1}
//FRAGMENT vbuzz=_lo_vwuz1
ldz {z1}
//FRAGMENT vbuyy=_hi_vwuz1
//FRAGMENT vbuzz=_byte0_vwuz1
lda {z1}
taz
//FRAGMENT vbuyy=_byte1_vwuz1
ldy {z1}+1
//FRAGMENT vbuzz=_hi_vwuz1
ldz {z1}+1
//FRAGMENT vbuzz=_byte1_vwuz1
lda {z1}+1
taz
//FRAGMENT vbuz1=vbuz2_bor_vbuyy
tya
ora {z2}
@ -1755,15 +1820,6 @@ tay
tza
sty $ff
ora $ff
//FRAGMENT vduz1=vduc1
lda #<{c1}
sta {z1}
lda #>{c1}
sta {z1}+1
lda #<{c1}>>$10
sta {z1}+2
lda #>{c1}>>$10
sta {z1}+3
//FRAGMENT vduz1=vbuc1
lda #{c1}
sta {z1}
@ -1833,14 +1889,15 @@ lsr {z1}+3
ror {z1}+2
ror {z1}+1
ror {z1}
//FRAGMENT vbuz1=_hi__word_vduz2
//FRAGMENT vbuz1=_byte1__word_vduz2
lda {z2}+1
sta {z1}
//FRAGMENT vwuz1=_lo_vduz2
//FRAGMENT vbuz1=_byte0_vduz2
lda {z2}
sta {z1}
//FRAGMENT vbuz1=_byte1_vduz2
lda {z2}+1
sta {z1}+1
sta {z1}
//FRAGMENT vbuz1=vbuc1_plus_vbuaa
clc
adc #{c1}
@ -2394,132 +2451,92 @@ dey
bne !-
!e:
taz
//FRAGMENT vbuaa=_hi__word_vduz1
//FRAGMENT vbuaa=_byte1__word_vduz1
lda {z1}+1
//FRAGMENT vbuxx=_hi__word_vduz1
//FRAGMENT vbuxx=_byte1__word_vduz1
lda {z1}+1
tax
//FRAGMENT vbuyy=_byte1__word_vduz1
lda {z1}+1
tay
//FRAGMENT vbuzz=_byte1__word_vduz1
lda {z1}+1
taz
//FRAGMENT vbuaa=_byte0_vduz1
lda {z1}
//FRAGMENT vbuxx=_byte0_vduz1
ldx {z1}
//FRAGMENT vbuaa=_byte1_vduz1
lda {z1}+1
//FRAGMENT vbuxx=_byte1_vduz1
ldx {z1}+1
//FRAGMENT vbuaa=vbuz1_bor_vbuz2
lda {z1}
ora {z2}
//FRAGMENT vbuaa=vbuz1_bor_vbuxx
txa
ora {z1}
//FRAGMENT vbuaa=vbuz1_bor_vbuyy
tya
ora {z1}
//FRAGMENT vbuaa=vbuz1_bor_vbuzz
tza
ora {z1}
//FRAGMENT vbuxx=vbuz1_bor_vbuz2
lda {z1}
ora {z2}
tax
//FRAGMENT vbuxx=vbuz1_bor_vbuxx
txa
ora {z1}
tax
//FRAGMENT vbuxx=vbuz1_bor_vbuyy
tya
ora {z1}
tax
//FRAGMENT vbuxx=vbuz1_bor_vbuzz
tza
ora {z1}
tax
//FRAGMENT vbuyy=vbuz1_bor_vbuz2
lda {z1}
ora {z2}
tay
//FRAGMENT vbuzz=vbuz1_bor_vbuz2
lda {z1}
ora {z2}
taz
//FRAGMENT vbuaa=vbuxx_bor_vbuz1
txa
ora {z1}
//FRAGMENT vbuxx=vbuxx_bor_vbuz1
txa
ora {z1}
tax
//FRAGMENT vbuyy=vbuxx_bor_vbuz1
txa
ora {z1}
tay
//FRAGMENT vbuzz=vbuxx_bor_vbuz1
txa
ora {z1}
taz
//FRAGMENT vbuaa=vbuyy_bor_vbuz1
tya
ora {z1}
//FRAGMENT vbuxx=vbuyy_bor_vbuz1
tya
ora {z1}
tax
//FRAGMENT vbuyy=vbuyy_bor_vbuz1
tya
ora {z1}
tay
//FRAGMENT vbuzz=vbuyy_bor_vbuz1
tya
ora {z1}
taz
//FRAGMENT vbuaa=vbuzz_bor_vbuz1
tza
ora {z1}
//FRAGMENT vbuxx=vbuzz_bor_vbuz1
tza
ora {z1}
tax
//FRAGMENT vbuyy=vbuzz_bor_vbuz1
tza
ora {z1}
tay
//FRAGMENT vbuzz=vbuzz_bor_vbuz1
tza
ora {z1}
taz
//FRAGMENT vbuxx=vbuxx_bor_vbuaa
stx $ff
ora $ff
tax
//FRAGMENT vbuyy=vbuxx_bor_vbuaa
stx $ff
ora $ff
tay
//FRAGMENT vbuzz=vbuxx_bor_vbuaa
stx $ff
ora $ff
taz
//FRAGMENT vbuxx=vbuyy_bor_vbuaa
sty $ff
ora $ff
tax
//FRAGMENT vbuyy=vbuyy_bor_vbuaa
sty $ff
ora $ff
tay
//FRAGMENT vbuzz=vbuyy_bor_vbuaa
sty $ff
ora $ff
taz
//FRAGMENT vbuxx=vbuzz_bor_vbuaa
tax
tza
stx $ff
ora $ff
tax
//FRAGMENT vbuyy=vbuzz_bor_vbuaa
tay
tza
sty $ff
ora $ff
tay
//FRAGMENT vbuzz=vbuzz_bor_vbuaa
tay
tza
sty $ff
ora $ff
taz
//FRAGMENT vbuaa=vbuz1_bor_vbuxx
txa
ora {z1}
//FRAGMENT vbuxx=vbuz1_bor_vbuxx
txa
ora {z1}
tax
//FRAGMENT vbuyy=vbuz1_bor_vbuxx
txa
ora {z1}
tay
//FRAGMENT vbuyy=vbuz1_bor_vbuyy
tya
ora {z1}
tay
//FRAGMENT vbuyy=vbuz1_bor_vbuzz
tza
ora {z1}
tay
//FRAGMENT vbuzz=vbuz1_bor_vbuz2
lda {z1}
ora {z2}
taz
//FRAGMENT vbuzz=vbuz1_bor_vbuxx
txa
ora {z1}
taz
//FRAGMENT vbuyy=_hi__word_vduz1
ldy {z1}+1
//FRAGMENT vbuzz=_hi__word_vduz1
lda {z1}+1
//FRAGMENT vbuzz=vbuz1_bor_vbuyy
tya
ora {z1}
taz
//FRAGMENT vbuzz=vbuz1_bor_vbuzz
tza
ora {z1}
taz
//FRAGMENT vbuyy=_byte0_vduz1
ldy {z1}
//FRAGMENT vbuzz=_byte0_vduz1
lda {z1}
taz
//FRAGMENT vbuyy=_byte1_vduz1
ldy {z1}+1
//FRAGMENT pbuc1_derefidx_vbuyy=vbuaa
sta {c1},y
//FRAGMENT pbuc1_derefidx_vbuzz=vbuaa
@ -2545,67 +2562,3 @@ sta {c1},x
tay
//FRAGMENT vbuzz=vbuaa
taz
//FRAGMENT 0_neq_pbuc1_derefidx_vbuz1_then_la1
ldy {z1}
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT pbuc1_derefidx_vbuz1=vbuz1
ldy {z1}
tya
sta {c1},y
//FRAGMENT 0_neq_pbuc1_derefidx_vbuaa_then_la1
tay
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT 0_neq_pbuc1_derefidx_vbuxx_then_la1
lda {c1},x
cmp #0
bne {la1}
//FRAGMENT 0_neq_pbuc1_derefidx_vbuyy_then_la1
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT 0_neq_pbuc1_derefidx_vbuzz_then_la1
tza
tay
lda {c1},y
cmp #0
bne {la1}
//FRAGMENT pbuc1_derefidx_vbuxx=vbuxx
txa
sta {c1},x
//FRAGMENT pbuc1_derefidx_vbuyy=vbuyy
tya
sta {c1},y
//FRAGMENT pbuc1_derefidx_vbuzz=vbuzz
tza
tax
sta {c1},x
//FRAGMENT _deref_pduc1=vduz1
ldq {z1}
stq {c1}
//FRAGMENT vduz1=vduz1_plus_vduz2
clc
ldq {z1}
adcq {z2}
stq {z1}
//FRAGMENT vduz1=vduz1_plus_vbuz2
lda {z2}
clc
adc {z1}
sta {z1}
lda {z1}+1
adc #0
sta {z1}+1
lda {z1}+2
adc #0
sta {z1}+2
lda {z1}+3
adc #0
sta {z1}+3
//FRAGMENT vduz1=vwuc1
NO_SYNTHESIS
//FRAGMENT vduz1=vwsc1
NO_SYNTHESIS

@ -1,4 +1,4 @@
//KICKC FRAGMENT CACHE ee20482c1 ee204a320
//KICKC FRAGMENT CACHE f6e6ad7e1 f6e6af848
//FRAGMENT vbuz1=vbuc1
lda #{c1}
sta {z1}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,3 @@
ldy #0
ora ({z1}),y
sta ({z1}),y

@ -0,0 +1,3 @@
sta {m1}
lda {m2}+1
sta {m1}+1

@ -192,10 +192,10 @@ public class AsmFormat {
return getAsmConstant(program, new ConstantBinary(new ConstantInteger((long) 0xffffffffL), Operators.BOOL_AND, operand), outerPrecedence, codeScope);
} else if(Operators.BYTE0.equals(operator)) {
// Parenthesis is never needed since operator "<" has the lowest precedence
return operator.getOperator() + getAsmConstant(program, operand, operator.getPrecedence(), codeScope);
return "<" + getAsmConstant(program, operand, operator.getPrecedence(), codeScope);
} else if(Operators.BYTE1.equals(operator)) {
// Parenthesis is never needed since operator ">" has the lowest precedence
return operator.getOperator() + getAsmConstant(program, operand, operator.getPrecedence(), codeScope);
return ">" + getAsmConstant(program, operand, operator.getPrecedence(), codeScope);
} else if(Operators.BYTE2.equals(operator)) {
// Parenthesis is never needed since operator "<" has the lowest precedence
return "<" + getAsmConstant(program, new ConstantBinary(operand, Operators.SHIFT_RIGHT, new ConstantInteger((long) 16)), outerPrecedence, codeScope);

@ -12,7 +12,7 @@ import dk.camelot64.kickc.model.values.ConstantString;
public class OperatorGetByte0 extends OperatorUnary {
public OperatorGetByte0(int precedence) {
super("<", "_byte0_", precedence);
super("byte0 ", "_byte0_", precedence);
}
@Override

@ -12,7 +12,7 @@ import dk.camelot64.kickc.model.values.ConstantString;
public class OperatorGetByte1 extends OperatorUnary {
public OperatorGetByte1(int precedence) {
super(">", "_byte1_", precedence);
super("byte1 ", "_byte1_", precedence);
}
@Override

@ -12,7 +12,7 @@ import dk.camelot64.kickc.model.values.ConstantString;
public class OperatorGetByte2 extends OperatorUnary {
public OperatorGetByte2(int precedence) {
super("_byte2_", "_byte2_", precedence);
super("byte2 ", "_byte2_", precedence);
}
@Override

@ -12,7 +12,7 @@ import dk.camelot64.kickc.model.values.ConstantString;
public class OperatorGetByte3 extends OperatorUnary {
public OperatorGetByte3(int precedence) {
super("_byte3_", "_byte3_", precedence);
super("byte3 ", "_byte3_", precedence);
}
@Override

@ -1,59 +0,0 @@
package dk.camelot64.kickc.model.operators;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.ConstantNotLiteral;
import dk.camelot64.kickc.model.symbols.ProgramScope;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.values.ConstantInteger;
import dk.camelot64.kickc.model.values.ConstantLiteral;
import dk.camelot64.kickc.model.values.ConstantPointer;
import dk.camelot64.kickc.model.values.ConstantString;
/** Unary get high operator (>b) */
public class OperatorGetHigh extends OperatorUnary {
public OperatorGetHigh(int precedence) {
super(">", "_hi_", precedence);
}
@Override
public ConstantLiteral calculateLiteral(ConstantLiteral operand, ProgramScope scope) {
if(operand instanceof ConstantInteger) {
ConstantInteger operandInt = (ConstantInteger) operand;
if(SymbolType.WORD.equals(operandInt.getType()) || SymbolType.SWORD.equals(operandInt.getType())) {
return new ConstantInteger(operandInt.getInteger()>>8);
} else if(SymbolType.DWORD.equals(operandInt.getType()) || SymbolType.SDWORD.equals(operandInt.getType())) {
return new ConstantInteger(operandInt.getInteger()>>16);
} else if(SymbolType.BYTE.equals(operandInt.getType()) || SymbolType.SBYTE.equals(operandInt.getType())) {
return new ConstantInteger(0L, SymbolType.BYTE);
} else if(SymbolType.NUMBER.equals(operandInt.getType())) {
throw ConstantNotLiteral.getException();
}
} else if(operand instanceof ConstantPointer) {
return new ConstantInteger(((ConstantPointer) operand).getLocation()>>8);
} else if(operand instanceof ConstantString) {
throw ConstantNotLiteral.getException();
}
throw new CompileError("Calculation not implemented " + getOperator() + " " + operand );
}
@Override
public SymbolType inferType(SymbolType operandType) {
if(operandType instanceof SymbolTypePointer || SymbolType.WORD.equals(operandType) || SymbolType.SWORD.equals(operandType)) {
return SymbolType.BYTE;
} else if(SymbolType.DWORD.equals(operandType) || SymbolType.SDWORD.equals(operandType)) {
return SymbolType.WORD;
} else if(SymbolType.BYTE.equals(operandType) || SymbolType.SBYTE.equals(operandType)) {
return SymbolType.BYTE;
} else if(SymbolType.NUMBER.equals(operandType)) {
return SymbolType.NUMBER;
} else if(SymbolType.UNUMBER.equals(operandType)) {
return SymbolType.UNUMBER;
} else if(SymbolType.SNUMBER.equals(operandType)) {
return SymbolType.UNUMBER;
}
throw new CompileError("Type inference not implemented "+getOperator()+" "+operandType);
}
}

@ -1,60 +0,0 @@
package dk.camelot64.kickc.model.operators;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.ConstantNotLiteral;
import dk.camelot64.kickc.model.symbols.ProgramScope;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.values.ConstantInteger;
import dk.camelot64.kickc.model.values.ConstantLiteral;
import dk.camelot64.kickc.model.values.ConstantPointer;
import dk.camelot64.kickc.model.values.ConstantString;
/** Unary get low operator (<b) */
public class OperatorGetLow extends OperatorUnary {
public OperatorGetLow(int precedence) {
super("<", "_lo_", precedence);
}
@Override
public ConstantLiteral calculateLiteral(ConstantLiteral operand, ProgramScope scope) {
if(operand instanceof ConstantInteger) {
ConstantInteger operandInt = (ConstantInteger) operand;
if(SymbolType.WORD.equals(operandInt.getType()) || SymbolType.SWORD.equals(operandInt.getType())) {
return new ConstantInteger(operandInt.getInteger()&0xff);
} else if(SymbolType.DWORD.equals(operandInt.getType()) || SymbolType.SDWORD.equals(operandInt.getType())) {
return new ConstantInteger(operandInt.getInteger()&0xffff);
} else if(SymbolType.BYTE.equals(operandInt.getType()) || SymbolType.SBYTE.equals(operandInt.getType())) {
return operandInt;
} else if(SymbolType.NUMBER.equals(operandInt.getType())) {
throw ConstantNotLiteral.getException();
}
} else if(operand instanceof ConstantPointer) {
return new ConstantInteger(((ConstantPointer) operand).getLocation()&0xff);
} else if(operand instanceof ConstantString) {
throw ConstantNotLiteral.getException();
}
throw ConstantNotLiteral.getException();
}
@Override
public SymbolType inferType(SymbolType operandType) {
if(operandType instanceof SymbolTypePointer || SymbolType.WORD.equals(operandType) || SymbolType.SWORD.equals(operandType)) {
return SymbolType.BYTE;
} else if(SymbolType.DWORD.equals(operandType) || SymbolType.SDWORD.equals(operandType)) {
return SymbolType.WORD;
} else if(SymbolType.BYTE.equals(operandType) || SymbolType.SBYTE.equals(operandType)) {
return SymbolType.BYTE;
} else if(SymbolType.NUMBER.equals(operandType)) {
return SymbolType.NUMBER;
} else if(SymbolType.UNUMBER.equals(operandType)) {
return SymbolType.UNUMBER;
} else if(SymbolType.SNUMBER.equals(operandType)) {
return SymbolType.UNUMBER;
}
throw new CompileError("Type inference not implemented "+getOperator()+" "+operandType);
}
}

@ -12,7 +12,7 @@ import dk.camelot64.kickc.model.values.ConstantString;
public class OperatorGetWord0 extends OperatorUnary {
public OperatorGetWord0(int precedence) {
super("_word0_", "_word0_", precedence);
super("word0 ", "_word0_", precedence);
}
@Override

@ -12,7 +12,7 @@ import dk.camelot64.kickc.model.values.ConstantString;
public class OperatorGetWord1 extends OperatorUnary {
public OperatorGetWord1(int precedence) {
super("_word1_", "_word1_", precedence);
super("word1 ", "_word1_", precedence);
}
@Override

@ -81,6 +81,13 @@ public class Pass4RegisterUpliftPotentialAluAnalysis extends Pass2Base {
if(assignment.getOperator() != null && Operators.BYTE3.equals(assignment.getOperator()) && assignment.getrValue1() == null) {
potentialAluVar = findAluPotential(assignment);
}
// TODO: Remove these and find a better way generate ASM for additions and other operations in 16bit
if(assignment.getOperator() != null && Operators.WORD0.equals(assignment.getOperator()) && assignment.getrValue1() == null) {
potentialAluVar = findAluPotential(assignment);
}
if(assignment.getOperator() != null && Operators.WORD1.equals(assignment.getOperator()) && assignment.getrValue1() == null) {
potentialAluVar = findAluPotential(assignment);
}
}
}
}

@ -47,7 +47,7 @@ void bitmap_clear(char bgcol, char fgcol) {
void bitmap_plot(unsigned int x, char y) {
char* plotter = (char*) { bitmap_plot_yhi[y], bitmap_plot_ylo[y] };
plotter += ( x & $fff8 );
*plotter |= bitmap_plot_bit[(char)x];
*plotter |= bitmap_plot_bit[BYTE0(x)];
}
// Draw a line on the bitmap using bresenhams algorithm

@ -135,8 +135,8 @@ void clrscr(void) {
// Select DATA0
*VERA_CTRL &= ~VERA_ADDRSEL;
// Set address
*VERA_ADDRX_L = <ch;
*VERA_ADDRX_M = >ch;
*VERA_ADDRX_L = BYTE0(ch);
*VERA_ADDRX_M = BYTE1(ch);
*VERA_ADDRX_H = CONIO_SCREEN_BANK | VERA_INC_1;
for( char c=0;c<conio_width; c++ ) {
*VERA_DATA0 = ' ';
@ -206,8 +206,8 @@ void cputc(char c) {
// Select DATA0
*VERA_CTRL &= ~VERA_ADDRSEL;
// Set address
*VERA_ADDRX_L = <conio_addr;
*VERA_ADDRX_M = >conio_addr;
*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;
@ -240,8 +240,8 @@ void clearline() {
*VERA_CTRL &= ~VERA_ADDRSEL;
// Set address
byte* addr = CONIO_SCREEN_TEXT + conio_line_text[conio_screen_layer];
*VERA_ADDRX_L = <addr;
*VERA_ADDRX_M = >addr;
*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;c<CONIO_WIDTH; c++ ) {

@ -94,8 +94,8 @@ void bitmap_clear() {
word vdelta = vdeltas[__bitmap_vscale];
word hdelta = hdeltas[(__bitmap_color_depth<<2)+__bitmap_hscale];
dword count = mul16u(hdelta,vdelta);
char vbank = <(>__bitmap_address);
void* vdest = (void*) <__bitmap_address;
char vbank = BYTE2(__bitmap_address);
void* vdest = (void*) WORD0(__bitmap_address);
memset_vram(vbank, vdest, 0, count);
}

@ -17,8 +17,8 @@ inline void vera_vram_bank_offset(byte bank, word offset, byte incr) {
// Select DATA0
*VERA_CTRL &= ~VERA_ADDRSEL;
// Set address
*VERA_ADDRX_L = <(offset);
*VERA_ADDRX_M = >(offset);
*VERA_ADDRX_L = BYTE0(offset);
*VERA_ADDRX_M = BYTE1(offset);
*VERA_ADDRX_H = bank | incr;
}
@ -26,18 +26,18 @@ inline void vera_vram_address0(dword bankaddr, byte incr) {
// Select DATA0
*VERA_CTRL &= ~VERA_ADDRSEL;
// Set address
*VERA_ADDRX_L = <(<bankaddr);
*VERA_ADDRX_M = >(<bankaddr);
*VERA_ADDRX_H = <(>bankaddr) | incr;
*VERA_ADDRX_L = BYTE0(bankaddr);
*VERA_ADDRX_M = BYTE1(bankaddr);
*VERA_ADDRX_H = BYTE2(bankaddr) | incr;
}
inline void vera_vram_address1(dword bankaddr, byte incr) {
// Select DATA1
*VERA_CTRL |= VERA_ADDRSEL;
// Set address
*VERA_ADDRX_L = <(<bankaddr);
*VERA_ADDRX_M = >(<bankaddr);
*VERA_ADDRX_H = <(>bankaddr) | incr;
*VERA_ADDRX_L = BYTE0(bankaddr);
*VERA_ADDRX_M = BYTE1(bankaddr);
*VERA_ADDRX_H = BYTE2(bankaddr) | incr;
}
// --- VERA active display management ---
@ -292,14 +292,14 @@ void vera_layer_set_mapbase(byte layer, byte mapbase) {
void vera_layer_set_mapbase_address(byte layer, dword mapbase_address) {
mapbase_address = mapbase_address & 0x1FF00; // Aligned to 2048 bit zones.
byte bank_mapbase = (byte)>mapbase_address;
word offset_mapbase = <mapbase_address;
byte bank_mapbase = BYTE2(mapbase_address);
word offset_mapbase = WORD0(mapbase_address);
vera_mapbase_address[layer] = mapbase_address;
vera_mapbase_offset[layer] = offset_mapbase;
vera_mapbase_bank[layer] = bank_mapbase;
byte mapbase = >(<(mapbase_address>>1));
byte mapbase = BYTE1(mapbase_address>>1);
vera_layer_set_mapbase(layer,mapbase);
}
@ -366,15 +366,15 @@ byte vera_layer_get_tilebase(byte layer) {
void vera_layer_set_tilebase_address(byte layer, dword tilebase_address) {
tilebase_address = tilebase_address & 0x1FC00; // Aligned to 2048 bit zones.
byte bank_tilebase = (byte)>tilebase_address;
word word_tilebase = <tilebase_address;
byte bank_tilebase = BYTE2(tilebase_address);
word word_tilebase = WORD0(tilebase_address);
vera_tilebase_address[layer] = tilebase_address;
vera_tilebase_offset[layer] = word_tilebase;
vera_tilebase_bank[layer] = bank_tilebase;
byte* vera_tilebase = vera_layer_tilebase[layer];
byte tilebase = >(<(tilebase_address>>1));
byte tilebase = BYTE1(tilebase_address>>1);
tilebase &= VERA_LAYER_TILEBASE_MASK; // Ensure that only tilebase is blanked, but keep the rest!
//printf("tilebase = %x\n",tilebase);
//while(!kbhit());
@ -457,16 +457,16 @@ byte vera_layer_get_color(byte layer) {
// - layer: Value of 0 or 1.
// - scroll: A value between 0 and 4096.
inline void vera_layer_set_horizontal_scroll(byte layer, word scroll) {
*vera_layer_hscroll_l[layer] = <scroll;
*vera_layer_hscroll_h[layer] = >scroll;
*vera_layer_hscroll_l[layer] = BYTE0(scroll);
*vera_layer_hscroll_h[layer] = BYTE1(scroll);
}
// Scroll the vertical (Y) axis of the layer visible area over the layer tile map area.
// - layer: Value of 0 or 1.
// - scroll: A value between 0 and 4096.
inline void vera_layer_set_vertical_scroll(byte layer, word scroll) {
*vera_layer_vscroll_l[layer] = <scroll;
*vera_layer_vscroll_h[layer] = >scroll;
*vera_layer_vscroll_l[layer] = BYTE0(scroll);
*vera_layer_vscroll_h[layer] = BYTE1(scroll);
}
// Get the bit shift value required to skip a whole line fast.
@ -559,21 +559,21 @@ void vera_layer_mode_tile(byte layer, dword mapbase_address, dword tilebase_addr
vera_layer_set_config(layer, config);
// mapbase
vera_mapbase_offset[layer] = <mapbase_address;
vera_mapbase_bank[layer] = (byte)(>mapbase_address);
vera_mapbase_offset[layer] = WORD0(mapbase_address);
vera_mapbase_bank[layer] = BYTE2(mapbase_address);
vera_mapbase_address[layer] = mapbase_address;
mapbase_address = mapbase_address >> 1;
byte mapbase = >(<mapbase_address);
byte mapbase = BYTE1(mapbase_address);
vera_layer_set_mapbase(layer,mapbase);
// tilebase
vera_tilebase_offset[layer] = <tilebase_address;
vera_tilebase_bank[layer] = (byte)>tilebase_address;
vera_tilebase_offset[layer] = WORD0(tilebase_address);
vera_tilebase_bank[layer] = BYTE2(tilebase_address);
vera_tilebase_address[layer] = tilebase_address;
tilebase_address = tilebase_address >> 1;
byte tilebase = >(<tilebase_address);
byte tilebase = BYTE1(tilebase_address);
tilebase &= VERA_LAYER_TILEBASE_MASK;
switch(tilewidth) {
case 8:
@ -663,12 +663,12 @@ void vera_layer_mode_bitmap(byte layer, dword bitmap_address, word mapwidth, wor
config = config | VERA_LAYER_CONFIG_MODE_BITMAP;
// tilebase
vera_tilebase_offset[layer] = <bitmap_address;
vera_tilebase_bank[layer] = (byte)>bitmap_address;
vera_tilebase_offset[layer] = WORD0(bitmap_address);
vera_tilebase_bank[layer] = BYTE2(bitmap_address);
vera_tilebase_address[layer] = bitmap_address;
bitmap_address = bitmap_address >> 1;
byte tilebase = >(<bitmap_address);
byte tilebase = BYTE1(bitmap_address);
tilebase &= VERA_LAYER_TILEBASE_MASK;
// mapwidth
@ -697,8 +697,8 @@ void vera_tile_area(byte layer, word tileindex, byte x, byte y, byte w, byte h,
hflip = vera_layer_hflip[hflip];
vflip = vera_layer_vflip[vflip];
offset = offset << 4;
byte index_l = <tileindex;
byte index_h = >tileindex;
byte index_l = BYTE0(tileindex);
byte index_h = BYTE1(tileindex);
index_h |= hflip;
index_h |= vflip;
index_h |= offset;

@ -26,8 +26,8 @@ void mulf_init() {
x_2++; // increase i/2 on even numbers
sqr++; // sqr++ on even numbers because 1 = 2*1/4 (from the two previous numbers) + 1/2 (half of the previous uneven number)
}
*sqr1_lo = <sqr;
*sqr1_hi++ = >sqr;
*sqr1_lo = BYTE0(sqr);
*sqr1_hi++ = BYTE1(sqr);
sqr = sqr + x_2; // sqr = sqr + i/2 (when uneven the 1/2 is not added here - see above)
}
// Fill mulf_sqr2 = g(x) = f(x-255) : If x-255<0 then g(x)=f(255-x) (because x*x = -x*-x)
@ -102,10 +102,10 @@ signed int mulf8s_prepared(signed char b) {
signed char* const memA = (signed char*)$fd;
unsigned int m = mulf8u_prepared((char) b);
if(*memA<0) {
>m = (>m)-(char)b;
BYTE1(m) = BYTE1(m)-(char)b;
}
if(b<0) {
>m = (>m)-(char)*memA;
BYTE1(m) = BYTE1(m)-(char)*memA;
}
return (signed int)m;
}
@ -204,10 +204,10 @@ _dd: lda #0
signed long mulf16s(signed int a, signed int b) {
unsigned long m = mulf16u((unsigned int)a, (unsigned int)b);
if(a<0) {
>m = (>m)-(unsigned int)b;
WORD1(m) = WORD1(m)-(unsigned int)b;
}
if(b<0) {
>m = (>m)-(unsigned int)a;
WORD1(m) = WORD1(m)-(unsigned int)a;
}
return (signed long)m;
}

@ -110,7 +110,7 @@ signed char sin8s(unsigned int x) {
x = PI_u4f12 - x;
}
// sinx = x - x^3/6 + x5/128;
char x1 = BYTE1(x)<<3; // u[1.7]
char x1 = BYTE1(x<<3); // u[1.7]
char x2 = mulu8_sel(x1, x1, 0); // u[2.6] x^2
char x3 = mulu8_sel(x2, x1, 1); // u[2.6] x^3
const char DIV_6 = $2b; // u[0.7] - $2a.aa rounded to $2b

@ -3,14 +3,19 @@ package dk.camelot64.kickc.test;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.net.URISyntaxException;
/**
* Compile a number of source files and compare the resulting assembler with expected output
*/
public class TestProgramsThorough extends TestPrograms {
@Test
public void testCx16VeralibTilemap8bpp() throws IOException {
public void testCx16VeralibTilemap8bpp8() throws IOException {
compileAndCompare("examples/cx16/veralib/tilemap_8bpp_8_x_8.c");
}
@Test
public void testCx16VeralibTilemap8bpp16() throws IOException {
compileAndCompare("examples/cx16/veralib/tilemap_8bpp_16_x_16.c");
}
@ -71,12 +76,12 @@ public class TestProgramsThorough extends TestPrograms {
@Test
public void testC64DtvGfxExplorer() throws IOException {
compileAndCompare("c64dtv-gfxexplorer.c", 10);
compileAndCompare("c64dtv-gfxexplorer.c", 20);
}
@Test
public void testC64DtvGfxModes() throws IOException {
compileAndCompare("c64dtv-gfxmodes.c", 10);
compileAndCompare("c64dtv-gfxmodes.c", 20);
}
@Test

@ -33,7 +33,7 @@ void main() {
printf("\n");
printf("match found [%u]%u+[%u]%u+[%u]%u=2020\n", i,entries[i], j,entries[j], k,entries[k]);
unsigned long mul1 = mul16u(entries[i],entries[k]); // I am cheating a bit here multiplying entry i&k first
unsigned long mul2 = mul16u( <mul1 ,entries[j] ); // Because I knwo the product of those fit in an unsigned int
unsigned long mul2 = mul16u( WORD0(mul1) ,entries[j] ); // Because I knwo the product of those fit in an unsigned int
printf("multiplied %lu\n", mul2);
}
}

@ -24,10 +24,10 @@ void main() {
while(true) {
signed word cos_x = SINE[idx_x];
signed dword xpos = mul16s(160, cos_x);
word x = (word)(160 + >(xpos<<4));
word x = (word)(160 + WORD1(xpos<<4));
signed word sin_y = SINE[idx_y];
signed dword ypos = mul16s(100, sin_y);
word y = (word)(100 + >(ypos<<4));
word y = (word)(100 + WORD1(ypos<<4));
bitmap_plot(x, (byte)y);
if(++idx_x==512) idx_x = 0;
if(++idx_y==512) idx_y = 0;

@ -26,10 +26,10 @@ void main() {
while(true) {
signed word cos_x = SINE[idx_x];
signed dword xpos = mul16s(r, cos_x);
word x = (word)(160 + ((signed word)>xpos)>>2);
word x = (word)(160 + ((signed word)WORD1(xpos))>>2);
signed word sin_y = SINE[idx_y];
signed dword ypos = mul16s(r, sin_y);
word y = (word)(100 + ((signed word)>ypos)>>2);
word y = (word)(100 + ((signed word)WORD1(ypos))>>2);
bitmap_plot(x, (byte)y);
plots_per_frame[frame_cnt]++;
idx_x += r_add;

@ -334,9 +334,9 @@ void gfx_mode() {
// Linear Graphics Plane A Counter
byte plane_a_offs = *form_a_start_hi*$10|*form_a_start_lo;
dword plane_a = get_plane(*form_a_pattern) + plane_a_offs;
*DTV_PLANEA_START_LO = < < plane_a;
*DTV_PLANEA_START_MI = > < plane_a;
*DTV_PLANEA_START_HI = < > plane_a;
*DTV_PLANEA_START_LO = BYTE0(plane_a);
*DTV_PLANEA_START_MI = BYTE1(plane_a);
*DTV_PLANEA_START_HI = BYTE2(plane_a);
*DTV_PLANEA_STEP = *form_a_step_hi*$10|*form_a_step_lo;
*DTV_PLANEA_MODULO_LO = *form_a_mod_hi*$10|*form_a_mod_lo;
*DTV_PLANEA_MODULO_HI = 0;
@ -344,9 +344,9 @@ void gfx_mode() {
// Linear Graphics Plane B Counter
byte plane_b_offs = *form_b_start_hi*$10|*form_b_start_lo;
dword plane_b = get_plane(*form_b_pattern) + plane_b_offs;
*DTV_PLANEB_START_LO = < < plane_b;
*DTV_PLANEB_START_MI = > < plane_b;
*DTV_PLANEB_START_HI = < > plane_b;
*DTV_PLANEB_START_LO = BYTE0(plane_b);
*DTV_PLANEB_START_MI = BYTE1(plane_b);
*DTV_PLANEB_START_HI = BYTE2(plane_b);
*DTV_PLANEB_STEP = *form_b_step_hi*$10|*form_b_step_lo;
*DTV_PLANEB_MODULO_LO = *form_b_mod_hi*$10|*form_b_mod_lo;
*DTV_PLANEB_MODULO_HI = 0;
@ -355,7 +355,7 @@ void gfx_mode() {
CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input
CIA2->PORT_A = %00000011 ^ (byte)((word)VICII_SCREEN0/$4000); // Set VIC Bank
// VIC memory
*VICII_MEMORY = (byte)(((word)get_VICII_screen(*form_VICII_screen)&$3fff)/$40) | ((>((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4);
*VICII_MEMORY = (byte)(((word)get_VICII_screen(*form_VICII_screen)&$3fff)/$40) | ((BYTE1((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4);
// VIC Colors
byte* VICII_colors = get_VICII_screen(*form_VICII_cols);
@ -609,9 +609,9 @@ void gfx_init_plane_full() {
// Initialize 320*200 1bpp pixel ($2000) plane with identical bytes
void gfx_init_plane_fill(dword plane_addr, byte fill) {
byte gfxbCpuBank = < >(plane_addr*4);
byte gfxbCpuBank = BYTE2(plane_addr*4);
dtvSetCpuBankSegment1(gfxbCpuBank++);
byte* gfxb = (byte*)$4000 + (<plane_addr & $3fff);
byte* gfxb = (byte*)$4000 + (WORD0(plane_addr) & $3fff);
for(byte by : 0..199) {
for ( byte bx : 0..39) {
*gfxb++ = fill;
@ -641,8 +641,8 @@ void form_mode() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)FORM_CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400));
// VIC Graphics Bank
CIA2->PORT_A_DDR = %00000011; // Set VIC Bank bits to output - all others to input
CIA2->PORT_A = %00000011 ^ (byte)((word)FORM_CHARSET/$4000); // Set VIC Bank
@ -654,8 +654,8 @@ void form_mode() {
// VIC Memory Pointers
VICII->MEMORY = (byte)((((word)FORM_SCREEN&$3fff)/$40)|(((word)FORM_CHARSET&$3fff)/$400));
// DTV Plane A to FORM_SCREEN also
*DTV_PLANEA_START_LO = < FORM_SCREEN;
*DTV_PLANEA_START_MI = > FORM_SCREEN;
*DTV_PLANEA_START_LO = BYTE0(FORM_SCREEN);
*DTV_PLANEA_START_MI = BYTE1(FORM_SCREEN);
*DTV_PLANEA_START_HI = 0;
// DTV Palette - default
for(byte i : 0..$f) {
@ -702,8 +702,8 @@ void form_set_screen(byte* screen) {
// Calculate the field line table
byte* line = screen;
for(byte y: 0..24) {
form_line_lo[y] = <line;
form_line_hi[y] = >line;
form_line_lo[y] = BYTE0(line);
form_line_hi[y] = BYTE1(line);
line = line + 40;
}
}

@ -47,8 +47,8 @@ void menu() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400));
// DTV Graphics Mode
*DTV_CONTROL = 0;
// VIC Graphics Bank
@ -193,8 +193,8 @@ void mode_stdchar() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400));
// DTV Graphics Mode
dtv_control = 0;
*DTV_CONTROL = 0;
@ -244,8 +244,8 @@ void mode_ecmchar() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400));
// DTV Graphics Mode
dtv_control = 0;
*DTV_CONTROL = 0;
@ -300,8 +300,8 @@ void mode_mcchar() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400));
// DTV Graphics Mode
dtv_control = 0;
*DTV_CONTROL = 0;
@ -402,8 +402,8 @@ void mode_hicolstdchar() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(COLORS/$400));
*DTV_COLOR_BANK_HI = >((word)(COLORS/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(COLORS/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(COLORS/$400));
// DTV Graphics Mode
dtv_control = DTV_HIGHCOLOR;
*DTV_CONTROL = DTV_HIGHCOLOR;
@ -455,8 +455,8 @@ void mode_hicolecmchar() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(COLORS/$400));
*DTV_COLOR_BANK_HI = >((word)(COLORS/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(COLORS/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(COLORS/$400));
// DTV Graphics Mode
dtv_control = DTV_HIGHCOLOR;
*DTV_CONTROL = DTV_HIGHCOLOR;
@ -511,8 +511,8 @@ void mode_hicolmcchar() {
// DTV Graphics Bank
*DTV_GRAPHICS_VIC_BANK = (byte)((dword)CHARSET/$10000);
// DTV Color Bank
*DTV_COLOR_BANK_LO = <((word)(COLORS/$400));
*DTV_COLOR_BANK_HI = >((word)(COLORS/$400));
*DTV_COLOR_BANK_LO = BYTE0((word)(COLORS/$400));
*DTV_COLOR_BANK_HI = BYTE1((word)(COLORS/$400));
// DTV Graphics Mode
dtv_control = DTV_HIGHCOLOR;
*DTV_CONTROL = DTV_HIGHCOLOR;
@ -567,22 +567,22 @@ void mode_twoplanebitmap() {
*VICII_CONTROL1 = VICII_ECM|VICII_BMM|VICII_DEN|VICII_RSEL|3;
*VICII_CONTROL2 = VICII_CSEL;
// Linear Graphics Plane A Counter
*DTV_PLANEA_START_LO = <PLANEA;
*DTV_PLANEA_START_MI = >PLANEA;
*DTV_PLANEA_START_LO = BYTE0(PLANEA);
*DTV_PLANEA_START_MI = BYTE1(PLANEA);
*DTV_PLANEA_START_HI = 0;
*DTV_PLANEA_STEP = 1;
*DTV_PLANEA_MODULO_LO = 0;
*DTV_PLANEA_MODULO_HI = 0;
// Linear Graphics Plane B Counter
*DTV_PLANEB_START_LO = <PLANEB;
*DTV_PLANEB_START_MI = >PLANEB;
*DTV_PLANEB_START_LO = BYTE0(PLANEB);
*DTV_PLANEB_START_MI = BYTE1(PLANEB);
*DTV_PLANEB_START_HI = 0;
*DTV_PLANEB_STEP = 1;
*DTV_PLANEB_MODULO_LO = 0;
*DTV_PLANEB_MODULO_HI = 0;
// DTV Color Bank
*DTV_COLOR_BANK_LO = <(COLORS/$400);
*DTV_COLOR_BANK_HI = >(COLORS/$400);
*DTV_COLOR_BANK_LO = BYTE0(COLORS/$400);
*DTV_COLOR_BANK_HI = BYTE1(COLORS/$400);
// DTV Palette - Grey Tones
for(byte i : 0..$f) {
DTV_PALETTE[i] = i;
@ -637,22 +637,22 @@ void mode_sixsfred() {
*VICII_CONTROL1 = VICII_ECM|VICII_BMM|VICII_DEN|VICII_RSEL|3;
*VICII_CONTROL2 = VICII_MCM|VICII_CSEL;
// Linear Graphics Plane A Counter
*DTV_PLANEA_START_LO = <PLANEA;
*DTV_PLANEA_START_MI = >PLANEA;
*DTV_PLANEA_START_LO = BYTE0(PLANEA);
*DTV_PLANEA_START_MI = BYTE1(PLANEA);
*DTV_PLANEA_START_HI = 0;
*DTV_PLANEA_STEP = 1;
*DTV_PLANEA_MODULO_LO = 0;
*DTV_PLANEA_MODULO_HI = 0;
// Linear Graphics Plane B Counter
*DTV_PLANEB_START_LO = <PLANEB;
*DTV_PLANEB_START_MI = >PLANEB;
*DTV_PLANEB_START_LO = BYTE0(PLANEB);
*DTV_PLANEB_START_MI = BYTE1(PLANEB);
*DTV_PLANEB_START_HI = 0;
*DTV_PLANEB_STEP = 1;
*DTV_PLANEB_MODULO_LO = 0;
*DTV_PLANEB_MODULO_HI = 0;
// DTV Color Bank
*DTV_COLOR_BANK_LO = <(COLORS/$400);
*DTV_COLOR_BANK_HI = >(COLORS/$400);
*DTV_COLOR_BANK_LO = BYTE0(COLORS/$400);
*DTV_COLOR_BANK_HI = BYTE1(COLORS/$400);
// DTV Palette - Grey Tones
for(byte i : 0..$f) {
DTV_PALETTE[i] = i;
@ -703,22 +703,22 @@ void mode_sixsfred2() {
*VICII_CONTROL1 = VICII_ECM|VICII_BMM|VICII_DEN|VICII_RSEL|3;
*VICII_CONTROL2 = VICII_MCM|VICII_CSEL;
// Linear Graphics Plane A Counter
*DTV_PLANEA_START_LO = <PLANEA;
*DTV_PLANEA_START_MI = >PLANEA;
*DTV_PLANEA_START_LO = BYTE0(PLANEA);
*DTV_PLANEA_START_MI = BYTE1(PLANEA);
*DTV_PLANEA_START_HI = 0;
*DTV_PLANEA_STEP = 1;
*DTV_PLANEA_MODULO_LO = 0;
*DTV_PLANEA_MODULO_HI = 0;
// Linear Graphics Plane B Counter
*DTV_PLANEB_START_LO = <PLANEB;
*DTV_PLANEB_START_MI = >PLANEB;
*DTV_PLANEB_START_LO = BYTE0(PLANEB);
*DTV_PLANEB_START_MI = BYTE1(PLANEB);
*DTV_PLANEB_START_HI = 0;
*DTV_PLANEB_STEP = 1;
*DTV_PLANEB_MODULO_LO = 0;
*DTV_PLANEB_MODULO_HI = 0;
// DTV Color Bank
*DTV_COLOR_BANK_LO = <(COLORS/$400);
*DTV_COLOR_BANK_HI = >(COLORS/$400);
*DTV_COLOR_BANK_LO = BYTE0(COLORS/$400);
*DTV_COLOR_BANK_HI = BYTE1(COLORS/$400);
// DTV Palette - Grey Tones
for(byte i : 0..$f) {
DTV_PALETTE[i] = i;
@ -774,15 +774,15 @@ void mode_8bpppixelcell() {
*VICII_CONTROL1 = VICII_ECM|VICII_DEN|VICII_RSEL|3;
*VICII_CONTROL2 = VICII_MCM|VICII_CSEL;
// Linear Graphics Plane A Counter
*DTV_PLANEA_START_LO = <PLANEA;
*DTV_PLANEA_START_MI = >PLANEA;
*DTV_PLANEA_START_LO = BYTE0(PLANEA);
*DTV_PLANEA_START_MI = BYTE1(PLANEA);
*DTV_PLANEA_START_HI = 0;
*DTV_PLANEA_STEP = 1;
*DTV_PLANEA_MODULO_LO = 0;
*DTV_PLANEA_MODULO_HI = 0;
// Linear Graphics Plane B Counter
*DTV_PLANEB_START_LO = <PLANEB;
*DTV_PLANEB_START_MI = >PLANEB;
*DTV_PLANEB_START_LO = BYTE0(PLANEB);
*DTV_PLANEB_START_MI = BYTE1(PLANEB);
*DTV_PLANEB_START_HI = 0;
*DTV_PLANEB_STEP = 0;
*DTV_PLANEB_MODULO_LO = 0;
@ -842,9 +842,9 @@ void mode_8bppchunkybmm() {
*VICII_CONTROL1 = VICII_ECM | VICII_DEN | VICII_RSEL | 3;
*VICII_CONTROL2 = VICII_MCM | VICII_CSEL;
// Linear Graphics Plane B Counter
*DTV_PLANEB_START_LO = < < PLANEB;
*DTV_PLANEB_START_MI = > < PLANEB;
*DTV_PLANEB_START_HI = < > PLANEB;
*DTV_PLANEB_START_LO = BYTE0(PLANEB);
*DTV_PLANEB_START_MI = BYTE1(PLANEB);
*DTV_PLANEB_START_HI = BYTE2(PLANEB);
*DTV_PLANEB_STEP = 8;
*DTV_PLANEB_MODULO_LO = 0;
*DTV_PLANEB_MODULO_HI = 0;

@ -35,10 +35,10 @@ void init_bobs_restore() {
for(char bob=0;bob<NUM_BOBS*2;bob++) {
for(char i=0;i<SIZE_BOB_RESTORE;i++)
bob_restore[i] = 0;
bob_restore[0] = <CANVAS_HIDDEN;
bob_restore[1] = >CANVAS_HIDDEN;
bob_restore[3] = <CANVAS_HIDDEN;
bob_restore[4] = >CANVAS_HIDDEN;
bob_restore[0] = BYTE0(CANVAS_HIDDEN);
bob_restore[1] = BYTE1(CANVAS_HIDDEN);
bob_restore[3] = BYTE0(CANVAS_HIDDEN);
bob_restore[4] = BYTE1(CANVAS_HIDDEN);
bob_restore += SIZE_BOB_RESTORE;
}

@ -88,8 +88,8 @@ void init_render_index() {
char * canvas_xcol = RENDER_XCOLS[x_col];
for(char y_pos=0;y_pos<148;y_pos+=2) {
char * canvas = canvas_xcol + render_ypos_table[(unsigned int)y_pos];
render_index_xcol[RENDER_OFFSET_CANVAS_LO] = <canvas;
render_index_xcol[RENDER_OFFSET_CANVAS_HI] = >canvas;
render_index_xcol[RENDER_OFFSET_CANVAS_LO] = BYTE0(canvas);
render_index_xcol[RENDER_OFFSET_CANVAS_HI] = BYTE1(canvas);
render_index_xcol[RENDER_OFFSET_YPOS_INC] = ypos_inc_offset;
ypos_inc_offset += 2;
if(ypos_inc_offset>=23) ypos_inc_offset-=21; // Keep ypos_inc_index as low as possible
@ -108,7 +108,7 @@ void init_render_index() {
// - pixels: The pixel data to set
void render(char xcol, char ypos, char pixels) {
char ytile = ypos/4;
char * render_index_xcol = (char*){ (>RENDER_INDEX) + xcol, ytile*2 };
char * render_index_xcol = (char*){ BYTE1(RENDER_INDEX) + xcol, ytile*2 };
unsigned int canvas_offset = { render_index_xcol[RENDER_OFFSET_CANVAS_HI], render_index_xcol[RENDER_OFFSET_CANVAS_LO] };
char * canvas1 = SPRITES_1 + canvas_offset;
char * canvas2 = SPRITES_2 + canvas_offset;
@ -134,7 +134,7 @@ void render(char xcol, char ypos, char pixels) {
void render_tiles(char xcol, char ytile, char tile_left, char tile_right) {
char * tile_left_pixels = TILES_LEFT + tile_left*4;
char * tile_right_pixels = TILES_RIGHT + tile_right*4;
char * render_index_xcol = (char*){ (>RENDER_INDEX) + xcol, ytile*2 };
char * render_index_xcol = (char*){ BYTE1(RENDER_INDEX) + xcol, ytile*2 };
unsigned int canvas_offset = {render_index_xcol[RENDER_OFFSET_CANVAS_HI], render_index_xcol[RENDER_OFFSET_CANVAS_LO] };
char * canvas1 = SPRITES_1 + canvas_offset;
char * canvas2 = SPRITES_2 + canvas_offset;

@ -254,13 +254,13 @@ void splash_run() {
unsigned int xpos = sprites_xpos[i];
SPRITES_XPOS[i*2] = (char)xpos;
msb /= 2;
if((>xpos)) msb |=0x80;
if(BYTE1(xpos)) msb |=0x80;
}
// Set initial graphics bank
CIA2->PORT_A = toDd00(SCREENS_1);
// Set initial render/restore buffer
canvas_base_hi = >SPRITES_2;
canvas_base_hi = BYTE1(SPRITES_2);
bobs_restore_base = NUM_BOBS*SIZE_BOB_RESTORE;
// Select first screen
@ -642,13 +642,13 @@ __interrupt void irq_screen_top() {
// Change graphics bank
CIA2->PORT_A = toDd00(SCREENS_2);
// Set the next canvas base address
canvas_base_hi = >SPRITES_1;
canvas_base_hi = BYTE1(SPRITES_1);
bobs_restore_base = 0;
} else {
// Change graphics bank
CIA2->PORT_A = toDd00(SCREENS_1);
// Set the next canvas base address
canvas_base_hi = >SPRITES_2;
canvas_base_hi = BYTE1(SPRITES_2);
bobs_restore_base = NUM_BOBS*SIZE_BOB_RESTORE;
}

@ -213,11 +213,11 @@ __interrupt void irq_part1_top() {
VICII->MEMORY = toD018(P1_SCREEN, P1_PIXELS);
// Set up the flipper IRQ
if(>irq_flipper_top_line)
if(BYTE1(irq_flipper_top_line))
*VICII_CONTROL1 |= 0x80;
else
*VICII_CONTROL1 &= 0x7f;
*RASTER = (<irq_flipper_top_line)&0xf8;
*RASTER = BYTE0(irq_flipper_top_line)&0xf8;
*HARDWARE_IRQ = &irq_flipper_top;
// Signal main routine to play music
p1_work_ready = 1;
@ -229,7 +229,7 @@ __interrupt void irq_part1_top() {
// Flips from start screen to bitmap (stops the bitmap)
__interrupt void irq_flipper_top() {
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
raster_fine((<irq_flipper_top_line)&7);
raster_fine(BYTE0(irq_flipper_top_line)&7);
asm {
lda #$9a // VICII->MEMORY = toD018(LOAD_SCREEN, PIXELS_EMPTY);
ldx #LIGHT_GREEN // VICII->BORDER_COLOR = LIGHT_GREEN;
@ -242,11 +242,11 @@ __interrupt void irq_flipper_top() {
sta VICII_CONTROL2
}
// Set up the flipper IRQ
if(>irq_flipper_bottom_line)
if(BYTE1(irq_flipper_bottom_line))
*VICII_CONTROL1 |= 0x80;
else
*VICII_CONTROL1 &= 0x7f;
*RASTER = (<irq_flipper_bottom_line)&0xf8;
*RASTER = BYTE0(irq_flipper_bottom_line)&0xf8;
*HARDWARE_IRQ = &irq_flipper_bottom;
// Acknowledge the IRQ
*IRQ_STATUS = IRQ_RASTER;
@ -259,7 +259,7 @@ volatile unsigned int irq_flipper_idx = 0x00;
// Flips from start screen to bitmap (starts the start-up screen)
__interrupt void irq_flipper_bottom() {
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
raster_fine((<irq_flipper_bottom_line)&7);
raster_fine(BYTE0(irq_flipper_bottom_line)&7);
// Colors
asm { nop nop nop nop }
VICII->BORDER_COLOR = LIGHT_BLUE;

@ -595,7 +595,7 @@ void vsp_update_screen(__ma char x_offset) {
*PROCPORT = PROCPORT_RAM_ALL;
// Update bitmap (using 3 routines to handle all bitmap columns)
unsigned int x_offset8 = (unsigned int)x_offset*8;
if(>x_offset8 == 0) {
if(BYTE1(x_offset8) == 0) {
kickasm(uses x_offset, uses x_offset8, uses PART2_BITMAP, uses LOGO_DATA_BITMAP, clobbers "AXY") {{
ldx x_offset
ldy x_offset8
@ -605,7 +605,7 @@ void vsp_update_screen(__ma char x_offset) {
sta PART2_BITMAP+row*40*8+pix,y
}
}}
} else if(>x_offset8 == 1) {
} else if(BYTE1(x_offset8) == 1) {
kickasm(uses x_offset, uses x_offset8, uses PART2_BITMAP, uses LOGO_DATA_BITMAP, clobbers "AXY") {{
ldx x_offset
ldy x_offset8

@ -30,7 +30,7 @@ void main() {
signed word xw = (signed word)(word){ (byte)x, 0 };
signed word yw = (signed word)(word){ (byte)y, 0 };
word angle_w = atan2_16(xw, yw);
byte ang_w = >(angle_w+0x0080);
byte ang_w = BYTE1(angle_w+0x0080);
//*screen = (>angle_w)-angle_b;
//*screen = >angle_w;
diff_sum += diff(ang_w, *screen_ref);

@ -242,7 +242,7 @@ void calculate_matrix_16(signed char sx, signed char sy, signed char sz) {
// Returns the rounded high char of the passed signed int.
// Examines the lower char to determine whether to round up or down
signed char round_hi(signed int val) {
return (signed char)>(val+$80);
return (signed char)BYTE1(val+$80);
}

@ -82,7 +82,7 @@ void makecharset(unsigned char* charset) {
sid_rnd_init();
print_cls();
for (unsigned int c = 0; c < 0x100; ++c) {
unsigned char s = SINTABLE[<c];
unsigned char s = SINTABLE[BYTE0(c)];
for ( unsigned char i = 0; i < 8; ++i){
unsigned char b = 0;
for (unsigned char ii = 0; ii < 8; ++ii) {

@ -75,7 +75,7 @@ void makecharset(char* charset) {
sid_rnd_init();
print_cls();
for (unsigned int c = 0; c < 0x100; ++c) {
char s = SINTABLE[<c];
char s = SINTABLE[BYTE0(c)];
for ( char i = 0; i < 8; ++i){
char b = 0;
for (char ii = 0; ii < 8; ++ii) {

@ -55,14 +55,14 @@ void anim() {
mulf8s_prepare(sin_a);
xr -= mulf8s_prepared(y)*2; // signed fixed[8.8]
yr += mulf8s_prepared(x)*2; // signed fixed[8.8]
signed int xpos = ((signed char) >xr) + 24 /*border*/ + 149 /*center*/;
signed int xpos = ((signed char) BYTE1(xr)) + 24 /*border*/ + 149 /*center*/;
sprite_msb = sprite_msb/2;
if(>xpos!=0) {
if(BYTE1(xpos)!=0) {
sprite_msb |= $80;
}
char ypos = (>yr) + 89 /*center*/+ 51 /*border*/;
char ypos = BYTE1(yr) + 89 /*center*/+ 51 /*border*/;
char i2 = i*2;
SPRITES_XPOS[i2] = <xpos;
SPRITES_XPOS[i2] = BYTE0(xpos);
SPRITES_YPOS[i2] = ypos;
}
VICII->SPRITES_XMSB = sprite_msb;

@ -74,8 +74,8 @@ void anim() {
char x_msb = 0;
for( char j : 0..6) {
unsigned int x = (unsigned int)$1e + sintab_x[xidx];
x_msb = x_msb*2 | >x;
SPRITES_XPOS[j2] = <x;
x_msb = x_msb*2 | BYTE1(x);
SPRITES_XPOS[j2] = BYTE0(x);
SPRITES_YPOS[j2] = sintab_y[yidx];
xidx = xidx+10;
if(xidx>=sinlen_x) {

@ -21,12 +21,12 @@ void main() {
dword calcbeg = src;
dword calcend = src+num+(-1);
byte bankbeg = (byte)(((((word)<(>calcbeg)<<8)|>(<calcbeg))>>5)+((word)<(>calcbeg)<<3));
byte bankend = (byte)(((((word)<(>calcend)<<8)|>(<calcend))>>5)+((word)<(>calcend)<<3));
byte bankbeg = BYTE2(calcbeg)<<3 | BYTE1(calcbeg)>>5 ; //(byte)(((((word)<(>calcbeg)<<8)|>(<calcbeg))>>5)+((word)<(>calcbeg)<<3));
byte bankend = BYTE2(calcend)<<3 | BYTE1(calcend)>>5 ; //(byte)(((((word)<(>calcend)<<8)|>(<calcend))>>5)+((word)<(>calcend)<<3));
const word borderbeg = 0xA000;
const word borderend = 0xA000+0x1FFF;
word beg = ((<calcbeg)&0x1FFF); // stip off the top 3 bits, which are representing the bank of the word!
word end = ((<calcend)&0x1FFF); // same for the end;
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;

@ -80,17 +80,17 @@ void main() {
// VRAM address of sprite
const dword VRAM_SPRITE = 0x10000;
// Sprite attributes: 8bpp, in front, 64x64, address SPRITE_PIXELS_VRAM
struct VERA_SPRITE SPRITE_ATTR = { <(VRAM_SPRITE/32)|VERA_SPRITE_8BPP, 320-32, 240-32, 0x0c, 0xf1 };
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 = <(VRAM_SPRITE/32)|VERA_SPRITE_4BPP;
SPRITE_ATTR.ADDR = WORD0(VRAM_SPRITE/32)|VERA_SPRITE_4BPP;
SPRITE_ATTR.X = 100;
SPRITE_ATTR.Y = 100;
memcpy_to_vram((char)>VERA_SPRITE_ATTR, (char*)<VERA_SPRITE_ATTR, &SPRITE_ATTR, sizeof(SPRITE_ATTR));
memcpy_to_vram(BYTE2(VERA_SPRITE_ATTR), (char*)WORD0(VERA_SPRITE_ATTR), &SPRITE_ATTR, sizeof(SPRITE_ATTR));
// Enable sprites
*VERA_CTRL &= ~VERA_DCSEL;

@ -49,19 +49,19 @@ __align(0x0400) char SPRITE_PIXELS[64*64+0x200] = kickasm(resource "tut.png") {{
const unsigned long SPRITE_PIXELS_VRAM = 0x08000;
// Sprite attributes: 8bpp, in front, 64x64, address SPRITE_PIXELS_VRAM
struct VERA_SPRITE SPRITE_ATTR = { <(SPRITE_PIXELS_VRAM/32)|VERA_SPRITE_8BPP, 320-32, 240-32, 0x0c, 0xf0 };
struct VERA_SPRITE SPRITE_ATTR = { WORD0(SPRITE_PIXELS_VRAM/32)|VERA_SPRITE_8BPP, 320-32, 240-32, 0x0c, 0xf0 };
void main() {
// Copy sprite data to VRAM
memcpy_to_vram((char)>SPRITE_PIXELS_VRAM, (char*)<SPRITE_PIXELS_VRAM, SPRITE_PIXELS, 64*64);
memcpy_to_vram(BYTE2(SPRITE_PIXELS_VRAM), (char*)WORD0(SPRITE_PIXELS_VRAM), SPRITE_PIXELS, 64*64);
// Copy sprite palette to VRAM
memcpy_to_vram((char)>VERA_PALETTE, (char*)<VERA_PALETTE, SPRITE_PIXELS+64*64, 0x200);
memcpy_to_vram(BYTE2(VERA_PALETTE), (char*)WORD0(VERA_PALETTE), SPRITE_PIXELS+64*64, 0x200);
// Copy 8* sprite attributes to VRAM
char* vram_sprite_attr = (char*)<VERA_SPRITE_ATTR;
char* vram_sprite_attr = (char*)WORD0(VERA_SPRITE_ATTR);
for(char s=0;s<NUM_SPRITES;s++) {
SPRITE_ATTR.X += 10;
SPRITE_ATTR.Y += 10;
memcpy_to_vram((char)>VERA_SPRITE_ATTR, vram_sprite_attr, &SPRITE_ATTR, sizeof(SPRITE_ATTR));
memcpy_to_vram((char)WORD1(VERA_SPRITE_ATTR), vram_sprite_attr, &SPRITE_ATTR, sizeof(SPRITE_ATTR));
vram_sprite_attr += sizeof(SPRITE_ATTR);
}
// Enable sprites
@ -96,8 +96,8 @@ __interrupt(rom_sys_cx16) void irq_vsync() {
// Move the sprite around
if(++sin_idx_x==SINX_LEN) sin_idx_x = 0;
if(--sin_idx_y==0xffff) sin_idx_y = SINY_LEN-1;
const char vram_sprite_attr_bank = (char)>VERA_SPRITE_ATTR;
char *vram_sprite_pos = (char*)<VERA_SPRITE_ATTR+2;
const char vram_sprite_attr_bank = BYTE2(VERA_SPRITE_ATTR);
char *vram_sprite_pos = (char*)WORD0(VERA_SPRITE_ATTR+2);
unsigned int i_x = sin_idx_x;
unsigned int i_y = sin_idx_y;
for(char s=0;s<NUM_SPRITES;s++) {

@ -27,7 +27,7 @@ void main() {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
word tilebase = 0x4000;
char* tilebase = (char*)0x4000;
memcpy_to_vram(1, tilebase, tiles, 64);
tilebase+=64;
for(byte t:1..255) {

@ -66,7 +66,7 @@ void point_init(byte point_idx) {
x_add[point_idx] = $10;
}
signed word x_stepf = divr16s(0, x_diff, y_diff);
y_add[point_idx] = (signed byte)((>x_stepf)/$10);
y_add[point_idx] = (signed byte)(BYTE1(x_stepf)/$10);
} else {
// X is driver - abs(x/y) is < 1
}
@ -109,8 +109,8 @@ void bitmap_init(byte* bitmap) {
}
byte* yoffs = bitmap;
for(byte y : 0..255) {
bitmap_plot_ylo[y] = y&$7 | <yoffs;
bitmap_plot_yhi[y] = >yoffs;
bitmap_plot_ylo[y] = y&$7 | BYTE0(yoffs);
bitmap_plot_yhi[y] = BYTE1(yoffs);
if((y&$7)==7) {
yoffs = yoffs + 40*8;
}
@ -131,5 +131,5 @@ void bitmap_clear() {
void bitmap_plot(word x, byte y) {
byte* plotter = (byte*) { bitmap_plot_yhi[y], bitmap_plot_ylo[y] };
plotter += ( x & $fff8 );
*plotter |= bitmap_plot_bit[<x];
*plotter |= bitmap_plot_bit[BYTE0(x)];
}

@ -70,7 +70,7 @@ void init_angle_screen(byte* screen) {
signed word xw = (signed word)(word){ 39-x*2, 0 };
signed word yw = (signed word)(word){ y*2, 0 };
word angle_w = atan2_16(xw, yw);
byte ang_w = >(angle_w+0x0080);
byte ang_w = BYTE1(angle_w+0x0080);
screen_bottomline[xb] = ang_w;
screen_topline[xb] = -ang_w;
screen_topline[x] = 0x80+ang_w;
@ -114,7 +114,7 @@ void make_plasma_charset(char* charset) {
sid_rnd_init();
print_cls();
for (unsigned int c = 0; c < 0x100; ++c) {
char s = SINTABLE[<c];
char s = SINTABLE[BYTE0(c)];
for ( char i = 0; i < 8; ++i){
char b = 0;
for (char ii = 0; ii < 8; ++ii) {

@ -33,7 +33,7 @@ void init_angle_screen(byte* screen) {
signed word xw = (signed word)(word){ 39-x*2, 0 };
signed word yw = (signed word)(word){ y*2, 0 };
word angle_w = atan2_16(xw, yw);
byte ang_w = >(angle_w+0x0080);
byte ang_w = BYTE1(angle_w+0x0080);
screen_bottomline[xb] = ang_w;
screen_topline[xb] = -ang_w;
screen_topline[x] = 0x80+ang_w;

@ -118,7 +118,7 @@ void init_angle_screen(byte* screen) {
signed word xw = (signed word)(word){ 39-x*2, 0 };
signed word yw = (signed word)(word){ y*2, 0 };
word angle_w = atan2_16(xw, yw);
byte ang_w = >(angle_w+0x0080);
byte ang_w = BYTE1(angle_w+0x0080);
screen_bottomline[xb] = ang_w;
screen_topline[xb] = -ang_w;
screen_topline[x] = 0x80+ang_w;

@ -57,7 +57,7 @@ void init_angle_screen(byte* screen) {
signed word xw = (signed word)(word){ 39-x*2, 0 };
signed word yw = (signed word)(word){ y*2, 0 };
word angle_w = atan2_16(xw, yw);
byte ang_w = >(angle_w+0x0080);
byte ang_w = BYTE1(angle_w+0x0080);
screen_bottomline[xb] = ang_w;
screen_topline[xb] = -ang_w;
screen_topline[x] = 0x80+ang_w;

@ -15,7 +15,7 @@ void sin16s_genb(signed word* sintab, word wavelength) {
// Iterate over the table
dword x = 0; // u[4.28]
for( word i=0; i<wavelength; i++) {
*sintab++ = sin16sb(>x);
*sintab++ = sin16sb(WORD1(x));
x = x + step;
}
}

@ -11,7 +11,7 @@ void main() {
for(byte i: 0..191) {
signed byte sb = sintabb[i];
signed word sw = *(sintabw+(word)i);
signed byte sd = sb-(signed byte)>sw;
signed byte sd = sb-(signed byte)BYTE1(sw);
print_schar(sd);
print_str(" ");
}

@ -48,7 +48,7 @@ void sin8u_table(byte* sintab, word tabsize, byte min, byte max) {
for( word i=0; i<tabsize; i++) {
signed byte sinx = sin8s(x);
signed word sinx_sc = mul8su(sinx, amplitude+1);
byte sinx_tr = mid+>sinx_sc;
byte sinx_tr = mid+BYTE1(sinx_sc);
*sintab++ = sinx_tr;
print_str("x: ");
print_uint(x);

@ -176,8 +176,8 @@
.label form_VICII_bg3_hi = form_fields_val+$22
.label form_VICII_bg3_lo = form_fields_val+$23
.label print_char_cursor = $d
.label print_line_cursor = $f
.label print_screen = $f
.label print_line_cursor = $11
.label print_screen = $11
// Keyboard event buffer size. The number of events currently in the event buffer
.label keyboard_events_size = $a
// Counts down to blink for form cursor (it is inversed in the lower half)
@ -312,11 +312,11 @@ form_mode: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400))
// DTV Color Bank
lda #<DTV_COLOR_BANK_DEFAULT/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400))
lda #0
sta DTV_COLOR_BANK_HI
// CIA2->PORT_A_DDR = %00000011
@ -342,11 +342,11 @@ form_mode: {
// VIC Memory Pointers
lda #(FORM_SCREEN&$3fff)/$40|(FORM_CHARSET&$3fff)/$400
sta VICII+OFFSET_STRUCT_MOS6569_VICII_MEMORY
// *DTV_PLANEA_START_LO = < FORM_SCREEN
// *DTV_PLANEA_START_LO = BYTE0(FORM_SCREEN)
// DTV Plane A to FORM_SCREEN also
lda #0
sta DTV_PLANEA_START_LO
// *DTV_PLANEA_START_MI = > FORM_SCREEN
// *DTV_PLANEA_START_MI = BYTE1(FORM_SCREEN)
lda #>FORM_SCREEN
sta DTV_PLANEA_START_MI
// *DTV_PLANEA_START_HI = 0
@ -407,19 +407,13 @@ form_mode: {
// Change graphics mode to show the selected graphics mode
gfx_mode: {
.label __20 = 5
.label __22 = $11
.label __24 = $27
.label __26 = $13
.label __34 = 5
.label __36 = $17
.label __38 = $19
.label __40 = $1b
.label __47 = $b
.label __48 = $b
.label __50 = $f
.label __52 = $15
.label __82 = $b
.label __83 = $f
.label __31 = 5
.label __41 = $b
.label __42 = $b
.label __44 = $11
.label __46 = $13
.label __76 = $b
.label __77 = $11
.label plane_a = 5
.label plane_b = 5
.label VICII_colors = $b
@ -539,31 +533,17 @@ gfx_mode: {
lda.z plane_a+3
adc #0
sta.z plane_a+3
// < plane_a
// BYTE0(plane_a)
lda.z plane_a
sta.z __22
lda.z plane_a+1
sta.z __22+1
// < < plane_a
lda.z __22
// *DTV_PLANEA_START_LO = < < plane_a
// *DTV_PLANEA_START_LO = BYTE0(plane_a)
sta DTV_PLANEA_START_LO
// < plane_a
lda.z plane_a
sta.z __24
// BYTE1(plane_a)
lda.z plane_a+1
sta.z __24+1
// > < plane_a
// *DTV_PLANEA_START_MI = > < plane_a
// *DTV_PLANEA_START_MI = BYTE1(plane_a)
sta DTV_PLANEA_START_MI
// > plane_a
// BYTE2(plane_a)
lda.z plane_a+2
sta.z __26
lda.z plane_a+3
sta.z __26+1
// < > plane_a
lda.z __26
// *DTV_PLANEA_START_HI = < > plane_a
// *DTV_PLANEA_START_HI = BYTE2(plane_a)
sta DTV_PLANEA_START_HI
// *form_a_step_hi*$10
lda form_a_step_hi
@ -615,31 +595,17 @@ gfx_mode: {
lda.z plane_b+3
adc #0
sta.z plane_b+3
// < plane_b
// BYTE0(plane_b)
lda.z plane_b
sta.z __36
lda.z plane_b+1
sta.z __36+1
// < < plane_b
lda.z __36
// *DTV_PLANEB_START_LO = < < plane_b
// *DTV_PLANEB_START_LO = BYTE0(plane_b)
sta DTV_PLANEB_START_LO
// < plane_b
lda.z plane_b
sta.z __38
// BYTE1(plane_b)
lda.z plane_b+1
sta.z __38+1
// > < plane_b
// *DTV_PLANEB_START_MI = > < plane_b
// *DTV_PLANEB_START_MI = BYTE1(plane_b)
sta DTV_PLANEB_START_MI
// > plane_b
// BYTE2(plane_b)
lda.z plane_b+2
sta.z __40
lda.z plane_b+3
sta.z __40+1
// < > plane_b
lda.z __40
// *DTV_PLANEB_START_HI = < > plane_b
// *DTV_PLANEB_START_HI = BYTE2(plane_b)
sta DTV_PLANEB_START_HI
// *form_b_step_hi*$10
lda form_b_step_hi
@ -677,44 +643,44 @@ gfx_mode: {
jsr get_VICII_screen
// get_VICII_screen(*form_VICII_screen)
// (word)get_VICII_screen(*form_VICII_screen)&$3fff
lda.z __47
lda.z __41
and #<$3fff
sta.z __47
lda.z __47+1
sta.z __41
lda.z __41+1
and #>$3fff
sta.z __47+1
sta.z __41+1
// ((word)get_VICII_screen(*form_VICII_screen)&$3fff)/$40
lda.z __48
lda.z __42
asl
sta.z $ff
lda.z __48+1
lda.z __42+1
rol
sta.z __48
sta.z __42
lda #0
rol
sta.z __48+1
sta.z __42+1
asl.z $ff
rol.z __48
rol.z __48+1
rol.z __42
rol.z __42+1
// get_VICII_charset(*form_VICII_gfx)
lda form_VICII_gfx
jsr get_VICII_charset
// (word)get_VICII_charset(*form_VICII_gfx)&$3fff
lda.z __50
lda.z __44
and #<$3fff
sta.z __50
lda.z __50+1
sta.z __44
lda.z __44+1
and #>$3fff
sta.z __50+1
// >((word)get_VICII_charset(*form_VICII_gfx)&$3fff)
// (>((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4
sta.z __44+1
// BYTE1((word)get_VICII_charset(*form_VICII_gfx)&$3fff)
// (BYTE1((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4
lsr
lsr
sta.z __52
// (byte)(((word)get_VICII_screen(*form_VICII_screen)&$3fff)/$40) | ((>((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4)
lda.z __48
ora.z __52
// *VICII_MEMORY = (byte)(((word)get_VICII_screen(*form_VICII_screen)&$3fff)/$40) | ((>((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4)
sta.z __46
// (byte)(((word)get_VICII_screen(*form_VICII_screen)&$3fff)/$40) | ((BYTE1((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4)
lda.z __42
ora.z __46
// *VICII_MEMORY = (byte)(((word)get_VICII_screen(*form_VICII_screen)&$3fff)/$40) | ((BYTE1((word)get_VICII_charset(*form_VICII_gfx)&$3fff))/4)
// Set VIC Bank
// VIC memory
sta VICII_MEMORY
@ -845,7 +811,7 @@ gfx_mode: {
}
// Initialize VIC screen 0 ( value is %yyyyxxxx where yyyy is ypos and xxxx is xpos)
gfx_init_screen0: {
.label __1 = $16
.label __1 = $14
.label ch = $b
.label cy = 3
lda #<VICII_SCREEN0
@ -932,7 +898,7 @@ gfx_init_screen1: {
}
// Initialize VIC screen 2 ( value is %ccccrrrr where cccc is (x+y mod $f) and rrrr is %1111-%cccc)
gfx_init_screen2: {
.label col2 = $16
.label col2 = $14
.label ch = $b
.label cy = 2
lda #<VICII_SCREEN2
@ -1162,7 +1128,7 @@ gfx_init_VICII_bitmap: {
.segment Code
// Initialize 8BPP Chunky Bitmap (contains 8bpp pixels)
gfx_init_plane_8bppchunky: {
.label __5 = $1b
.label __5 = $19
.label gfxb = $d
.label x = $b
.label y = 4
@ -1243,10 +1209,10 @@ gfx_init_plane_8bppchunky: {
gfx_init_plane_charset8: {
// 8bpp cells for Plane B (charset) - ROM charset with 256 colors
.const gfxbCpuBank = PLANE_CHARSET8/$4000
.label bits = $15
.label bits = $13
.label chargen = $d
.label gfxa = $b
.label col = $16
.label col = $14
.label cr = $a
.label ch = 9
// dtvSetCpuBankSegment1(gfxbCpuBank++)
@ -1432,7 +1398,7 @@ gfx_init_plane_vertical: {
gfx_init_plane_horisontal2: {
.const gfxbCpuBank = PLANE_HORISONTAL2/$4000
.label gfxa = $d
.label ay = $15
.label ay = $13
// dtvSetCpuBankSegment1(gfxbCpuBank++)
lda #gfxbCpuBank
jsr dtvSetCpuBankSegment1
@ -1531,9 +1497,9 @@ gfx_init_plane_full: {
rts
}
// Set the screen to print on. Also resets current line/char cursor.
// print_set_screen(byte* zp($f) screen)
// print_set_screen(byte* zp($11) screen)
print_set_screen: {
.label screen = $f
.label screen = $11
// print_screen = screen
// }
rts
@ -1599,20 +1565,20 @@ print_str_lines: {
// Set the screen to use for the form.
// screen is the start address of the screen to use
form_set_screen: {
.label line = $f
.label line = $11
ldx #0
lda #<FORM_SCREEN
sta.z line
lda #>FORM_SCREEN
sta.z line+1
__b1:
// <line
// BYTE0(line)
lda.z line
// form_line_lo[y] = <line
// form_line_lo[y] = BYTE0(line)
sta form_line_lo,x
// >line
// BYTE1(line)
lda.z line+1
// form_line_hi[y] = >line
// form_line_hi[y] = BYTE1(line)
sta form_line_hi,x
// line = line + 40
lda #$28
@ -1787,7 +1753,7 @@ render_preset_name: {
// Reads keyboard and allows the user to navigate and change the fields of the form
// Returns 0 if space is not pressed, non-0 if space is pressed
form_control: {
.label field = $1d
.label field = $27
// form_field_ptr(form_field_idx)
ldx.z form_field_idx
jsr form_field_ptr
@ -2296,7 +2262,7 @@ get_VICII_screen: {
// Get the VIC charset/bitmap address from the index
// get_VICII_charset(byte register(A) idx)
get_VICII_charset: {
.label return = $f
.label return = $11
// if(idx==0)
cmp #0
beq __b1
@ -2323,7 +2289,7 @@ get_VICII_charset: {
keyboard_event_scan: {
.label row_scan = $25
.label keycode = 9
.label row = $16
.label row = $14
lda #0
sta.z keycode
sta.z row
@ -2476,7 +2442,7 @@ keyboard_event_get: {
// Initialize bitmap plotting tables
bitmap_init: {
.label __7 = $25
.label yoffs = $f
.label yoffs = $11
ldx #0
lda #$80
__b1:
@ -2502,15 +2468,15 @@ bitmap_init: {
// y&$7
lda #7
sax.z __7
// <yoffs
// BYTE0(yoffs)
lda.z yoffs
// y&$7 | <yoffs
// y&$7 | BYTE0(yoffs)
ora.z __7
// bitmap_plot_ylo[y] = y&$7 | <yoffs
// bitmap_plot_ylo[y] = y&$7 | BYTE0(yoffs)
sta bitmap_plot_ylo,x
// >yoffs
// BYTE1(yoffs)
lda.z yoffs+1
// bitmap_plot_yhi[y] = >yoffs
// bitmap_plot_yhi[y] = BYTE1(yoffs)
sta bitmap_plot_yhi,x
// if((y&$7)==7)
lda #7
@ -2563,20 +2529,20 @@ bitmap_clear: {
rts
}
// Draw a line on the bitmap using bresenhams algorithm
// bitmap_line(word zp($d) x1, word zp($1b) y1, word zp($17) x2, word zp($19) y2)
// bitmap_line(word zp($d) x1, word zp($f) y1, word zp($15) x2, word zp($17) y2)
bitmap_line: {
.label dx = $1d
.label dy = $11
.label sx = $23
.label sy = $13
.label e1 = $f
.label dx = $1b
.label dy = $19
.label sx = $1d
.label sy = $23
.label e1 = $11
.label e = $b
.label y = $1b
.label y = $f
.label x = $d
.label x1 = $d
.label y1 = $1b
.label x2 = $17
.label y2 = $19
.label y1 = $f
.label x2 = $15
.label y2 = $17
// abs_u16(x2-x1)
lda.z x2
sec
@ -2657,7 +2623,7 @@ bitmap_line: {
sta.z e
__b6:
// bitmap_plot(x,(char)y)
lda.z y
ldx.z y
jsr bitmap_plot
// y += sy
lda.z y
@ -2709,7 +2675,7 @@ bitmap_line: {
bne __b6
__b3:
// bitmap_plot(x,(char)y)
lda.z y
ldx.z y
jsr bitmap_plot
// }
rts
@ -2723,7 +2689,7 @@ bitmap_line: {
sta.z e1
__b9:
// bitmap_plot(x,(char)y)
lda.z y
ldx.z y
jsr bitmap_plot
// x += sx
lda.z x
@ -2776,7 +2742,7 @@ bitmap_line: {
jmp __b3
__b4:
// bitmap_plot(x,(char)y)
lda.z y1
ldx.z y1
jsr bitmap_plot
rts
}
@ -2800,9 +2766,8 @@ dtvSetCpuBankSegment1: {
// gfx_init_plane_fill(dword zp(5) plane_addr, byte zp(9) fill)
gfx_init_plane_fill: {
.label __0 = $1f
.label __1 = $23
.label __3 = $b
.label __4 = $b
.label __5 = $b
.label gfxb = $b
.label by = $a
.label plane_addr = 5
@ -2824,28 +2789,23 @@ gfx_init_plane_fill: {
rol.z __0+1
rol.z __0+2
rol.z __0+3
// >(plane_addr*4)
// byte gfxbCpuBank = BYTE2(plane_addr*4)
lda.z __0+2
sta.z __1
lda.z __0+3
sta.z __1+1
// byte gfxbCpuBank = < >(plane_addr*4)
lda.z __1
// dtvSetCpuBankSegment1(gfxbCpuBank++)
jsr dtvSetCpuBankSegment1
// <plane_addr
// WORD0(plane_addr)
lda.z plane_addr
sta.z __4
sta.z __3
lda.z plane_addr+1
sta.z __4+1
// <plane_addr & $3fff
lda.z __5
sta.z __3+1
// WORD0(plane_addr) & $3fff
lda.z __4
and #<$3fff
sta.z __5
lda.z __5+1
sta.z __4
lda.z __4+1
and #>$3fff
sta.z __5+1
// byte* gfxb = (byte*)$4000 + (<plane_addr & $3fff)
sta.z __4+1
// byte* gfxb = (byte*)$4000 + (WORD0(plane_addr) & $3fff)
clc
lda.z gfxb
adc #<$4000
@ -2884,11 +2844,11 @@ gfx_init_plane_fill: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp($1b) str, byte register(X) c, word zp($d) num)
// memset(void* zp($f) str, byte register(X) c, word zp($d) num)
memset: {
.label str = $1b
.label str = $f
.label end = $d
.label dst = $1b
.label dst = $f
.label num = $d
// if(num>0)
lda.z num
@ -2968,9 +2928,9 @@ print_ln: {
// field_idx is the index of the field to get the screen address for
// form_field_ptr(byte register(X) field_idx)
form_field_ptr: {
.label line = $27
.label line = $23
.label x = $25
.label return = $1d
.label return = $27
// byte y = form_fields_y[field_idx]
ldy form_fields_y,x
// byte* line = (byte*) { form_line_hi[y], form_line_lo[y] }
@ -2992,9 +2952,9 @@ form_field_ptr: {
rts
}
// Print a string at a specific screen position
// print_str_at(byte* zp($b) str, byte* zp($f) at)
// print_str_at(byte* zp($b) str, byte* zp($11) at)
print_str_at: {
.label at = $f
.label at = $11
.label str = $b
lda #<FORM_SCREEN+$28*2+$a
sta.z at
@ -3042,10 +3002,10 @@ keyboard_matrix_read: {
}
// Determine if a specific key is currently pressed based on the last keyboard_event_scan()
// Returns 0 is not pressed and non-0 if pressed
// keyboard_event_pressed(byte zp($15) keycode)
// keyboard_event_pressed(byte zp($13) keycode)
keyboard_event_pressed: {
.label row_bits = $26
.label keycode = $15
.label keycode = $13
// keycode>>3
lda.z keycode
lsr
@ -3066,15 +3026,15 @@ keyboard_event_pressed: {
rts
}
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// abs_u16(word zp($11) w)
// abs_u16(word zp($19) w)
abs_u16: {
.label w = $11
.label return = $11
// >w
.label w = $19
.label return = $19
// BYTE1(w)
lda.z w+1
// >w&0x80
// BYTE1(w)&0x80
and #$80
// if(>w&0x80)
// if(BYTE1(w)&0x80)
cmp #0
bne __b1
rts
@ -3095,12 +3055,12 @@ abs_u16: {
// sgn_u16(word zp($27) w)
sgn_u16: {
.label w = $27
.label return = $13
// >w
.label return = $23
// BYTE1(w)
lda.z w+1
// >w&0x80
// BYTE1(w)&0x80
and #$80
// if(>w&0x80)
// if(BYTE1(w)&0x80)
cmp #0
bne __b1
lda #<1
@ -3116,16 +3076,15 @@ sgn_u16: {
rts
}
// Plot a single dot in the bitmap
// bitmap_plot(word zp($d) x, byte register(A) y)
// bitmap_plot(word zp($d) x, byte register(X) y)
bitmap_plot: {
.label __0 = $29
.label plotter = $27
.label x = $d
// char* plotter = (char*) { bitmap_plot_yhi[y], bitmap_plot_ylo[y] }
tay
lda bitmap_plot_yhi,y
lda bitmap_plot_yhi,x
sta.z plotter+1
lda bitmap_plot_ylo,y
lda bitmap_plot_ylo,x
sta.z plotter
// x & $fff8
lda.z x
@ -3142,9 +3101,9 @@ bitmap_plot: {
lda.z plotter+1
adc.z __0+1
sta.z plotter+1
// <x
// BYTE0(x)
ldx.z x
// *plotter |= bitmap_plot_bit[<x]
// *plotter |= bitmap_plot_bit[BYTE0(x)]
lda bitmap_plot_bit,x
ldy #0
ora (plotter),y

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -97,14 +97,14 @@ word abs_u16(word abs_u16::w)
byte~ abs_u16::$0 reg byte a 200002.0
byte~ abs_u16::$1 reg byte a 200002.0
word abs_u16::return
word abs_u16::return#0 return zp[2]:17 20002.0
word abs_u16::return#1 return zp[2]:17 20002.0
word abs_u16::return#2 return zp[2]:17 200002.0
word abs_u16::return#4 return zp[2]:17 55001.0
word abs_u16::return#0 return zp[2]:25 20002.0
word abs_u16::return#1 return zp[2]:25 20002.0
word abs_u16::return#2 return zp[2]:25 200002.0
word abs_u16::return#4 return zp[2]:25 55001.0
word abs_u16::w
word abs_u16::w#0 w zp[2]:17 20002.0
word abs_u16::w#1 w zp[2]:17 20002.0
word abs_u16::w#2 w zp[2]:17 80001.25
word abs_u16::w#0 w zp[2]:25 20002.0
word abs_u16::w#1 w zp[2]:25 20002.0
word abs_u16::w#2 w zp[2]:25 80001.25
void apply_preset(byte apply_preset::idx)
byte apply_preset::i
byte apply_preset::i#1 reg byte y 2.00000002E8
@ -137,14 +137,14 @@ byte bitmap_init::y
byte bitmap_init::y#1 reg byte x 15001.5
byte bitmap_init::y#2 reg byte x 5000.5
byte* bitmap_init::yoffs
byte* bitmap_init::yoffs#1 yoffs zp[2]:15 20002.0
byte* bitmap_init::yoffs#2 yoffs zp[2]:15 6250.625
byte* bitmap_init::yoffs#4 yoffs zp[2]:15 10001.0
byte* bitmap_init::yoffs#1 yoffs zp[2]:17 20002.0
byte* bitmap_init::yoffs#2 yoffs zp[2]:17 6250.625
byte* bitmap_init::yoffs#4 yoffs zp[2]:17 10001.0
void bitmap_line(word bitmap_line::x1 , word bitmap_line::y1 , word bitmap_line::x2 , word bitmap_line::y2)
word bitmap_line::dx
word bitmap_line::dx#0 dx zp[2]:29 76000.175
word bitmap_line::dx#0 dx zp[2]:27 76000.175
word bitmap_line::dy
word bitmap_line::dy#0 dy zp[2]:17 84444.63888888889
word bitmap_line::dy#0 dy zp[2]:25 84444.63888888889
word bitmap_line::e
word bitmap_line::e#0 e zp[2]:11 20002.0
word bitmap_line::e#1 e zp[2]:11 1333334.6666666667
@ -152,15 +152,15 @@ word bitmap_line::e#2 e zp[2]:11 2000002.0
word bitmap_line::e#3 e zp[2]:11 402000.60000000003
word bitmap_line::e#6 e zp[2]:11 1500001.5
word bitmap_line::e1
word bitmap_line::e1#0 e1 zp[2]:15 20002.0
word bitmap_line::e1#1 e1 zp[2]:15 1333334.6666666667
word bitmap_line::e1#2 e1 zp[2]:15 2000002.0
word bitmap_line::e1#3 e1 zp[2]:15 402000.60000000003
word bitmap_line::e1#6 e1 zp[2]:15 1500001.5
word bitmap_line::e1#0 e1 zp[2]:17 20002.0
word bitmap_line::e1#1 e1 zp[2]:17 1333334.6666666667
word bitmap_line::e1#2 e1 zp[2]:17 2000002.0
word bitmap_line::e1#3 e1 zp[2]:17 402000.60000000003
word bitmap_line::e1#6 e1 zp[2]:17 1500001.5
word bitmap_line::sx
word bitmap_line::sx#0 sx zp[2]:35 67000.1
word bitmap_line::sx#0 sx zp[2]:29 67000.1
word bitmap_line::sy
word bitmap_line::sy#0 sy zp[2]:19 77307.80769230769
word bitmap_line::sy#0 sy zp[2]:35 77307.80769230769
word bitmap_line::x
word bitmap_line::x#1 x zp[2]:13 1000001.0
word bitmap_line::x#12 x zp[2]:13 2000002.0
@ -171,18 +171,18 @@ word bitmap_line::x#7 x zp[2]:13 752501.0
word bitmap_line::x1
word bitmap_line::x1#0 x1 zp[2]:13 2040.24
word bitmap_line::x2
word bitmap_line::x2#0 x2 zp[2]:23 30939.515151515152
word bitmap_line::x2#0 x2 zp[2]:21 30939.515151515152
word bitmap_line::y
word bitmap_line::y#1 y zp[2]:27 571429.1428571428
word bitmap_line::y#13 y zp[2]:27 2000002.0
word bitmap_line::y#15 y zp[2]:27 430000.57142857136
word bitmap_line::y#2 y zp[2]:27 1000001.0
word bitmap_line::y#4 y zp[2]:27 502500.75
word bitmap_line::y#7 y zp[2]:27 1000001.0
word bitmap_line::y#1 y zp[2]:15 571429.1428571428
word bitmap_line::y#13 y zp[2]:15 2000002.0
word bitmap_line::y#15 y zp[2]:15 430000.57142857136
word bitmap_line::y#2 y zp[2]:15 1000001.0
word bitmap_line::y#4 y zp[2]:15 502500.75
word bitmap_line::y#7 y zp[2]:15 1000001.0
word bitmap_line::y1
word bitmap_line::y1#0 y1 zp[2]:27 1640.2
word bitmap_line::y1#0 y1 zp[2]:15 1640.2
word bitmap_line::y2
word bitmap_line::y2#0 y2 zp[2]:25 31906.375
word bitmap_line::y2#0 y2 zp[2]:23 31906.375
void bitmap_plot(word bitmap_plot::x , byte bitmap_plot::y)
word~ bitmap_plot::$0 zp[2]:41 2.0000002E7
byte~ bitmap_plot::$1 reg byte x 2.0000002E7
@ -196,11 +196,11 @@ word bitmap_plot::x#2 x zp[2]:13 10001.0
word bitmap_plot::x#3 x zp[2]:13 1000001.0
word bitmap_plot::x#4 x zp[2]:13 5505001.5
byte bitmap_plot::y
byte bitmap_plot::y#0 reg byte a 20002.0
byte bitmap_plot::y#1 reg byte a 2000002.0
byte bitmap_plot::y#2 reg byte a 20002.0
byte bitmap_plot::y#3 reg byte a 2000002.0
byte bitmap_plot::y#4 reg byte a 2.2020006E7
byte bitmap_plot::y#0 reg byte x 20002.0
byte bitmap_plot::y#1 reg byte x 2000002.0
byte bitmap_plot::y#2 reg byte x 20002.0
byte bitmap_plot::y#3 reg byte x 2000002.0
byte bitmap_plot::y#4 reg byte x 2.2020006E7
constant const byte* bitmap_plot_bit[$100] = { fill( $100, 0) }
constant const byte* bitmap_plot_yhi[$100] = { fill( $100, 0) }
constant const byte* bitmap_plot_ylo[$100] = { fill( $100, 0) }
@ -243,7 +243,7 @@ byte~ form_control::$14 reg byte a 2000002.0
byte~ form_control::$15 reg byte a 2000002.0
byte~ form_control::$22 reg byte a 2000002.0
byte* form_control::field
byte* form_control::field#0 field zp[2]:29 296296.5925925926
byte* form_control::field#0 field zp[2]:39 296296.5925925926
byte form_control::key_event
byte form_control::key_event#0 reg byte a 1333334.6666666667
byte form_control::return
@ -279,10 +279,10 @@ byte form_field_ptr::field_idx#0 reg byte x 2.00000002E8
byte form_field_ptr::field_idx#1 reg byte x 2000002.0
byte form_field_ptr::field_idx#2 reg byte x 7.003333346666667E8
byte* form_field_ptr::line
word form_field_ptr::line#0 line zp[2]:39 2.000000002E8
word form_field_ptr::line#0 line zp[2]:35 2.000000002E8
byte* form_field_ptr::return
byte* form_field_ptr::return#0 return zp[2]:29 3.336666673333334E8
byte* form_field_ptr::return#3 return zp[2]:29 2000002.0
byte* form_field_ptr::return#0 return zp[2]:39 3.336666673333334E8
byte* form_field_ptr::return#3 return zp[2]:39 2000002.0
byte form_field_ptr::x
byte form_field_ptr::x#0 x zp[1]:37 5.2500000075E8
byte form_field_ptr::y
@ -312,8 +312,8 @@ void form_set_screen(byte* form_set_screen::screen)
byte~ form_set_screen::$0 reg byte a 200002.0
byte~ form_set_screen::$1 reg byte a 200002.0
byte* form_set_screen::line
byte* form_set_screen::line#1 line zp[2]:15 66667.33333333333
byte* form_set_screen::line#2 line zp[2]:15 80000.8
byte* form_set_screen::line#1 line zp[2]:17 66667.33333333333
byte* form_set_screen::line#2 line zp[2]:17 80000.8
byte* form_set_screen::screen
byte form_set_screen::y
byte form_set_screen::y#1 reg byte x 150001.5
@ -322,8 +322,8 @@ byte* get_VICII_charset(byte get_VICII_charset::idx)
byte get_VICII_charset::idx
byte get_VICII_charset::idx#0 reg byte a 1051.5
byte* get_VICII_charset::return
byte* get_VICII_charset::return#2 return zp[2]:15 33.666666666666664
byte* get_VICII_charset::return#4 return zp[2]:15 202.0
byte* get_VICII_charset::return#2 return zp[2]:17 33.666666666666664
byte* get_VICII_charset::return#4 return zp[2]:17 202.0
byte* get_VICII_screen(byte get_VICII_screen::idx)
byte get_VICII_screen::idx
byte get_VICII_screen::idx#0 reg byte a 202.0
@ -366,7 +366,7 @@ byte gfx_init_charset::l
byte gfx_init_charset::l#1 reg byte x 15001.5
byte gfx_init_charset::l#2 reg byte x 5000.5
void gfx_init_plane_8bppchunky()
word~ gfx_init_plane_8bppchunky::$5 zp[2]:27 10001.0
word~ gfx_init_plane_8bppchunky::$5 zp[2]:25 10001.0
byte gfx_init_plane_8bppchunky::c
byte gfx_init_plane_8bppchunky::c#0 reg byte a 20002.0
byte* gfx_init_plane_8bppchunky::gfxb
@ -389,9 +389,9 @@ void gfx_init_plane_blank()
void gfx_init_plane_charset8()
byte~ gfx_init_plane_charset8::$2 reg byte a 200002.0
byte gfx_init_plane_charset8::bits
byte gfx_init_plane_charset8::bits#0 bits zp[1]:21 10001.0
byte gfx_init_plane_charset8::bits#1 bits zp[1]:21 50000.5
byte gfx_init_plane_charset8::bits#2 bits zp[1]:21 44286.28571428572
byte gfx_init_plane_charset8::bits#0 bits zp[1]:19 10001.0
byte gfx_init_plane_charset8::bits#1 bits zp[1]:19 50000.5
byte gfx_init_plane_charset8::bits#2 bits zp[1]:19 44286.28571428572
byte gfx_init_plane_charset8::c
byte gfx_init_plane_charset8::c#2 reg byte a 200002.0
byte gfx_init_plane_charset8::c#3 reg byte a 200002.0
@ -403,10 +403,10 @@ byte* gfx_init_plane_charset8::chargen#1 chargen zp[2]:13 1312.6875
byte* gfx_init_plane_charset8::chargen#2 chargen zp[2]:13 15502.0
byte* gfx_init_plane_charset8::chargen#3 chargen zp[2]:13 2002.0
byte gfx_init_plane_charset8::col
byte gfx_init_plane_charset8::col#1 col zp[1]:22 30143.428571428572
byte gfx_init_plane_charset8::col#2 col zp[1]:22 38750.5
byte gfx_init_plane_charset8::col#5 col zp[1]:22 7001.0
byte gfx_init_plane_charset8::col#6 col zp[1]:22 2002.0
byte gfx_init_plane_charset8::col#1 col zp[1]:20 30143.428571428572
byte gfx_init_plane_charset8::col#2 col zp[1]:20 38750.5
byte gfx_init_plane_charset8::col#5 col zp[1]:20 7001.0
byte gfx_init_plane_charset8::col#6 col zp[1]:20 2002.0
byte gfx_init_plane_charset8::cp
byte gfx_init_plane_charset8::cp#1 reg byte x 150001.5
byte gfx_init_plane_charset8::cp#2 reg byte x 22222.444444444445
@ -422,9 +422,8 @@ byte gfx_init_plane_charset8::gfxbCpuBank
constant byte gfx_init_plane_charset8::gfxbCpuBank#0 gfxbCpuBank = (byte)PLANE_CHARSET8/$4000
void gfx_init_plane_fill(dword gfx_init_plane_fill::plane_addr , byte gfx_init_plane_fill::fill)
dword~ gfx_init_plane_fill::$0 zp[4]:31 2002.0
word~ gfx_init_plane_fill::$1 zp[2]:35 2002.0
word~ gfx_init_plane_fill::$3 zp[2]:11 2002.0
word~ gfx_init_plane_fill::$4 zp[2]:11 2002.0
word~ gfx_init_plane_fill::$5 zp[2]:11 2002.0
byte gfx_init_plane_fill::bx
byte gfx_init_plane_fill::bx#1 reg byte x 150001.5
byte gfx_init_plane_fill::bx#2 reg byte x 66667.33333333333
@ -432,7 +431,7 @@ byte gfx_init_plane_fill::by
byte gfx_init_plane_fill::by#1 by zp[1]:10 15001.5
byte gfx_init_plane_fill::by#4 by zp[1]:10 3333.6666666666665
byte gfx_init_plane_fill::fill
byte gfx_init_plane_fill::fill#6 fill zp[1]:9 5882.411764705882
byte gfx_init_plane_fill::fill#6 fill zp[1]:9 6250.0625
byte* gfx_init_plane_fill::gfxb
byte* gfx_init_plane_fill::gfxb#0 gfxb zp[2]:11 2002.0
byte* gfx_init_plane_fill::gfxb#1 gfxb zp[2]:11 42000.600000000006
@ -441,7 +440,7 @@ byte* gfx_init_plane_fill::gfxb#3 gfxb zp[2]:11 21003.0
byte gfx_init_plane_fill::gfxbCpuBank
byte gfx_init_plane_fill::gfxbCpuBank#0 reg byte a 2002.0
dword gfx_init_plane_fill::plane_addr
dword gfx_init_plane_fill::plane_addr#3 plane_addr zp[4]:5 333.6666666666667
dword gfx_init_plane_fill::plane_addr#3 plane_addr zp[4]:5 400.4
void gfx_init_plane_full()
void gfx_init_plane_horisontal()
byte~ gfx_init_plane_horisontal::$2 reg byte a 20002.0
@ -465,8 +464,8 @@ byte gfx_init_plane_horisontal2::ax
byte gfx_init_plane_horisontal2::ax#1 reg byte x 15001.5
byte gfx_init_plane_horisontal2::ax#2 reg byte x 4000.4
byte gfx_init_plane_horisontal2::ay
byte gfx_init_plane_horisontal2::ay#1 ay zp[1]:21 1501.5
byte gfx_init_plane_horisontal2::ay#4 ay zp[1]:21 1500.375
byte gfx_init_plane_horisontal2::ay#1 ay zp[1]:19 1501.5
byte gfx_init_plane_horisontal2::ay#4 ay zp[1]:19 1500.375
byte* gfx_init_plane_horisontal2::gfxa
byte* gfx_init_plane_horisontal2::gfxa#1 gfxa zp[2]:13 4200.6
byte* gfx_init_plane_horisontal2::gfxa#2 gfxa zp[2]:13 7751.0
@ -492,7 +491,7 @@ constant byte gfx_init_plane_vertical::gfxbCpuBank#0 gfxbCpuBank = (byte)PLANE_V
void gfx_init_plane_vertical2()
void gfx_init_screen0()
byte~ gfx_init_screen0::$0 reg byte a 20002.0
byte~ gfx_init_screen0::$1 zp[1]:22 10001.0
byte~ gfx_init_screen0::$1 zp[1]:20 10001.0
byte~ gfx_init_screen0::$2 reg byte a 20002.0
byte~ gfx_init_screen0::$3 reg byte a 20002.0
byte* gfx_init_screen0::ch
@ -529,7 +528,7 @@ byte* gfx_init_screen2::ch#3 ch zp[2]:11 2002.0
byte gfx_init_screen2::col
byte gfx_init_screen2::col#0 reg byte y 15001.5
byte gfx_init_screen2::col2
byte gfx_init_screen2::col2#0 col2 zp[1]:22 10001.0
byte gfx_init_screen2::col2#0 col2 zp[1]:20 10001.0
byte gfx_init_screen2::cx
byte gfx_init_screen2::cx#1 reg byte x 15001.5
byte gfx_init_screen2::cx#2 reg byte x 3750.375
@ -565,45 +564,39 @@ byte gfx_init_screen4::cy#4 cy zp[1]:3 333.6666666666667
void gfx_mode()
byte~ gfx_mode::$18 reg byte a 202.0
dword~ gfx_mode::$20 zp[4]:5 202.0
word~ gfx_mode::$22 zp[2]:17 202.0
byte~ gfx_mode::$22 reg byte a 202.0
byte~ gfx_mode::$23 reg byte a 202.0
word~ gfx_mode::$24 zp[2]:39 202.0
byte~ gfx_mode::$24 reg byte a 202.0
byte~ gfx_mode::$25 reg byte a 202.0
word~ gfx_mode::$26 zp[2]:19 202.0
byte~ gfx_mode::$26 reg byte a 202.0
byte~ gfx_mode::$27 reg byte a 202.0
byte~ gfx_mode::$28 reg byte a 202.0
byte~ gfx_mode::$29 reg byte a 202.0
byte~ gfx_mode::$30 reg byte a 202.0
byte~ gfx_mode::$31 reg byte a 202.0
byte~ gfx_mode::$32 reg byte a 202.0
dword~ gfx_mode::$34 zp[4]:5 202.0
word~ gfx_mode::$36 zp[2]:23 202.0
dword~ gfx_mode::$31 zp[4]:5 202.0
byte~ gfx_mode::$33 reg byte a 202.0
byte~ gfx_mode::$34 reg byte a 202.0
byte~ gfx_mode::$35 reg byte a 202.0
byte~ gfx_mode::$36 reg byte a 202.0
byte~ gfx_mode::$37 reg byte a 202.0
word~ gfx_mode::$38 zp[2]:25 202.0
byte~ gfx_mode::$38 reg byte a 202.0
byte~ gfx_mode::$39 reg byte a 202.0
word~ gfx_mode::$40 zp[2]:27 202.0
byte~ gfx_mode::$41 reg byte a 202.0
byte~ gfx_mode::$42 reg byte a 202.0
byte~ gfx_mode::$43 reg byte a 202.0
byte~ gfx_mode::$44 reg byte a 202.0
word~ gfx_mode::$41 zp[2]:11 202.0
word~ gfx_mode::$42 zp[2]:11 12.625
word~ gfx_mode::$44 zp[2]:17 202.0
byte~ gfx_mode::$45 reg byte a 202.0
word~ gfx_mode::$47 zp[2]:11 202.0
word~ gfx_mode::$48 zp[2]:11 12.625
word~ gfx_mode::$50 zp[2]:15 202.0
byte~ gfx_mode::$46 zp[1]:19 101.0
byte~ gfx_mode::$47 reg byte a 202.0
byte~ gfx_mode::$49 reg byte a 202.0
byte~ gfx_mode::$50 reg byte a 202.0
byte~ gfx_mode::$51 reg byte a 202.0
byte~ gfx_mode::$52 zp[1]:21 101.0
byte~ gfx_mode::$52 reg byte a 202.0
byte~ gfx_mode::$53 reg byte a 202.0
byte~ gfx_mode::$54 reg byte a 202.0
byte~ gfx_mode::$55 reg byte a 202.0
byte~ gfx_mode::$56 reg byte a 202.0
byte~ gfx_mode::$57 reg byte a 202.0
byte~ gfx_mode::$58 reg byte a 202.0
byte~ gfx_mode::$59 reg byte a 202.0
byte~ gfx_mode::$60 reg byte a 202.0
byte~ gfx_mode::$61 reg byte a 202.0
byte~ gfx_mode::$62 reg byte a 202.0
byte*~ gfx_mode::$82 zp[2]:11 101.0
byte*~ gfx_mode::$83 zp[2]:15 101.0
byte~ gfx_mode::$84 reg byte a 202.0
byte*~ gfx_mode::$76 zp[2]:11 101.0
byte*~ gfx_mode::$77 zp[2]:17 101.0
byte~ gfx_mode::$78 reg byte a 202.0
byte* gfx_mode::VICII_colors
byte* gfx_mode::VICII_colors#0 VICII_colors zp[2]:11 202.0
byte* gfx_mode::VICII_colors#1 VICII_colors zp[2]:11 42000.600000000006
@ -646,11 +639,11 @@ byte gfx_mode::j#2 reg byte x 20002.0
byte gfx_mode::keyboard_event
byte gfx_mode::keyboard_event#0 reg byte a 20002.0
dword gfx_mode::plane_a
dword gfx_mode::plane_a#0 plane_a zp[4]:5 57.714285714285715
dword gfx_mode::plane_a#0 plane_a zp[4]:5 80.8
byte gfx_mode::plane_a_offs
byte gfx_mode::plane_a_offs#0 reg byte x 40.4
dword gfx_mode::plane_b
dword gfx_mode::plane_b#0 plane_b zp[4]:5 57.714285714285715
dword gfx_mode::plane_b#0 plane_b zp[4]:5 80.8
byte gfx_mode::plane_b_offs
byte gfx_mode::plane_b_offs#0 reg byte x 40.4
byte keyboard_event_get()
@ -663,7 +656,7 @@ byte keyboard_event_pressed(byte keyboard_event_pressed::keycode)
byte~ keyboard_event_pressed::$0 reg byte a 2.00000002E8
byte~ keyboard_event_pressed::$1 reg byte a 2.00000002E8
byte keyboard_event_pressed::keycode
byte keyboard_event_pressed::keycode#4 keycode zp[1]:21 6.6666667333333336E7
byte keyboard_event_pressed::keycode#4 keycode zp[1]:19 6.6666667333333336E7
byte keyboard_event_pressed::return
byte keyboard_event_pressed::return#0 reg byte a 2.0000002E7
byte keyboard_event_pressed::return#1 reg byte a 2.0000002E7
@ -692,8 +685,8 @@ byte keyboard_event_scan::keycode#11 keycode zp[1]:9 5.00000000005E10
byte keyboard_event_scan::keycode#13 keycode zp[1]:9 1.00000000001E11
byte keyboard_event_scan::keycode#14 keycode zp[1]:9 5.2500000000075E11
byte keyboard_event_scan::row
byte keyboard_event_scan::row#1 row zp[1]:22 1.500000000015E11
byte keyboard_event_scan::row#2 row zp[1]:22 6.000000000024E10
byte keyboard_event_scan::row#1 row zp[1]:20 1.500000000015E11
byte keyboard_event_scan::row#2 row zp[1]:20 6.000000000024E10
byte keyboard_event_scan::row_scan
byte keyboard_event_scan::row_scan#0 row_scan zp[1]:37 1.2777777777805557E11
constant byte* keyboard_events[8] = { fill( 8, 0) }
@ -704,7 +697,7 @@ byte keyboard_events_size#100 keyboard_events_size zp[1]:10 8.82441176488235E9
byte keyboard_events_size#106 keyboard_events_size zp[1]:10 1.0200000000012E12
byte keyboard_events_size#107 keyboard_events_size zp[1]:10 4.285857142914285E10
byte keyboard_events_size#19 keyboard_events_size zp[1]:10 8.100000000008999E11
byte keyboard_events_size#25 keyboard_events_size zp[1]:10 110549.53846153847
byte keyboard_events_size#25 keyboard_events_size zp[1]:10 114318.27272727274
byte keyboard_events_size#28 keyboard_events_size zp[1]:10 2.871794871794872
byte keyboard_events_size#3 keyboard_events_size zp[1]:10 1.50000015E7
byte keyboard_events_size#49 keyboard_events_size zp[1]:10 65300.23529411765
@ -733,17 +726,17 @@ void* memset(void* memset::str , byte memset::c , word memset::num)
byte memset::c
byte memset::c#5 reg byte x 125000.125
byte* memset::dst
byte* memset::dst#1 dst zp[2]:27 2000002.0
byte* memset::dst#2 dst zp[2]:27 1336668.3333333335
byte* memset::dst#4 dst zp[2]:27 20002.0
byte* memset::dst#1 dst zp[2]:15 2000002.0
byte* memset::dst#2 dst zp[2]:15 1336668.3333333335
byte* memset::dst#4 dst zp[2]:15 20002.0
byte* memset::end
byte* memset::end#0 end zp[2]:13 168333.6666666667
word memset::num
word memset::num#3 num zp[2]:13 10001.0
void* memset::return
void* memset::str
void* memset::str#0 str zp[2]:27 2002.0
void* memset::str#4 str zp[2]:27 333.6666666666667
void* memset::str#0 str zp[2]:15 2002.0
void* memset::str#4 str zp[2]:15 333.6666666666667
constant byte* preset_8bpppixelcell[] = { $a, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, $b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }
constant byte* preset_chunky[] = { 7, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }
constant byte* preset_ecmchar[] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 5, 0, 6 }
@ -768,19 +761,19 @@ byte* print_char_cursor#73 print_char_cursor zp[2]:13 200002.0
void print_cls()
constant const byte* print_hextab[] = "0123456789abcdef"z
byte* print_line_cursor
byte* print_line_cursor#1 print_line_cursor zp[2]:15 91750.25
byte* print_line_cursor#2 print_line_cursor zp[2]:15 6.00040001E8
byte* print_line_cursor#22 print_line_cursor zp[2]:15 2.001000003E9
byte* print_line_cursor#1 print_line_cursor zp[2]:17 91750.25
byte* print_line_cursor#2 print_line_cursor zp[2]:17 6.00040001E8
byte* print_line_cursor#22 print_line_cursor zp[2]:17 2.001000003E9
void print_ln()
byte* print_screen
byte* print_screen#0 print_screen zp[2]:15 200.2
byte* print_screen#0 print_screen zp[2]:17 200.2
void print_set_screen(byte* print_set_screen::screen)
byte* print_set_screen::screen
byte* print_set_screen::screen#2 screen zp[2]:15 1001.0
byte* print_set_screen::screen#2 screen zp[2]:17 1001.0
void print_str_at(byte* print_str_at::str , byte* print_str_at::at)
byte* print_str_at::at
byte* print_str_at::at#0 at zp[2]:15 1.000000001E9
byte* print_str_at::at#2 at zp[2]:15 1.000000001E9
byte* print_str_at::at#0 at zp[2]:17 1.000000001E9
byte* print_str_at::at#2 at zp[2]:17 1.000000001E9
byte* print_str_at::str
byte* print_str_at::str#0 str zp[2]:11 2.000000002E9
byte* print_str_at::str#1 str zp[2]:11 550001.0
@ -815,9 +808,9 @@ word sgn_u16(word sgn_u16::w)
byte~ sgn_u16::$0 reg byte a 200002.0
byte~ sgn_u16::$1 reg byte a 200002.0
word sgn_u16::return
word sgn_u16::return#0 return zp[2]:19 20002.0
word sgn_u16::return#1 return zp[2]:19 20002.0
word sgn_u16::return#4 return zp[2]:19 5000.5
word sgn_u16::return#0 return zp[2]:35 20002.0
word sgn_u16::return#1 return zp[2]:35 20002.0
word sgn_u16::return#4 return zp[2]:35 5000.5
word sgn_u16::w
word sgn_u16::w#0 w zp[2]:39 20002.0
word sgn_u16::w#1 w zp[2]:39 20002.0
@ -859,52 +852,51 @@ reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#13 dtvSetCpuBankSegment1::cpuBankIdx#1 dtvSetCpuBankSegment1::cpuBankIdx#11 ]
zp[4]:5 [ gfx_init_plane_fill::plane_addr#3 get_plane::return#14 get_plane::return#16 get_plane::return#17 gfx_mode::$20 gfx_mode::plane_a#0 gfx_mode::$34 gfx_mode::plane_b#0 ]
zp[4]:5 [ gfx_init_plane_fill::plane_addr#3 get_plane::return#14 get_plane::return#16 get_plane::return#17 gfx_mode::$20 gfx_mode::plane_a#0 gfx_mode::$31 gfx_mode::plane_b#0 ]
zp[1]:9 [ gfx_init_plane_fill::fill#6 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
zp[1]:10 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 keyboard_events_size#19 keyboard_events_size#107 keyboard_events_size#98 keyboard_events_size#49 keyboard_events_size#28 keyboard_events_size#25 keyboard_events_size#100 keyboard_events_size#106 keyboard_events_size#0 keyboard_events_size#1 keyboard_events_size#3 gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
zp[2]:11 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#0 gfx_init_plane_fill::$5 gfx_init_plane_fill::$4 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 render_preset_name::name#13 print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 gfx_mode::VICII_colors#2 gfx_mode::VICII_colors#3 gfx_mode::VICII_colors#1 gfx_mode::VICII_colors#0 get_VICII_screen::return#11 get_VICII_screen::return#5 get_VICII_screen::return#10 gfx_mode::$82 gfx_mode::$47 gfx_mode::$48 ]
zp[2]:11 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#0 gfx_init_plane_fill::$4 gfx_init_plane_fill::$3 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 render_preset_name::name#13 print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 gfx_mode::VICII_colors#2 gfx_mode::VICII_colors#3 gfx_mode::VICII_colors#1 gfx_mode::VICII_colors#0 get_VICII_screen::return#11 get_VICII_screen::return#5 get_VICII_screen::return#10 gfx_mode::$76 gfx_mode::$41 gfx_mode::$42 ]
reg byte x [ gfx_init_plane_fill::bx#2 gfx_init_plane_fill::bx#1 ]
zp[2]:13 [ memset::num#3 memset::end#0 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 apply_preset::preset#15 print_char_cursor#43 print_char_cursor#2 print_char_cursor#72 print_char_cursor#73 print_char_cursor#44 print_char_cursor#29 gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 gfx_mode::col#2 gfx_mode::col#3 gfx_mode::col#1 ]
zp[2]:15 [ memset::str#4 memset::str#0 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
reg byte x [ memset::c#5 ]
reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ]
zp[2]:15 [ print_str_at::at#2 print_str_at::at#0 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 get_VICII_charset::return#2 get_VICII_charset::return#4 gfx_mode::$83 gfx_mode::$50 form_set_screen::line#2 form_set_screen::line#1 print_set_screen::screen#2 print_line_cursor#22 print_line_cursor#1 print_screen#0 print_line_cursor#2 ]
reg byte a [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[2]:17 [ print_str_at::at#2 print_str_at::at#0 bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 get_VICII_charset::return#2 get_VICII_charset::return#4 gfx_mode::$77 gfx_mode::$44 form_set_screen::line#2 form_set_screen::line#1 print_set_screen::screen#2 print_line_cursor#22 print_line_cursor#1 print_screen#0 print_line_cursor#2 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
reg byte a [ form_control::return#0 ]
reg byte a [ form_mode::$11 ]
reg byte a [ apply_preset::idx#0 ]
reg byte a [ gfx_mode::$18 ]
reg byte x [ gfx_mode::plane_a_offs#0 ]
zp[2]:17 [ gfx_mode::$22 abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
reg byte a [ gfx_mode::$22 ]
reg byte a [ gfx_mode::$23 ]
reg byte a [ gfx_mode::$24 ]
reg byte a [ gfx_mode::$25 ]
zp[2]:19 [ gfx_mode::$26 sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte a [ gfx_mode::$26 ]
reg byte a [ gfx_mode::$27 ]
reg byte a [ gfx_mode::$28 ]
reg byte a [ gfx_mode::$29 ]
reg byte a [ gfx_mode::$30 ]
reg byte a [ gfx_mode::$31 ]
reg byte a [ gfx_mode::$32 ]
reg byte x [ gfx_mode::plane_b_offs#0 ]
reg byte a [ gfx_mode::$33 ]
reg byte a [ gfx_mode::$34 ]
reg byte a [ gfx_mode::$35 ]
reg byte a [ gfx_mode::$36 ]
reg byte a [ gfx_mode::$37 ]
reg byte a [ gfx_mode::$38 ]
reg byte a [ gfx_mode::$39 ]
reg byte a [ gfx_mode::$41 ]
reg byte a [ gfx_mode::$42 ]
reg byte a [ gfx_mode::$43 ]
reg byte a [ gfx_mode::$44 ]
reg byte a [ gfx_mode::$45 ]
reg byte a [ get_VICII_charset::idx#0 ]
reg byte a [ gfx_mode::$45 ]
zp[1]:19 [ gfx_mode::$46 keyboard_event_pressed::keycode#4 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
reg byte a [ gfx_mode::$78 ]
reg byte a [ gfx_mode::$47 ]
reg byte a [ gfx_mode::$49 ]
reg byte a [ gfx_mode::$50 ]
reg byte a [ gfx_mode::$51 ]
zp[1]:21 [ gfx_mode::$52 keyboard_event_pressed::keycode#4 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
reg byte a [ gfx_mode::$84 ]
reg byte a [ gfx_mode::$52 ]
reg byte a [ gfx_mode::$53 ]
reg byte a [ gfx_mode::$54 ]
reg byte a [ gfx_mode::$55 ]
reg byte a [ gfx_mode::$56 ]
reg byte a [ gfx_mode::$57 ]
reg byte a [ gfx_mode::$58 ]
reg byte a [ gfx_mode::$59 ]
reg byte a [ gfx_mode::$60 ]
reg byte a [ gfx_mode::$61 ]
reg byte a [ gfx_mode::$62 ]
reg byte a [ keyboard_event_get::return#3 ]
reg byte a [ gfx_mode::keyboard_event#0 ]
reg byte a [ gfx_init_screen0::$0 ]
@ -914,15 +906,15 @@ reg byte a [ gfx_init_screen1::$0 ]
reg byte a [ gfx_init_screen1::$1 ]
reg byte a [ gfx_init_screen2::$0 ]
reg byte y [ gfx_init_screen2::col#0 ]
zp[1]:22 [ gfx_init_screen2::col2#0 gfx_init_screen0::$1 keyboard_event_scan::row#2 keyboard_event_scan::row#1 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
zp[1]:20 [ gfx_init_screen2::col2#0 gfx_init_screen0::$1 keyboard_event_scan::row#2 keyboard_event_scan::row#1 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
reg byte a [ gfx_init_screen2::$3 ]
reg byte a [ gfx_init_screen2::$4 ]
reg byte a [ gfx_init_screen3::$0 ]
reg byte a [ gfx_init_screen3::$2 ]
reg byte a [ gfx_init_screen3::$3 ]
zp[2]:23 [ bitmap_line::x2#0 gfx_mode::$36 ]
zp[2]:25 [ bitmap_line::y2#0 gfx_mode::$38 ]
zp[2]:27 [ gfx_init_plane_8bppchunky::$5 gfx_mode::$40 memset::str#4 memset::str#0 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::y#15 bitmap_line::y#7 bitmap_line::y#13 bitmap_line::y#4 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
zp[2]:21 [ bitmap_line::x2#0 ]
zp[2]:23 [ bitmap_line::y2#0 ]
zp[2]:25 [ gfx_init_plane_8bppchunky::$5 abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
reg byte a [ gfx_init_plane_8bppchunky::c#0 ]
reg byte a [ gfx_init_plane_charset8::$2 ]
reg byte a [ gfx_init_plane_horisontal::$2 ]
@ -956,11 +948,12 @@ reg byte a [ keyboard_event_scan::$23 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[2]:29 [ bitmap_line::dx#0 form_field_ptr::return#3 form_control::field#0 form_field_ptr::return#0 ]
zp[2]:27 [ bitmap_line::dx#0 ]
zp[2]:29 [ bitmap_line::sx#0 ]
zp[4]:31 [ gfx_init_plane_fill::$0 ]
zp[2]:35 [ gfx_init_plane_fill::$1 bitmap_line::sx#0 ]
reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ]
reg byte y [ form_field_ptr::y#0 ]
zp[2]:35 [ form_field_ptr::line#0 sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[1]:37 [ form_field_ptr::x#0 bitmap_init::$7 keyboard_event_scan::row_scan#0 gfx_init_screen3::$1 ]
reg byte a [ keyboard_matrix_read::return#0 ]
reg byte a [ keyboard_event_pressed::$0 ]
@ -971,6 +964,6 @@ reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
zp[2]:39 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 form_field_ptr::line#0 gfx_mode::$24 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
zp[2]:39 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 form_field_ptr::return#3 form_control::field#0 form_field_ptr::return#0 sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
zp[2]:41 [ bitmap_plot::$0 ]
reg byte x [ bitmap_plot::$1 ]

@ -146,11 +146,11 @@ menu: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400))
// DTV Color Bank
lda #<DTV_COLOR_BANK_DEFAULT/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400))
lda #0
sta DTV_COLOR_BANK_HI
// *DTV_CONTROL = 0
@ -480,11 +480,11 @@ mode_stdchar: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400))
// DTV Color Bank
lda #<DTV_COLOR_BANK_DEFAULT/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400))
lda #0
sta DTV_COLOR_BANK_HI
// *DTV_CONTROL = 0
@ -615,11 +615,11 @@ mode_ecmchar: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400))
// DTV Color Bank
lda #<DTV_COLOR_BANK_DEFAULT/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400))
lda #0
sta DTV_COLOR_BANK_HI
// *DTV_CONTROL = 0
@ -760,11 +760,11 @@ mode_mcchar: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(DTV_COLOR_BANK_DEFAULT/$400))
// DTV Color Bank
lda #<DTV_COLOR_BANK_DEFAULT/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(DTV_COLOR_BANK_DEFAULT/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(DTV_COLOR_BANK_DEFAULT/$400))
lda #0
sta DTV_COLOR_BANK_HI
// *DTV_CONTROL = 0
@ -1049,11 +1049,11 @@ mode_hicolstdchar: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(COLORS/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(COLORS/$400))
// DTV Color Bank
lda #<COLORS/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(COLORS/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(COLORS/$400))
lda #0
sta DTV_COLOR_BANK_HI
// *DTV_CONTROL = DTV_HIGHCOLOR
@ -1179,11 +1179,11 @@ mode_hicolecmchar: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(COLORS/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(COLORS/$400))
// DTV Color Bank
lda #<COLORS/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(COLORS/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(COLORS/$400))
lda #0
sta DTV_COLOR_BANK_HI
// *DTV_CONTROL = DTV_HIGHCOLOR
@ -1320,11 +1320,11 @@ mode_hicolmcchar: {
// DTV Graphics Bank
lda #0
sta DTV_GRAPHICS_VIC_BANK
// *DTV_COLOR_BANK_LO = <((word)(COLORS/$400))
// *DTV_COLOR_BANK_LO = BYTE0((word)(COLORS/$400))
// DTV Color Bank
lda #<COLORS/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >((word)(COLORS/$400))
// *DTV_COLOR_BANK_HI = BYTE1((word)(COLORS/$400))
lda #0
sta DTV_COLOR_BANK_HI
// *DTV_CONTROL = DTV_HIGHCOLOR
@ -1462,11 +1462,11 @@ mode_sixsfred2: {
// *VICII_CONTROL2 = VICII_MCM|VICII_CSEL
lda #VICII_MCM|VICII_CSEL
sta VICII_CONTROL2
// *DTV_PLANEA_START_LO = <PLANEA
// *DTV_PLANEA_START_LO = BYTE0(PLANEA)
// Linear Graphics Plane A Counter
lda #0
sta DTV_PLANEA_START_LO
// *DTV_PLANEA_START_MI = >PLANEA
// *DTV_PLANEA_START_MI = BYTE1(PLANEA)
lda #>PLANEA
sta DTV_PLANEA_START_MI
// *DTV_PLANEA_START_HI = 0
@ -1480,10 +1480,10 @@ mode_sixsfred2: {
sta DTV_PLANEA_MODULO_LO
// *DTV_PLANEA_MODULO_HI = 0
sta DTV_PLANEA_MODULO_HI
// *DTV_PLANEB_START_LO = <PLANEB
// *DTV_PLANEB_START_LO = BYTE0(PLANEB)
// Linear Graphics Plane B Counter
sta DTV_PLANEB_START_LO
// *DTV_PLANEB_START_MI = >PLANEB
// *DTV_PLANEB_START_MI = BYTE1(PLANEB)
lda #>PLANEB
sta DTV_PLANEB_START_MI
// *DTV_PLANEB_START_HI = 0
@ -1497,11 +1497,11 @@ mode_sixsfred2: {
sta DTV_PLANEB_MODULO_LO
// *DTV_PLANEB_MODULO_HI = 0
sta DTV_PLANEB_MODULO_HI
// *DTV_COLOR_BANK_LO = <(COLORS/$400)
// *DTV_COLOR_BANK_LO = BYTE0(COLORS/$400)
// DTV Color Bank
lda #<COLORS/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >(COLORS/$400)
// *DTV_COLOR_BANK_HI = BYTE1(COLORS/$400)
lda #0
sta DTV_COLOR_BANK_HI
tax
@ -1662,11 +1662,11 @@ mode_twoplanebitmap: {
// *VICII_CONTROL2 = VICII_CSEL
lda #VICII_CSEL
sta VICII_CONTROL2
// *DTV_PLANEA_START_LO = <PLANEA
// *DTV_PLANEA_START_LO = BYTE0(PLANEA)
// Linear Graphics Plane A Counter
lda #0
sta DTV_PLANEA_START_LO
// *DTV_PLANEA_START_MI = >PLANEA
// *DTV_PLANEA_START_MI = BYTE1(PLANEA)
lda #>PLANEA
sta DTV_PLANEA_START_MI
// *DTV_PLANEA_START_HI = 0
@ -1680,10 +1680,10 @@ mode_twoplanebitmap: {
sta DTV_PLANEA_MODULO_LO
// *DTV_PLANEA_MODULO_HI = 0
sta DTV_PLANEA_MODULO_HI
// *DTV_PLANEB_START_LO = <PLANEB
// *DTV_PLANEB_START_LO = BYTE0(PLANEB)
// Linear Graphics Plane B Counter
sta DTV_PLANEB_START_LO
// *DTV_PLANEB_START_MI = >PLANEB
// *DTV_PLANEB_START_MI = BYTE1(PLANEB)
lda #>PLANEB
sta DTV_PLANEB_START_MI
// *DTV_PLANEB_START_HI = 0
@ -1697,11 +1697,11 @@ mode_twoplanebitmap: {
sta DTV_PLANEB_MODULO_LO
// *DTV_PLANEB_MODULO_HI = 0
sta DTV_PLANEB_MODULO_HI
// *DTV_COLOR_BANK_LO = <(COLORS/$400)
// *DTV_COLOR_BANK_LO = BYTE0(COLORS/$400)
// DTV Color Bank
lda #<COLORS/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >(COLORS/$400)
// *DTV_COLOR_BANK_HI = BYTE1(COLORS/$400)
lda #0
sta DTV_COLOR_BANK_HI
tax
@ -1873,11 +1873,11 @@ mode_sixsfred: {
// *VICII_CONTROL2 = VICII_MCM|VICII_CSEL
lda #VICII_MCM|VICII_CSEL
sta VICII_CONTROL2
// *DTV_PLANEA_START_LO = <PLANEA
// *DTV_PLANEA_START_LO = BYTE0(PLANEA)
// Linear Graphics Plane A Counter
lda #0
sta DTV_PLANEA_START_LO
// *DTV_PLANEA_START_MI = >PLANEA
// *DTV_PLANEA_START_MI = BYTE1(PLANEA)
lda #>PLANEA
sta DTV_PLANEA_START_MI
// *DTV_PLANEA_START_HI = 0
@ -1891,10 +1891,10 @@ mode_sixsfred: {
sta DTV_PLANEA_MODULO_LO
// *DTV_PLANEA_MODULO_HI = 0
sta DTV_PLANEA_MODULO_HI
// *DTV_PLANEB_START_LO = <PLANEB
// *DTV_PLANEB_START_LO = BYTE0(PLANEB)
// Linear Graphics Plane B Counter
sta DTV_PLANEB_START_LO
// *DTV_PLANEB_START_MI = >PLANEB
// *DTV_PLANEB_START_MI = BYTE1(PLANEB)
lda #>PLANEB
sta DTV_PLANEB_START_MI
// *DTV_PLANEB_START_HI = 0
@ -1908,11 +1908,11 @@ mode_sixsfred: {
sta DTV_PLANEB_MODULO_LO
// *DTV_PLANEB_MODULO_HI = 0
sta DTV_PLANEB_MODULO_HI
// *DTV_COLOR_BANK_LO = <(COLORS/$400)
// *DTV_COLOR_BANK_LO = BYTE0(COLORS/$400)
// DTV Color Bank
lda #<COLORS/$400
sta DTV_COLOR_BANK_LO
// *DTV_COLOR_BANK_HI = >(COLORS/$400)
// *DTV_COLOR_BANK_HI = BYTE1(COLORS/$400)
lda #0
sta DTV_COLOR_BANK_HI
tax
@ -2066,11 +2066,11 @@ mode_8bpppixelcell: {
// *VICII_CONTROL2 = VICII_MCM|VICII_CSEL
lda #VICII_MCM|VICII_CSEL
sta VICII_CONTROL2
// *DTV_PLANEA_START_LO = <PLANEA
// *DTV_PLANEA_START_LO = BYTE0(PLANEA)
// Linear Graphics Plane A Counter
lda #0
sta DTV_PLANEA_START_LO
// *DTV_PLANEA_START_MI = >PLANEA
// *DTV_PLANEA_START_MI = BYTE1(PLANEA)
lda #>PLANEA
sta DTV_PLANEA_START_MI
// *DTV_PLANEA_START_HI = 0
@ -2084,10 +2084,10 @@ mode_8bpppixelcell: {
sta DTV_PLANEA_MODULO_LO
// *DTV_PLANEA_MODULO_HI = 0
sta DTV_PLANEA_MODULO_HI
// *DTV_PLANEB_START_LO = <PLANEB
// *DTV_PLANEB_START_LO = BYTE0(PLANEB)
// Linear Graphics Plane B Counter
sta DTV_PLANEB_START_LO
// *DTV_PLANEB_START_MI = >PLANEB
// *DTV_PLANEB_START_MI = BYTE1(PLANEB)
lda #>PLANEB
sta DTV_PLANEB_START_MI
// *DTV_PLANEB_START_HI = 0
@ -2250,13 +2250,13 @@ mode_8bppchunkybmm: {
// *VICII_CONTROL2 = VICII_MCM | VICII_CSEL
lda #VICII_MCM|VICII_CSEL
sta VICII_CONTROL2
// *DTV_PLANEB_START_LO = < < PLANEB
// *DTV_PLANEB_START_LO = BYTE0(PLANEB)
// Linear Graphics Plane B Counter
lda #0
sta DTV_PLANEB_START_LO
// *DTV_PLANEB_START_MI = > < PLANEB
// *DTV_PLANEB_START_MI = BYTE1(PLANEB)
sta DTV_PLANEB_START_MI
// *DTV_PLANEB_START_HI = < > PLANEB
// *DTV_PLANEB_START_HI = BYTE2(PLANEB)
lda #<PLANEB>>$10
sta DTV_PLANEB_START_HI
// *DTV_PLANEB_STEP = 8
@ -2602,15 +2602,15 @@ bitmap_init: {
// y&$7
lda #7
sax.z __7
// <yoffs
// BYTE0(yoffs)
lda.z yoffs
// y&$7 | <yoffs
// y&$7 | BYTE0(yoffs)
ora.z __7
// bitmap_plot_ylo[y] = y&$7 | <yoffs
// bitmap_plot_ylo[y] = y&$7 | BYTE0(yoffs)
sta bitmap_plot_ylo,x
// >yoffs
// BYTE1(yoffs)
lda.z yoffs+1
// bitmap_plot_yhi[y] = >yoffs
// bitmap_plot_yhi[y] = BYTE1(yoffs)
sta bitmap_plot_yhi,x
// if((y&$7)==7)
lda #7
@ -2757,7 +2757,7 @@ bitmap_line: {
sta.z e
__b6:
// bitmap_plot(x,(char)y)
lda.z y
ldx.z y
jsr bitmap_plot
// y += sy
lda.z y
@ -2809,7 +2809,7 @@ bitmap_line: {
bne __b6
__b3:
// bitmap_plot(x,(char)y)
lda.z y
ldx.z y
jsr bitmap_plot
// }
rts
@ -2823,7 +2823,7 @@ bitmap_line: {
sta.z e1
__b9:
// bitmap_plot(x,(char)y)
lda.z y
ldx.z y
jsr bitmap_plot
// x += sx
lda.z x
@ -2876,7 +2876,7 @@ bitmap_line: {
jmp __b3
__b4:
// bitmap_plot(x,(char)y)
lda.z y1
ldx.z y1
jsr bitmap_plot
rts
}
@ -2901,11 +2901,11 @@ dtvSetCpuBankSegment1: {
abs_u16: {
.label w = $f
.label return = $f
// >w
// BYTE1(w)
lda.z w+1
// >w&0x80
// BYTE1(w)&0x80
and #$80
// if(>w&0x80)
// if(BYTE1(w)&0x80)
cmp #0
bne __b1
rts
@ -2927,11 +2927,11 @@ abs_u16: {
sgn_u16: {
.label w = $21
.label return = $11
// >w
// BYTE1(w)
lda.z w+1
// >w&0x80
// BYTE1(w)&0x80
and #$80
// if(>w&0x80)
// if(BYTE1(w)&0x80)
cmp #0
bne __b1
lda #<1
@ -2947,16 +2947,15 @@ sgn_u16: {
rts
}
// Plot a single dot in the bitmap
// bitmap_plot(word zp(9) x, byte register(A) y)
// bitmap_plot(word zp(9) x, byte register(X) y)
bitmap_plot: {
.label __0 = $23
.label plotter = $21
.label x = 9
// char* plotter = (char*) { bitmap_plot_yhi[y], bitmap_plot_ylo[y] }
tay
lda bitmap_plot_yhi,y
lda bitmap_plot_yhi,x
sta.z plotter+1
lda bitmap_plot_ylo,y
lda bitmap_plot_ylo,x
sta.z plotter
// x & $fff8
lda.z x
@ -2973,9 +2972,9 @@ bitmap_plot: {
lda.z plotter+1
adc.z __0+1
sta.z plotter+1
// <x
// BYTE0(x)
ldx.z x
// *plotter |= bitmap_plot_bit[<x]
// *plotter |= bitmap_plot_bit[BYTE0(x)]
lda bitmap_plot_bit,x
ldy #0
ora (plotter),y

@ -18,7 +18,7 @@ main::@2: scope:[main] from main::@1
void menu()
menu: scope:[menu] from main::@2
[7] *DTV_GRAPHICS_VIC_BANK = 0
[8] *DTV_COLOR_BANK_LO = <(word)DTV_COLOR_BANK_DEFAULT/$400
[8] *DTV_COLOR_BANK_LO = byte0 (word)DTV_COLOR_BANK_DEFAULT/$400
[9] *DTV_COLOR_BANK_HI = 0
[10] *DTV_CONTROL = 0
[11] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
@ -280,7 +280,7 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p
void mode_stdchar()
mode_stdchar: scope:[mode_stdchar] from menu::@17
[143] *DTV_GRAPHICS_VIC_BANK = 0
[144] *DTV_COLOR_BANK_LO = <(word)DTV_COLOR_BANK_DEFAULT/$400
[144] *DTV_COLOR_BANK_LO = byte0 (word)DTV_COLOR_BANK_DEFAULT/$400
[145] *DTV_COLOR_BANK_HI = 0
[146] *DTV_CONTROL = 0
[147] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
@ -336,7 +336,7 @@ mode_stdchar::@return: scope:[mode_stdchar] from mode_stdchar::@6
void mode_ecmchar()
mode_ecmchar: scope:[mode_ecmchar] from menu::@18
[177] *DTV_GRAPHICS_VIC_BANK = 0
[178] *DTV_COLOR_BANK_LO = <(word)DTV_COLOR_BANK_DEFAULT/$400
[178] *DTV_COLOR_BANK_LO = byte0 (word)DTV_COLOR_BANK_DEFAULT/$400
[179] *DTV_COLOR_BANK_HI = 0
[180] *DTV_CONTROL = 0
[181] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
@ -395,7 +395,7 @@ mode_ecmchar::@return: scope:[mode_ecmchar] from mode_ecmchar::@6
void mode_mcchar()
mode_mcchar: scope:[mode_mcchar] from menu::@19
[214] *DTV_GRAPHICS_VIC_BANK = 0
[215] *DTV_COLOR_BANK_LO = <(word)DTV_COLOR_BANK_DEFAULT/$400
[215] *DTV_COLOR_BANK_LO = byte0 (word)DTV_COLOR_BANK_DEFAULT/$400
[216] *DTV_COLOR_BANK_HI = 0
[217] *DTV_CONTROL = 0
[218] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
@ -521,7 +521,7 @@ mode_stdbitmap::@10: scope:[mode_stdbitmap] from mode_stdbitmap::@7
void mode_hicolstdchar()
mode_hicolstdchar: scope:[mode_hicolstdchar] from menu::@21
[290] *DTV_GRAPHICS_VIC_BANK = 0
[291] *DTV_COLOR_BANK_LO = <(word)mode_hicolstdchar::COLORS/$400
[291] *DTV_COLOR_BANK_LO = byte0 (word)mode_hicolstdchar::COLORS/$400
[292] *DTV_COLOR_BANK_HI = 0
[293] *DTV_CONTROL = DTV_HIGHCOLOR
[294] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
@ -575,7 +575,7 @@ mode_hicolstdchar::@return: scope:[mode_hicolstdchar] from mode_hicolstdchar::@
void mode_hicolecmchar()
mode_hicolecmchar: scope:[mode_hicolecmchar] from menu::@22
[322] *DTV_GRAPHICS_VIC_BANK = 0
[323] *DTV_COLOR_BANK_LO = <(word)mode_hicolecmchar::COLORS/$400
[323] *DTV_COLOR_BANK_LO = byte0 (word)mode_hicolecmchar::COLORS/$400
[324] *DTV_COLOR_BANK_HI = 0
[325] *DTV_CONTROL = DTV_HIGHCOLOR
[326] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
@ -632,7 +632,7 @@ mode_hicolecmchar::@return: scope:[mode_hicolecmchar] from mode_hicolecmchar::@
void mode_hicolmcchar()
mode_hicolmcchar: scope:[mode_hicolmcchar] from menu::@23
[357] *DTV_GRAPHICS_VIC_BANK = 0
[358] *DTV_COLOR_BANK_LO = <(word)mode_hicolmcchar::COLORS/$400
[358] *DTV_COLOR_BANK_LO = byte0 (word)mode_hicolmcchar::COLORS/$400
[359] *DTV_COLOR_BANK_HI = 0
[360] *DTV_CONTROL = DTV_HIGHCOLOR
[361] *((byte*)CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) = 3
@ -691,18 +691,18 @@ mode_sixsfred2: scope:[mode_sixsfred2] from menu::@24
[392] *VICII_CONTROL1 = VICII_ECM|VICII_BMM|VICII_DEN|VICII_RSEL|3
[393] *VICII_CONTROL2 = VICII_MCM|VICII_CSEL
[394] *DTV_PLANEA_START_LO = 0
[395] *DTV_PLANEA_START_MI = >mode_sixsfred2::PLANEA
[395] *DTV_PLANEA_START_MI = byte1 mode_sixsfred2::PLANEA
[396] *DTV_PLANEA_START_HI = 0
[397] *DTV_PLANEA_STEP = 1
[398] *DTV_PLANEA_MODULO_LO = 0
[399] *DTV_PLANEA_MODULO_HI = 0
[400] *DTV_PLANEB_START_LO = 0
[401] *DTV_PLANEB_START_MI = >mode_sixsfred2::PLANEB
[401] *DTV_PLANEB_START_MI = byte1 mode_sixsfred2::PLANEB
[402] *DTV_PLANEB_START_HI = 0
[403] *DTV_PLANEB_STEP = 1
[404] *DTV_PLANEB_MODULO_LO = 0
[405] *DTV_PLANEB_MODULO_HI = 0
[406] *DTV_COLOR_BANK_LO = <mode_sixsfred2::COLORS/$400
[406] *DTV_COLOR_BANK_LO = byte0 mode_sixsfred2::COLORS/$400
[407] *DTV_COLOR_BANK_HI = 0
to:mode_sixsfred2::@1
mode_sixsfred2::@1: scope:[mode_sixsfred2] from mode_sixsfred2 mode_sixsfred2::@1
@ -782,18 +782,18 @@ mode_twoplanebitmap: scope:[mode_twoplanebitmap] from menu::@25
[447] *VICII_CONTROL1 = VICII_ECM|VICII_BMM|VICII_DEN|VICII_RSEL|3
[448] *VICII_CONTROL2 = VICII_CSEL
[449] *DTV_PLANEA_START_LO = 0
[450] *DTV_PLANEA_START_MI = >mode_twoplanebitmap::PLANEA
[450] *DTV_PLANEA_START_MI = byte1 mode_twoplanebitmap::PLANEA
[451] *DTV_PLANEA_START_HI = 0
[452] *DTV_PLANEA_STEP = 1
[453] *DTV_PLANEA_MODULO_LO = 0
[454] *DTV_PLANEA_MODULO_HI = 0
[455] *DTV_PLANEB_START_LO = 0
[456] *DTV_PLANEB_START_MI = >mode_twoplanebitmap::PLANEB
[456] *DTV_PLANEB_START_MI = byte1 mode_twoplanebitmap::PLANEB
[457] *DTV_PLANEB_START_HI = 0
[458] *DTV_PLANEB_STEP = 1
[459] *DTV_PLANEB_MODULO_LO = 0
[460] *DTV_PLANEB_MODULO_HI = 0
[461] *DTV_COLOR_BANK_LO = <mode_twoplanebitmap::COLORS/$400
[461] *DTV_COLOR_BANK_LO = byte0 mode_twoplanebitmap::COLORS/$400
[462] *DTV_COLOR_BANK_HI = 0
to:mode_twoplanebitmap::@1
mode_twoplanebitmap::@1: scope:[mode_twoplanebitmap] from mode_twoplanebitmap mode_twoplanebitmap::@1
@ -884,18 +884,18 @@ mode_sixsfred: scope:[mode_sixsfred] from menu::@26
[507] *VICII_CONTROL1 = VICII_ECM|VICII_BMM|VICII_DEN|VICII_RSEL|3
[508] *VICII_CONTROL2 = VICII_MCM|VICII_CSEL
[509] *DTV_PLANEA_START_LO = 0
[510] *DTV_PLANEA_START_MI = >mode_sixsfred::PLANEA
[510] *DTV_PLANEA_START_MI = byte1 mode_sixsfred::PLANEA
[511] *DTV_PLANEA_START_HI = 0
[512] *DTV_PLANEA_STEP = 1
[513] *DTV_PLANEA_MODULO_LO = 0
[514] *DTV_PLANEA_MODULO_HI = 0
[515] *DTV_PLANEB_START_LO = 0
[516] *DTV_PLANEB_START_MI = >mode_sixsfred::PLANEB
[516] *DTV_PLANEB_START_MI = byte1 mode_sixsfred::PLANEB
[517] *DTV_PLANEB_START_HI = 0
[518] *DTV_PLANEB_STEP = 1
[519] *DTV_PLANEB_MODULO_LO = 0
[520] *DTV_PLANEB_MODULO_HI = 0
[521] *DTV_COLOR_BANK_LO = <mode_sixsfred::COLORS/$400
[521] *DTV_COLOR_BANK_LO = byte0 mode_sixsfred::COLORS/$400
[522] *DTV_COLOR_BANK_HI = 0
to:mode_sixsfred::@1
mode_sixsfred::@1: scope:[mode_sixsfred] from mode_sixsfred mode_sixsfred::@1
@ -973,13 +973,13 @@ mode_8bpppixelcell: scope:[mode_8bpppixelcell] from menu::@27
[560] *VICII_CONTROL1 = VICII_ECM|VICII_DEN|VICII_RSEL|3
[561] *VICII_CONTROL2 = VICII_MCM|VICII_CSEL
[562] *DTV_PLANEA_START_LO = 0
[563] *DTV_PLANEA_START_MI = >mode_8bpppixelcell::PLANEA
[563] *DTV_PLANEA_START_MI = byte1 mode_8bpppixelcell::PLANEA
[564] *DTV_PLANEA_START_HI = 0
[565] *DTV_PLANEA_STEP = 1
[566] *DTV_PLANEA_MODULO_LO = 0
[567] *DTV_PLANEA_MODULO_HI = 0
[568] *DTV_PLANEB_START_LO = 0
[569] *DTV_PLANEB_START_MI = >mode_8bpppixelcell::PLANEB
[569] *DTV_PLANEB_START_MI = byte1 mode_8bpppixelcell::PLANEB
[570] *DTV_PLANEB_START_HI = 0
[571] *DTV_PLANEB_STEP = 0
[572] *DTV_PLANEB_MODULO_LO = 0
@ -1072,7 +1072,7 @@ mode_8bppchunkybmm: scope:[mode_8bppchunkybmm] from menu::@28
[616] *VICII_CONTROL2 = VICII_MCM|VICII_CSEL
[617] *DTV_PLANEB_START_LO = 0
[618] *DTV_PLANEB_START_MI = 0
[619] *DTV_PLANEB_START_HI = <>mode_8bppchunkybmm::PLANEB
[619] *DTV_PLANEB_START_HI = byte2 mode_8bppchunkybmm::PLANEB
[620] *DTV_PLANEB_STEP = 8
[621] *DTV_PLANEB_MODULO_LO = 0
[622] *DTV_PLANEB_MODULO_HI = 0
@ -1325,10 +1325,10 @@ bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4
[735] bitmap_init::yoffs#2 = phi( bitmap_init::@2/mode_stdbitmap::BITMAP, bitmap_init::@4/bitmap_init::yoffs#4 )
[735] bitmap_init::y#2 = phi( bitmap_init::@2/0, bitmap_init::@4/bitmap_init::y#1 )
[736] bitmap_init::$7 = bitmap_init::y#2 & 7
[737] bitmap_init::$4 = < bitmap_init::yoffs#2
[737] bitmap_init::$4 = byte0 bitmap_init::yoffs#2
[738] bitmap_init::$5 = bitmap_init::$7 | bitmap_init::$4
[739] bitmap_plot_ylo[bitmap_init::y#2] = bitmap_init::$5
[740] bitmap_init::$6 = > bitmap_init::yoffs#2
[740] bitmap_init::$6 = byte1 bitmap_init::yoffs#2
[741] bitmap_plot_yhi[bitmap_init::y#2] = bitmap_init::$6
[742] if(bitmap_init::$7!=7) goto bitmap_init::@4
to:bitmap_init::@5
@ -1470,7 +1470,7 @@ dtvSetCpuBankSegment1::@return: scope:[dtvSetCpuBankSegment1] from dtvSetCpuBan
word abs_u16(word abs_u16::w)
abs_u16: scope:[abs_u16] from bitmap_line bitmap_line::@12
[808] abs_u16::w#2 = phi( bitmap_line/abs_u16::w#0, bitmap_line::@12/abs_u16::w#1 )
[809] abs_u16::$0 = > abs_u16::w#2
[809] abs_u16::$0 = byte1 abs_u16::w#2
[810] abs_u16::$1 = abs_u16::$0 & $80
[811] if(0!=abs_u16::$1) goto abs_u16::@1
to:abs_u16::@return
@ -1485,7 +1485,7 @@ abs_u16::@return: scope:[abs_u16] from abs_u16 abs_u16::@1
word sgn_u16(word sgn_u16::w)
sgn_u16: scope:[sgn_u16] from bitmap_line::@1 bitmap_line::@14
[815] sgn_u16::w#2 = phi( bitmap_line::@1/sgn_u16::w#0, bitmap_line::@14/sgn_u16::w#1 )
[816] sgn_u16::$0 = > sgn_u16::w#2
[816] sgn_u16::$0 = byte1 sgn_u16::w#2
[817] sgn_u16::$1 = sgn_u16::$0 & $80
[818] if(0!=sgn_u16::$1) goto sgn_u16::@1
to:sgn_u16::@return
@ -1504,7 +1504,7 @@ bitmap_plot: scope:[bitmap_plot] from bitmap_line::@3 bitmap_line::@4 bitmap_li
[823] bitmap_plot::plotter#0 = bitmap_plot_yhi[bitmap_plot::y#4] w= bitmap_plot_ylo[bitmap_plot::y#4]
[824] bitmap_plot::$0 = bitmap_plot::x#4 & $fff8
[825] bitmap_plot::plotter#1 = (byte*)bitmap_plot::plotter#0 + bitmap_plot::$0
[826] bitmap_plot::$1 = < bitmap_plot::x#4
[826] bitmap_plot::$1 = byte0 bitmap_plot::x#4
[827] *bitmap_plot::plotter#1 = *bitmap_plot::plotter#1 | bitmap_plot_bit[bitmap_plot::$1]
to:bitmap_plot::@return
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot

File diff suppressed because one or more lines are too long

@ -175,11 +175,11 @@ word bitmap_plot::x#2 x zp[2]:9 1000001.0
word bitmap_plot::x#3 x zp[2]:9 1.000000001E9
word bitmap_plot::x#4 x zp[2]:9 5.5005000015E9
byte bitmap_plot::y
byte bitmap_plot::y#0 reg byte a 2000002.0
byte bitmap_plot::y#1 reg byte a 2.000000002E9
byte bitmap_plot::y#2 reg byte a 2000002.0
byte bitmap_plot::y#3 reg byte a 2.000000002E9
byte bitmap_plot::y#4 reg byte a 2.2002000006E10
byte bitmap_plot::y#0 reg byte x 2000002.0
byte bitmap_plot::y#1 reg byte x 2.000000002E9
byte bitmap_plot::y#2 reg byte x 2000002.0
byte bitmap_plot::y#3 reg byte x 2.000000002E9
byte bitmap_plot::y#4 reg byte x 2.2002000006E10
constant const byte* bitmap_plot_bit[$100] = { fill( $100, 0) }
constant const byte* bitmap_plot_yhi[$100] = { fill( $100, 0) }
constant const byte* bitmap_plot_ylo[$100] = { fill( $100, 0) }
@ -775,7 +775,7 @@ zp[2]:13 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
zp[2]:15 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 memset::num#3 memset::end#0 mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 mode_8bpppixelcell::chargen#2 mode_8bpppixelcell::chargen#4 mode_8bpppixelcell::chargen#1 mode_sixsfred::gfxb#2 mode_sixsfred::gfxb#3 mode_sixsfred::gfxb#1 mode_twoplanebitmap::col#2 mode_twoplanebitmap::col#3 mode_twoplanebitmap::col#1 mode_sixsfred2::gfxa#2 mode_sixsfred2::gfxa#3 mode_sixsfred2::gfxa#1 mode_hicolmcchar::col#2 mode_hicolmcchar::col#3 mode_hicolmcchar::col#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolstdchar::col#2 mode_hicolstdchar::col#3 mode_hicolstdchar::col#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_ecmchar::col#2 mode_ecmchar::col#3 mode_ecmchar::col#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 ]
zp[2]:17 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
reg byte a [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
reg byte a [ keyboard_key_pressed::return#2 ]
reg byte a [ menu::$5 ]
reg byte a [ keyboard_key_pressed::return#24 ]