
 1000         .OP 65802
 1010  *SAVE BOUGHNER'S MULTIPLY
 1020  *--------------------------------
 1030  *   CONTRIBUTED BY BOB BOUGHNER
 1040  *   MODIFIED A LITTLE MORE BY BOB S-C
 1050  *--------------------------------
 1060  CAND   .EQ 0,1
 1070  PLIER  .EQ 2,3
 1080  PROD   .EQ 4,5,6,7
 1090  *--------------------------------
 1100  MUL.FASTER.YET.16X16.65802
 1110         LDX #8       WILL LOOP 8 TIMES
 1120         LDA PLIER+1  INVERT HIGH BYTE
 1130         EOR #$FF     TO SAVE "CLC" IN LOOP
 1140         STA PLIER+1
 1150         CLC
 1160         XCE          ENTER "NATIVE" MODE
 1170         REP #$30     16-BITS BOTH X & M
 1180         STZ PROD     CLEAR PRODUCT
 1190         STZ PROD+2
 1200         LDY CAND     MULTIPLICAND IN Y-REG
 1210         BNE .2       ...NON-ZERO, START LOOP
 1220         XCE          ...ZERO, EXIT NOW
 1230         RTS
 1240  *--------------------------------
 1250  .1     ASL PROD     DOUBLE THE PRODUCT
 1260         ROL PROD+2
 1270  *--------------------------------
 1280  .2     LDA PLIER-1  GET LOW BYTE IN A(15-8)
 1290         BPL .3       ...ORIG. BIT=0, DON'T ADD
 1300         CLC
 1310         TYA          ...ORIG. BIT=1, ADD 'CAND
 1320         ADC PROD
 1330         STA PROD
 1340         BCC .3
 1350         INC PROD+2   ADD CARRY TO HI-16
 1360  *--------------------------------
 1370  .3     ASL PLIER    SHIFT MULTIPIER, GET HI-BIT
 1380         BCS .4       ...ORIG. BIT=0, DON'T ADD
 1390         TYA          ...ORIG. BIT=1, ADD 'CAND
 1400         ADC PROD+1   ADD TO MIDDLE OF PRODUCT
 1410         STA PROD+1
 1420         BCC .4
 1430         INC PROD+3   (NEVER BOTHERS PROD+4)
 1440  *--------------------------------
 1450  .4     DEX
 1460         BNE .1
 1470         SEC
 1480         XCE
 1490         RTS
 1500  *--------------------------------
 1510    .LIF

