51 lines
1.1 KiB
ArmAsm
51 lines
1.1 KiB
ArmAsm
|
.define Cii
|
||
|
|
||
|
! This subroutine converts integers to integers.
|
||
|
! Convertions of integers with the same source size as destination
|
||
|
! size aren't done, there just return the source.
|
||
|
! A convertion from 4 bytes to 2 bytes just strips the two
|
||
|
! most significant bytes.
|
||
|
! A convertion from 2 bytes to 4 bytes tests the sign of the
|
||
|
! source so that sign extentension takes place if neccesairy.
|
||
|
|
||
|
|
||
|
Cii:
|
||
|
cpx #2
|
||
|
beq Cii_2 ! a conversion from ? to 2
|
||
|
jsr Pop ! a conversion from 4 to ?
|
||
|
cpx #4
|
||
|
beq 8f ! a conversion 4 to 4 (skip)
|
||
|
jsr Pop
|
||
|
tay ! save A for sign test
|
||
|
pha ! save A
|
||
|
txa
|
||
|
pha ! save X
|
||
|
tya ! test on negative
|
||
|
bmi 1f ! negative means sign extension
|
||
|
lda #0 ! no sign extension here
|
||
|
tax
|
||
|
beq 2f
|
||
|
1: lda #0FFh ! sign extension here
|
||
|
tax
|
||
|
2: jsr Push ! push twobyte integer
|
||
|
pla
|
||
|
tax ! get X
|
||
|
pla ! get A
|
||
|
jmp Push
|
||
|
Cii_2: ! a conversion from 2 to ?
|
||
|
jsr Pop
|
||
|
cpx #2
|
||
|
beq 8f ! a conversion from 2 to 2 (skip)
|
||
|
jsr Pop ! a conversion from 4 to 2
|
||
|
pha ! save A
|
||
|
txa
|
||
|
pha ! save X
|
||
|
jsr Pop ! strip most significant bytes
|
||
|
pla ! get X
|
||
|
tax
|
||
|
pla ! get A
|
||
|
jmp Push ! push result
|
||
|
8: rts
|
||
|
|
||
|
|