mirror of
https://github.com/bobbimanners/emailler.git
synced 2024-11-04 09:04:54 +00:00
93 lines
1.7 KiB
ArmAsm
93 lines
1.7 KiB
ArmAsm
|
.include "../inc/common.i"
|
||
|
|
||
|
.export _dotted_quad
|
||
|
.export _parse_dotted_quad
|
||
|
|
||
|
.import parse_dotted_quad
|
||
|
.import dotted_quad_value
|
||
|
|
||
|
.importzp sreg, tmp1, tmp2, tmp3
|
||
|
|
||
|
|
||
|
.bss
|
||
|
|
||
|
dotted_quad: .res 4*4 ; "xxx.xxx.xxx.xxx\0"
|
||
|
|
||
|
.code
|
||
|
|
||
|
_dotted_quad:
|
||
|
stax dotted_quad_value
|
||
|
ldax sreg
|
||
|
stax dotted_quad_value+2
|
||
|
|
||
|
ldx #$00
|
||
|
ldy #$00
|
||
|
: jsr convert_byte
|
||
|
inx
|
||
|
cpx #4
|
||
|
bcc :-
|
||
|
|
||
|
dey
|
||
|
lda #$00
|
||
|
sta dotted_quad,y ; replace last dot with '\0'
|
||
|
ldax #dotted_quad
|
||
|
rts
|
||
|
|
||
|
convert_byte:
|
||
|
; hex to bcd routine taken from Andrew Jacob's code at http://www.6502.org/source/integers/hex2dec-more.htm
|
||
|
sed ; switch to decimal mode
|
||
|
lda #$00 ; ensure the result is clear
|
||
|
sta tmp1 ; BCD low
|
||
|
sta tmp2 ; BCD high
|
||
|
lda #8 ; the number of source bits
|
||
|
sta tmp3
|
||
|
: asl dotted_quad_value,x ; shift out one bit
|
||
|
lda tmp1 ; and add into result
|
||
|
adc tmp1
|
||
|
sta tmp1
|
||
|
lda tmp2 ; propagating any carry
|
||
|
adc tmp2
|
||
|
sta tmp2
|
||
|
dec tmp3 ; and repeat for next bit
|
||
|
bne :-
|
||
|
cld ; back to binary
|
||
|
|
||
|
lda tmp2
|
||
|
beq :+
|
||
|
ora #'0'
|
||
|
sta dotted_quad,y ; write x00 if not 0
|
||
|
iny
|
||
|
: lda tmp1
|
||
|
lsr
|
||
|
lsr
|
||
|
lsr
|
||
|
lsr
|
||
|
beq :+
|
||
|
ora #'0'
|
||
|
sta dotted_quad,y ; write 0x0 if not 0
|
||
|
iny
|
||
|
: lda tmp1
|
||
|
and #$0F
|
||
|
ora #'0'
|
||
|
sta dotted_quad,y ; write 00x
|
||
|
iny
|
||
|
|
||
|
lda #'.'
|
||
|
sta dotted_quad,y ; write dot
|
||
|
iny
|
||
|
rts
|
||
|
|
||
|
_parse_dotted_quad:
|
||
|
jsr parse_dotted_quad
|
||
|
bcs error
|
||
|
ldax dotted_quad_value+2
|
||
|
stax sreg
|
||
|
ldax dotted_quad_value
|
||
|
rts
|
||
|
|
||
|
error:
|
||
|
ldx #$00
|
||
|
txa
|
||
|
stax sreg
|
||
|
rts
|