such services existed.
usage was quite limited in time and audience.
Those that existed may be rightfully considered exotic fringe cases for very special situations.
Back in the 70s and 80s
Now, that covers too wide a range of applications and use cases for a coherent answer.
personal computers weren't powerful enough to compile codes in high-level languages or if capable took huge amount of time.
Is that so? A 1 MHz 6502 can assemble its own BASIC in a few minutes, so nothing that can't be waited for. Once there were personal computers, compilation happened there - after all, the main advantage of personal computers were their immediate availability.
Some companies had to install minis for their programmers instead of compiling on the targeted machines,
This was rather for two facts:
- Unified development environment, and more often than not
- Target machines that had no OS or programming environment.
Employers and students sent their cards and tapes to Batch processing mainframes to compile.
Not really. Students usually did jobs on their institute's machines, not on some different one. Likewise, at the time real cards were still a thing in programming; there were no micros and not much cross development.
Usually the only time programming happened with cross-compilers on large remote systems was when new CPUs were introduced and the manufacturer did not have any development system already at hand.
So Intel for example offered cross assemblers for 4004 and 8008 before their ISIS systems became available. After that, development was intended to happen on here. Likewise when new CPUs, like 8048 or 8086 became available, Intel offered software packages to compile for these new models - often in combination with hardware adaptors, programmers and ICE probes.
Zilog in contrast just used Intel systems in the beginning before their own development systems were ready - the Z80 is just an extended 8080, isn't it? :))
Apart from that, cross compiling was only a thing for game systems, as these did not really provide a way to develop on target. An exception might be development for similar systems, like developing on a PET for VIC20.
Multi-platform game development was essentially the only area where cross-compilation was a big issue - and here it was always an internal one. Not just to secure the game from leaking, but, as mentioned, to provide a single development environment for all platforms.
Were there any cross-compiling services for the public instead of internal users, free or subscribed,
All of that does of course rely on your definition of "the public". In any case these services were rather limited and only viable for a sort time. A good example might be the (cross) assembler MOS offered in the beginning to their customers using a GE-based dial-in service. As so often when it's about 6502 material, Hans Otten has the documentation, here the 650X Cross Assembler Manual.
Noteworthy, and unlike in the question assumed, that assembler was not comfortable at all. It was a very primitive linear beast. This makes sense, considering that the step from "no assembler" to "some assembler" is much more supportive than "some assembler" to "comfortable assembler".
The dial-in solution was soon superseded with MOS' Resident Assembler developed for the MDT650 - the history of MOS Assemblers can be followed on Michael Steil's Pagetable.