basic arduino question - do I need a 555 timer?
It can be done with interrupts.  Attach an interrupt to a timer, so that it fires regularly (say once a milisecond), and use that interrupt to pop the next command off the top of a queue (could just be an array).

Your main loop then just adds commands to this array.

A single Arduino has 14 IO lines, so the number of motors you can control depends solely on the number of wires needed for each motor.

There are dedicated stepper motor driver ICs that are much better and simpler than using a 555 timer.  The floppy drive will be using one (maybe embedded inside another chip).  They usually accept simple up/down step signals and convert them into the proper sequence of pulses.

Edit

Example code, using the Timer1 library:

#include &lt;TimerOne.h&gt;

void test()
{
  digitalWrite(5,HIGH);
  delayMicroseconds(100);
  digitalWrite(5,LOW);
}

void setup()
{
  Timer1.attachInterrupt(&amp;test,100000);
}

void loop()
{
}


This will cause digital pin 5 to go high then low once every 100,000µS - you see there is nothing in the main loop at all.  Just replace the two digitalWrite() calls with the code to step your motors once.  You do not need to specify any inter-step delay in that part of the code - that delay is set by the value of 100000 in the Timer1.attachInterrupt() function.  To change the speed of the steps, change that value.