I thought I'd see if I can use the steppers.cpp stepper device instead of my own stepper motor code and it looks like the silentype pattern is different from the regular drive table in steppers.cpp.

//Standard drive table in steppers.cpp is 2,6,4,5,1,9,8,a

//Silentype stepper table is: 3,2,6,4,c,8,9,1
(normal code uses just the full steps)

It looks like I can convert the silentype stepper pattern to the "standard" pattern by just swapping bits 0 and 3.
Code
silentype          swap 0 3             swap 1 2
0011  3           1010  a                0101 5
0010  2           0010  2                0100  4
0110  6           0110  6                0110  6
0100  4           0100  4                0010 2
1100  c           0101  5                1010 a
1000  8           0001  1                1000 8 
1001  9           1001  9                1001 9
0001  1           1000  8                0001 1
   

But it moves in the "wrong direction".

It also appears that reversing the bit order from 3210 to 0123 will change the direction of the stepper.

So instead of swaping bits 0 and 3 I can swap just 1 and 2:

Code
u8 silentype_printer_device::bitpattern(u16 val, u8 a, u8 b, u8 c, u8 d)
{ 
	u8 bita = BIT(val,3); 
	u8 bitb = BIT(val,2);
	u8 bitc = BIT(val,1);
	u8 bitd = BIT(val,0);
	return 	(bita << a) | (bitb << b)| (bitc << c)| (bitd << d);
}

int silentype_printer_device::update_stepper_delta(stepper_device * stepper, uint8_t pattern)
{
	int lastpos = stepper->get_absolute_position();	
	stepper->update(bitpattern(pattern, 3, 1, 2, 0));  // drive pattern is the "standard" reel pattern with bits 1,2 swapped
	int delta = stepper->get_absolute_position() - lastpos;
	return delta;
}


void silentype_printer_device::update_cr_stepper(uint8_t hstepper)
{
	int delta = update_stepper_delta(m_cr_stepper, hstepper);
	
		if (delta > 0)
		{
			m_xpos += delta; xdirection = 1;
		}
		else if (delta < 0)
		{
			m_xpos += delta; xdirection = -1;
		}
}