5 ms·
I think the article says the same. The gba port is impressive. I guess FPU would not be even required with 120 pix horizontal resolution. CM33 does in a singl
by marlone93 2y ago
I think the article says the same. The gba port is impressive.
I guess FPU would not be even required with 120 pix horizontal resolution.
CM33 does in a single cycle even more: 2 16 bits multiplications, addition and accumulation, for instance.
Still it is the first time the "full" Quake was ported in less than 300 kB.
- vardump 2y agoAgreed on other counts except for FPU. Quake performs one FPU divide per pixel for texture mapping perspective correction. ARM7TDMI does not have any kind of divide, so perspective correction is tricky, even if it's just 120 px horizontally.
- marlone93 2y agoAfaik, Quake does not do one divide per pixel, it is in steps of 8 pixels (see dscan.c in winquake). Yes, there is non divide but instead of taking hundreds of cycles, tables and other approximations could be used. Of course, div/vdiv which take only 14 cycles or less are a strong boost on CM4/33.
- vardump 2y agoOh, it divides only once every 8 pixels and interpolates in between and still looks so good? I stand corrected. By the way, it's "d_scan.c" for anyone who's trying to web search for it.
- marlone93 2y agoIt means almost an order of magnitude less divisions (and additional calculations as well). Quake had to do this because it would have been too much especially for a low-end Pentium when it was released in 1996. Yes it is not even noticeable, especially at low res.
- badsectoracula 2y agoDepends on the textures used. High contrast textures with vertical lines (e.g. dark wood on bright wall) would make the distortion very visible even at 320x200. However most of the game's textures are not like that. There are some user made maps however where this can be seen (e.g. i remember playing a map which was supposed to be inside a fantasy town and it used a bunch of wood-on-wall textures that made the distortion apparent).
- rasz 2y agoAbrash did this in Quake because those divides are _Free_ when intervened with other code. Pentium FPU is pipelined, you can push FDIV, then FXCH to another data and do something else for a while instead of waiting for the result. The price is hand tuned assembly code that works fast only on Intel FPU in 1996. AMD caught up in 1998-99 finally implementing pipelined FDIV and 0 cycle FXCH. https://www.phatcode.net/res/224/files/html/ch63/63-02.html https://www.phatcode.net/res/224/files/html/ch63/63-02.html
- smirutrandola 2y agoOMG that link (and its parent) is extremely interesting! Thank for sharing!