**Mode 7** is a very simple effect. It projects a 2D x/y texture (or tiles) to some floor/ceiling. Old SNES use hardware to do this, but modern computers are so powerful that you can do this realtime (and no need of ASM as you mention). Basic 3D math formula to project a 3D point (x, y, z) to a 2D point (x, y) is : x' = x / z; y' = y / z; When you think about it, it makes sense. Objects that are far in distance are smaller than objects near you. Think about railroad tracks going to nowhere : ![enter image description here][1] If we look back at the formula input values : `x` and `y` will be the current pixel we are processing, and `z` will be distance information about how far the point is. To understand what z should be, look at that picture, it shows `z` values for image above : ![enter image description here][2] > red = far away (100% red = horizon), purple = near distance So in this particular model, `z` value is : `abs(y - horizon);` If we put everything together, it becomes : (pseudocode) for (y = -yres/2 ; y < yres/2 ; y++) for (x = -xres/2 ; x < xres/2 ; x++) { horizon = 9; //adjust if needed y += horizon; z = abs(y - horizon); //projection nx = x / z; ny = y / z; scaling = 100; //adjust if needed color = get2DTexture(nx * scaling, ny * scaling); //put (color) at (x, y) on screen ... } One last thing : if you want to make a mario kart game, I suppose you also want to rotate the map. Well its also very easy : rotate `x` and `y` just before projection. Here is formula : x' = x * cos(angle) - y * sin(angle); y' = y * cos(angle) + x * sin(angle); and if you want to move trough the map, just add some offset before getting texture value : get2DTexture(x * 100 + someXOffset, y * 100 + someYOffset); NOTE : i tested the algorythm and it works. Here is a screen (you should recognize the texture :)) ![enter image description here][3] NOTE2 : i use very simple math because you say you want something simple (and dont seems familiar with vector math). You can achieve same things using wikipedia formula or tutorials you give. The way they did it is much more complex and you have much more possibilities for configuring the effect (but in the end it works the same...) [1]: https://i.sstatic.net/vZCO3.jpg [2]: https://i.sstatic.net/qK8OJ.jpg [3]: https://i.sstatic.net/7U6ZO.png