How did older games do collision detection with walls, floors and ceilings?
For the types of NES-era games you're talking about, everything was 2D. That alone simplifies many things.
Some machines of that era (particularly ones with hardware sprites, like the Commodore 64) had hardware collision detection. Most games that weren't relying on hardware collision detection would either use a bounding box or a hit mask (1-bit bitmap of the sprite).
Either way, collision detection was usually done "a posteriori", except for special cases like the edges of the world. Some games actually did have bugs where moving too fast when you hit something could cause you to pass through it. (In fact, reviews of early 80's games would often comment on how precise the collision detection was.)
For platformers, you'd typically check to see if the character is "grounded" before applying gravity.
The one-way platforms thing isn't too hard to deal with after the fact since you know the sprite's velocity vector, so you can use that to determine whether or not the collision should register.
There is article here that is an in-depth look at programming a Nintendo Entertainment System (NES) "platform game".
- Programming M.C. Kids
I may not have been googling right because I haven't stumbled upon this article before.