.define Cii .sect .text .sect .rom .sect .data .sect .bss .sect .text ! 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