;Program to read in an analog voltage from pin PE1 of the
;EVBU (pin #45) and display result, in volts (decimal) to
;the screen. Uses MULT=0, and SCAN=0.
option  .cequ   $1039
adctl   .cequ   $1030
adr1    .cequ   $1031
outa    .cequ   $FFB8   ;addr. of Buffalo .outa routine
outst0  .cequ   $FFCA   ; "   " .outst0 routine
        .org    $0000
        jmp     $0100
temp    .rs     2       ;temporary variable storage area

        .org    $0100
main:   ldx     #option
        bset    0,X,$80 ;set the ADPU bit
loop:   jsr     delay   ;do a one second delay
        ldaa    #b'00000001     ;choose PE1 input
        staa    adctl           ;SCAN=MULT=0/clear CCF flag
        ldx     #adctl          ;to start conversion.
        brclr   0,X,$80,*       ;Wait till CCF sets
        ldaa    #10     
        ldab    adr1            ;read in result
        mul            ;AxB-->D  1st mult. by 10, so we can
                        ;find ones and tenths voltage digits
        ldx     #510    ;divide D by 51*10 to get 1's digit
        idiv            ;D/IX --> IX, REM-->D
        std     temp    ;save remainder
        pshx            ;quick way to transfer IXL to Acc. A
        pula
        pula            ;quotient now in Acc. A
        adda    #48     ;convert to ASCII
        jsr     outa    ;send out to screen
        ldaa    #'.'    ;write a decimal point
        jsr     outa
        ldd     temp    ;retrieve remainder-divide by 51
        ldx     #51     ;to get 10'ths digit
        idiv
        pshx
        pula
        pula            ;IXL --> Acc. A
        adda    #48     ;convert decimal digit to ASCII
        jsr     outa
        ldx     #term
        jsr     outst0  ;send termination string
        bra     loop

term:   .db     " Volts",CR,LF,EOT ;termination string
CR      .cequ   $0D     ;carriage return ASCII code
LF      .cequ   $0A     ;line feed ASCII code
EOT     .cequ   $04     ;End of Transmission ASCII code

delay:  ldx     #0000  ;Subroutine to delay ~1 sec
l1:     mul     ;used to waste time (10 E-cycles)
        mul     ;(10 E-cycles)
        subd    #0      ;(4 E-cycles)
        dex     ;(3 E-cycles)
        bne     l1 ;(3 E-cycles)
        rts
        .end