
       NAM BCDTOBIN REV 0.0,9-19-75
       OPT S PRINT SYMBOLS
       OPT O PUNCH OBJECT TAPE

*      THIS PROGRAM CONVERTS FOUR BINARY CODED DECIMAL
*      DIGITS TO A BINARY EQUIVALENT.  THE BCD DIGITS
*      ARE PACKED TWO PER BYTE.  THE BINARY RESULT
*      OCCUPIES TWO BYTES.  THE BCD DIGITS ARE LOADED
*      INTO THE A AND B REG(MSD TO A) AND THE BCDBIN
*      SUBROUTINE IS CALLED.  THE ROUTINE EXITS WITH
*      THE BINARY RESULT IN A AND B.
*
*      EXAMPLE- CONVERT BCD VALUE 9876 TO BINARY
*      . LDA A 98
*      . LDA B 76
*      . JSR BCDBIN
*      UPON EXIT FROM THE SUBROUTINE
*      . A= HEX= 00100110 BIN
*      . B= 94HEX= 10010100 BIN
*
*      NOTE THE RANGE OF BCD VALUES IS 0000 TO 9999

       ORG 100H
BCDBIN STA A SAVE1 SAVE 2 MS BCD VALUES
       CLR BINUPR
       TBA
       AND B #0FH SAVE ONLY LS BCD VALUE
       LSR A MOVE TENS BCD VALUE TO
       LSR A LOWER FOUR BITS OF A
       LSR A
       LSR A
TENLP  BEQ DOHUND GO DO HUN WHEN TEN IS ZERO
       ADD B #10 ADD TEN TO BINARY TOTAL
       DEC A DECREMENT TENS DIGIT AND
       BRA TENLP REPEAT UNTIL ZERO.
DOHUND CLC RESET CARRY
       LDA A SAVE1 GET HUN AND THOU DIGIT
       AND A #0FH SAVE ONLY HUN DIGIT
HUNLP  BEQ DOTHOU GO DO THOU IF HUN IS ZERO
       ADD B #100 ADD 100 TO BINARY VALUE
       BCC HUN00
       INC BINUPR 0DD 256 TO BIN UPPER VALUE
HUN00  DEC A DECREMENT HUN DIGIT 0ND
       BRA HUNLP REPEAT UNTIL ZERO
DOTHOU LDA A SAVE1 GET THOU DIGIT
       LSR A MOVE THOU BCD VALUE TO
       LSR A LOWER FOUR BITS OF A.
       LSR A
       LSR A
       STA A SAVE1 SAVE THOU DIGIT
       BNE THOU00 BRANCH IF THOU DIGIT IS ZERO
       LDA A BINUPR GET BINARY UPPER VALUE
       BRA XITBIN
THOU00 LDA A BINUPR GET BINARY UPPER VALUE
THOULP CLC RESET CARRY
       ADD B #232 ADD 232 TO BINARY LOWER
       ADC A #03H ADD 768 TO BINARY UPPER
       DEC SAVE1 DECREMENT THOU DIGIT
       BNE THOULP REPEAT UNTIL THOU DIGIT ZERO
XITBIN RTS EXIT SUBROUTINE

BINUPR FCB 0 BINARY UPPER TEMP STORAGE
SAVE1  FCB 0 DIGIT TEMPORARY STORAGE

*SAMPLEPROGRAM TO TEST THE BCDBIN SUBROUTINE
*      USING THE MOTOROLA EXORCISER.
*
*      1. AFTER LOADING THE PROGRAM, ENTER  THE BCD VALUES
*       TO BE CONVERTED INTO MEMORY LOCATIONS
*      0000 AND 0001 USING MAID.
*      2. SET A BREAKPOINT AT ADDRESS 001C USING MAID.
*      3. CONVERT THE VALUES TO BINARY BY EXECUTING THE
*      PROGRAM AT 0010 USING MAID.
*      4. UPON REACHING THE BREAKPOINT, THE RESULT
*      WILL BE PRINTED AS FOLLOWS:
*      .X HAS BCD VALUE JUST CONVERTED
*      .A HAS BINARY RESULT UPPER VALUE
*      .B HAS BINARY RESULT LOWER VALUE
*      5. NEW BCD VALUES MAY BE LOADED INTO ADDRESSES
*      0000 AND 0001 AND THE CONVERSION WILL REPEAT
*      WHEN CONTINUING FROM THE BREAKPOINT USING MAID.

       ORG 10H
BCDMS  EQU 0
BCDLS  EQU 1

TEST   LDS #300H INITIALIZE SP
       LDA A BCDMS GET THOU AND HUN DIGITS
       LDA B BCDLS GET TENS AND UNITS DIGITS
       JSR BCDBIN GO CONVERT THEM TO BINARY
       LDX BCDMS GET BCD VALUES FOR DISPLAY
       NOP SET BREAKPOINT HERE TO
       NOP PRINT CONVERSION RESULTS.
       BRA TEST REPEAT CONVERSION
       END

