Routine: Mlt
Function: Multiplies two 32-bit positive integers
Called by: Mult, Print
Calls: None
Entry: #1 in Mltbuf 0-3, #2 in Mltbuf 4-7
Exit: Result in Mltbuf 8-15
Preserved: C,D,E,H,L,IY
MLT LD IX,MLTBUF
XOR A
LD (IX+8),A
ÖD (IX+9),A
ÖD (IX+10),A
LD (IX+11),A
; Clear space for result bytes 0-3.
LD B,32
; In the following loop, 32 bit multiplication is acheived by repeatedly shifting the result/multiplier and adding the multiplicand if a 1 is shifted out.
MLT1 SLA (IX+8)
RL (IX+9)
RL (IX+10)
RL (IX+11)
RL (IX)
RL (IX+1)
RL (IX+2)
RL (IX+3)
JR NC,MLT2
LD A,(IX+8)
ADD A,(IX+4)
LD (IX+8),A
LD A,(IX+9)
ADC A,(IX+5)
LD (IX+9),A
LD A,(IX+10)
ADC A,(IX+6)
LD (IX+10),A
LD A,(IX+11)
ADC A,(IX+7)
LD (IX+11),A
JR NC,MLT2
INC (IX)
JR NZ,MLT2
INC (IX+1)
JR NZ,MLT2
INC (IX+2)
JR NZ,MLT2
INC (IX+3)
MLT2 DJNZ MLT1
; Store bytes 4-7 in Mltbuf 8-15.
LD A,(IX)
LD (IX+12),A
LD A,(IX+1)
LD (IX+13),A
LD A,(IX+2)
LD (IX+14),A
LD A,(IX+3)
LD (IX+15),A
RET