The effect is pretty primitive by modern standards. Fundamentally, it looks like you can break the wave effect down into columns where each column is a simple sprite that is falling downward under the influence of a gravity-like force, leaving behind contrail-style sprites that are fixed in position.
The falling sprite for each column is a noisy water sprite:

The fixed contrail sprites, which don't move, are more stable-looking water reproductions:

The specific image used for each fixed sprite or the leading moving sprite can be adjusted based on that sprite's current vertical position. That's how you can get the curved appearance of the wave over time (there's a different angle to the leading, noisy sprite depending on how close the wave column is to the bottom of the screen.
You can't do this entirely in the sprite sheet, obviously, you'll have to write code for it. But once you get it working for a single column, you can simulate the full wave effect by having multiple columns, starting new ones as the wave advances across the screen. Roughly, they'd look like
12345
-----
||||/
|||/
++/
where 1-5 are different copies of the single column effect started at slightly different times.