mirror of
https://github.com/cc65/cc65.git
synced 2024-12-25 02:29:52 +00:00
123 lines
2.8 KiB
ArmAsm
123 lines
2.8 KiB
ArmAsm
|
|
.macpack longbranch
|
|
|
|
.import _exit
|
|
.export _main
|
|
|
|
offset1 = ($123456 + ((.bank(_main)) * $2345)) ; should produce $123456 + ($23 * $2345) = 1706c5
|
|
|
|
_main:
|
|
ldx #1 ; test counter
|
|
|
|
;---------------------------------------------------------------------
|
|
; first check if we can still force an 16bit address although we are
|
|
; ANDing with a 8bit value
|
|
test1:
|
|
test1a: bit a:$1234 & $ff ; should produce 00 34
|
|
lda test1a+1
|
|
cmp #$34
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test1a+2
|
|
cmp #$00
|
|
jne exiterror
|
|
|
|
inx
|
|
test1b: bit a:$34 & $ff ; should produce 00 34
|
|
lda test1b+1
|
|
cmp #$34
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test1b+2
|
|
cmp #$00
|
|
jne exiterror
|
|
|
|
;---------------------------------------------------------------------
|
|
; the original bug report, use an expression that contains a non constant
|
|
; part (.bank(_main)) and limit it to 8bit size by ANDing with $ff
|
|
test2:
|
|
inx
|
|
lda #(offset1 >> 0) & $ff
|
|
cmp #$c5
|
|
jne exiterror
|
|
|
|
inx
|
|
lda #(offset1 >> 8) & $ff
|
|
cmp #$06
|
|
jne exiterror
|
|
|
|
inx
|
|
lda #(offset1 >> 16) & $ff
|
|
cmp #$17
|
|
jne exiterror
|
|
|
|
;---------------------------------------------------------------------
|
|
; import a zeropage symbol (1 byte size) and then AND with a constant
|
|
; 16bit value - it should not turn into a 16bit address
|
|
test3:
|
|
jmp test3chk
|
|
.importzp tmp1
|
|
test3a: .byte tmp1 ; verify its 8bit
|
|
test3b: .byte tmp1 & $ff ; AND with $ff should work of course
|
|
test3c: .byte tmp1 & $ffff ; AND with $ffff should not change size
|
|
test3d: .byte tmp1 & $ffffff ; AND with $ffffff should not change size
|
|
test3e: .byte tmp1 & $ffffffff ; AND with $ffffffff should not change size
|
|
test3f: .word tmp1 & $ffffff ; AND with $ffffff should not change size
|
|
test3g: .word tmp1 & $ffffffff ; AND with $ffffffff should not change size
|
|
test3chk:
|
|
inx
|
|
lda test3a
|
|
cmp #tmp1
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3b
|
|
cmp #tmp1
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3c
|
|
cmp #tmp1
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3d
|
|
cmp #tmp1
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3e
|
|
cmp #tmp1
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3f
|
|
cmp #tmp1
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3f+1
|
|
cmp #$00
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3g
|
|
cmp #tmp1
|
|
jne exiterror
|
|
|
|
inx
|
|
lda test3g+1
|
|
cmp #$00
|
|
jne exiterror
|
|
|
|
;---------------------------------------------------------------------
|
|
; exit OK
|
|
ldx #0
|
|
exiterror:
|
|
txa
|
|
ldx #0
|
|
jmp _exit
|
|
|