;
 
        .export         _atoi, _atol
-               .import         __ctype
+               .import         negeax, __ctype
        .importzp       sreg, ptr1, ptr2, tmp1
 
         .include        "ctype.inc"
        inc     ptr1+1
        bne     L6
 
-; Conversion done. Be shure to negate the value if needed.
+; Conversion done. Load the low 16 bit into A/X
 
-L8:    lda     ptr2
-       ldx     ptr2+1
-       ldy     tmp1            ; sign
-       beq     L9
+L8:     lda     ptr2
+        ldx     ptr2+1
 
-; Negate the 32 bit value in ptr2/sreg
+; Negate the value if necessary, otherwise we're done
 
-       sec
-       lda     ptr2
-       eor     #$FF
-       adc     #0
-       sta     ptr2
-       lda     ptr2+1
-       eor     #$FF
-       adc     #0
-       sta     ptr2+1
-       lda     sreg
-       eor     #$FF
-       adc     #0
-       sta     sreg
-       lda     sreg+1
-       eor     #$FF
-       adc     #0
-       sta     sreg+1
+       ldy     tmp1            ; sign
+       beq     L9              ; Branch if positive
 
-; Done, load the low 16 bit into A/X
+; Negate the 32 bit value in ptr2/sreg
 
-L9:    lda     ptr2
-       ldx     ptr2+1          ; get value
-       rts
+        jmp     negeax
 
 ;
 ; Helper functions
 ;
 
-mul2:
-       asl     ptr2
+mul2:   asl    ptr2
        rol     ptr2+1
        rol     sreg
        rol     sreg+1          ; * 2
-       rts
+L9:     rts