mirror of
https://github.com/irmen/prog8.git
synced 2024-10-21 19:24:48 +00:00
fixing new comparisons
This commit is contained in:
parent
f4bf00ad31
commit
4598a83e8e
@ -554,7 +554,7 @@ class AsmGen6502Internal (
|
|||||||
translateCompareAndJumpIfTrue(condition, jump)
|
translateCompareAndJumpIfTrue(condition, jump)
|
||||||
} else {
|
} else {
|
||||||
val endLabel = makeLabel("if_end")
|
val endLabel = makeLabel("if_end")
|
||||||
translateCompareAndJumpIfFalse(condition, endLabel)
|
translateCompareOrJumpIfFalse(condition, endLabel)
|
||||||
translate(stmt.ifScope)
|
translate(stmt.ifScope)
|
||||||
out(endLabel)
|
out(endLabel)
|
||||||
}
|
}
|
||||||
@ -562,7 +562,7 @@ class AsmGen6502Internal (
|
|||||||
// both true and else parts
|
// both true and else parts
|
||||||
val elseLabel = makeLabel("if_else")
|
val elseLabel = makeLabel("if_else")
|
||||||
val endLabel = makeLabel("if_end")
|
val endLabel = makeLabel("if_end")
|
||||||
translateCompareAndJumpIfFalse(condition, elseLabel)
|
translateCompareOrJumpIfFalse(condition, elseLabel)
|
||||||
translate(stmt.ifScope)
|
translate(stmt.ifScope)
|
||||||
jmp(endLabel)
|
jmp(endLabel)
|
||||||
out(elseLabel)
|
out(elseLabel)
|
||||||
@ -576,6 +576,7 @@ class AsmGen6502Internal (
|
|||||||
if (stmt.elseScope.children.isEmpty()) {
|
if (stmt.elseScope.children.isEmpty()) {
|
||||||
val jump = stmt.ifScope.children.singleOrNull()
|
val jump = stmt.ifScope.children.singleOrNull()
|
||||||
if (jump is PtJump) {
|
if (jump is PtJump) {
|
||||||
|
// jump somewhere if X!=0
|
||||||
val label = when {
|
val label = when {
|
||||||
jump.generatedLabel!=null -> jump.generatedLabel!!
|
jump.generatedLabel!=null -> jump.generatedLabel!!
|
||||||
jump.identifier!=null -> asmSymbolName(jump.identifier!!)
|
jump.identifier!=null -> asmSymbolName(jump.identifier!!)
|
||||||
@ -583,15 +584,16 @@ class AsmGen6502Internal (
|
|||||||
else -> throw AssemblyError("weird jump")
|
else -> throw AssemblyError("weird jump")
|
||||||
}
|
}
|
||||||
when(stmt.condition.type) {
|
when(stmt.condition.type) {
|
||||||
in WordDatatypes -> translateWordNotEqualsJump(stmt.condition, zero, leftConst, zero, label)
|
in WordDatatypes -> translateWordEqualsOrJumpElsewhere(stmt.condition, zero, leftConst, zero, label)
|
||||||
in ByteDatatypes -> translateByteNotEqualsJump(stmt.condition, zero, leftConst, zero, label)
|
in ByteDatatypes -> translateByteEqualsOrJumpElsewhere(stmt.condition, zero, leftConst, zero, label)
|
||||||
else -> throw AssemblyError("weird condition dt")
|
else -> throw AssemblyError("weird condition dt")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// skip the true block (=jump to end label) if X==0
|
||||||
val endLabel = makeLabel("if_end")
|
val endLabel = makeLabel("if_end")
|
||||||
when(stmt.condition.type) {
|
when(stmt.condition.type) {
|
||||||
in WordDatatypes -> translateWordNotEqualsJump(stmt.condition, zero, leftConst, zero, endLabel)
|
in WordDatatypes -> translateWordNotEqualsOrJumpElsewhere(stmt.condition, zero, leftConst, zero, endLabel)
|
||||||
in ByteDatatypes -> translateByteNotEqualsJump(stmt.condition, zero, leftConst, zero, endLabel)
|
in ByteDatatypes -> translateByteNotEqualsOrJumpElsewhere(stmt.condition, zero, leftConst, zero, endLabel)
|
||||||
else -> throw AssemblyError("weird condition dt")
|
else -> throw AssemblyError("weird condition dt")
|
||||||
}
|
}
|
||||||
translate(stmt.ifScope)
|
translate(stmt.ifScope)
|
||||||
@ -602,8 +604,8 @@ class AsmGen6502Internal (
|
|||||||
val elseLabel = makeLabel("if_else")
|
val elseLabel = makeLabel("if_else")
|
||||||
val endLabel = makeLabel("if_end")
|
val endLabel = makeLabel("if_end")
|
||||||
when(stmt.condition.type) {
|
when(stmt.condition.type) {
|
||||||
in WordDatatypes -> translateWordEqualsJump(stmt.condition, zero, leftConst, zero, elseLabel)
|
in WordDatatypes -> translateWordNotEqualsOrJumpElsewhere(stmt.condition, zero, leftConst, zero, elseLabel)
|
||||||
in ByteDatatypes -> translateByteEqualsJump(stmt.condition, zero, leftConst, zero, elseLabel)
|
in ByteDatatypes -> translateByteNotEqualsOrJumpElsewhere(stmt.condition, zero, leftConst, zero, elseLabel)
|
||||||
else -> throw AssemblyError("weird condition dt")
|
else -> throw AssemblyError("weird condition dt")
|
||||||
}
|
}
|
||||||
translate(stmt.ifScope)
|
translate(stmt.ifScope)
|
||||||
@ -1172,15 +1174,16 @@ $repeatLabel lda $counterVar
|
|||||||
jump.address!=null -> jump.address!!.toHex()
|
jump.address!=null -> jump.address!!.toHex()
|
||||||
else -> throw AssemblyError("weird jump")
|
else -> throw AssemblyError("weird jump")
|
||||||
}
|
}
|
||||||
if (rightConstVal!=null && rightConstVal.number == 0.0)
|
if (rightConstVal!=null && rightConstVal.number == 0.0) {
|
||||||
testZeroAndJump(left, invertedComparisonOperator, label)
|
testZeroOrJumpElsewhere(left, invertedComparisonOperator, label)
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
val leftConstVal = left as? PtNumber
|
val leftConstVal = left as? PtNumber
|
||||||
testNonzeroComparisonAndJump(left, invertedComparisonOperator, right, label, leftConstVal, rightConstVal)
|
testNonzeroComparisonOrJumpElsewhere(left, invertedComparisonOperator, right, label, leftConstVal, rightConstVal)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateCompareAndJumpIfFalse(expr: PtBinaryExpression, jumpIfFalseLabel: String) {
|
private fun translateCompareOrJumpIfFalse(expr: PtBinaryExpression, jumpIfFalseLabel: String) {
|
||||||
val left = expr.left
|
val left = expr.left
|
||||||
val right = expr.right
|
val right = expr.right
|
||||||
val operator = expr.operator
|
val operator = expr.operator
|
||||||
@ -1188,19 +1191,19 @@ $repeatLabel lda $counterVar
|
|||||||
val rightConstVal = right as? PtNumber
|
val rightConstVal = right as? PtNumber
|
||||||
|
|
||||||
if (rightConstVal!=null && rightConstVal.number == 0.0)
|
if (rightConstVal!=null && rightConstVal.number == 0.0)
|
||||||
testZeroAndJump(left, operator, jumpIfFalseLabel)
|
testZeroOrJumpElsewhere(left, operator, jumpIfFalseLabel)
|
||||||
else
|
else
|
||||||
testNonzeroComparisonAndJump(left, operator, right, jumpIfFalseLabel, leftConstVal, rightConstVal)
|
testNonzeroComparisonOrJumpElsewhere(left, operator, right, jumpIfFalseLabel, leftConstVal, rightConstVal)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun testZeroAndJump(
|
private fun testZeroOrJumpElsewhere(
|
||||||
left: PtExpression,
|
left: PtExpression,
|
||||||
operator: String,
|
operator: String,
|
||||||
jumpIfFalseLabel: String
|
jumpIfFalseLabel: String
|
||||||
) {
|
) {
|
||||||
val dt = left.type
|
val dt = left.type
|
||||||
if(dt in IntegerDatatypes && left is PtIdentifier)
|
if(dt in IntegerDatatypes && left is PtIdentifier)
|
||||||
return testVariableZeroAndJump(left, dt, operator, jumpIfFalseLabel)
|
return testVariableZeroOrJumpElsewhere(left, dt, operator, jumpIfFalseLabel)
|
||||||
|
|
||||||
when(dt) {
|
when(dt) {
|
||||||
DataType.BOOL, DataType.UBYTE, DataType.UWORD -> {
|
DataType.BOOL, DataType.UBYTE, DataType.UWORD -> {
|
||||||
@ -1286,7 +1289,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun testVariableZeroAndJump(variable: PtIdentifier, dt: DataType, operator: String, jumpIfFalseLabel: String) {
|
private fun testVariableZeroOrJumpElsewhere(variable: PtIdentifier, dt: DataType, operator: String, jumpIfFalseLabel: String) {
|
||||||
// optimized code if the expression is just an identifier (variable)
|
// optimized code if the expression is just an identifier (variable)
|
||||||
val varname = asmVariableName(variable)
|
val varname = asmVariableName(variable)
|
||||||
when(dt) {
|
when(dt) {
|
||||||
@ -1346,7 +1349,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun testNonzeroComparisonAndJump(
|
internal fun testNonzeroComparisonOrJumpElsewhere(
|
||||||
left: PtExpression,
|
left: PtExpression,
|
||||||
operator: String,
|
operator: String,
|
||||||
right: PtExpression,
|
right: PtExpression,
|
||||||
@ -1359,70 +1362,70 @@ $repeatLabel lda $counterVar
|
|||||||
when (operator) {
|
when (operator) {
|
||||||
"==" -> {
|
"==" -> {
|
||||||
when (dt) {
|
when (dt) {
|
||||||
in ByteDatatypes -> translateByteEqualsJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
in ByteDatatypes -> translateByteEqualsOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
in WordDatatypes -> translateWordEqualsJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
in WordDatatypes -> translateWordEqualsOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.FLOAT -> translateFloatEqualsJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.FLOAT -> translateFloatEqualsOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.STR -> translateStringEqualsJump(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
DataType.STR -> translateStringEqualsOrJumpElsewhere(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
||||||
else -> throw AssemblyError("weird operand datatype")
|
else -> throw AssemblyError("weird operand datatype")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"!=" -> {
|
"!=" -> {
|
||||||
when (dt) {
|
when (dt) {
|
||||||
in ByteDatatypes -> translateByteNotEqualsJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
in ByteDatatypes -> translateByteNotEqualsOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
in WordDatatypes -> translateWordNotEqualsJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
in WordDatatypes -> translateWordNotEqualsOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.FLOAT -> translateFloatNotEqualsJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.FLOAT -> translateFloatNotEqualsOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.STR -> translateStringNotEqualsJump(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
DataType.STR -> translateStringNotEqualsOrJumpElsewhere(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
||||||
else -> throw AssemblyError("weird operand datatype")
|
else -> throw AssemblyError("weird operand datatype")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"<" -> {
|
"<" -> {
|
||||||
when(dt) {
|
when(dt) {
|
||||||
DataType.UBYTE -> translateUbyteLessJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UBYTE -> translateUbyteLessOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.BYTE -> translateByteLessJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.BYTE -> translateByteLessOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.UWORD -> translateUwordLessJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UWORD -> translateUwordLessOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.WORD -> translateWordLessJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.WORD -> translateWordLessOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.FLOAT -> translateFloatLessJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.FLOAT -> translateFloatLessOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.STR -> translateStringLessJump(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
DataType.STR -> translateStringLessOrJumpElsewhere(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
||||||
else -> throw AssemblyError("weird operand datatype")
|
else -> throw AssemblyError("weird operand datatype")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"<=" -> {
|
"<=" -> {
|
||||||
when(dt) {
|
when(dt) {
|
||||||
DataType.UBYTE -> translateUbyteLessOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UBYTE -> translateUbyteLessOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.BYTE -> translateByteLessOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.BYTE -> translateByteLessOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.UWORD -> translateUwordLessOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UWORD -> translateUwordLessOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.WORD -> translateWordLessOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.WORD -> translateWordLessOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.FLOAT -> translateFloatLessOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.FLOAT -> translateFloatLessOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.STR -> translateStringLessOrEqualJump(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
DataType.STR -> translateStringLessOrEqualOrJumpElsewhere(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
||||||
else -> throw AssemblyError("weird operand datatype")
|
else -> throw AssemblyError("weird operand datatype")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
">" -> {
|
">" -> {
|
||||||
when(dt) {
|
when(dt) {
|
||||||
DataType.UBYTE -> translateUbyteGreaterJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UBYTE -> translateUbyteGreaterOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.BYTE -> translateByteGreaterJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.BYTE -> translateByteGreaterOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.UWORD -> translateUwordGreaterJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UWORD -> translateUwordGreaterOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.WORD -> translateWordGreaterJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.WORD -> translateWordGreaterOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.FLOAT -> translateFloatGreaterJump(left, right, leftConstVal,rightConstVal, jumpIfFalseLabel)
|
DataType.FLOAT -> translateFloatGreaterOrJumpElsewhere(left, right, leftConstVal,rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.STR -> translateStringGreaterJump(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
DataType.STR -> translateStringGreaterOrJumpElsewhere(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
||||||
else -> throw AssemblyError("weird operand datatype")
|
else -> throw AssemblyError("weird operand datatype")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
">=" -> {
|
">=" -> {
|
||||||
when(dt) {
|
when(dt) {
|
||||||
DataType.UBYTE -> translateUbyteGreaterOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UBYTE -> translateUbyteGreaterOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.BYTE -> translateByteGreaterOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.BYTE -> translateByteGreaterOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.UWORD -> translateUwordGreaterOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.UWORD -> translateUwordGreaterOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.WORD -> translateWordGreaterOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.WORD -> translateWordGreaterOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.FLOAT -> translateFloatGreaterOrEqualJump(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
DataType.FLOAT -> translateFloatGreaterOrEqualOrJumpElsewhere(left, right, leftConstVal, rightConstVal, jumpIfFalseLabel)
|
||||||
DataType.STR -> translateStringGreaterOrEqualJump(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
DataType.STR -> translateStringGreaterOrEqualOrJumpElsewhere(left as PtIdentifier, right as PtIdentifier, jumpIfFalseLabel)
|
||||||
else -> throw AssemblyError("weird operand datatype")
|
else -> throw AssemblyError("weird operand datatype")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateFloatLessJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateFloatLessOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
if(leftConstVal!=null && rightConstVal!=null) {
|
if(leftConstVal!=null && rightConstVal!=null) {
|
||||||
throw AssemblyError("const-compare should have been optimized away")
|
throw AssemblyError("const-compare should have been optimized away")
|
||||||
}
|
}
|
||||||
@ -1467,7 +1470,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateFloatLessOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateFloatLessOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
if(leftConstVal!=null && rightConstVal!=null) {
|
if(leftConstVal!=null && rightConstVal!=null) {
|
||||||
throw AssemblyError("const-compare should have been optimized away")
|
throw AssemblyError("const-compare should have been optimized away")
|
||||||
}
|
}
|
||||||
@ -1512,7 +1515,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateFloatGreaterJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateFloatGreaterOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
if(leftConstVal!=null && rightConstVal!=null) {
|
if(leftConstVal!=null && rightConstVal!=null) {
|
||||||
throw AssemblyError("const-compare should have been optimized away")
|
throw AssemblyError("const-compare should have been optimized away")
|
||||||
}
|
}
|
||||||
@ -1557,7 +1560,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateFloatGreaterOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateFloatGreaterOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
if(leftConstVal!=null && rightConstVal!=null) {
|
if(leftConstVal!=null && rightConstVal!=null) {
|
||||||
throw AssemblyError("const-compare should have been optimized away")
|
throw AssemblyError("const-compare should have been optimized away")
|
||||||
}
|
}
|
||||||
@ -1602,7 +1605,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUbyteLessJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUbyteLessOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(cmpOperand: String) {
|
fun code(cmpOperand: String) {
|
||||||
out(" cmp $cmpOperand | bcs $jumpIfFalseLabel")
|
out(" cmp $cmpOperand | bcs $jumpIfFalseLabel")
|
||||||
@ -1647,7 +1650,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateByteLessJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateByteLessOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(sbcOperand: String) {
|
fun code(sbcOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -1688,7 +1691,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUwordLessJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUwordLessOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -1732,7 +1735,7 @@ $repeatLabel lda $counterVar
|
|||||||
return out(" jsr prog8_lib.reg_less_uw | beq $jumpIfFalseLabel")
|
return out(" jsr prog8_lib.reg_less_uw | beq $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateWordLessJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateWordLessOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -1778,7 +1781,7 @@ $repeatLabel lda $counterVar
|
|||||||
return out(" jsr prog8_lib.reg_less_w | beq $jumpIfFalseLabel")
|
return out(" jsr prog8_lib.reg_less_w | beq $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUbyteGreaterJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUbyteGreaterOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(cmpOperand: String) {
|
fun code(cmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -1824,7 +1827,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateByteGreaterJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateByteGreaterOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(sbcOperand: String) {
|
fun code(sbcOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -1867,7 +1870,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUwordGreaterJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUwordGreaterOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -1917,7 +1920,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_W2+1", "P8ZP_SCRATCH_W2")
|
return code("P8ZP_SCRATCH_W2+1", "P8ZP_SCRATCH_W2")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateWordGreaterJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateWordGreaterOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(msbCmpOperand: String, lsbCmpOperand: String) {
|
fun code(msbCmpOperand: String, lsbCmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -1968,7 +1971,7 @@ $repeatLabel lda $counterVar
|
|||||||
return out(" jsr prog8_lib.reg_less_w | beq $jumpIfFalseLabel")
|
return out(" jsr prog8_lib.reg_less_w | beq $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUbyteLessOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUbyteLessOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(cmpOperand: String) {
|
fun code(cmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -2015,7 +2018,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateByteLessOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateByteLessOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
fun code(sbcOperand: String) {
|
fun code(sbcOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
clc
|
clc
|
||||||
@ -2058,7 +2061,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUwordLessOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUwordLessOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -2110,7 +2113,7 @@ $repeatLabel lda $counterVar
|
|||||||
return out(" jsr prog8_lib.reg_lesseq_uw | beq $jumpIfFalseLabel")
|
return out(" jsr prog8_lib.reg_lesseq_uw | beq $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateWordLessOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateWordLessOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(leftName: String) {
|
fun code(leftName: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -2165,7 +2168,7 @@ $repeatLabel lda $counterVar
|
|||||||
return out(" jsr prog8_lib.reg_lesseq_w | beq $jumpIfFalseLabel")
|
return out(" jsr prog8_lib.reg_lesseq_w | beq $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUbyteGreaterOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUbyteGreaterOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(cmpOperand: String) {
|
fun code(cmpOperand: String) {
|
||||||
out(" cmp $cmpOperand | bcc $jumpIfFalseLabel")
|
out(" cmp $cmpOperand | bcc $jumpIfFalseLabel")
|
||||||
@ -2208,7 +2211,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateByteGreaterOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateByteGreaterOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
fun code(sbcOperand: String) {
|
fun code(sbcOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
sec
|
sec
|
||||||
@ -2248,7 +2251,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateUwordGreaterOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateUwordGreaterOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -2291,7 +2294,7 @@ $repeatLabel lda $counterVar
|
|||||||
return out(" jsr prog8_lib.reg_lesseq_uw | beq $jumpIfFalseLabel")
|
return out(" jsr prog8_lib.reg_lesseq_uw | beq $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateWordGreaterOrEqualJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateWordGreaterOrEqualOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
fun code(msbCpyOperand: String, lsbCmpOperand: String) {
|
||||||
out("""
|
out("""
|
||||||
@ -2337,7 +2340,7 @@ $repeatLabel lda $counterVar
|
|||||||
return out(" jsr prog8_lib.reg_lesseq_w | beq $jumpIfFalseLabel")
|
return out(" jsr prog8_lib.reg_lesseq_w | beq $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateByteEqualsJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateByteEqualsOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
fun code(cmpOperand: String) {
|
fun code(cmpOperand: String) {
|
||||||
out(" cmp $cmpOperand | bne $jumpIfFalseLabel")
|
out(" cmp $cmpOperand | bne $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
@ -2382,7 +2385,7 @@ $repeatLabel lda $counterVar
|
|||||||
out(" cmp P8ZP_SCRATCH_B1 | bne $jumpIfFalseLabel")
|
out(" cmp P8ZP_SCRATCH_B1 | bne $jumpIfFalseLabel")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateByteNotEqualsJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateByteNotEqualsOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
fun code(cmpOperand: String) {
|
fun code(cmpOperand: String) {
|
||||||
out(" cmp $cmpOperand | beq $jumpIfFalseLabel")
|
out(" cmp $cmpOperand | beq $jumpIfFalseLabel")
|
||||||
@ -2428,7 +2431,7 @@ $repeatLabel lda $counterVar
|
|||||||
return code("P8ZP_SCRATCH_B1")
|
return code("P8ZP_SCRATCH_B1")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateWordEqualsJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateWordEqualsOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
if(rightConstVal!=null) {
|
if(rightConstVal!=null) {
|
||||||
if(leftConstVal!=null) {
|
if(leftConstVal!=null) {
|
||||||
if(rightConstVal!=leftConstVal)
|
if(rightConstVal!=leftConstVal)
|
||||||
@ -2512,7 +2515,7 @@ $repeatLabel lda $counterVar
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateWordNotEqualsJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateWordNotEqualsOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
|
|
||||||
if(rightConstVal!=null) {
|
if(rightConstVal!=null) {
|
||||||
if(leftConstVal!=null) {
|
if(leftConstVal!=null) {
|
||||||
@ -2600,7 +2603,7 @@ $repeatLabel lda $counterVar
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateFloatEqualsJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateFloatEqualsOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
if(rightConstVal!=null) {
|
if(rightConstVal!=null) {
|
||||||
if(leftConstVal!=null) {
|
if(leftConstVal!=null) {
|
||||||
if(rightConstVal!=leftConstVal)
|
if(rightConstVal!=leftConstVal)
|
||||||
@ -2684,7 +2687,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateFloatNotEqualsJump(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
private fun translateFloatNotEqualsOrJumpElsewhere(left: PtExpression, right: PtExpression, leftConstVal: PtNumber?, rightConstVal: PtNumber?, jumpIfFalseLabel: String) {
|
||||||
if(rightConstVal!=null) {
|
if(rightConstVal!=null) {
|
||||||
if(leftConstVal!=null) {
|
if(leftConstVal!=null) {
|
||||||
if(rightConstVal==leftConstVal)
|
if(rightConstVal==leftConstVal)
|
||||||
@ -2769,7 +2772,7 @@ $repeatLabel lda $counterVar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateStringEqualsJump(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
private fun translateStringEqualsOrJumpElsewhere(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
||||||
val leftNam = asmVariableName(left)
|
val leftNam = asmVariableName(left)
|
||||||
val rightNam = asmVariableName(right)
|
val rightNam = asmVariableName(right)
|
||||||
out("""
|
out("""
|
||||||
@ -2780,11 +2783,10 @@ $repeatLabel lda $counterVar
|
|||||||
lda #<$leftNam
|
lda #<$leftNam
|
||||||
ldy #>$leftNam
|
ldy #>$leftNam
|
||||||
jsr prog8_lib.strcmp_mem
|
jsr prog8_lib.strcmp_mem
|
||||||
cmp #0
|
|
||||||
bne $jumpIfFalseLabel""")
|
bne $jumpIfFalseLabel""")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateStringNotEqualsJump(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
private fun translateStringNotEqualsOrJumpElsewhere(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
||||||
val leftNam = asmVariableName(left)
|
val leftNam = asmVariableName(left)
|
||||||
val rightNam = asmVariableName(right)
|
val rightNam = asmVariableName(right)
|
||||||
out("""
|
out("""
|
||||||
@ -2795,11 +2797,10 @@ $repeatLabel lda $counterVar
|
|||||||
lda #<$leftNam
|
lda #<$leftNam
|
||||||
ldy #>$leftNam
|
ldy #>$leftNam
|
||||||
jsr prog8_lib.strcmp_mem
|
jsr prog8_lib.strcmp_mem
|
||||||
cmp #0
|
|
||||||
beq $jumpIfFalseLabel""")
|
beq $jumpIfFalseLabel""")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateStringLessJump(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
private fun translateStringLessOrJumpElsewhere(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
||||||
val leftNam = asmVariableName(left)
|
val leftNam = asmVariableName(left)
|
||||||
val rightNam = asmVariableName(right)
|
val rightNam = asmVariableName(right)
|
||||||
out("""
|
out("""
|
||||||
@ -2813,7 +2814,7 @@ $repeatLabel lda $counterVar
|
|||||||
bpl $jumpIfFalseLabel""")
|
bpl $jumpIfFalseLabel""")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateStringGreaterJump(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
private fun translateStringGreaterOrJumpElsewhere(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
||||||
val leftNam = asmVariableName(left)
|
val leftNam = asmVariableName(left)
|
||||||
val rightNam = asmVariableName(right)
|
val rightNam = asmVariableName(right)
|
||||||
out("""
|
out("""
|
||||||
@ -2828,7 +2829,7 @@ $repeatLabel lda $counterVar
|
|||||||
bmi $jumpIfFalseLabel""")
|
bmi $jumpIfFalseLabel""")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateStringLessOrEqualJump(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
private fun translateStringLessOrEqualOrJumpElsewhere(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
||||||
val leftNam = asmVariableName(left)
|
val leftNam = asmVariableName(left)
|
||||||
val rightNam = asmVariableName(right)
|
val rightNam = asmVariableName(right)
|
||||||
out("""
|
out("""
|
||||||
@ -2844,7 +2845,7 @@ $repeatLabel lda $counterVar
|
|||||||
+""")
|
+""")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun translateStringGreaterOrEqualJump(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
private fun translateStringGreaterOrEqualOrJumpElsewhere(left: PtIdentifier, right: PtIdentifier, jumpIfFalseLabel: String) {
|
||||||
val leftNam = asmVariableName(left)
|
val leftNam = asmVariableName(left)
|
||||||
val rightNam = asmVariableName(right)
|
val rightNam = asmVariableName(right)
|
||||||
out("""
|
out("""
|
||||||
|
@ -668,43 +668,31 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
}
|
}
|
||||||
"<" -> {
|
"<" -> {
|
||||||
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
||||||
asmgen.out("""
|
if(dt==DataType.UBYTE)
|
||||||
cmp $name
|
TODO("ubyte <")
|
||||||
bcc +
|
else
|
||||||
beq +
|
TODO("byte <")
|
||||||
lda #1
|
|
||||||
bne ++
|
|
||||||
+ lda #0
|
|
||||||
+ sta $name""")
|
|
||||||
}
|
}
|
||||||
"<=" -> {
|
"<=" -> {
|
||||||
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
||||||
asmgen.out("""
|
if(dt==DataType.UBYTE)
|
||||||
cmp $name
|
TODO("ubyte <=")
|
||||||
lda #0
|
else
|
||||||
adc #0
|
TODO("byte <=")
|
||||||
sta $name""")
|
|
||||||
}
|
}
|
||||||
">" -> {
|
">" -> {
|
||||||
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
||||||
asmgen.out("""
|
if(dt==DataType.UBYTE)
|
||||||
cmp $name
|
TODO("ubyte >")
|
||||||
bcc +
|
else
|
||||||
lda #0
|
TODO("byte >")
|
||||||
beq ++
|
|
||||||
+ lda #1
|
|
||||||
+ sta $name""")
|
|
||||||
}
|
}
|
||||||
">=" -> {
|
">=" -> {
|
||||||
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
asmgen.assignExpressionToRegister(value, RegisterOrPair.A)
|
||||||
asmgen.out("""
|
if(dt==DataType.UBYTE)
|
||||||
cmp $name
|
TODO("ubyte >=")
|
||||||
bcc +
|
else
|
||||||
beq +
|
TODO("byte >=")
|
||||||
lda #0
|
|
||||||
beq ++
|
|
||||||
+ lda #1
|
|
||||||
+ sta $name""")
|
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
||||||
}
|
}
|
||||||
@ -782,41 +770,106 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
+ sta $name""")
|
+ sta $name""")
|
||||||
}
|
}
|
||||||
"<" -> {
|
"<" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $name
|
lda $name
|
||||||
cmp $otherName
|
cmp $otherName
|
||||||
bcs +
|
|
||||||
lda #1
|
|
||||||
bne ++
|
|
||||||
+ lda #0
|
|
||||||
+ sta $name""")
|
|
||||||
}
|
|
||||||
"<=" -> {
|
|
||||||
asmgen.out("""
|
|
||||||
lda $otherName
|
|
||||||
cmp $name
|
|
||||||
lda #0
|
|
||||||
adc #0
|
|
||||||
sta $name""")
|
|
||||||
}
|
|
||||||
">" -> {
|
|
||||||
asmgen.out("""
|
|
||||||
lda $otherName
|
|
||||||
cmp $name
|
|
||||||
bcc +
|
bcc +
|
||||||
lda #0
|
lda #0
|
||||||
beq ++
|
beq ++
|
||||||
+ lda #1
|
+ lda #1
|
||||||
+ sta $name""")
|
+ sta $name""")
|
||||||
}
|
}
|
||||||
">=" -> {
|
else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
sec
|
||||||
|
sbc $otherName
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bmi +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"<=" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
|
asmgen.out("""
|
||||||
|
lda $otherName
|
||||||
|
cmp $name
|
||||||
|
bcs +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
} else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
clc
|
||||||
|
sbc $otherName
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bmi +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
">" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $name
|
lda $name
|
||||||
cmp $otherName
|
cmp $otherName
|
||||||
|
beq +
|
||||||
|
bcs ++
|
||||||
|
+ lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
} else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
clc
|
||||||
|
sbc $otherName
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bpl +
|
||||||
lda #0
|
lda #0
|
||||||
adc #0
|
beq ++
|
||||||
sta $name""")
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
">=" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
cmp $otherName
|
||||||
|
bcs +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
} else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
sec
|
||||||
|
sbc $otherName
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bpl +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
} }
|
||||||
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -908,40 +961,106 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
+ sta $name""")
|
+ sta $name""")
|
||||||
}
|
}
|
||||||
"<" -> {
|
"<" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $name
|
lda $name
|
||||||
cmp #$value
|
cmp #$value
|
||||||
bcs +
|
|
||||||
lda #1
|
|
||||||
bne ++
|
|
||||||
+ lda #0
|
|
||||||
+ sta $name""")
|
|
||||||
}
|
|
||||||
"<=" -> {
|
|
||||||
asmgen.out("""
|
|
||||||
lda #$value
|
|
||||||
cmp $name
|
|
||||||
lda #0
|
|
||||||
adc #0
|
|
||||||
sta $name""")
|
|
||||||
}
|
|
||||||
">" -> {
|
|
||||||
asmgen.out("""
|
|
||||||
lda #$value
|
|
||||||
cmp $name
|
|
||||||
bcc +
|
bcc +
|
||||||
lda #0
|
lda #0
|
||||||
beq ++
|
beq ++
|
||||||
+ lda #1
|
+ lda #1
|
||||||
+ sta $name""")
|
+ sta $name""")
|
||||||
}
|
}
|
||||||
">=" -> {
|
else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
sec
|
||||||
|
sbc #$value
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bmi +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"<=" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
|
asmgen.out("""
|
||||||
|
lda #$value
|
||||||
|
cmp $name
|
||||||
|
bcs +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
} else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
clc
|
||||||
|
sbc #$value
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bmi +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
">" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $name
|
lda $name
|
||||||
cmp #$value
|
cmp #$value
|
||||||
|
beq +
|
||||||
|
bcs ++
|
||||||
|
+ lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
} else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
clc
|
||||||
|
sbc #$value
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bpl +
|
||||||
lda #0
|
lda #0
|
||||||
adc #0
|
beq ++
|
||||||
sta $name""")
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
">=" -> {
|
||||||
|
if(dt==DataType.UBYTE) {
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
cmp #$value
|
||||||
|
bcs +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
} else {
|
||||||
|
// see http://www.6502.org/tutorials/compare_beyond.html
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
sec
|
||||||
|
sbc #$value
|
||||||
|
bvc +
|
||||||
|
eor #$80
|
||||||
|
+ bpl +
|
||||||
|
lda #0
|
||||||
|
beq ++
|
||||||
|
+ lda #1
|
||||||
|
+ sta $name""")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
||||||
}
|
}
|
||||||
@ -1816,7 +1935,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
sta $name+1""")
|
sta $name+1""")
|
||||||
}
|
}
|
||||||
"<=" -> {
|
"<=" -> {
|
||||||
val compareRoutine = if(dt==DataType.UWORD) "reg_lesseq_uw" else "reg_lesseq_w"
|
if(dt==DataType.UWORD) {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $otherName
|
lda $otherName
|
||||||
ldy $otherName+1
|
ldy $otherName+1
|
||||||
@ -1824,14 +1943,28 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
sty P8ZP_SCRATCH_W2+1
|
sty P8ZP_SCRATCH_W2+1
|
||||||
lda $name
|
lda $name
|
||||||
ldy $name+1
|
ldy $name+1
|
||||||
jsr prog8_lib.$compareRoutine
|
jsr prog8_lib.reg_lesseq_uw
|
||||||
|
sta $name
|
||||||
|
lda #0
|
||||||
|
sta $name+1""")
|
||||||
|
} else {
|
||||||
|
// note: reg_lesseq_w routine takes the arguments in reverse order
|
||||||
|
asmgen.out("""
|
||||||
|
lda $name
|
||||||
|
ldy $name+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
lda $otherName
|
||||||
|
ldy $otherName+1
|
||||||
|
jsr prog8_lib.reg_lesseq_w
|
||||||
sta $name
|
sta $name
|
||||||
lda #0
|
lda #0
|
||||||
sta $name+1""")
|
sta $name+1""")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
">=" -> {
|
">=" -> {
|
||||||
// a>=b --> b<=a
|
// a>=b --> b<=a
|
||||||
val compareRoutine = if(dt==DataType.UWORD) "reg_lesseq_uw" else "reg_lesseq_w"
|
if(dt==DataType.UWORD) {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $name
|
lda $name
|
||||||
ldy $name+1
|
ldy $name+1
|
||||||
@ -1839,10 +1972,26 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
sty P8ZP_SCRATCH_W2+1
|
sty P8ZP_SCRATCH_W2+1
|
||||||
lda $otherName
|
lda $otherName
|
||||||
ldy $otherName+1
|
ldy $otherName+1
|
||||||
jsr prog8_lib.$compareRoutine
|
jsr prog8_lib.reg_lesseq_uw
|
||||||
sta $name
|
sta $name
|
||||||
lda #0
|
lda #0
|
||||||
sta $name+1""")
|
sta $name+1"""
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
// note: reg_lesseq_w routine takes the arguments in reverse order
|
||||||
|
asmgen.out("""
|
||||||
|
lda $otherName
|
||||||
|
ldy $otherName+1
|
||||||
|
sta P8ZP_SCRATCH_W2
|
||||||
|
sty P8ZP_SCRATCH_W2+1
|
||||||
|
lda $name
|
||||||
|
ldy $name+1
|
||||||
|
jsr prog8_lib.reg_lesseq_w
|
||||||
|
sta $name
|
||||||
|
lda #0
|
||||||
|
sta $name+1"""
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
else -> throw AssemblyError("invalid operator for in-place modification $operator")
|
||||||
}
|
}
|
||||||
@ -2177,9 +2326,12 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
""")
|
""")
|
||||||
}
|
}
|
||||||
// pretty uncommon, who's going to assign a comparison boolean expresion to a float var:
|
// pretty uncommon, who's going to assign a comparison boolean expresion to a float var:
|
||||||
"==", "!=", "<", "<=", ">", ">=" -> TODO("float-value-to-var comparisons")
|
"==" -> TODO("float-value-to-var comparison ==")
|
||||||
|
"!=" -> TODO("float-value-to-var comparison !=")
|
||||||
|
"<", "<=", ">", ">=" -> TODO("float-value-to-var comparisons")
|
||||||
else -> throw AssemblyError("invalid operator for in-place float modification $operator")
|
else -> throw AssemblyError("invalid operator for in-place float modification $operator")
|
||||||
}
|
}
|
||||||
|
// store Fac1 back into memory
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
ldx #<$name
|
ldx #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
@ -2232,7 +2384,67 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
""")
|
""")
|
||||||
}
|
}
|
||||||
// pretty uncommon, who's going to assign a comparison boolean expresion to a float var:
|
// pretty uncommon, who's going to assign a comparison boolean expresion to a float var:
|
||||||
"==", "!=", "<", "<=", ">", ">=" -> TODO("float-var-to-var comparisons")
|
"==" -> {
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.MOVFM
|
||||||
|
lda #<$otherName
|
||||||
|
ldy #>$otherName
|
||||||
|
jsr floats.var_fac1_notequal_f
|
||||||
|
eor #1
|
||||||
|
jsr floats.FREADSA""")
|
||||||
|
}
|
||||||
|
"!=" -> {
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.MOVFM
|
||||||
|
lda #<$otherName
|
||||||
|
ldy #>$otherName
|
||||||
|
jsr floats.var_fac1_notequal_f
|
||||||
|
jsr floats.FREADSA""")
|
||||||
|
}
|
||||||
|
"<" -> {
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.MOVFM
|
||||||
|
lda #<$otherName
|
||||||
|
ldy #>$otherName
|
||||||
|
jsr floats.var_fac1_less_f
|
||||||
|
jsr floats.FREADSA""")
|
||||||
|
}
|
||||||
|
"<=" -> {
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.MOVFM
|
||||||
|
lda #<$otherName
|
||||||
|
ldy #>$otherName
|
||||||
|
jsr floats.var_fac1_lesseq_f
|
||||||
|
jsr floats.FREADSA""")
|
||||||
|
}
|
||||||
|
">" -> {
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.MOVFM
|
||||||
|
lda #<$otherName
|
||||||
|
ldy #>$otherName
|
||||||
|
jsr floats.var_fac1_greater_f
|
||||||
|
jsr floats.FREADSA""")
|
||||||
|
}
|
||||||
|
">=" -> {
|
||||||
|
asmgen.out("""
|
||||||
|
lda #<$name
|
||||||
|
ldy #>$name
|
||||||
|
jsr floats.MOVFM
|
||||||
|
lda #<$otherName
|
||||||
|
ldy #>$otherName
|
||||||
|
jsr floats.var_fac1_greatereq_f
|
||||||
|
jsr floats.FREADSA""")
|
||||||
|
}
|
||||||
else -> throw AssemblyError("invalid operator for in-place float modification $operator")
|
else -> throw AssemblyError("invalid operator for in-place float modification $operator")
|
||||||
}
|
}
|
||||||
// store Fac1 back into memory
|
// store Fac1 back into memory
|
||||||
@ -2299,41 +2511,22 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
sta P8ZP_SCRATCH_W1
|
jsr floats.MOVFM
|
||||||
sty P8ZP_SCRATCH_W1+1
|
|
||||||
lda #<$constValueName
|
lda #<$constValueName
|
||||||
ldy #>$constValueName
|
ldy #>$constValueName
|
||||||
jsr floats.vars_equal_f
|
jsr floats.var_fac1_notequal_f
|
||||||
bne +""")
|
eor #1
|
||||||
val nameTarget = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, DataType.FLOAT, scope, Position.DUMMY, variableAsmName = name)
|
jsr floats.FREADSA""")
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 0.0)
|
|
||||||
asmgen.out("""
|
|
||||||
jmp ++
|
|
||||||
+""")
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 1.0)
|
|
||||||
asmgen.out("+")
|
|
||||||
asmgen.restoreRegisterLocal(CpuRegister.X)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
"!=" -> {
|
"!=" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
sta P8ZP_SCRATCH_W1
|
jsr floats.MOVFM
|
||||||
sty P8ZP_SCRATCH_W1+1
|
|
||||||
lda #<$constValueName
|
lda #<$constValueName
|
||||||
ldy #>$constValueName
|
ldy #>$constValueName
|
||||||
jsr floats.vars_equal_f
|
jsr floats.var_fac1_notequal_f
|
||||||
beq +""")
|
jsr floats.FREADSA""")
|
||||||
val nameTarget = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, DataType.FLOAT, scope, Position.DUMMY, variableAsmName = name)
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 0.0)
|
|
||||||
asmgen.out("""
|
|
||||||
jmp ++
|
|
||||||
+""")
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 1.0)
|
|
||||||
asmgen.out("+")
|
|
||||||
asmgen.restoreRegisterLocal(CpuRegister.X)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
"<" -> {
|
"<" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -2342,58 +2535,28 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$constValueName
|
lda #<$constValueName
|
||||||
ldy #>$constValueName
|
ldy #>$constValueName
|
||||||
jsr floats.FCOMP ; A = compare fac1 to mflpt in A/Y, 0=equal 1=fac1 is greater, 255=fac1 is less than
|
jsr floats.var_fac1_less_f
|
||||||
cmp #0
|
jsr floats.FREADSA""")
|
||||||
bmi +""")
|
|
||||||
val nameTarget = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, DataType.FLOAT, scope, Position.DUMMY, variableAsmName = name)
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 0.0)
|
|
||||||
asmgen.out("""
|
|
||||||
jmp ++
|
|
||||||
+""")
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 1.0)
|
|
||||||
asmgen.out("+")
|
|
||||||
asmgen.restoreRegisterLocal(CpuRegister.X)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
"<=" -> {
|
"<=" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$constValueName
|
|
||||||
ldy #>$constValueName
|
|
||||||
jsr floats.MOVFM
|
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FCOMP ; A = compare fac1 to mflpt in A/Y, 0=equal 1=fac1 is greater, 255=fac1 is less than
|
jsr floats.MOVFM
|
||||||
cmp #0
|
lda #<$constValueName
|
||||||
bpl +""")
|
ldy #>$constValueName
|
||||||
val nameTarget = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, DataType.FLOAT, scope, Position.DUMMY, variableAsmName = name)
|
jsr floats.var_fac1_lesseq_f
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 0.0)
|
jsr floats.FREADSA""")
|
||||||
asmgen.out("""
|
|
||||||
jmp ++
|
|
||||||
+""")
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 1.0)
|
|
||||||
asmgen.out("+")
|
|
||||||
asmgen.restoreRegisterLocal(CpuRegister.X)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
">" -> {
|
">" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$constValueName
|
|
||||||
ldy #>$constValueName
|
|
||||||
jsr floats.MOVFM
|
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FCOMP ; A = compare fac1 to mflpt in A/Y, 0=equal 1=fac1 is greater, 255=fac1 is less than
|
jsr floats.MOVFM
|
||||||
cmp #0
|
lda #<$constValueName
|
||||||
bmi +""")
|
ldy #>$constValueName
|
||||||
val nameTarget = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, DataType.FLOAT, scope, Position.DUMMY, variableAsmName = name)
|
jsr floats.var_fac1_greater_f
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 0.0)
|
jsr floats.FREADSA""")
|
||||||
asmgen.out("""
|
|
||||||
jmp ++
|
|
||||||
+""")
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 1.0)
|
|
||||||
asmgen.out("+")
|
|
||||||
asmgen.restoreRegisterLocal(CpuRegister.X)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
">=" -> {
|
">=" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -2402,18 +2565,8 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$constValueName
|
lda #<$constValueName
|
||||||
ldy #>$constValueName
|
ldy #>$constValueName
|
||||||
jsr floats.FCOMP ; A = compare fac1 to mflpt in A/Y, 0=equal 1=fac1 is greater, 255=fac1 is less than
|
jsr floats.var_fac1_greatereq_f
|
||||||
cmp #0
|
jsr floats.FREADSA""")
|
||||||
bpl +""")
|
|
||||||
val nameTarget = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, DataType.FLOAT, scope, Position.DUMMY, variableAsmName = name)
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 0.0)
|
|
||||||
asmgen.out("""
|
|
||||||
jmp ++
|
|
||||||
+""")
|
|
||||||
assignmentAsmGen.assignConstantFloat(nameTarget, 1.0)
|
|
||||||
asmgen.out("+")
|
|
||||||
asmgen.restoreRegisterLocal(CpuRegister.X)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("invalid operator for in-place float modification $operator")
|
else -> throw AssemblyError("invalid operator for in-place float modification $operator")
|
||||||
}
|
}
|
||||||
|
@ -413,7 +413,7 @@ private fun createAssemblyAndAssemble(program: PtProgram,
|
|||||||
if(compilerOptions.useNewExprCode)
|
if(compilerOptions.useNewExprCode)
|
||||||
transformNewExpressions(program)
|
transformNewExpressions(program)
|
||||||
|
|
||||||
printAst(program, true) { println(it) }
|
// printAst(program, true) { println(it) }
|
||||||
|
|
||||||
val stMaker = SymbolTableMaker(program, compilerOptions)
|
val stMaker = SymbolTableMaker(program, compilerOptions)
|
||||||
val symbolTable = stMaker.make()
|
val symbolTable = stMaker.make()
|
||||||
@ -561,7 +561,6 @@ private fun transformNewExpressions(program: PtProgram) {
|
|||||||
|
|
||||||
fun transform(node: PtNode, parent: PtNode) {
|
fun transform(node: PtNode, parent: PtNode) {
|
||||||
if(node is PtBinaryExpression) {
|
if(node is PtBinaryExpression) {
|
||||||
println("BINEXPR AT ${node.position}")
|
|
||||||
node.children.toTypedArray().forEach {
|
node.children.toTypedArray().forEach {
|
||||||
transform(it, node)
|
transform(it, node)
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ if CONDITION==0
|
|||||||
while CONDITION { STUFF }
|
while CONDITION { STUFF }
|
||||||
==>
|
==>
|
||||||
_whileloop:
|
_whileloop:
|
||||||
if CONDITION==0 goto _after
|
if INVERTED-CONDITION goto _after
|
||||||
STUFF
|
STUFF
|
||||||
goto _whileloop
|
goto _whileloop
|
||||||
_after:
|
_after:
|
||||||
|
@ -1,12 +1,40 @@
|
|||||||
%zeropage basicsafe
|
%zeropage basicsafe
|
||||||
%import textio
|
%import textio
|
||||||
|
%import floats
|
||||||
|
%import string
|
||||||
|
|
||||||
main {
|
main {
|
||||||
sub start() {
|
sub start() {
|
||||||
|
test_string()
|
||||||
|
txt.nl()
|
||||||
|
test_compare_variable()
|
||||||
|
txt.nl()
|
||||||
|
test_compare_literal()
|
||||||
|
}
|
||||||
|
|
||||||
|
sub test_string() {
|
||||||
|
str name="john"
|
||||||
|
|
||||||
|
if (string.compare(name, "aaa")==0) or (string.compare(name, "john")==0) or (string.compare(name, "bbb")==0) {
|
||||||
|
txt.print("name1 ok\n")
|
||||||
|
}
|
||||||
|
if (string.compare(name, "aaa")==0) or (string.compare(name, "zzz")==0) or (string.compare(name, "bbb")==0) {
|
||||||
|
txt.print("name2 fail!\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
if name=="aaa" or name=="john" or name=="bbb"
|
||||||
|
txt.print("name1b ok\n")
|
||||||
|
if name=="aaa" or name=="zzz" or name=="bbb"
|
||||||
|
txt.print("name2b fail!\n")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub test_compare_literal() {
|
||||||
byte b = -100
|
byte b = -100
|
||||||
ubyte ub = 20
|
ubyte ub = 20
|
||||||
word w = -20000
|
word w = -20000
|
||||||
uword uw = 2000
|
uword uw = 2000
|
||||||
|
float f = -100
|
||||||
|
|
||||||
txt.print("all 1: ")
|
txt.print("all 1: ")
|
||||||
txt.print_ub(b == -100)
|
txt.print_ub(b == -100)
|
||||||
@ -34,7 +62,15 @@ main {
|
|||||||
txt.print_ub(uw <= 2000)
|
txt.print_ub(uw <= 2000)
|
||||||
txt.print_ub(uw > 1999)
|
txt.print_ub(uw > 1999)
|
||||||
txt.print_ub(uw >= 2000)
|
txt.print_ub(uw >= 2000)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(f == -100.0)
|
||||||
|
txt.print_ub(f != -99.0)
|
||||||
|
txt.print_ub(f < -99.0)
|
||||||
|
txt.print_ub(f <= -100.0)
|
||||||
|
txt.print_ub(f > -101.0)
|
||||||
|
txt.print_ub(f >= -100.0)
|
||||||
txt.nl()
|
txt.nl()
|
||||||
|
|
||||||
txt.print("all 0: ")
|
txt.print("all 0: ")
|
||||||
txt.print_ub(b == -99)
|
txt.print_ub(b == -99)
|
||||||
txt.print_ub(b != -100)
|
txt.print_ub(b != -100)
|
||||||
@ -61,6 +97,153 @@ main {
|
|||||||
txt.print_ub(uw <= 1999)
|
txt.print_ub(uw <= 1999)
|
||||||
txt.print_ub(uw > 2000)
|
txt.print_ub(uw > 2000)
|
||||||
txt.print_ub(uw >= 2001)
|
txt.print_ub(uw >= 2001)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(f == -99.0)
|
||||||
|
txt.print_ub(f != -100.0)
|
||||||
|
txt.print_ub(f < -100.0)
|
||||||
|
txt.print_ub(f <= -101.0)
|
||||||
|
txt.print_ub(f > -100.0)
|
||||||
|
txt.print_ub(f >= -99.0)
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == -100 txt.chrout('.')
|
||||||
|
if b != -99 txt.chrout('.')
|
||||||
|
if b < -99 txt.chrout('.')
|
||||||
|
if b <= -100 txt.chrout('.')
|
||||||
|
if b > -101 txt.chrout('.')
|
||||||
|
if b >= -100 txt.chrout('.')
|
||||||
|
if ub ==20 txt.chrout('.')
|
||||||
|
if ub !=19 txt.chrout('.')
|
||||||
|
if ub <21 txt.chrout('.')
|
||||||
|
if ub <=20 txt.chrout('.')
|
||||||
|
if ub>19 txt.chrout('.')
|
||||||
|
if ub>=20 txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if w == -20000 txt.chrout('.')
|
||||||
|
if w != -19999 txt.chrout('.')
|
||||||
|
if w < -19999 txt.chrout('.')
|
||||||
|
if w <= -20000 txt.chrout('.')
|
||||||
|
if w > -20001 txt.chrout('.')
|
||||||
|
if w >= -20000 txt.chrout('.')
|
||||||
|
if uw == 2000 txt.chrout('.')
|
||||||
|
if uw != 2001 txt.chrout('.')
|
||||||
|
if uw < 2001 txt.chrout('.')
|
||||||
|
if uw <= 2000 txt.chrout('.')
|
||||||
|
if uw > 1999 txt.chrout('.')
|
||||||
|
if uw >= 2000 txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if f == -100.0 txt.chrout('.')
|
||||||
|
if f != -99.0 txt.chrout('.')
|
||||||
|
if f < -99.0 txt.chrout('.')
|
||||||
|
if f <= -100.0 txt.chrout('.')
|
||||||
|
if f > -101.0 txt.chrout('.')
|
||||||
|
if f >= -100.0 txt.chrout('.')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print(" no !: ")
|
||||||
|
if b == -99 txt.chrout('!')
|
||||||
|
if b != -100 txt.chrout('!')
|
||||||
|
if b < -100 txt.chrout('!')
|
||||||
|
if b <= -101 txt.chrout('!')
|
||||||
|
if b > -100 txt.chrout('!')
|
||||||
|
if b >= -99 txt.chrout('!')
|
||||||
|
if ub ==21 txt.chrout('!')
|
||||||
|
if ub !=20 txt.chrout('!')
|
||||||
|
if ub <20 txt.chrout('!')
|
||||||
|
if ub <=19 txt.chrout('!')
|
||||||
|
if ub>20 txt.chrout('!')
|
||||||
|
if ub>=21 txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if w == -20001 txt.chrout('!')
|
||||||
|
if w != -20000 txt.chrout('!')
|
||||||
|
if w < -20000 txt.chrout('!')
|
||||||
|
if w <= -20001 txt.chrout('!')
|
||||||
|
if w > -20000 txt.chrout('!')
|
||||||
|
if w >= -19999 txt.chrout('!')
|
||||||
|
if uw == 1999 txt.chrout('!')
|
||||||
|
if uw != 2000 txt.chrout('!')
|
||||||
|
if uw < 2000 txt.chrout('!')
|
||||||
|
if uw <= 1999 txt.chrout('!')
|
||||||
|
if uw > 2000 txt.chrout('!')
|
||||||
|
if uw >= 2001 txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == -99.0 txt.chrout('!')
|
||||||
|
if f != -100.0 txt.chrout('!')
|
||||||
|
if f < -100.0 txt.chrout('!')
|
||||||
|
if f <= -101.0 txt.chrout('!')
|
||||||
|
if f > -100.0 txt.chrout('!')
|
||||||
|
if f >= -99.0 txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == -100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b != -99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b < -99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b <= -100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b > -101 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b >= -100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub ==20 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub !=19 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub <21 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub <=20 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub>19 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub>=20 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if w == -20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w != -19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w < -19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w <= -20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w > -20001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w >= -20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw == 2000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw != 2001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw < 2001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw <= 2000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw > 1999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw >= 2000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == -100.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f != -99.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f < -99.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f <= -100.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f > -101.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f >= -100.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == -99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b != -100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b < -100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b <= -101 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b > -100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b >= -99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub ==21 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub !=20 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <20 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <=19 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>20 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>=21 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if w == -20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w != -20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w < -20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w <= -20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w > -20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w >= -19999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw == 1999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw != 2000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw < 2000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw <= 1999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw > 2000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw >= 2001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if f == -99.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f != -100.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f < -100.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f <= -101.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f > -100.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f >= -99.0 txt.chrout('!') else txt.chrout('.')
|
||||||
txt.nl()
|
txt.nl()
|
||||||
|
|
||||||
|
|
||||||
@ -112,9 +295,311 @@ main {
|
|||||||
txt.print_uw(uw)
|
txt.print_uw(uw)
|
||||||
txt.print(" 8000\n")
|
txt.print(" 8000\n")
|
||||||
|
|
||||||
; float f
|
f = 0.0
|
||||||
; while f<2.2 {
|
floats.print_f(f)
|
||||||
; f+=0.1
|
while f<2.2 {
|
||||||
; }
|
f+=0.1
|
||||||
|
floats.print_f(f)
|
||||||
|
}
|
||||||
|
floats.print_f(f)
|
||||||
|
txt.print(" 2.2\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
sub test_compare_variable() {
|
||||||
|
byte b = -100
|
||||||
|
ubyte ub = 20
|
||||||
|
word w = -20000
|
||||||
|
uword uw = 2000
|
||||||
|
float f = -100
|
||||||
|
|
||||||
|
byte minus_100 = -100
|
||||||
|
byte minus_99 = -99
|
||||||
|
byte minus_20 = -20
|
||||||
|
byte minus_101 = -101
|
||||||
|
ubyte nineteen = 19
|
||||||
|
ubyte twenty = 20
|
||||||
|
ubyte twenty1 = 21
|
||||||
|
ubyte twohundred = 200
|
||||||
|
float f_minus_100 = -100.0
|
||||||
|
float f_minus_101 = -101.0
|
||||||
|
float f_minus_99 = -99.0
|
||||||
|
float twodottwo = 2.2
|
||||||
|
word minus8000 = -8000
|
||||||
|
word eightthousand = 8000
|
||||||
|
word w_min_20000 = -20000
|
||||||
|
word w_min_19999 = -19999
|
||||||
|
word w_min_20001 = -20001
|
||||||
|
uword twothousand = 2000
|
||||||
|
uword twothousand1 = 2001
|
||||||
|
uword nineteen99 = 1999
|
||||||
|
|
||||||
|
|
||||||
|
txt.print("all 1: ")
|
||||||
|
txt.print_ub(b == minus_100)
|
||||||
|
txt.print_ub(b != minus_99)
|
||||||
|
txt.print_ub(b < minus_99)
|
||||||
|
txt.print_ub(b <= minus_100)
|
||||||
|
txt.print_ub(b > minus_101)
|
||||||
|
txt.print_ub(b >= minus_100)
|
||||||
|
txt.print_ub(ub ==twenty)
|
||||||
|
txt.print_ub(ub !=nineteen)
|
||||||
|
txt.print_ub(ub <twenty1)
|
||||||
|
txt.print_ub(ub <=twenty)
|
||||||
|
txt.print_ub(ub>nineteen)
|
||||||
|
txt.print_ub(ub>=twenty)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(w == w_min_20000)
|
||||||
|
txt.print_ub(w != w_min_19999)
|
||||||
|
txt.print_ub(w < w_min_19999)
|
||||||
|
txt.print_ub(w <= w_min_20000)
|
||||||
|
txt.print_ub(w > w_min_20001)
|
||||||
|
txt.print_ub(w >= w_min_20000)
|
||||||
|
txt.print_ub(uw == twothousand)
|
||||||
|
txt.print_ub(uw != twothousand1)
|
||||||
|
txt.print_ub(uw < twothousand1)
|
||||||
|
txt.print_ub(uw <= twothousand)
|
||||||
|
txt.print_ub(uw > nineteen99)
|
||||||
|
txt.print_ub(uw >= twothousand)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(f == f_minus_100)
|
||||||
|
txt.print_ub(f != f_minus_99)
|
||||||
|
txt.print_ub(f < f_minus_99)
|
||||||
|
txt.print_ub(f <= f_minus_100)
|
||||||
|
txt.print_ub(f > f_minus_101)
|
||||||
|
txt.print_ub(f >= f_minus_100)
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all 0: ")
|
||||||
|
txt.print_ub(b == minus_99)
|
||||||
|
txt.print_ub(b != minus_100)
|
||||||
|
txt.print_ub(b < minus_100)
|
||||||
|
txt.print_ub(b <= minus_101)
|
||||||
|
txt.print_ub(b > minus_100)
|
||||||
|
txt.print_ub(b >= minus_99)
|
||||||
|
txt.print_ub(ub ==twenty1)
|
||||||
|
txt.print_ub(ub !=twenty)
|
||||||
|
txt.print_ub(ub <twenty)
|
||||||
|
txt.print_ub(ub <=nineteen)
|
||||||
|
txt.print_ub(ub>twenty)
|
||||||
|
txt.print_ub(ub>=twenty1)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(w == w_min_20001)
|
||||||
|
txt.print_ub(w != w_min_20000)
|
||||||
|
txt.print_ub(w < w_min_20000)
|
||||||
|
txt.print_ub(w <= w_min_20001)
|
||||||
|
txt.print_ub(w > w_min_20000)
|
||||||
|
txt.print_ub(w >= w_min_19999)
|
||||||
|
txt.print_ub(uw == nineteen99)
|
||||||
|
txt.print_ub(uw != twothousand)
|
||||||
|
txt.print_ub(uw < twothousand)
|
||||||
|
txt.print_ub(uw <= nineteen99)
|
||||||
|
txt.print_ub(uw > twothousand)
|
||||||
|
txt.print_ub(uw >= twothousand1)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(f == f_minus_99)
|
||||||
|
txt.print_ub(f != f_minus_100)
|
||||||
|
txt.print_ub(f < f_minus_100)
|
||||||
|
txt.print_ub(f <= f_minus_101)
|
||||||
|
txt.print_ub(f > f_minus_100)
|
||||||
|
txt.print_ub(f >= f_minus_99)
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == minus_100 txt.chrout('.')
|
||||||
|
if b != minus_99 txt.chrout('.')
|
||||||
|
if b < minus_99 txt.chrout('.')
|
||||||
|
if b <= minus_100 txt.chrout('.')
|
||||||
|
if b > minus_101 txt.chrout('.')
|
||||||
|
if b >= minus_100 txt.chrout('.')
|
||||||
|
if ub == twenty txt.chrout('.')
|
||||||
|
if ub != nineteen txt.chrout('.')
|
||||||
|
if ub < twenty1 txt.chrout('.')
|
||||||
|
if ub <= twenty txt.chrout('.')
|
||||||
|
if ub> nineteen txt.chrout('.')
|
||||||
|
if ub>= twenty txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20000 txt.chrout('.')
|
||||||
|
if w != w_min_19999 txt.chrout('.')
|
||||||
|
if w < w_min_19999 txt.chrout('.')
|
||||||
|
if w <= w_min_20000 txt.chrout('.')
|
||||||
|
if w > w_min_20001 txt.chrout('.')
|
||||||
|
if w >= w_min_20000 txt.chrout('.')
|
||||||
|
if uw == twothousand txt.chrout('.')
|
||||||
|
if uw != twothousand1 txt.chrout('.')
|
||||||
|
if uw < twothousand1 txt.chrout('.')
|
||||||
|
if uw <= twothousand txt.chrout('.')
|
||||||
|
if uw > nineteen99 txt.chrout('.')
|
||||||
|
if uw >= twothousand txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_100 txt.chrout('.')
|
||||||
|
if f != f_minus_99 txt.chrout('.')
|
||||||
|
if f < f_minus_99 txt.chrout('.')
|
||||||
|
if f <= f_minus_100 txt.chrout('.')
|
||||||
|
if f > f_minus_101 txt.chrout('.')
|
||||||
|
if f >= f_minus_100 txt.chrout('.')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print(" no !: ")
|
||||||
|
if b == minus_99 txt.chrout('!')
|
||||||
|
if b != minus_100 txt.chrout('!')
|
||||||
|
if b < minus_100 txt.chrout('!')
|
||||||
|
if b <= minus_101 txt.chrout('!')
|
||||||
|
if b > minus_100 txt.chrout('!')
|
||||||
|
if b >= minus_99 txt.chrout('!')
|
||||||
|
if ub == twenty1 txt.chrout('!')
|
||||||
|
if ub != twenty txt.chrout('!')
|
||||||
|
if ub < twenty txt.chrout('!')
|
||||||
|
if ub <= nineteen txt.chrout('!')
|
||||||
|
if ub> twenty txt.chrout('!')
|
||||||
|
if ub>= twenty1 txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20001 txt.chrout('!')
|
||||||
|
if w != w_min_20000 txt.chrout('!')
|
||||||
|
if w < w_min_20000 txt.chrout('!')
|
||||||
|
if w <= w_min_20001 txt.chrout('!')
|
||||||
|
if w > w_min_20000 txt.chrout('!')
|
||||||
|
if w >= w_min_19999 txt.chrout('!')
|
||||||
|
if uw == nineteen99 txt.chrout('!')
|
||||||
|
if uw != twothousand txt.chrout('!')
|
||||||
|
if uw < twothousand txt.chrout('!')
|
||||||
|
if uw <= nineteen99 txt.chrout('!')
|
||||||
|
if uw > twothousand txt.chrout('!')
|
||||||
|
if uw >= twothousand1 txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_99 txt.chrout('!')
|
||||||
|
if f != f_minus_100 txt.chrout('!')
|
||||||
|
if f < f_minus_100 txt.chrout('!')
|
||||||
|
if f <= f_minus_101 txt.chrout('!')
|
||||||
|
if f > f_minus_100 txt.chrout('!')
|
||||||
|
if f >= f_minus_99 txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b != minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b < minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b <= minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b > minus_101 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b >= minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub == twenty txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub != nineteen txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub < twenty1 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub <= twenty txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub> nineteen txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub>=twenty txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w != w_min_19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w < w_min_19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w <= w_min_20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w > w_min_20001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w >= w_min_20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw == twothousand txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw != twothousand1 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw < twothousand1 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw <= twothousand txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw > nineteen99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw >= twothousand txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f != f_minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f < f_minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f <= f_minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f > f_minus_101 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f >= f_minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b != minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b < minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b <= minus_101 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b > minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b >= minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub == twenty1 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub !=twenty txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <twenty txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <=nineteen txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>twenty txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>= twenty1 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w != w_min_20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w < w_min_20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w <= w_min_20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w > w_min_20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w >= w_min_19999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw == nineteen99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw != twothousand txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw < twothousand txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw <= nineteen99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw > twothousand txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw >= twothousand1 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f != f_minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f < f_minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f <= f_minus_101 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f > f_minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f >= f_minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
|
||||||
|
b = minus_100
|
||||||
|
while b <= minus_20
|
||||||
|
b++
|
||||||
|
txt.print_b(b)
|
||||||
|
txt.print(" -19\n")
|
||||||
|
b = minus_100
|
||||||
|
while b < -minus_20
|
||||||
|
b++
|
||||||
|
txt.print_b(b)
|
||||||
|
txt.print(" -20\n")
|
||||||
|
|
||||||
|
ub = 20
|
||||||
|
while ub <= twohundred
|
||||||
|
ub++
|
||||||
|
txt.print_ub(ub)
|
||||||
|
txt.print(" 201\n")
|
||||||
|
ub = 20
|
||||||
|
while ub < twohundred
|
||||||
|
ub++
|
||||||
|
txt.print_ub(ub)
|
||||||
|
txt.print(" 200\n")
|
||||||
|
|
||||||
|
w = w_min_20000
|
||||||
|
while w <= minus8000 {
|
||||||
|
w++
|
||||||
|
}
|
||||||
|
txt.print_w(w)
|
||||||
|
txt.print(" -7999\n")
|
||||||
|
w = w_min_20000
|
||||||
|
while w < minus8000 {
|
||||||
|
w++
|
||||||
|
}
|
||||||
|
txt.print_w(w)
|
||||||
|
txt.print(" -8000\n")
|
||||||
|
|
||||||
|
uw = 2000
|
||||||
|
while uw <= eightthousand {
|
||||||
|
uw++
|
||||||
|
}
|
||||||
|
txt.print_uw(uw)
|
||||||
|
txt.print(" 8001\n")
|
||||||
|
uw = 2000
|
||||||
|
while uw < eightthousand {
|
||||||
|
uw++
|
||||||
|
}
|
||||||
|
txt.print_uw(uw)
|
||||||
|
txt.print(" 8000\n")
|
||||||
|
|
||||||
|
f = 0.0
|
||||||
|
floats.print_f(f)
|
||||||
|
while f<twodottwo {
|
||||||
|
f+=0.1
|
||||||
|
floats.print_f(f)
|
||||||
|
}
|
||||||
|
floats.print_f(f)
|
||||||
|
txt.print(" 2.2\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
713
examples/test.p8
713
examples/test.p8
@ -5,11 +5,14 @@
|
|||||||
|
|
||||||
main {
|
main {
|
||||||
sub start() {
|
sub start() {
|
||||||
byte b = -100
|
test_string()
|
||||||
ubyte ub = 20
|
txt.nl()
|
||||||
word w = -20000
|
test_compare_variable()
|
||||||
uword uw = 2000
|
txt.nl()
|
||||||
float f = -100
|
test_compare_literal()
|
||||||
|
}
|
||||||
|
|
||||||
|
sub test_string() {
|
||||||
str name="john"
|
str name="john"
|
||||||
|
|
||||||
if (string.compare(name, "aaa")==0) or (string.compare(name, "john")==0) or (string.compare(name, "bbb")==0) {
|
if (string.compare(name, "aaa")==0) or (string.compare(name, "john")==0) or (string.compare(name, "bbb")==0) {
|
||||||
@ -24,133 +27,579 @@ main {
|
|||||||
if name=="aaa" or name=="zzz" or name=="bbb"
|
if name=="aaa" or name=="zzz" or name=="bbb"
|
||||||
txt.print("name2b fail!\n")
|
txt.print("name2b fail!\n")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
; txt.print("all 1: ")
|
sub test_compare_literal() {
|
||||||
; txt.print_ub(b == -100)
|
byte b = -100
|
||||||
; txt.print_ub(b != -99)
|
ubyte ub = 20
|
||||||
; txt.print_ub(b < -99)
|
word w = -20000
|
||||||
; txt.print_ub(b <= -100)
|
uword uw = 2000
|
||||||
; txt.print_ub(b > -101)
|
float f = -100
|
||||||
; txt.print_ub(b >= -100)
|
|
||||||
; txt.print_ub(ub ==20)
|
txt.print("all 1: ")
|
||||||
; txt.print_ub(ub !=19)
|
txt.print_ub(b == -100)
|
||||||
; txt.print_ub(ub <21)
|
txt.print_ub(b != -99)
|
||||||
; txt.print_ub(ub <=20)
|
txt.print_ub(b < -99)
|
||||||
; txt.print_ub(ub>19)
|
txt.print_ub(b <= -100)
|
||||||
; txt.print_ub(ub>=20)
|
txt.print_ub(b > -101)
|
||||||
; txt.spc()
|
txt.print_ub(b >= -100)
|
||||||
; txt.print_ub(w == -20000)
|
txt.print_ub(ub ==20)
|
||||||
; txt.print_ub(w != -19999)
|
txt.print_ub(ub !=19)
|
||||||
; txt.print_ub(w < -19999)
|
txt.print_ub(ub <21)
|
||||||
; txt.print_ub(w <= -20000)
|
txt.print_ub(ub <=20)
|
||||||
; txt.print_ub(w > -20001)
|
txt.print_ub(ub>19)
|
||||||
; txt.print_ub(w >= -20000)
|
txt.print_ub(ub>=20)
|
||||||
; txt.print_ub(uw == 2000)
|
txt.spc()
|
||||||
; txt.print_ub(uw != 2001)
|
txt.print_ub(w == -20000)
|
||||||
; txt.print_ub(uw < 2001)
|
txt.print_ub(w != -19999)
|
||||||
; txt.print_ub(uw <= 2000)
|
txt.print_ub(w < -19999)
|
||||||
; txt.print_ub(uw > 1999)
|
txt.print_ub(w <= -20000)
|
||||||
; txt.print_ub(uw >= 2000)
|
txt.print_ub(w > -20001)
|
||||||
; txt.spc()
|
txt.print_ub(w >= -20000)
|
||||||
; txt.print_ub(f == -100.0)
|
txt.print_ub(uw == 2000)
|
||||||
; txt.print_ub(f != -99.0)
|
txt.print_ub(uw != 2001)
|
||||||
; txt.print_ub(f < -99.0)
|
txt.print_ub(uw < 2001)
|
||||||
; txt.print_ub(f <= -100.0)
|
txt.print_ub(uw <= 2000)
|
||||||
; txt.print_ub(f > -101.0)
|
txt.print_ub(uw > 1999)
|
||||||
; txt.print_ub(f >= -100.0)
|
txt.print_ub(uw >= 2000)
|
||||||
; txt.nl()
|
txt.spc()
|
||||||
;
|
txt.print_ub(f == -100.0)
|
||||||
; txt.print("all 0: ")
|
txt.print_ub(f != -99.0)
|
||||||
; txt.print_ub(b == -99)
|
txt.print_ub(f < -99.0)
|
||||||
; txt.print_ub(b != -100)
|
txt.print_ub(f <= -100.0)
|
||||||
; txt.print_ub(b < -100)
|
txt.print_ub(f > -101.0)
|
||||||
; txt.print_ub(b <= -101)
|
txt.print_ub(f >= -100.0)
|
||||||
; txt.print_ub(b > -100)
|
txt.nl()
|
||||||
; txt.print_ub(b >= -99)
|
|
||||||
; txt.print_ub(ub ==21)
|
txt.print("all 0: ")
|
||||||
; txt.print_ub(ub !=20)
|
txt.print_ub(b == -99)
|
||||||
; txt.print_ub(ub <20)
|
txt.print_ub(b != -100)
|
||||||
; txt.print_ub(ub <=19)
|
txt.print_ub(b < -100)
|
||||||
; txt.print_ub(ub>20)
|
txt.print_ub(b <= -101)
|
||||||
; txt.print_ub(ub>=21)
|
txt.print_ub(b > -100)
|
||||||
; txt.spc()
|
txt.print_ub(b >= -99)
|
||||||
; txt.print_ub(w == -20001)
|
txt.print_ub(ub ==21)
|
||||||
; txt.print_ub(w != -20000)
|
txt.print_ub(ub !=20)
|
||||||
; txt.print_ub(w < -20000)
|
txt.print_ub(ub <20)
|
||||||
; txt.print_ub(w <= -20001)
|
txt.print_ub(ub <=19)
|
||||||
; txt.print_ub(w > -20000)
|
txt.print_ub(ub>20)
|
||||||
; txt.print_ub(w >= -19999)
|
txt.print_ub(ub>=21)
|
||||||
; txt.print_ub(uw == 1999)
|
txt.spc()
|
||||||
; txt.print_ub(uw != 2000)
|
txt.print_ub(w == -20001)
|
||||||
; txt.print_ub(uw < 2000)
|
txt.print_ub(w != -20000)
|
||||||
; txt.print_ub(uw <= 1999)
|
txt.print_ub(w < -20000)
|
||||||
; txt.print_ub(uw > 2000)
|
txt.print_ub(w <= -20001)
|
||||||
; txt.print_ub(uw >= 2001)
|
txt.print_ub(w > -20000)
|
||||||
; txt.spc()
|
txt.print_ub(w >= -19999)
|
||||||
; txt.print_ub(f == -99.0)
|
txt.print_ub(uw == 1999)
|
||||||
; txt.print_ub(f != -100.0)
|
txt.print_ub(uw != 2000)
|
||||||
; txt.print_ub(f < -100.0)
|
txt.print_ub(uw < 2000)
|
||||||
; txt.print_ub(f <= -101.0)
|
txt.print_ub(uw <= 1999)
|
||||||
; txt.print_ub(f > -100.0)
|
txt.print_ub(uw > 2000)
|
||||||
; txt.print_ub(f >= -99.0)
|
txt.print_ub(uw >= 2001)
|
||||||
; txt.nl()
|
txt.spc()
|
||||||
;
|
txt.print_ub(f == -99.0)
|
||||||
; ; TODO ALL OF THE ABOVE BUT WITH A VARIABLE INSTEAD OF A CONST VALUE
|
txt.print_ub(f != -100.0)
|
||||||
;
|
txt.print_ub(f < -100.0)
|
||||||
;
|
txt.print_ub(f <= -101.0)
|
||||||
; b = -100
|
txt.print_ub(f > -100.0)
|
||||||
; while b <= -20
|
txt.print_ub(f >= -99.0)
|
||||||
; b++
|
txt.nl()
|
||||||
; txt.print_b(b)
|
|
||||||
; txt.print(" -19\n")
|
txt.print("all .: ")
|
||||||
; b = -100
|
if b == -100 txt.chrout('.')
|
||||||
; while b < -20
|
if b != -99 txt.chrout('.')
|
||||||
; b++
|
if b < -99 txt.chrout('.')
|
||||||
; txt.print_b(b)
|
if b <= -100 txt.chrout('.')
|
||||||
; txt.print(" -20\n")
|
if b > -101 txt.chrout('.')
|
||||||
;
|
if b >= -100 txt.chrout('.')
|
||||||
; ub = 20
|
if ub ==20 txt.chrout('.')
|
||||||
; while ub <= 200
|
if ub !=19 txt.chrout('.')
|
||||||
; ub++
|
if ub <21 txt.chrout('.')
|
||||||
; txt.print_ub(ub)
|
if ub <=20 txt.chrout('.')
|
||||||
; txt.print(" 201\n")
|
if ub>19 txt.chrout('.')
|
||||||
; ub = 20
|
if ub>=20 txt.chrout('.')
|
||||||
; while ub < 200
|
txt.spc()
|
||||||
; ub++
|
if w == -20000 txt.chrout('.')
|
||||||
; txt.print_ub(ub)
|
if w != -19999 txt.chrout('.')
|
||||||
; txt.print(" 200\n")
|
if w < -19999 txt.chrout('.')
|
||||||
;
|
if w <= -20000 txt.chrout('.')
|
||||||
; w = -20000
|
if w > -20001 txt.chrout('.')
|
||||||
; while w <= -8000 {
|
if w >= -20000 txt.chrout('.')
|
||||||
; w++
|
if uw == 2000 txt.chrout('.')
|
||||||
; }
|
if uw != 2001 txt.chrout('.')
|
||||||
; txt.print_w(w)
|
if uw < 2001 txt.chrout('.')
|
||||||
; txt.print(" -7999\n")
|
if uw <= 2000 txt.chrout('.')
|
||||||
; w = -20000
|
if uw > 1999 txt.chrout('.')
|
||||||
; while w < -8000 {
|
if uw >= 2000 txt.chrout('.')
|
||||||
; w++
|
txt.spc()
|
||||||
; }
|
if f == -100.0 txt.chrout('.')
|
||||||
; txt.print_w(w)
|
if f != -99.0 txt.chrout('.')
|
||||||
; txt.print(" -8000\n")
|
if f < -99.0 txt.chrout('.')
|
||||||
;
|
if f <= -100.0 txt.chrout('.')
|
||||||
; uw = 2000
|
if f > -101.0 txt.chrout('.')
|
||||||
; while uw <= 8000 {
|
if f >= -100.0 txt.chrout('.')
|
||||||
; uw++
|
txt.nl()
|
||||||
; }
|
|
||||||
; txt.print_uw(uw)
|
txt.print(" no !: ")
|
||||||
; txt.print(" 8001\n")
|
if b == -99 txt.chrout('!')
|
||||||
; uw = 2000
|
if b != -100 txt.chrout('!')
|
||||||
; while uw < 8000 {
|
if b < -100 txt.chrout('!')
|
||||||
; uw++
|
if b <= -101 txt.chrout('!')
|
||||||
; }
|
if b > -100 txt.chrout('!')
|
||||||
; txt.print_uw(uw)
|
if b >= -99 txt.chrout('!')
|
||||||
; txt.print(" 8000\n")
|
if ub ==21 txt.chrout('!')
|
||||||
;
|
if ub !=20 txt.chrout('!')
|
||||||
; f = 0.0
|
if ub <20 txt.chrout('!')
|
||||||
; while f<2.2 {
|
if ub <=19 txt.chrout('!')
|
||||||
; f+=0.1
|
if ub>20 txt.chrout('!')
|
||||||
; }
|
if ub>=21 txt.chrout('!')
|
||||||
; floats.print_f(f)
|
txt.spc()
|
||||||
; txt.print(" 2.2\n")
|
if w == -20001 txt.chrout('!')
|
||||||
|
if w != -20000 txt.chrout('!')
|
||||||
|
if w < -20000 txt.chrout('!')
|
||||||
|
if w <= -20001 txt.chrout('!')
|
||||||
|
if w > -20000 txt.chrout('!')
|
||||||
|
if w >= -19999 txt.chrout('!')
|
||||||
|
if uw == 1999 txt.chrout('!')
|
||||||
|
if uw != 2000 txt.chrout('!')
|
||||||
|
if uw < 2000 txt.chrout('!')
|
||||||
|
if uw <= 1999 txt.chrout('!')
|
||||||
|
if uw > 2000 txt.chrout('!')
|
||||||
|
if uw >= 2001 txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == -99.0 txt.chrout('!')
|
||||||
|
if f != -100.0 txt.chrout('!')
|
||||||
|
if f < -100.0 txt.chrout('!')
|
||||||
|
if f <= -101.0 txt.chrout('!')
|
||||||
|
if f > -100.0 txt.chrout('!')
|
||||||
|
if f >= -99.0 txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == -100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b != -99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b < -99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b <= -100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b > -101 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b >= -100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub ==20 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub !=19 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub <21 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub <=20 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub>19 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub>=20 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if w == -20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w != -19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w < -19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w <= -20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w > -20001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w >= -20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw == 2000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw != 2001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw < 2001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw <= 2000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw > 1999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw >= 2000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == -100.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f != -99.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f < -99.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f <= -100.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f > -101.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f >= -100.0 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == -99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b != -100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b < -100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b <= -101 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b > -100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b >= -99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub ==21 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub !=20 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <20 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <=19 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>20 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>=21 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if w == -20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w != -20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w < -20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w <= -20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w > -20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w >= -19999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw == 1999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw != 2000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw < 2000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw <= 1999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw > 2000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw >= 2001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if f == -99.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f != -100.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f < -100.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f <= -101.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f > -100.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f >= -99.0 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
|
||||||
|
b = -100
|
||||||
|
while b <= -20
|
||||||
|
b++
|
||||||
|
txt.print_b(b)
|
||||||
|
txt.print(" -19\n")
|
||||||
|
b = -100
|
||||||
|
while b < -20
|
||||||
|
b++
|
||||||
|
txt.print_b(b)
|
||||||
|
txt.print(" -20\n")
|
||||||
|
|
||||||
|
ub = 20
|
||||||
|
while ub <= 200
|
||||||
|
ub++
|
||||||
|
txt.print_ub(ub)
|
||||||
|
txt.print(" 201\n")
|
||||||
|
ub = 20
|
||||||
|
while ub < 200
|
||||||
|
ub++
|
||||||
|
txt.print_ub(ub)
|
||||||
|
txt.print(" 200\n")
|
||||||
|
|
||||||
|
w = -20000
|
||||||
|
while w <= -8000 {
|
||||||
|
w++
|
||||||
|
}
|
||||||
|
txt.print_w(w)
|
||||||
|
txt.print(" -7999\n")
|
||||||
|
w = -20000
|
||||||
|
while w < -8000 {
|
||||||
|
w++
|
||||||
|
}
|
||||||
|
txt.print_w(w)
|
||||||
|
txt.print(" -8000\n")
|
||||||
|
|
||||||
|
uw = 2000
|
||||||
|
while uw <= 8000 {
|
||||||
|
uw++
|
||||||
|
}
|
||||||
|
txt.print_uw(uw)
|
||||||
|
txt.print(" 8001\n")
|
||||||
|
uw = 2000
|
||||||
|
while uw < 8000 {
|
||||||
|
uw++
|
||||||
|
}
|
||||||
|
txt.print_uw(uw)
|
||||||
|
txt.print(" 8000\n")
|
||||||
|
|
||||||
|
f = 0.0
|
||||||
|
floats.print_f(f)
|
||||||
|
while f<2.2 {
|
||||||
|
f+=0.1
|
||||||
|
floats.print_f(f)
|
||||||
|
}
|
||||||
|
floats.print_f(f)
|
||||||
|
txt.print(" 2.2\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
sub test_compare_variable() {
|
||||||
|
byte b = -100
|
||||||
|
ubyte ub = 20
|
||||||
|
word w = -20000
|
||||||
|
uword uw = 2000
|
||||||
|
float f = -100
|
||||||
|
|
||||||
|
byte minus_100 = -100
|
||||||
|
byte minus_99 = -99
|
||||||
|
byte minus_20 = -20
|
||||||
|
byte minus_101 = -101
|
||||||
|
ubyte nineteen = 19
|
||||||
|
ubyte twenty = 20
|
||||||
|
ubyte twenty1 = 21
|
||||||
|
ubyte twohundred = 200
|
||||||
|
float f_minus_100 = -100.0
|
||||||
|
float f_minus_101 = -101.0
|
||||||
|
float f_minus_99 = -99.0
|
||||||
|
float twodottwo = 2.2
|
||||||
|
word minus8000 = -8000
|
||||||
|
word eightthousand = 8000
|
||||||
|
word w_min_20000 = -20000
|
||||||
|
word w_min_19999 = -19999
|
||||||
|
word w_min_20001 = -20001
|
||||||
|
uword twothousand = 2000
|
||||||
|
uword twothousand1 = 2001
|
||||||
|
uword nineteen99 = 1999
|
||||||
|
|
||||||
|
|
||||||
|
txt.print("all 1: ")
|
||||||
|
txt.print_ub(b == minus_100)
|
||||||
|
txt.print_ub(b != minus_99)
|
||||||
|
txt.print_ub(b < minus_99)
|
||||||
|
txt.print_ub(b <= minus_100)
|
||||||
|
txt.print_ub(b > minus_101)
|
||||||
|
txt.print_ub(b >= minus_100)
|
||||||
|
txt.print_ub(ub ==twenty)
|
||||||
|
txt.print_ub(ub !=nineteen)
|
||||||
|
txt.print_ub(ub <twenty1)
|
||||||
|
txt.print_ub(ub <=twenty)
|
||||||
|
txt.print_ub(ub>nineteen)
|
||||||
|
txt.print_ub(ub>=twenty)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(w == w_min_20000)
|
||||||
|
txt.print_ub(w != w_min_19999)
|
||||||
|
txt.print_ub(w < w_min_19999)
|
||||||
|
txt.print_ub(w <= w_min_20000)
|
||||||
|
txt.print_ub(w > w_min_20001)
|
||||||
|
txt.print_ub(w >= w_min_20000)
|
||||||
|
txt.print_ub(uw == twothousand)
|
||||||
|
txt.print_ub(uw != twothousand1)
|
||||||
|
txt.print_ub(uw < twothousand1)
|
||||||
|
txt.print_ub(uw <= twothousand)
|
||||||
|
txt.print_ub(uw > nineteen99)
|
||||||
|
txt.print_ub(uw >= twothousand)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(f == f_minus_100)
|
||||||
|
txt.print_ub(f != f_minus_99)
|
||||||
|
txt.print_ub(f < f_minus_99)
|
||||||
|
txt.print_ub(f <= f_minus_100)
|
||||||
|
txt.print_ub(f > f_minus_101)
|
||||||
|
txt.print_ub(f >= f_minus_100)
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all 0: ")
|
||||||
|
txt.print_ub(b == minus_99)
|
||||||
|
txt.print_ub(b != minus_100)
|
||||||
|
txt.print_ub(b < minus_100)
|
||||||
|
txt.print_ub(b <= minus_101)
|
||||||
|
txt.print_ub(b > minus_100)
|
||||||
|
txt.print_ub(b >= minus_99)
|
||||||
|
txt.print_ub(ub ==twenty1)
|
||||||
|
txt.print_ub(ub !=twenty)
|
||||||
|
txt.print_ub(ub <twenty)
|
||||||
|
txt.print_ub(ub <=nineteen)
|
||||||
|
txt.print_ub(ub>twenty)
|
||||||
|
txt.print_ub(ub>=twenty1)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(w == w_min_20001)
|
||||||
|
txt.print_ub(w != w_min_20000)
|
||||||
|
txt.print_ub(w < w_min_20000)
|
||||||
|
txt.print_ub(w <= w_min_20001)
|
||||||
|
txt.print_ub(w > w_min_20000)
|
||||||
|
txt.print_ub(w >= w_min_19999)
|
||||||
|
txt.print_ub(uw == nineteen99)
|
||||||
|
txt.print_ub(uw != twothousand)
|
||||||
|
txt.print_ub(uw < twothousand)
|
||||||
|
txt.print_ub(uw <= nineteen99)
|
||||||
|
txt.print_ub(uw > twothousand)
|
||||||
|
txt.print_ub(uw >= twothousand1)
|
||||||
|
txt.spc()
|
||||||
|
txt.print_ub(f == f_minus_99)
|
||||||
|
txt.print_ub(f != f_minus_100)
|
||||||
|
txt.print_ub(f < f_minus_100)
|
||||||
|
txt.print_ub(f <= f_minus_101)
|
||||||
|
txt.print_ub(f > f_minus_100)
|
||||||
|
txt.print_ub(f >= f_minus_99)
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == minus_100 txt.chrout('.')
|
||||||
|
if b != minus_99 txt.chrout('.')
|
||||||
|
if b < minus_99 txt.chrout('.')
|
||||||
|
if b <= minus_100 txt.chrout('.')
|
||||||
|
if b > minus_101 txt.chrout('.')
|
||||||
|
if b >= minus_100 txt.chrout('.')
|
||||||
|
if ub == twenty txt.chrout('.')
|
||||||
|
if ub != nineteen txt.chrout('.')
|
||||||
|
if ub < twenty1 txt.chrout('.')
|
||||||
|
if ub <= twenty txt.chrout('.')
|
||||||
|
if ub> nineteen txt.chrout('.')
|
||||||
|
if ub>= twenty txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20000 txt.chrout('.')
|
||||||
|
if w != w_min_19999 txt.chrout('.')
|
||||||
|
if w < w_min_19999 txt.chrout('.')
|
||||||
|
if w <= w_min_20000 txt.chrout('.')
|
||||||
|
if w > w_min_20001 txt.chrout('.')
|
||||||
|
if w >= w_min_20000 txt.chrout('.')
|
||||||
|
if uw == twothousand txt.chrout('.')
|
||||||
|
if uw != twothousand1 txt.chrout('.')
|
||||||
|
if uw < twothousand1 txt.chrout('.')
|
||||||
|
if uw <= twothousand txt.chrout('.')
|
||||||
|
if uw > nineteen99 txt.chrout('.')
|
||||||
|
if uw >= twothousand txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_100 txt.chrout('.')
|
||||||
|
if f != f_minus_99 txt.chrout('.')
|
||||||
|
if f < f_minus_99 txt.chrout('.')
|
||||||
|
if f <= f_minus_100 txt.chrout('.')
|
||||||
|
if f > f_minus_101 txt.chrout('.')
|
||||||
|
if f >= f_minus_100 txt.chrout('.')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print(" no !: ")
|
||||||
|
if b == minus_99 txt.chrout('!')
|
||||||
|
if b != minus_100 txt.chrout('!')
|
||||||
|
if b < minus_100 txt.chrout('!')
|
||||||
|
if b <= minus_101 txt.chrout('!')
|
||||||
|
if b > minus_100 txt.chrout('!')
|
||||||
|
if b >= minus_99 txt.chrout('!')
|
||||||
|
if ub == twenty1 txt.chrout('!')
|
||||||
|
if ub != twenty txt.chrout('!')
|
||||||
|
if ub < twenty txt.chrout('!')
|
||||||
|
if ub <= nineteen txt.chrout('!')
|
||||||
|
if ub> twenty txt.chrout('!')
|
||||||
|
if ub>= twenty1 txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20001 txt.chrout('!')
|
||||||
|
if w != w_min_20000 txt.chrout('!')
|
||||||
|
if w < w_min_20000 txt.chrout('!')
|
||||||
|
if w <= w_min_20001 txt.chrout('!')
|
||||||
|
if w > w_min_20000 txt.chrout('!')
|
||||||
|
if w >= w_min_19999 txt.chrout('!')
|
||||||
|
if uw == nineteen99 txt.chrout('!')
|
||||||
|
if uw != twothousand txt.chrout('!')
|
||||||
|
if uw < twothousand txt.chrout('!')
|
||||||
|
if uw <= nineteen99 txt.chrout('!')
|
||||||
|
if uw > twothousand txt.chrout('!')
|
||||||
|
if uw >= twothousand1 txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_99 txt.chrout('!')
|
||||||
|
if f != f_minus_100 txt.chrout('!')
|
||||||
|
if f < f_minus_100 txt.chrout('!')
|
||||||
|
if f <= f_minus_101 txt.chrout('!')
|
||||||
|
if f > f_minus_100 txt.chrout('!')
|
||||||
|
if f >= f_minus_99 txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b != minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b < minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b <= minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b > minus_101 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if b >= minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub == twenty txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub != nineteen txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub < twenty1 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub <= twenty txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub> nineteen txt.chrout('.') else txt.chrout('!')
|
||||||
|
if ub>=twenty txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w != w_min_19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w < w_min_19999 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w <= w_min_20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w > w_min_20001 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if w >= w_min_20000 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw == twothousand txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw != twothousand1 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw < twothousand1 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw <= twothousand txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw > nineteen99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if uw >= twothousand txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f != f_minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f < f_minus_99 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f <= f_minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f > f_minus_101 txt.chrout('.') else txt.chrout('!')
|
||||||
|
if f >= f_minus_100 txt.chrout('.') else txt.chrout('!')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
txt.print("all .: ")
|
||||||
|
if b == minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b != minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b < minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b <= minus_101 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b > minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if b >= minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub == twenty1 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub !=twenty txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <twenty txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub <=nineteen txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>twenty txt.chrout('!') else txt.chrout('.')
|
||||||
|
if ub>= twenty1 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if w == w_min_20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w != w_min_20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w < w_min_20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w <= w_min_20001 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w > w_min_20000 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if w >= w_min_19999 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw == nineteen99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw != twothousand txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw < twothousand txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw <= nineteen99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw > twothousand txt.chrout('!') else txt.chrout('.')
|
||||||
|
if uw >= twothousand1 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.spc()
|
||||||
|
if f == f_minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f != f_minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f < f_minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f <= f_minus_101 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f > f_minus_100 txt.chrout('!') else txt.chrout('.')
|
||||||
|
if f >= f_minus_99 txt.chrout('!') else txt.chrout('.')
|
||||||
|
txt.nl()
|
||||||
|
|
||||||
|
|
||||||
|
b = minus_100
|
||||||
|
while b <= minus_20
|
||||||
|
b++
|
||||||
|
txt.print_b(b)
|
||||||
|
txt.print(" -19\n")
|
||||||
|
b = minus_100
|
||||||
|
while b < -minus_20
|
||||||
|
b++
|
||||||
|
txt.print_b(b)
|
||||||
|
txt.print(" -20\n")
|
||||||
|
|
||||||
|
ub = 20
|
||||||
|
while ub <= twohundred
|
||||||
|
ub++
|
||||||
|
txt.print_ub(ub)
|
||||||
|
txt.print(" 201\n")
|
||||||
|
ub = 20
|
||||||
|
while ub < twohundred
|
||||||
|
ub++
|
||||||
|
txt.print_ub(ub)
|
||||||
|
txt.print(" 200\n")
|
||||||
|
|
||||||
|
w = w_min_20000
|
||||||
|
while w <= minus8000 {
|
||||||
|
w++
|
||||||
|
}
|
||||||
|
txt.print_w(w)
|
||||||
|
txt.print(" -7999\n")
|
||||||
|
w = w_min_20000
|
||||||
|
while w < minus8000 {
|
||||||
|
w++
|
||||||
|
}
|
||||||
|
txt.print_w(w)
|
||||||
|
txt.print(" -8000\n")
|
||||||
|
|
||||||
|
uw = 2000
|
||||||
|
while uw <= eightthousand {
|
||||||
|
uw++
|
||||||
|
}
|
||||||
|
txt.print_uw(uw)
|
||||||
|
txt.print(" 8001\n")
|
||||||
|
uw = 2000
|
||||||
|
while uw < eightthousand {
|
||||||
|
uw++
|
||||||
|
}
|
||||||
|
txt.print_uw(uw)
|
||||||
|
txt.print(" 8000\n")
|
||||||
|
|
||||||
|
f = 0.0
|
||||||
|
floats.print_f(f)
|
||||||
|
while f<twodottwo {
|
||||||
|
f+=0.1
|
||||||
|
floats.print_f(f)
|
||||||
|
}
|
||||||
|
floats.print_f(f)
|
||||||
|
txt.print(" 2.2\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user