I have written a number of applications using the PC (386/486) as a
simulator and test environment for code that went almost to the target
bare-metal. This same code, un-altered, would also run on the Atari
Mega-ST4 (68000) system I was using for documentation as well as the
intended targets (6809, 6309, Novix NC4000 and RTX2000).

What was shared by all systems was a Forth that was certifiably identical
at the surface interfaces used by the application code. Of course, any
words that had been highly optimised for a specific processor were not
transferrable directly but I always had a high level Forth template for
those words which would work, albeit with less performance than the
optimised code. Re-use for me is quite easy (so long as I recognise that I
already have some code to do a function).