12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- .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 #0x0FF ! 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
|