''HEAD, MUL DIVIDE FOR 6502 // EDIT DATE 09OCT78 11:04 // SOURCE FILE DIVIDEFTM.LO // AUTHOR F. T. MICKEY 'DP' 'LBR' MULTIPLICAND: REMAINDER: REMAINDER, DIVISOR: MULTIPLIER, QUOTIENT: QUOTIENT: PRODUCT: PRODUCT, MASK, 'RBR' RESULT SIGN, REMAINDER SIGN, ''EJECT ;;SS DIVIDE:: 'LBR' 0 -> 'SP' REMAINDER [1], DS DIVIDE:: 0 -> 'SP' DIVISOR [1], DD DIVIDE. SD DIVIDE:: 0 -> 'SP' REMAINDER [1], DD DIVIDE:: 0 -> RESULT SIGN -> REMAINDER SIGN -> QUOTIENT, DIVISOR # 0: REMAINDER < 0: -REMAINDER -> REMAINDER, ^RESULT SIGN, ^REMAINDER SIGN;; DIVISOR < 0: -DIVISOR -> DIVISOR, ^RESULT SIGN;; // SCALE 1 -> MASK, 'DO' 'WHILE' REMAINDER > DIVISOR: DIVISOR 'LS' 1 -> DIVISOR, MASK 'LS' 1 -> MASK, 'END' // DIVIDE LOOP 'DO' REMAINDER >= DIVISOR: REMAINDER - DIVISOR -> REMAINDER, QUOTIENT 'OR' MASK -> QUOTIENT;; 'WHILE' MASK 'RS' 1 -> MASK # 0: DIVISOR 'RS' 1 -> DIVISOR, 'END' // DONE, SET PROPER SIGNS RESULT SIGN = 1: -QUOTIENT -> QUOTIENT;; REMAINDER SIGN # 0: -REMAINDER -> REMAINDER;; ;; 'RBR' ..... ;;SS MULTIPLY:: 'LBR' 0 -> 'SP' MULTIPLICAND [1], DS MULTIPLY:: 0 -> 'SP' MULTIPLIER [1], DD MULTIPLY. SD MULTIPLY:: 0 -> 'SP' MULTIPLICAND [1], DD MULTIPLY:: 0 -> RESULT SIGN -> PRODUCT, MULTIPLICAND < 0: -MULTIPLICAND -> MULTIPLICAND, 1 -> RESULT SIGN;; MULTIPLIER < 0: -MULTIPLIER -> MULTIPLIER, ^RESULT SIGN;; // MULTIPLY LOOP 'DO' MULTIPLICAND & 1 # 0: MULTIPLIER + PRODUCT -> PRODUCT;; 'WHILE' MULTIPLICAND 'RS' 1 -> MULTIPLICAND # 0: MULTIPLIER 'LS' 1 -> MULTIPLIER, 'END' RESULT SIGN = 1: -PRODUCT -> PRODUCT;; 'RBR' ..... ''END