word multiplications done

This commit is contained in:
Irmen de Jong 2019-01-12 00:04:26 +01:00
parent b8251b2e26
commit cad42ddc05
4 changed files with 825 additions and 45 deletions

View File

@ -1266,6 +1266,25 @@ mul_byte_3 .proc
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_3 .proc
; W + W*2
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
clc
lda c64.ESTACK_LO+1,x
adc c64.SCRATCH_ZPWORD1
sta c64.ESTACK_LO+1,x
lda c64.ESTACK_HI+1,x
adc c64.SCRATCH_ZPWORD1+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_5 .proc
; X + X*4
@ -1277,6 +1296,27 @@ mul_byte_5 .proc
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_5 .proc
; W + W*4
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
clc
lda c64.ESTACK_LO+1,x
adc c64.SCRATCH_ZPWORD1
sta c64.ESTACK_LO+1,x
lda c64.ESTACK_HI+1,x
adc c64.SCRATCH_ZPWORD1+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_6 .proc
; X*2 + X*4
@ -1289,7 +1329,31 @@ mul_byte_6 .proc
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_6 .proc
; W*2 + W*4
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
lda c64.SCRATCH_ZPWORD1
sta c64.SCRATCH_ZPWORD2
lda c64.SCRATCH_ZPWORD1+1
sta c64.SCRATCH_ZPWORD2+1
asl c64.SCRATCH_ZPWORD2
rol c64.SCRATCH_ZPWORD2+1
clc
lda c64.SCRATCH_ZPWORD1
adc c64.SCRATCH_ZPWORD2
sta c64.ESTACK_LO+1,x
lda c64.SCRATCH_ZPWORD1+1
adc c64.SCRATCH_ZPWORD2+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_7 .proc
; X*8 - X
lda c64.ESTACK_LO+1,x
@ -1302,6 +1366,29 @@ mul_byte_7 .proc
rts
.pend
mul_word_7 .proc
; W*8 - W
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
lda c64.SCRATCH_ZPWORD1
sec
lda c64.SCRATCH_ZPWORD1
sbc c64.ESTACK_LO+1,x
sta c64.ESTACK_LO+1,x
lda c64.SCRATCH_ZPWORD1+1
sbc c64.ESTACK_HI+1,x
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_9 .proc
; X + X*8
lda c64.ESTACK_LO+1,x
@ -1314,6 +1401,28 @@ mul_byte_9 .proc
rts
.pend
mul_word_9 .proc
; W + W*8
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
clc
lda c64.ESTACK_LO+1,x
adc c64.SCRATCH_ZPWORD1
sta c64.ESTACK_LO+1,x
lda c64.ESTACK_HI+1,x
adc c64.SCRATCH_ZPWORD1+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_10 .proc
; X + X + X*8
lda c64.ESTACK_LO+1,x
@ -1322,11 +1431,38 @@ mul_byte_10 .proc
asl a
clc
adc c64.ESTACK_LO+1,x
clc
adc c64.ESTACK_LO+1,x
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_10 .proc
; W*2 + W*8
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
lda c64.SCRATCH_ZPWORD1
sta c64.SCRATCH_ZPWORD2
lda c64.SCRATCH_ZPWORD1+1
sta c64.SCRATCH_ZPWORD2+1
asl c64.SCRATCH_ZPWORD2
rol c64.SCRATCH_ZPWORD2+1
asl c64.SCRATCH_ZPWORD2
rol c64.SCRATCH_ZPWORD2+1
clc
lda c64.SCRATCH_ZPWORD1
adc c64.SCRATCH_ZPWORD2
sta c64.ESTACK_LO+1,x
lda c64.SCRATCH_ZPWORD1+1
adc c64.SCRATCH_ZPWORD2+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_11 .proc
; X + X + X + X*8
lda c64.ESTACK_LO+1,x
@ -1336,12 +1472,16 @@ mul_byte_11 .proc
asl a
clc
adc c64.SCRATCH_ZPREG
clc
adc c64.SCRATCH_ZPREG
clc
adc c64.SCRATCH_ZPREG
sta c64.ESTACK_LO+1,x
rts
.pend
; mul_word_11 is skipped (too much code)
mul_byte_12 .proc
; X*4 + X*8
lda c64.ESTACK_LO+1,x
@ -1354,7 +1494,33 @@ mul_byte_12 .proc
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_12 .proc
; W*4 + W*8
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
lda c64.SCRATCH_ZPWORD1
sta c64.SCRATCH_ZPWORD2
lda c64.SCRATCH_ZPWORD1+1
sta c64.SCRATCH_ZPWORD2+1
asl c64.SCRATCH_ZPWORD2
rol c64.SCRATCH_ZPWORD2+1
clc
lda c64.SCRATCH_ZPWORD1
adc c64.SCRATCH_ZPWORD2
sta c64.ESTACK_LO+1,x
lda c64.SCRATCH_ZPWORD1+1
adc c64.SCRATCH_ZPWORD2+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_13 .proc
; X*16 - X -X -X
lda c64.ESTACK_LO+1,x
@ -1365,12 +1531,16 @@ mul_byte_13 .proc
asl a
sec
sbc c64.SCRATCH_ZPREG
sec
sbc c64.SCRATCH_ZPREG
sec
sbc c64.SCRATCH_ZPREG
sta c64.ESTACK_LO+1,x
rts
.pend
; mul_word_13 is skipped (too much code)
mul_byte_14 .proc
; X*16 - X -X
lda c64.ESTACK_LO+1,x
@ -1380,11 +1550,14 @@ mul_byte_14 .proc
asl a
sec
sbc c64.ESTACK_LO+1,x
sec
sbc c64.ESTACK_LO+1,x
sta c64.ESTACK_LO+1,x
rts
.pend
; mul_word_14 is skipped (too much code)
mul_byte_15 .proc
; X*16 - X
lda c64.ESTACK_LO+1,x
@ -1399,6 +1572,30 @@ mul_byte_15 .proc
rts
.pend
mul_word_15 .proc
; W*16 - W
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
sec
lda c64.SCRATCH_ZPWORD1
sbc c64.ESTACK_LO+1,x
sta c64.ESTACK_LO+1,x
lda c64.SCRATCH_ZPWORD1+1
sbc c64.ESTACK_HI+1,x
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_20 .proc
; X*4 + X*16
lda c64.ESTACK_LO+1,x
@ -1412,7 +1609,35 @@ mul_byte_20 .proc
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_20 .proc
; W*4 + W*16
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
lda c64.SCRATCH_ZPWORD1
sta c64.SCRATCH_ZPWORD2
lda c64.SCRATCH_ZPWORD1+1
sta c64.SCRATCH_ZPWORD2+1
asl c64.SCRATCH_ZPWORD2
rol c64.SCRATCH_ZPWORD2+1
asl c64.SCRATCH_ZPWORD2
rol c64.SCRATCH_ZPWORD2+1
clc
lda c64.SCRATCH_ZPWORD1
adc c64.SCRATCH_ZPWORD2
sta c64.ESTACK_LO+1,x
lda c64.SCRATCH_ZPWORD1+1
adc c64.SCRATCH_ZPWORD2+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_25 .proc
; X + X*8 + X*16
lda c64.ESTACK_LO+1,x
@ -1423,11 +1648,43 @@ mul_byte_25 .proc
asl a
clc
adc c64.SCRATCH_ZPREG
clc
adc c64.ESTACK_LO+1,x
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_25 .proc
; W + W*8 + W*16
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
clc
lda c64.ESTACK_LO+1,x
adc c64.SCRATCH_ZPWORD1
sta c64.ESTACK_LO+1,x
lda c64.ESTACK_HI+1,x
adc c64.SCRATCH_ZPWORD1+1
sta c64.ESTACK_HI+1,x
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
clc
lda c64.ESTACK_LO+1,x
adc c64.SCRATCH_ZPWORD1
sta c64.ESTACK_LO+1,x
lda c64.ESTACK_HI+1,x
adc c64.SCRATCH_ZPWORD1+1
sta c64.ESTACK_HI+1,x
rts
.pend
mul_byte_40 .proc
; X*8 + X*32
lda c64.ESTACK_LO+1,x
@ -1442,6 +1699,37 @@ mul_byte_40 .proc
sta c64.ESTACK_LO+1,x
rts
.pend
mul_word_40 .proc
; W*8 + W*32
lda c64.ESTACK_LO+1,x
sta c64.SCRATCH_ZPWORD1
lda c64.ESTACK_HI+1,x
sta c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
lda c64.SCRATCH_ZPWORD1
sta c64.ESTACK_LO+1,x
lda c64.SCRATCH_ZPWORD1+1
sta c64.ESTACK_HI+1,x
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
asl c64.SCRATCH_ZPWORD1
rol c64.SCRATCH_ZPWORD1+1
clc
lda c64.ESTACK_LO+1,x
adc c64.SCRATCH_ZPWORD1
sta c64.ESTACK_LO+1,x
lda c64.ESTACK_HI+1,x
adc c64.SCRATCH_ZPWORD1+1
sta c64.ESTACK_HI+1,x
rts
.pend
}}

View File

@ -924,32 +924,28 @@ class AsmGen(val options: CompilationOptions, val program: IntermediateProgram,
private fun optimizedIntMultiplicationsOnStack(mulIns: Instruction, amount: Int): String? {
if(mulIns.opcode == Opcode.MUL_B || mulIns.opcode==Opcode.MUL_UB) {
when(amount) {
0,1,2,4,8,16,32,64,128,256 -> throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already")
3,5,6,7,9,10,11,12,13,14,15,20,25,40 -> return " jsr math.mul_byte_$amount"
else -> {}
}
if(amount in setOf(0,1,2,4,8,16,32,64,128,256))
throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already")
if(mulIns.opcode == Opcode.MUL_B) {
when(amount) {
-3,-5,-6,-7,-9,-10,-11,-12,-13,-14,-15,-20,-25,-40 -> return " jsr prog8_lib.neg_b | jsr math.mul_byte_${-amount}"
else -> {}
}
}
if(amount in setOf(3,5,6,7,9,10,11,12,13,14,15,20,25,40))
return " jsr math.mul_byte_$amount"
if(mulIns.opcode == Opcode.MUL_B && amount in setOf(-3,-5,-6,-7,-9,-10,-11,-12,-13,-14,-15,-20,-25,-40))
return " jsr prog8_lib.neg_b | jsr math.mul_byte_${-amount}"
}
else if(mulIns.opcode == Opcode.MUL_W || mulIns.opcode==Opcode.MUL_UW) {
when(amount) {
0,1,2,4,8,16,32,64,128,256 -> throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already")
3,5,6,7,9,10,11,12,13,14,15,20,25,40 -> return " jsr math.mul_word_$amount"
else -> {}
}
if(mulIns.opcode == Opcode.MUL_W) {
when(amount) {
-3,-5,-6,-7,-9,-10,-11,-12,-13,-14,-15,-20,-25,-40 -> return " jsr prog8_lib.neg_w | jsr math.mul_word_${-amount}"
else -> {}
}
}
else if(mulIns.opcode == Opcode.MUL_UW) {
if(amount in setOf(0,1,2,4,8,16,32,64,128,256))
throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already")
if(amount in setOf(3,5,6,7,9,10,12,15,20,25,40))
return " jsr math.mul_word_$amount"
}
else if(mulIns.opcode == Opcode.MUL_W) {
if(amount in setOf(0,1,2,4,8,16,32,64,128,256))
throw AssemblyError("multiplication by power of 2 should have been converted into a left shift instruction already")
if(amount in setOf(3,5,6,7,9,10,12,15,20,25,40))
return " jsr math.mul_word_$amount"
if(amount in setOf(-3,-5,-6,-7,-9,-10,-12,-15,-20,-25,-40))
return " jsr prog8_lib.neg_w | jsr math.mul_word_${-amount}"
}
return null

View File

@ -66,7 +66,7 @@
for ubyte i in 0 to len(xcoor)-1 {
rotatedx[i] = (Axx*xcoor[i] + Axy*ycoor[i] + Axz*zcoor[i]) / 128
rotatedy[i] =(Ayx*xcoor[i] + Ayy*ycoor[i] + Ayz*zcoor[i]) / 128
rotatedy[i] = (Ayx*xcoor[i] + Ayy*ycoor[i] + Ayz*zcoor[i]) / 128
rotatedz[i] = (Azx*xcoor[i] + Azy*ycoor[i] + Azz*zcoor[i]) / 128
}
}

View File

@ -1,5 +1,4 @@
%import c64utils
%import c64flt
~ main {
@ -13,23 +12,520 @@
uword uw2
word w = 1000
word w2
float f1 = 1.1
float f2 = 2.2
b2 = j + (-1)
b2 = (-1) + j
b2 = j - (-1)
b2 = (-1) -j ; should not be reordered
b2 = j+1
b2 = 1+j
b2 = 1-j ; should not be reordered
; i=10
; ub2=i*1
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*2
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*3
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*4
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*5
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*6
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*7
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*8
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*9
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*10
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*11
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*12
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*13
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*14
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*15
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*16
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*17
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*18
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*19
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*20
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*21
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*22
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*23
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*24
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
; ub2=i*25
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
;
; i=5
; ub2=i*40
; c64scr.print_ub(ub2)
; c64.CHROUT('\n')
;
; c64.CHROUT('\n')
;
;
; j=5
; b2=j*1
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*2
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*3
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*4
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*5
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*6
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*7
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*8
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*9
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*10
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*11
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*12
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*13
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*14
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*15
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*16
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*17
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*18
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*19
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*20
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*21
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*22
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*23
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*24
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*25
; c64scr.print_b(b2)
; c64.CHROUT('\n')
;
; j=3
; b2=j*40
; c64scr.print_b(b2)
; c64.CHROUT('\n')
;
; c64.CHROUT('\n')
;
;
; ; multiplication by negative values
; j=5
; b2=j*-1
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-2
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-3
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-4
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-5
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-6
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-7
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-8
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-9
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-10
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-11
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-12
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-13
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-14
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-15
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-16
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-17
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-18
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-19
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-20
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-21
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-22
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-23
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-24
; c64scr.print_b(b2)
; c64.CHROUT('\n')
; b2=j*-25
; c64scr.print_b(b2)
; c64.CHROUT('\n')
;
; j=3
; b2=j*-40
; c64scr.print_b(b2)
; c64.CHROUT('\n')
;
; c64.CHROUT('\n')
;@todo the same, for uword and word
uw=1000
uw2=uw*1
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*2
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*3
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*4
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*5
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*6
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*7
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*8
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*9
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*10
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*11
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*12
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*13
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*14
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*15
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*16
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*17
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*18
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*19
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*20
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*21
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*22
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*23
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*24
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw2=uw*25
c64scr.print_uw(uw2)
c64.CHROUT('\n')
uw=500
uw2=uw*40
c64scr.print_uw(uw2)
c64.CHROUT('\n')
c64.CHROUT('\n')
w=500
w2=w*1
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*2
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*3
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*4
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*5
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*6
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*7
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*8
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*9
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*10
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*11
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*12
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*13
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*14
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*15
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*16
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*17
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*18
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*19
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*20
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*21
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*22
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*23
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*24
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*25
c64scr.print_w(w2)
c64.CHROUT('\n')
w=500
w2=w*40
c64scr.print_w(w2)
c64.CHROUT('\n')
c64.CHROUT('\n')
; multuwpluwcatuwon by negatuwve values
w=500
w2=w*-1
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-2
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-3
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-4
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-5
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-6
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-7
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-8
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-9
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-10
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-11
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-12
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-13
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-14
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-15
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-16
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-17
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-18
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-19
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-20
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-21
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-22
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-23
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-24
c64scr.print_w(w2)
c64.CHROUT('\n')
w2=w*-25
c64scr.print_w(w2)
c64.CHROUT('\n')
w=500
w2=w*-40
c64scr.print_w(w2)
c64.CHROUT('\n')
c64.CHROUT('\n')
j = j + (-1)
j = (-1) + j
j = j - (-1)
j = (-1) -j ; should not be reordered
j = j+1
j = 1+j
j = 1-j ; should not be reordered
}
}