If you write an instruction level emulation of the Z80 you'll be able to use it to emulate other computers than the Spectrum, but be aware they are all subtly different.
Basically you need to write a short piece of code for each instruction. You will need to work out the best way to represent the Z80 register set, that eg. modifying B also modifies BC - think C unions.
Each instruction is read and it has an effect on these registers and/or memory.
The starting values for the registers can be found on WOS.
Then you will need to emulate memory. The 48Kb Spectrum has 16Kb ROM followed by 48Kb RAM. You should emulate this in 16Kb banks since each bank behaves differently and later spectrums are able to swap in different ROMs and RAMs into the same memory addresses. It's vitally important for instance that even though some programs (including the Spectrum ROM) write to ROM addresses that the memory doesn't change.
Then you will need to emulate the screen. It's a weird layout. Starting immediately after the ROM at offset 16384, There are 256x192bits of pixels, 32 bytes per scanline. But the scanlines aren't sequential, they go 0,8,16,24,32,40,48,56, 1,9,17,25,33,41,49,57 etc, and there are 3 banks of 64 lines. These bits control the black and white dots on the screen.
Then there is the colour overlay immediately after the pixels at offset 22528. It's 32x24 (768bytes). Each byte represents a colour, 3 bits for INK, 3 bits for PAPER, 1 bit for BRIGHT, 1 bit for FLASH. The format is described in the Spectrum manual.
In a very basic emulator you can convert the screen in one go, roughly every 48000cycles (the number of cycles in a frame - you can find the exact figure on WOS, it's different for different versions of the speccy). For more advanced emulation you need to convert a scanline at a time, or better still, you need to emulate the ULA (the Spectrum's display chip) and have it read the memory directly.
And there's one of the biggest problems with Spectrum emulation. The ULA shares memory cycles with the CPU, and depending which byte is being accessed at which cycle of the CPU, the CPU has to stall and wait for the ULA to finish. This effect happens only in the bottom 16Kb of memory and to make an accurate emulation you need to simulate it. It's called 'contention'.
Next you need to make sure you have the cycle counts for each instruction correct, and you need to make sure you have the R register accurately emulated else you'll never be able to load Speedlock games.
There's also sound, and various other bits you can emulate - you need to look at the IN/OUT instructions and handle the data they send to the ports, eg, port 254 controls the beeper/tape and the border colour, port 31 is Kempston joystick, etc.
You need to emulate the NMI interrupt handler too, every now and then you need to stop the CPU where it is, push the PC and jump to the interrupt handler.
Snapshot loading is pretty easy, and the formats are described on WOS, you have SNA and Z80. Then there are tape files, like TAP and TZX which require you to emulate the tape recorder.
Lots of things to do, have fun!
Jim