fix typecasting of signed byte to signed word in a variable

This commit is contained in:
Irmen de Jong 2020-11-25 00:18:07 +01:00
parent 2a0ffaf45d
commit 53a600d87b
5 changed files with 15 additions and 6 deletions

View File

@ -1193,7 +1193,7 @@ $label nop""")
}
internal fun signExtendAYlsb(valueDt: DataType) {
// sign extend signed byte in AY to full word in AY
// sign extend signed byte in A to full word in AY
when(valueDt) {
DataType.UBYTE -> out(" ldy #0")
DataType.BYTE -> out(" jsr prog8_lib.sign_extend_AY_byte")
@ -1202,7 +1202,7 @@ $label nop""")
}
internal fun signExtendStackLsb(valueDt: DataType) {
// sign extend signed byte on stack to signed word
// sign extend signed byte on stack to signed word on stack
when(valueDt) {
DataType.UBYTE -> out(" lda #0 | sta P8ESTACK_HI+1,x")
DataType.BYTE -> out(" jsr prog8_lib.sign_extend_stack_byte")
@ -1211,14 +1211,14 @@ $label nop""")
}
internal fun signExtendVariableLsb(asmvar: String, valueDt: DataType) {
// sign extend signed byte in a word variable
// sign extend signed byte in a var to a full word in that variable
when(valueDt) {
DataType.UBYTE -> {
out(" lda #0 | sta $asmvar+1")
}
DataType.BYTE -> {
out("""
lda $asmvar+1
lda $asmvar
ora #$7f
bmi +
lda #0

View File

@ -333,7 +333,13 @@ internal class AssignmentAsmGen(private val program: Program, private val asmgen
DataType.UBYTE, DataType.BYTE -> {
asmgen.out(" lda $sourceAsmVarName | sta $targetAsmVarName")
}
DataType.UWORD, DataType.WORD -> {
DataType.UWORD -> {
if(CompilationTarget.instance.machine.cpu==CpuType.CPU65c02)
asmgen.out(" lda $sourceAsmVarName | sta $targetAsmVarName | stz $targetAsmVarName+1")
else
asmgen.out(" lda $sourceAsmVarName | sta $targetAsmVarName | lda #0 | sta $targetAsmVarName+1")
}
DataType.WORD -> {
asmgen.out(" lda $sourceAsmVarName | sta $targetAsmVarName")
asmgen.signExtendVariableLsb(targetAsmVarName, DataType.BYTE)
}

View File

@ -3,6 +3,7 @@
%import textio
%import test_stack
spritedata $2000 {
; this memory block contains the sprite data
; it must start on an address aligned to 64 bytes.

View File

@ -3,6 +3,7 @@
%import test_stack
%import textio
main {
; vertices

View File

@ -10,6 +10,7 @@
; Converted to prog8 by Irmen de Jong.
main {
const uword SCREEN1 = $E000
const uword SCREEN2 = $E400
@ -27,7 +28,7 @@ main {
; ubyte v = c64.VMCSB
c64.CIA2PRA = (block & $FC) | (lsb(SCREEN1 >> 14) ^ $03)
repeat 100 {
repeat {
doplasma(SCREEN1)
c64.VMCSB = PAGE1
doplasma(SCREEN2)