tag:blogger.com,1999:blog-87556292318382473252024-03-05T01:29:07.986-08:00random thoughtsfinalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-8755629231838247325.post-42148755687258886502017-02-07T04:27:00.000-08:002017-02-07T04:27:05.756-08:00Particles and dynamic lightsMy original plan with particles is to implement it on the GPU with vertex shader or compute shader. However, after the completion of texture mapping, I realized that particles and dynamic lights were the only things left before reaching feature parity with the software rasterizer. So I adjusted my plan, and decided I would just implement particles and dynamic lights in the most straightforward way, so that I can reach the feature parity milestone as quickly as possible, and then worry about all the fancy stuff later.<br />
<br />
Particles becomes almost trivial once I decided to do it the easy way. The entire particle emitting and updating stuff is implemented in r_part.c file. All I need to rewrite is 3 functions:<br />
<br />
D_StartParticles : where I clear the previous frame's particles in my particle container.<br />
<br />
D_DrawParticle: where I append one particle to my particle container.<br />
<br />
D_EndParticles: where I upload the particle container as a vertex buffer and issue a glDrawArrays(GL_POINTS, ...) call.<br />
<br />
The shaders are also extremely easy. All the vertex shader needs to do is adjusting the <br />
point sprite size gl_PointSize base on the distance of the particle to the view point. And the fragment shader simply copies the input color to to output.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgVhLLA1CkQRtazwg-sZfHI50e8S1clwl-CgBeum2CE5lX6J9z_PKi6hpyNYLNtFnkBIzA2hEkn8gbS6LRWW7cea6t4w4yjEtLg4CAKvgQ4TMshLfwLHj-JXkPf62O-Qnm-imsjgzN4Nk/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgVhLLA1CkQRtazwg-sZfHI50e8S1clwl-CgBeum2CE5lX6J9z_PKi6hpyNYLNtFnkBIzA2hEkn8gbS6LRWW7cea6t4w4yjEtLg4CAKvgQ4TMshLfwLHj-JXkPf62O-Qnm-imsjgzN4Nk/s640/12.png" width="640" /></a></div>
<br />
The last missing feature is dynamic lights.<br />
<br />
Dynamic lights sounds difficult but it really isn't. In fact I would even say it's one of the easiest features to implement.<br />
<br />
All it takes is uploading the dynamic light positions to a uniform array (in R_PushDlights(), there are up to 32 dlights in Quake). Then in the fragment, go through all dlights, compute the light contribution with a dot product of the normal vector and light position, adjusted by the light fall off base on square of light distance to the current fragment. This is actually already quite a bit better than what the original Quake did in its software renderer, where it does the dlights on the low-res light maps and doesn't use the normal vector and doesn't compute the fall off.<br />
<br />
Although the implementation is simple, the result looks quite nice:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/5ZcRN3bT6Qo/0.jpg" src="https://www.youtube.com/embed/5ZcRN3bT6Qo?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<br />finalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.com0tag:blogger.com,1999:blog-8755629231838247325.post-79142654467117780302017-01-23T01:58:00.002-08:002017-01-23T01:58:33.537-08:00Textures Textures TexturesSo I started with diffuse maps on level surfaces. Which is fairly straightforward. I did have to rearrange the rendering loop a little bit because in order to minimize texture binding switching I need to group polygons with the same textures together.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJt61AyYnPwlVOv8d1oRBvREmjky1cu1jIvSo4ClBlP4w_9Xu2S_LE-h1NZ5yFEVxHIigbBntatkQy3CcclgwmZ2bHD1UpB8etEHUUlVuk_sYIOMh4KrcVeqAITkMnA7FuH3Efv5JggEs/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJt61AyYnPwlVOv8d1oRBvREmjky1cu1jIvSo4ClBlP4w_9Xu2S_LE-h1NZ5yFEVxHIigbBntatkQy3CcclgwmZ2bHD1UpB8etEHUUlVuk_sYIOMh4KrcVeqAITkMnA7FuH3Efv5JggEs/s640/8.png" width="640" /></a></div>
<br />
<br />
It didn't take me very long to get a shot like the above. As you can see all the static level surfaces were textured. It looked a lot more like Quake, even though sky, water, lava, portal and entity textures were still missing.<br />
<br />
As I had mentioned in the previous post, Quakes uses a rather peculiar way to store the level texture coordinates. Each polygon surface has 2 vectors that describe 2 axis of the UV plane and 2 offset values. In order to get the texture coordinate, we perform a dot product of the vertex coordinate with the 2 axis and add the offsets (see this link <a href="http://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml">http://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml</a> under Texture Information Lump section)<br />
<br />Next thing to implement was entity textures. Each entity in Quake has only one texture image, which usually has two parts. The left half is for the front side of the object and the right half for the back side. In entity models, vertexes are shared across triangles so each triangle has a flag indicating whether this is a front side triangle or a back side one and the vertexes texture coordinates needs to be adjusted if this vertex 1) is shared by both front side and back side triangles AND 2) is being used to render a back side triangle.<br />
<br />
I ended up with an entity model renderer that renders each model in 2 steps. First render all the front side triangles, then modify a uniform flag and render all back side triangles.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTQCwriruTrbzjV-owrmXTyOv0h96Oy7nWjFPb1OxP06_dMn3oL0Y_kboIu9jbAYVCuyzwlUcmlaxtCCCuNytgol_Qo7euP5rz4_cm0ZaPz9mH5UpHx3KYigU5viYHoVzk5YRDDNy1GBA/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTQCwriruTrbzjV-owrmXTyOv0h96Oy7nWjFPb1OxP06_dMn3oL0Y_kboIu9jbAYVCuyzwlUcmlaxtCCCuNytgol_Qo7euP5rz4_cm0ZaPz9mH5UpHx3KYigU5viYHoVzk5YRDDNy1GBA/s640/9.png" width="640" /></a></div>
<br />
Quake uses the flag SURF_DRAWTURB to describe surfaces that has water, lava or portal textures. It means to draw the textures with a turbulence effect. This is fairly easy to implement in a fragment shader using the global time as a uniform and add an offset to the UV coordinates based on a Sin curve.<br />
<br />
The last and most difficult texture type is SURF_DRAWSKY. Quake's sky texture is like this<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_ggCC_-Ma6KR6YlS8L4EffO0s6k5YIiFG6K9MrXPNzImv0exsvQZg2GuEJ4nhhW27YEiL-mEKUfk2ArZI_WJpPIFFfN9JBop3geTjFXI-wOAkPiEQu04dTLNC-139DUmjyK49zYVopUA/s1600/sky1.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_ggCC_-Ma6KR6YlS8L4EffO0s6k5YIiFG6K9MrXPNzImv0exsvQZg2GuEJ4nhhW27YEiL-mEKUfk2ArZI_WJpPIFFfN9JBop3geTjFXI-wOAkPiEQu04dTLNC-139DUmjyK49zYVopUA/s1600/sky1.gif" /></a></div>
<br />
The left part is the foreground layer and the right part background. The 2 parts scroll at different speeds to create an illusion of depth.<br />
<br />
Now the tricky part is Quake doesn't have a sky box. It just seals all openings of the level with polygons with the SURF_DRAWSKY flag. Even though these polygons all have different facing and at different distance, they need to look completely transparent and uniform. This means the polygons' texture coordinates are completely useless, if I use them to address the sky texture I would end up with seams on those sky polygons.<br />
<br />
So I need to calculate the UV textures completely base on the sky's world coordinate. And I did this in the pixel shader with a ray cast from the view point through the fragment's world coordinate to the sky: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvtXEgpbMnY7BTdFSsJZfdEUKAJkrpRBg5g2LKBDmgH8MyHqJQ3rd5HNzwwHXWSNickymB3-gw0FevLMr8lQ4IwupzQbWvk4SaIkq18MWBv2zlpm0Z096cyx-bkwsYUta4W5SHSI90hko/s1600/raycast.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvtXEgpbMnY7BTdFSsJZfdEUKAJkrpRBg5g2LKBDmgH8MyHqJQ3rd5HNzwwHXWSNickymB3-gw0FevLMr8lQ4IwupzQbWvk4SaIkq18MWBv2zlpm0Z096cyx-bkwsYUta4W5SHSI90hko/s640/raycast.png" width="640" /></a></div>
<br />
scale = (SkyY - FragY)<br />
Sky = ViewPoint + (Fragment - ViewPoint) * scale<br />
<br />
So here we go, sky texture!<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/bjANMhABkcU/0.jpg" src="https://www.youtube.com/embed/bjANMhABkcU?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<br />
<br />finalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.com0tag:blogger.com,1999:blog-8755629231838247325.post-56136868979742426862017-01-09T01:30:00.002-08:002017-01-09T14:25:11.111-08:00My new quest of rebuilding Quake's renderer with modern OpenGLI have wanted to do this for a long time but it's only recently I finally gathered enough motivation to start writing some actual code. Now 2 months have passed since the first commit, it's time to take a look back at the journey. <br />
<br />
The first commit happened on Nov 14 2016. I cloned the official id Quake repo and started with removing the stuff that I don't need. I know there are more advanced source ports available but I wanted to start my work from zero, so the official repo is the perfect starting point for me.<br />
<br />
Code cleaning up took almost an entire month. I aggressively removed all platform specific code and replaced them with SDL2 or the C++ standard library. By Dec 15, I had fully ported sound/music/input and the software renderer to SDL. All platform specific files and unused #if blocks were also removed. I was happy with the much cleaner code base, but also a bit unsure about whether I'd be able to finish this project as it seemed to be a lot of work.<br />
<br />
Two days later I had my first model on screen.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic_KDNk8lkbjDzwxRZ-k0A6zNAXbIH1E8BgTNzgXEENF05c2M2Wh0tT-zTbGbxqxKmvXTKnKXshijjVFNaJj82IablKHiNnm0lVmb0zIhYSAdNzA8qlLc4cT7wuHNuJq4V1qPvXT0c_mQ/s1600/0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="379" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic_KDNk8lkbjDzwxRZ-k0A6zNAXbIH1E8BgTNzgXEENF05c2M2Wh0tT-zTbGbxqxKmvXTKnKXshijjVFNaJj82IablKHiNnm0lVmb0zIhYSAdNzA8qlLc4cT7wuHNuJq4V1qPvXT0c_mQ/s640/0.png" width="640" /></a></div>
<br />
There are 3 kinds of models in Quake: the world model, which is the static part of the level, brush models, which are similar to the world model but are smaller movable parts of the level (doors, elevators etc.), and alias models (monsters and projectiles).<br />
<br />
I went with the alias model first because their data structure looked easiest to me. At first my renderer just drew a static model frame on screen while the game ran its simulation and audio in the background. The highly modular design of the engine was really impressive as the graphics subsystem was completely ripped out but it didn't affect any of the other subsystems at all.<br />
<br />
It took me another few days to get model animations working. But once I could draw one model, I could draw many, just throw in the world and viewpoint transformation and here we go:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpDZ_8hmorGmBVEOssaC6-EZNclw9GI9AKUYu4yjPH1lIH46kmN64MV04L-GLOh-i4_Tl35u7Vfy1FI77Yun6_xMc7yoKXF7VXWbMWMBfMSQjkD8KHwoMi6XFud3AUIg76SKTX02azJgw/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="510" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpDZ_8hmorGmBVEOssaC6-EZNclw9GI9AKUYu4yjPH1lIH46kmN64MV04L-GLOh-i4_Tl35u7Vfy1FI77Yun6_xMc7yoKXF7VXWbMWMBfMSQjkD8KHwoMi6XFud3AUIg76SKTX02azJgw/s640/1.png" width="640" /></a></div>
<br />
It was quite an exciting moment to see the monsters and objects appear on screen all at the right spot.<br />
<br />
Level geometries were a bit harder than alias models, mainly due to the way they were stored in the data structures. I eventually got the level on screen on Dec 29.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZPhheQz6n21a2EUPNdkGxxoJ_TWZvVhxlDbXD9lKVNEweUxsQa_yZbkwfbDPnFmzlHQql8TrP_5Z1Ft5vVOKmvcR6rtajDl9a8wPJ7yCc7nND3CbKoQswHISKfxd9VNWeidex8eIahhU/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="514" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZPhheQz6n21a2EUPNdkGxxoJ_TWZvVhxlDbXD9lKVNEweUxsQa_yZbkwfbDPnFmzlHQql8TrP_5Z1Ft5vVOKmvcR6rtajDl9a8wPJ7yCc7nND3CbKoQswHISKfxd9VNWeidex8eIahhU/s640/2.png" width="640" /></a></div>
<br />
Above is one of the first screen shots and you can see some polygons had wrong facing. This was later fixed and it looked much better.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGdvACPp7PgzeGTwjgrucVsCzm2fCr9RrOTU0xDqHVcyk9tyKCu2qH-jUi3XUWSsIc29S4N6ETZZsnaejYaU8NUDS8xR73kOkah-Uf7NaF73RGrraqqv55MLZcVsuxXcTo2iXmcr-MUUQ/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGdvACPp7PgzeGTwjgrucVsCzm2fCr9RrOTU0xDqHVcyk9tyKCu2qH-jUi3XUWSsIc29S4N6ETZZsnaejYaU8NUDS8xR73kOkah-Uf7NaF73RGrraqqv55MLZcVsuxXcTo2iXmcr-MUUQ/s640/3.jpg" width="640" /></a></div>
<br />
Here's another shot<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsUYXvHGr3Zmexcc23NOktIS-PNzftpmWFnjd1lB7wHdzTxXJz7Xxd-_N68NCD3zPADn5mgkf0h2Fr-3136hX3tqMiFuwkygFcZfsT9URp1Mw_db9ji4lMFswbxexk0kzIk_IhGxQQg1Y/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="392" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsUYXvHGr3Zmexcc23NOktIS-PNzftpmWFnjd1lB7wHdzTxXJz7Xxd-_N68NCD3zPADn5mgkf0h2Fr-3136hX3tqMiFuwkygFcZfsT9URp1Mw_db9ji4lMFswbxexk0kzIk_IhGxQQg1Y/s640/4.png" width="640" /></a></div>
Oh yeah, the above one was a shot taken on a Mac. I initially started with OpenGL 4.5 because direct state access is so nice. But I then decided it's worth to have Mac support so I had to rewrite the low level GL code to target OpenGL 3.3, which I thought should have good support on a wide range of systems, including VMware (but turned out VMware's OpenGL driver wasn't good enough to run it even though they claim 3.3 support).<br />
<br />
At first I just dump the entire level to the GPU without using the BSP tree at all. But it actually wasn't very hard to walk the BSP tree and only render the polygons in the PVS of the current leaf node. So I got this done in the new year holidays. Walking the BSP tree also had the nice side effect that I could add some of the small objects (mainly torches) to the rendering as I passing through the leaf nodes because these objects are stored inside the BSP tree.<br />
<br />
The next thing was rendering brush models, these are the doors and moving floors. Thanks to the holidays I had the time to implement these in just a couple days. Once these are in, I kind of reached a milestone that all 3D objects were rendered. Monsters, projectiles, torches(with animated flames), ammo boxes, moving floors and other level mechanisms, all there. So I captured a video of it running the opening demo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/pCK7fcOSeAk/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/pCK7fcOSeAk?feature=player_embedded" width="320"></iframe></div>
<br />
The next big challenge was texturing. Quake has diffuse textures and up to 4 light maps. light maps seemed a bit more complex but also more interesting so I went for them first.<br />
<br />
The big problem with light maps was that every polygon had their very own light map. In order to render the polygons with their light maps I would have render them one by one while binding their light map textures, instead of putting everything in a vertex buffer and render them in one draw call.<br />
<br />
So I took the obvious solution which is adding all light maps to a texture atlas. I had to write a texture atlas builder that allows me to add sub textures and then return a texture atlas and to translate texture coordinates to the coordinates within the atlas.<br />
<br />
The way Quake stores its texture coordinates is also rather strange. Instead of storing the UV coordinates together with the vertexes, Quake stores a plane equation with each polygon. So I had to project each vertex coordinate to the texture plane to get the texture coordinate.<br />
<br />
I was quite surprised that it only took me two days to get light maps working. Perhaps I'm getting better at this now. Oh yeah, weapon models were added too but these were fairly easy. They were simple alias models, just a matter of setting up the correct transformation matrices.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhejfSCkdUNNWWok7WOrDp-4yNO7VaZEVuE6B9wzWIl_MurqWkUFW9FDKngP41mopQio13Jcaf7VjkyQL5rYy1FDsKsm2Lp5k0H3ILWF1V8Mk0cb6FO3_LCW9uwkSdxbKY4q1Kws3NmrSU/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhejfSCkdUNNWWok7WOrDp-4yNO7VaZEVuE6B9wzWIl_MurqWkUFW9FDKngP41mopQio13Jcaf7VjkyQL5rYy1FDsKsm2Lp5k0H3ILWF1V8Mk0cb6FO3_LCW9uwkSdxbKY4q1Kws3NmrSU/s640/6.png" width="640" /></a></div>
<br />
The first screenshot above still had an off by 1 bug. If you look closely, some shadows doesn't align well with the geometry. The light map is 1/16 res as the diffuse map. So I just divided all texture coordinates by 16 but turned out that's not enough. I actually had to + 1 so it's like s = s / 16 + 1 instead of just s = s / 16. I don't understand why there's this +1 but once this was fixed, everything aligned perfectly. Here's another shot with texture filtering turned off.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx1ZJzclvfsbuIoH7S7w08mEULDSmEIJ8j_9V99QslwqC8cEl4L-pW7bJcakpzFa3AwYd3hoVRFnAbtnhB2hD1y6_izU0vzHesz5ZOw3GXlPTg2069lqfqVnRhEt_krPNAFGNmvJoexYA/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgx1ZJzclvfsbuIoH7S7w08mEULDSmEIJ8j_9V99QslwqC8cEl4L-pW7bJcakpzFa3AwYd3hoVRFnAbtnhB2hD1y6_izU0vzHesz5ZOw3GXlPTg2069lqfqVnRhEt_krPNAFGNmvJoexYA/s640/7.png" width="640" /></a></div>
<br />
This is where I'm at right now. It's quite an adventure for a graphics noob like me but I learned a hell lot and more importantly, had great fun doing it. Now I'm more confident than ever that I will be able finish it in the sense of reaching feature parity with the software renderer and even go beyond.<br />
<br />
These are the things still remain to be done:<br />
<ul>
<li> Diffuse maps</li>
<li> Procedural textures (sky, water, lava)</li>
<li> Particals</li>
<li> Dynamic lighting</li>
</ul>
<br />finalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.com0tag:blogger.com,1999:blog-8755629231838247325.post-57965623156188531102015-06-11T08:03:00.000-07:002015-06-11T08:03:14.991-07:00Fizz buzz with template meta programming: C++ vs D<br />
<br />
<br />
C++ compile time:<br />
<br />
<br />
<br />
<br />
<img alt="" src="data:image/jpeg;base64,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" /><br />
<br />
D run time:<br />
<br />
<img alt="" src="data:image/jpeg;base64,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suXVUSiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURKIlESiJREoiURVp43Gb6aO3lC4UyQbgywpxt59L8UKbdPbU2psNqCtArZKiRqB+zjfUYGU2OG5N78G2gxpOo1nktNN5dVe07CY7xM8+CyJHSybGgqdN2ta5n01F2TbkOOl9cZTYWVD7egISSSkqCvaSARgm1aJpYwSCWRMbSQB+oe6jKweW2IBJA6if+GF9yOBWlrp/Dvo5PA9Y9IebLBRJwrRppYaT9j+YCsgkq08pwr5NK1JtNrC10yDxvBi1h3nspTqOe9zS2IjhacWt+Vo5zsoeuddC6XbOhF0ukOE+3fLI25KETWO46+HEqkoK2EKw0U5VgjwSAR5IHmvJq/tFlJzmljjhxaR6Pm32F/prZetS/Zz6rGvxtE4dZsHEtBNjbEItJEgkRdTcDgb1ytciRHu1scnsR3JarSlxwye0jJWrIR2shIKtd9sA+P1XU/xIpuEtOGQJtEmw3nUgSARJ5GNDPBufLcQDxiy7nDJOgI0BsSCYtMiclHGYqemEu9oXBmyRcI7CltvPpfhhSHj21NqbDawvQK2SslOoH9Rxg+s4eKZSuAQ47QYw7zIieF55K0aLXeGq1bEjDxBbJI4QcUcbRxMLId6TTmbeHjd7UZq7Wm8N21LjpkORi2HCofb0CgnYlJWD7SQCME4nxrA5zcJgOwk2gGY4zqRcDe+6zZ4F72tOMS5pcBeSACTtE5Tqb7Lxicegw+lE3kMtgSJ025ptlvJcIDIbbDr7moIyr3soG2Rha/GcEejVy+W0auxE9BAA7knnl4Ez5lPM55OjQB3cTfsGnrPJY07gTlstrD8y82uLOfiJmt2txbofU0pOyTt2+0CU+4JLmfIGNiE1uqUvKJaSMQ1HCwPTQ7ErUypjNgYmJ21jrra456XWfI4FaWun8O+jk8D1j0h5ssFEnCtGmlhpP2P5gKyCSrTynCvk1lWpNptYWumQeN4MWsO89lhTqOe9zS2Ijha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" /><br />
<br />
D compile time:<br />
<br />
<img alt="" src="data:image/jpeg;base64,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" /><br />
<br />
<br />
The D compile time version is almost identical to the run time version, except replacing 'if' with 'static if' and replacing function call with template instantiation. And it is so much more readable than the C++ counterpart.finalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.com0tag:blogger.com,1999:blog-8755629231838247325.post-58642754069691591122015-05-27T22:31:00.000-07:002015-05-28T17:06:12.173-07:00Deferred function call in C++In embedded software development there is often a need for a mechanism to do some work asynchronously, often in a different thread context. For an example, the UI framework may not be thread safe so updating of the user interface must happen in the UI thread. Another common use case is the interrupt handler, there are lots of limitations on what can safely be done in an interrupt handler routine so we usually want to schedule a piece of code to be invoked later in a user mode thread.<br />
<br />
Traditionally these are often implemented with message id and switch block:<br />
<br />
<pre style="background-color: #272822; color: #333333; line-height: 16.25px;"><span style="color: #66d9ef;">enum</span> <span style="color: #f8f8f2;">EventID</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">kDoThis,</span>
<span style="color: #f8f8f2;">kDoThat,</span>
<span style="color: #f8f8f2;">....</span>
<span style="color: #f8f8f2;">};</span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">Event</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">EventID</span> <span style="color: #f8f8f2;">id;</span>
<span style="color: #66d9ef;">union</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">argForThis;</span>
<span style="color: #66d9ef;">short</span> <span style="color: #f8f8f2;">argtForThat;</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #f8f8f2;">}</span> <span style="color: #f8f8f2;">data;</span>
<span style="color: #f8f8f2;">};</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #75715e;">// Sender</span>
<span style="color: #f8f8f2;">Event</span> <span style="color: #f8f8f2;">event;</span>
<span style="color: #f8f8f2;">event.id</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">kDoThis;</span>
<span style="color: #f8f8f2;">event.data.argForThis</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">123</span><span style="color: #f8f8f2;">;</span>
<span style="color: #f8f8f2;">enqueue(queue,</span> <span style="color: #f8f8f2;">event);</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #75715e;">// Receiver</span>
<span style="color: #f8f8f2;">Event</span> <span style="color: #f8f8f2;">event</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">dequeue(queue);</span>
<span style="color: #66d9ef;">switch</span><span style="color: #f8f8f2;">(event.id)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">case</span> <span style="color: #f8f8f2;">kDoThis</span>:
<span style="color: #f8f8f2;">doThis(event.data.argForThis);</span>
<span style="color: #66d9ef;">break</span><span style="color: #f8f8f2;">;</span>
<span style="color: #66d9ef;">case</span> <span style="color: #f8f8f2;">kDoThat</span>:
<span style="color: #f8f8f2;">doThat(event.data.argForThat);</span>
<span style="color: #66d9ef;">break</span><span style="color: #f8f8f2;">;</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #f8f8f2;">}</span></pre>
<br />
Whenever we need to do something new, we must manually<br />
<br />
* add a member to the enum EventID<br />
* Add the argument to the data union member in the Event struct<br />
* Add a case to the big switch block to call the function we want<br />
<br />
This solution works. But there must be a better way. The ideal solution would be something like this:<br />
<br />
<pre style="background-color: #272822; color: #333333; line-height: 16.25px;"><span style="color: #75715e;">// Sender</span>
<span style="color: #f8f8f2;">DeferredCall</span> <span style="color: #a6e22e;">theCall</span><span style="color: #f8f8f2;">(foo,</span> <span style="color: #f8f8f2;">arg1,</span> <span style="color: #f8f8f2;">arg2);</span>
<span style="color: #f8f8f2;">enqueue(queue,</span> <span style="color: #f8f8f2;">theCall);</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #75715e;">// Receiver</span>
<span style="color: #f8f8f2;">DeferredCall</span> <span style="color: #f8f8f2;">theCall</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">dequeue(queue);</span>
<span style="color: #f8f8f2;">theCall.call();</span> <span style="color: #75715e;">// Here it calls foo(arg1, arg2)</span></pre>
<br />
It sounds a lot like the C++11 std::function or boost::function. However these are not suitable for embedded projects because they all have internal heap allocations, which is 1) expensive 2) fragments the heap and 3) unsafe to use in interrupt handlers.<br />
<br />
What we need is a fixed sized object, that has value semantic, can be created on stack and easily passing around like any value objects. Thanks to variadic templates, the code it takes to implement such an object is suprisingly small in C++11:<br />
<br />
<pre style="background-color: #272822; color: #333333; line-height: 16.25px;"><span style="color: #75715e;">#include <tuple></span>
<span style="color: #75715e;">// ----------------------------------------------------------------------</span>
<span style="color: #75715e;">// Expand tuple to parameter pack</span>
<span style="color: #66d9ef;">template</span> <span style="color: #f92672;"><</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">...</span><span style="color: #f92672;">></span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">Indexes</span> <span style="color: #f8f8f2;">{};</span>
<span style="color: #66d9ef;">template</span> <span style="color: #f92672;"><</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">N,</span> <span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">...</span> <span style="color: #f8f8f2;">REST</span><span style="color: #f92672;">></span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">UnpackArguments</span> <span style="color: #f92672;">:</span> <span style="color: #f8f8f2;">UnpackArguments</span> <span style="color: #f92672;"><</span><span style="color: #f8f8f2;">N</span><span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">N</span><span style="color: #f92672;">-</span><span style="color: #ae81ff;">1</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">REST...</span><span style="color: #f92672;">></span> <span style="color: #f8f8f2;">{};</span>
<span style="color: #66d9ef;">template</span> <span style="color: #f92672;"><</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">...</span> <span style="color: #f8f8f2;">REST</span><span style="color: #f92672;">></span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">UnpackArguments</span><span style="color: #f92672;"><</span><span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">REST...</span><span style="color: #f92672;">></span> <span style="color: #f8f8f2;">{</span> <span style="color: #66d9ef;">using</span> <span style="color: #f8f8f2;">type</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">Indexes</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">REST...</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">;</span> <span style="color: #f8f8f2;">};</span>
<span style="color: #75715e;">// ----------------------------------------------------------------------</span>
<span style="color: #75715e;">// Base class of callable objects</span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">DeferredCallBase</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">virtual</span> <span style="color: #f92672;">~</span><span style="color: #f8f8f2;">DeferredCallBase()</span> <span style="color: #f8f8f2;">{}</span>
<span style="color: #66d9ef;">virtual</span> <span style="color: #66d9ef;">void</span> <span style="color: #f8f8f2;">copy(</span><span style="color: #66d9ef;">void</span><span style="color: #f92672;">*</span><span style="color: #f8f8f2;">)</span> <span style="color: #66d9ef;">const</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">;</span>
<span style="color: #66d9ef;">virtual</span> <span style="color: #66d9ef;">void</span> <span style="color: #f8f8f2;">call()</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f8f8f2;">;</span>
<span style="color: #f8f8f2;">};</span>
<span style="color: #75715e;">// ----------------------------------------------------------------------</span>
<span style="color: #75715e;">// Functions and functors</span>
<span style="color: #66d9ef;">template</span> <span style="color: #f92672;"><</span><span style="color: #66d9ef;">class</span> <span style="color: #a6e22e;">FUNC</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">typename</span><span style="color: #f8f8f2;">...</span> <span style="color: #f8f8f2;">ARGS</span><span style="color: #f92672;">></span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">DeferredFunctionCall</span> <span style="color: #f92672;">:</span> <span style="color: #f8f8f2;">DeferredCallBase</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">FUNC</span> <span style="color: #f8f8f2;">func;</span>
<span style="color: #f8f8f2;">std</span><span style="color: #f92672;">::</span><span style="color: #f8f8f2;">tuple</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">ARGS...</span><span style="color: #f92672;">></span> <span style="color: #f8f8f2;">arguments;</span>
<span style="color: #f8f8f2;">DeferredFunctionCall(FUNC</span> <span style="color: #f8f8f2;">f,</span> <span style="color: #f8f8f2;">ARGS</span><span style="color: #f92672;">&&</span><span style="color: #f8f8f2;">...</span> <span style="color: #f8f8f2;">args)</span> <span style="color: #f92672;">:</span>
<span style="color: #f8f8f2;">func(f),</span> <span style="color: #f8f8f2;">arguments(std</span><span style="color: #f92672;">::</span><span style="color: #f8f8f2;">forward</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">ARGS</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">(args)...)</span>
<span style="color: #f8f8f2;">{}</span>
<span style="color: #66d9ef;">void</span> <span style="color: #f8f8f2;">copy(</span><span style="color: #66d9ef;">void</span><span style="color: #f92672;">*</span> <span style="color: #f8f8f2;">p)</span> <span style="color: #66d9ef;">const</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">new</span><span style="color: #f8f8f2;">(p)DeferredFunctionCall(</span><span style="color: #f92672;">*</span><span style="color: #66d9ef;">this</span><span style="color: #f8f8f2;">);</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #66d9ef;">void</span> <span style="color: #f8f8f2;">call()</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">call_i(</span><span style="color: #66d9ef;">typename</span> <span style="color: #f8f8f2;">UnpackArguments</span><span style="color: #f92672;"><</span><span style="color: #66d9ef;">sizeof</span><span style="color: #f8f8f2;">...(ARGS)</span><span style="color: #f92672;">>::</span><span style="color: #f8f8f2;">type());</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #66d9ef;">template</span><span style="color: #f92672;"><</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">...</span> <span style="color: #f8f8f2;">S</span><span style="color: #f92672;">></span>
<span style="color: #66d9ef;">void</span> <span style="color: #f8f8f2;">call_i(Indexes</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">S...</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">func(std</span><span style="color: #f92672;">::</span><span style="color: #f8f8f2;">get</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">S</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">(arguments)...);</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">};</span>
<span style="color: #75715e;">// ----------------------------------------------------------------------</span>
<span style="color: #75715e;">// The container</span>
<span style="color: #66d9ef;">template</span><span style="color: #f92672;"><</span><span style="color: #66d9ef;">unsigned</span> <span style="color: #f8f8f2;">kExtraSize</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">0</span><span style="color: #f92672;">></span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">DeferredCall</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">enum</span> <span style="color: #f8f8f2;">{</span> <span style="color: #f8f8f2;">kBufferSize</span> <span style="color: #f92672;">=</span> <span style="color: #ae81ff;">4</span> <span style="color: #f92672;">*</span> <span style="color: #66d9ef;">sizeof</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">uintptr_t</span><span style="color: #f8f8f2;">)</span> <span style="color: #f92672;">+</span> <span style="color: #f8f8f2;">kExtraSize</span> <span style="color: #f8f8f2;">};</span>
<span style="color: #66d9ef;">char</span> <span style="color: #f8f8f2;">buf[kBufferSize];</span>
<span style="color: #75715e;">// default constructor</span>
<span style="color: #f8f8f2;">DeferredCall()</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">auto</span> <span style="color: #f8f8f2;">nullfunc</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">[]{};</span>
<span style="color: #66d9ef;">new</span><span style="color: #f8f8f2;">(buf)DeferredFunctionCall</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">decltype(nullfunc)</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">(nullfunc);</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #75715e;">// constructor</span>
<span style="color: #66d9ef;">template</span> <span style="color: #f92672;"><</span><span style="color: #66d9ef;">class</span> <span style="color: #a6e22e;">F</span><span style="color: #f8f8f2;">,</span> <span style="color: #66d9ef;">typename</span><span style="color: #f8f8f2;">...</span> <span style="color: #f8f8f2;">ARGS</span><span style="color: #f92672;">></span>
<span style="color: #f8f8f2;">DeferredCall(F</span> <span style="color: #f8f8f2;">f,</span> <span style="color: #f8f8f2;">ARGS</span><span style="color: #f92672;">&&</span><span style="color: #f8f8f2;">...</span> <span style="color: #f8f8f2;">args)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">using</span> <span style="color: #f8f8f2;">DeferredCallType</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">DeferredFunctionCall</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">F,</span> <span style="color: #f8f8f2;">ARGS...</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">;</span>
<span style="color: #f8f8f2;">static_assert(</span><span style="color: #66d9ef;">sizeof</span><span style="color: #f8f8f2;">(DeferredCallType)</span> <span style="color: #f92672;"><=</span> <span style="color: #f8f8f2;">kBufferSize,</span> <span style="color: #e6db74;">"kBufferSize too small"</span><span style="color: #f8f8f2;">);</span>
<span style="color: #66d9ef;">new</span><span style="color: #f8f8f2;">(buf)DeferredCallType(f,</span> <span style="color: #f8f8f2;">std</span><span style="color: #f92672;">::</span><span style="color: #f8f8f2;">forward</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">ARGS</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">(args)...);</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #75715e;">// copy constructor</span>
<span style="color: #f8f8f2;">DeferredCall(</span><span style="color: #66d9ef;">const</span> <span style="color: #f8f8f2;">DeferredCall</span><span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">other)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">reinterpret_cast</span><span style="color: #f92672;"><</span><span style="color: #66d9ef;">const</span> <span style="color: #f8f8f2;">DeferredCallBase</span><span style="color: #f92672;">*></span><span style="color: #f8f8f2;">(other.buf)</span><span style="color: #f92672;">-></span><span style="color: #f8f8f2;">copy(buf);</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #75715e;">// copy assignment</span>
<span style="color: #f8f8f2;">DeferredCall</span><span style="color: #f92672;">&</span> <span style="color: #66d9ef;">operator</span><span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">const</span> <span style="color: #f8f8f2;">DeferredCall</span><span style="color: #f92672;">&</span> <span style="color: #f8f8f2;">other)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">reinterpret_cast</span><span style="color: #f92672;"><</span><span style="color: #66d9ef;">const</span> <span style="color: #f8f8f2;">DeferredCallBase</span><span style="color: #f92672;">*></span><span style="color: #f8f8f2;">(other.buf)</span><span style="color: #f92672;">-></span><span style="color: #f8f8f2;">copy(buf);</span>
<span style="color: #66d9ef;">return</span> <span style="color: #f92672;">*</span><span style="color: #66d9ef;">this</span><span style="color: #f8f8f2;">;</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #75715e;">// destructor</span>
<span style="color: #f92672;">~</span><span style="color: #f8f8f2;">DeferredCall()</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">reinterpret_cast</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">DeferredCallBase</span><span style="color: #f92672;">*></span><span style="color: #f8f8f2;">(buf)</span><span style="color: #f92672;">->~</span><span style="color: #f8f8f2;">DeferredCallBase();</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #66d9ef;">void</span> <span style="color: #f8f8f2;">call()</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">reinterpret_cast</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">DeferredCallBase</span><span style="color: #f92672;">*></span><span style="color: #f8f8f2;">(buf)</span><span style="color: #f92672;">-></span><span style="color: #f8f8f2;">call();</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">};</span></pre>
<br />
The idea is to use placement new operator to construct polymorph objects in a fixed buffer. Because the object has fixed size, you must specify how large you want it to be in the template argument kExtraSize. The more bytes you give it, the more arguments you can pack in a deferred call. If the buffer size is not large enough to hold all arguments the compiler will emit an error (from the static_assert() statement).<br />
<br />
Lets's see how well this little class works:<br />
<br />
<pre style="background-color: #272822; color: #333333; line-height: 16.25px;"><span style="color: #66d9ef;">using</span> <span style="color: #f8f8f2;">DeferredCallType</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">DeferredCall</span><span style="color: #f92672;"><</span><span style="color: #ae81ff;">32</span><span style="color: #f92672;">></span><span style="color: #f8f8f2;">;</span>
<span style="color: #75715e;">// Plain functions</span>
<span style="color: #66d9ef;">void</span> <span style="color: #a6e22e;">foo</span><span style="color: #f8f8f2;">()</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">cout</span> <span style="color: #f92672;"><<</span> <span style="color: #e6db74;">"foo"</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">endl;</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #66d9ef;">void</span> <span style="color: #a6e22e;">foo1</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">x)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">cout</span> <span style="color: #f92672;"><<</span> <span style="color: #e6db74;">"foo "</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">x</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">endl;</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #66d9ef;">void</span> <span style="color: #a6e22e;">foo2</span><span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">x,</span> <span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">y)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">cout</span> <span style="color: #f92672;"><<</span> <span style="color: #e6db74;">"foo "</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">x</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">y</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">endl;</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #f8f8f2;">DeferredCallType(foo).call();</span>
<span style="color: #f8f8f2;">DeferredCallType(foo1,</span> <span style="color: #ae81ff;">30</span><span style="color: #f8f8f2;">).call();</span>
<span style="color: #f8f8f2;">DeferredCallType(foo2,</span> <span style="color: #ae81ff;">30</span><span style="color: #f8f8f2;">,</span> <span style="color: #ae81ff;">60</span><span style="color: #f8f8f2;">).call();</span>
<span style="color: #75715e;">// Function objects</span>
<span style="color: #66d9ef;">struct</span> <span style="color: #f8f8f2;">Functor2</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #66d9ef;">void</span> <span style="color: #66d9ef;">operator</span><span style="color: #f8f8f2;">()</span> <span style="color: #f8f8f2;">(</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">x,</span> <span style="color: #f8f8f2;">string</span> <span style="color: #f8f8f2;">y)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">cout</span> <span style="color: #f92672;"><<</span> <span style="color: #e6db74;">"functor"</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">x</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">y</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">endl;</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">};</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #f8f8f2;">DeferredCallType(Functor2(),</span> <span style="color: #ae81ff;">30</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">string(</span><span style="color: #e6db74;">"abc"</span><span style="color: #f8f8f2;">)).call();</span>
<span style="color: #75715e;">// Member functions</span>
<span style="color: #66d9ef;">class</span> <span style="color: #a6e22e;">MyObject</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">public:</span>
<span style="color: #66d9ef;">void</span> <span style="color: #f8f8f2;">foo2(</span><span style="color: #66d9ef;">int</span> <span style="color: #f8f8f2;">x,</span> <span style="color: #f8f8f2;">string</span> <span style="color: #f8f8f2;">y)</span>
<span style="color: #f8f8f2;">{</span>
<span style="color: #f8f8f2;">cout</span> <span style="color: #f92672;"><<</span> <span style="color: #e6db74;">"foo "</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">x</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">y</span> <span style="color: #f92672;"><<</span> <span style="color: #f8f8f2;">endl;</span>
<span style="color: #f8f8f2;">}</span>
<span style="color: #f8f8f2;">};</span>
<span style="color: #f8f8f2;">...</span>
<span style="color: #f8f8f2;">DeferredCallType(std</span><span style="color: #f92672;">::</span><span style="color: #f8f8f2;">mem_fn(</span><span style="color: #f92672;">&</span><span style="color: #f8f8f2;">MyObject</span><span style="color: #f92672;">::</span><span style="color: #f8f8f2;">foo2),</span> <span style="color: #f92672;">&</span><span style="color: #f8f8f2;">o,</span> <span style="color: #ae81ff;">30</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">string(</span><span style="color: #e6db74;">"xyz"</span><span style="color: #f8f8f2;">)).call();</span></pre>
<br />
They can be copied:<br />
<br />
<pre style="background-color: #272822; color: #333333; line-height: 16.25px;"><span style="color: #f8f8f2;">DeferredCallType</span> <span style="color: #a6e22e;">theCall</span><span style="color: #f8f8f2;">(Functor2(),</span> <span style="color: #ae81ff;">30</span><span style="color: #f8f8f2;">,</span> <span style="color: #f8f8f2;">string(</span><span style="color: #e6db74;">"abc"</span><span style="color: #f8f8f2;">));</span>
<span style="color: #f8f8f2;">DeferredCallType</span> <span style="color: #f8f8f2;">copy</span> <span style="color: #f92672;">=</span> <span style="color: #f8f8f2;">theCall;</span>
<span style="color: #f8f8f2;">copy.call();</span></pre>
<br />
And they can be put in containers:<br />
<br />
<pre style="background-color: #272822; color: #333333; line-height: 16.25px;"><span style="color: #f8f8f2;">vector</span><span style="color: #f92672;"><</span><span style="color: #f8f8f2;">DeferredCallType</span><span style="color: #f92672;">></span> <span style="color: #f8f8f2;">v;</span>
<span style="color: #f8f8f2;">v.push_back(x);</span>
<span style="color: #f8f8f2;">v.begin()</span><span style="color: #f92672;">-></span><span style="color: #f8f8f2;">call();</span></pre>
<br />
That's it, a fixed size lightweight std::function alternative for embedded projects.finalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.com4tag:blogger.com,1999:blog-8755629231838247325.post-55878123694670788082014-08-30T23:07:00.002-07:002014-08-30T23:07:47.380-07:00Fixing Textadept's console window flashing issue (with API hooking in Free Pascal)<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<a href="http://foicica.com/textadept">Textadept</a> is a lovely little text editor I have been using alongside Emacs for some time. There is one small annoyance about it: on Windows, a black console window pops up then disappears every time it runs a sub-process to perform some task. <br />
<br />
<br />
The author is well aware of this issue. But according to him, "there is no way around this" (<a href="http://foicica.com/wiki/lspawn">http://foicica.com/wiki/lspawn</a>). He obviously knows how to create sub-process on Windows using CreateProcess but the problem is that the rest of the application code all use FILE* for file I/O. FILE is an opaque type, there is no easy way to convert a Win32 pipe HANDLE to a FILE*.<br />
<br />
Today, I decided to give this a shot. Firstly, I need to find out why is the console window popping up at all. I know whatever Textadept uses to create sub-process (glib or lua?), it must eventually call the Win32 CreateProcess function to do the job. So let's fire up our debugger (I used x64_dbg http://x64dbg.com) and set a breakpoint at kernel32!CreateProcessA to see what went wrong. <br />
<br />
When the debugger breaks in, the stack looks like this:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8c2Ju4gBmSMx7ugr-LoDMHSfZonERjggFKSmIFjShzrlaTmZDlGauODOeLdrHbhF-nusEg51HaNQxSq0WkYqygpsO2-T4Gy8vGJgFTEb0DwfUIWf2G1-z2Hf_avEhcK8ACMfZYQuwq0/s1600/stack.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv8c2Ju4gBmSMx7ugr-LoDMHSfZonERjggFKSmIFjShzrlaTmZDlGauODOeLdrHbhF-nusEg51HaNQxSq0WkYqygpsO2-T4Gy8vGJgFTEb0DwfUIWf2G1-z2Hf_avEhcK8ACMfZYQuwq0/s1600/stack.PNG" /></a></div>
<br />
<br />
The first item is the return address, then the 10 arguments for the <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx">CreateProcess function</a>. The most interesting one is the 9th argument 'lpStartupInfo' so let's check out what is inside:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVdUn08waSY0gtJ4Xwdehvnl2Az_pGtkTXm_osh1UIcbNvvYHlDXcAufDTXzHk9_oGTrPNszW0xQuOHgMhyphenhyphentp_P-ilvAcDQSM0xwDfHsBfPerXIE4kFH8jfolQ7wwYgt8kdT-MgFqayAU/s1600/si2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVdUn08waSY0gtJ4Xwdehvnl2Az_pGtkTXm_osh1UIcbNvvYHlDXcAufDTXzHk9_oGTrPNszW0xQuOHgMhyphenhyphentp_P-ilvAcDQSM0xwDfHsBfPerXIE4kFH8jfolQ7wwYgt8kdT-MgFqayAU/s1600/si2.PNG" /></a></div>
<br />
<br />
In order to hide a sub-process's window, the parent process needs to set the flag STARTF_USESHOWWINDOW in dwFlags, and set the show window command in wShowWindow to SW_HIDE. Looking at the screenshot, the caller obviously didn't set them up correctly (dwFlags and wShowWindow are the 2 words at the end of the 3rd row and the beginning of the 4th row). This is why we are seeing the black console window popping up.<br />
<br />
So how do we fix this? I really don't feel like to download the source code and all its dependencies then spend half a day trying to figure out how to build the application from source, especially when its author has explicitly declared "Compiling Textadept on Windows is no longer supported. The preferred way to compile for Windows is cross-compiling from Linux".<br />
<br />
But wait, isn't Textadept mostly written in Lua? Lua is well known for being extremely easy to extend. How about a Lua dll extension that dynamically patches the CreateProcess call and supply it with correct arguments? <br />
<br />
It didn't take me much time to decided I want to write this extension dll in Free Pascal. Why? because Free Pascal ships with Lua units out of the box.<br />
<br />
Putting together a minimal extension in Pascal is just a matter of minutes:<br />
<br />
<blockquote class="tr_bq">
library fixpopen;<br />
{$mode objfpc}{$H+}<br />
<br />
uses<br />
Classes, lua, lauxlib, lualib, windows;<br />
<br />
function patch(L:Plua_State):integer;cdecl;<br />
begin<br />
OutputDebugString('patching'); <br />
result:=1;<br />
end;<br />
<br />
function unpatch(L:Plua_State):integer;cdecl;<br />
begin<br />
OutputDebugString('unpatching');<br />
result:=1;<br />
end;<br />
<br />
function libinit(L:Plua_State):integer;cdecl;export;<br />
begin<br />
lua_register(L, 'fix_popen_patch', @patch);<br />
lua_register(L, 'fix_popen_unpatch', @unpatch);<br />
result:=0;<br />
end;<br />
<br />
exports<br />
libinit;<br />
<br />
initialization<br />
end.</blockquote>
<br />
Compile this code to a DLL, put it in the same directory as Textadept, then add these lines to ~/.textadept/init.lua<br />
<br />
<blockquote class="tr_bq">
mylibinit = package.loadlib("fixpopen.dll", "libinit")<br />
mylibinit()<br />
fix_popen_patch()</blockquote>
<br />
Open DbgView and run Textadept. The tracing messages appeared in DbgView as you'd' expected.<br />
<br />
Now it's time to add the API hooking. The term "API hooking" sounds intimidating but the principle is really simple. We put a small piece of code at the entry point of the function we want to hook. This piece of code, we call it a 'thunk', will catapult us to our own function, there, we need to restore the first few bytes of the original function, call the orignal function, then put the thunk back so that we can intercept the next API call.<br />
<br />
This is the definition of the thunk type:<br />
<br />
<blockquote class="tr_bq">
{$PACKRECORDS 1}<br />
TThunk = record<br />
jmp : byte;<br />
offset: longword;<br />
end;<br />
{$PACKRECORDS DEFAULT}</blockquote>
<br />
It is just one assembly instruction. The first byte is the op code, which should be $e9, or JMP. Followed by a 4-byte offset.<br />
<br />
We need 2 of these thunks, one to store our JMP instruction, another one to store the original content which will be overwritten by our thunk so that we can restore it later.<br />
<br />
Some initialization is needed when the DLL is loaded into the Textadept process:<br />
<blockquote class="tr_bq">
var<br />
thunk : TThunk = (jmp:$e9; offset:$0);<br />
save : TThunk = (jmp:$0; offset:$0);<br />
w32CreateProcess : TCreateProcess = nil;<br />
<br />
initialization<br />
if w32CreateProcess = nil then<br />
begin<br />
// save the API call address<br />
w32CreateProcess := TCreateProcess(GetProcAddress(GetModuleHandle('kernel32.dll'), 'CreateProcessA'));<br />
// save API function prelude<br />
CopyMemory(@save, w32CreateProcess, sizeof(TThunk));<br />
// fill in the thunk<br />
thunk.offset:= pointer(@myCreateProcess) - pointer(w32CreateProcess) - 5;<br />
end<br />
end.</blockquote>
<br />
Here we save the address of the CreateProcess function, and its first 5 bytes in 'save'. We also fill in the thunk with the jump offset, which is the relative distance between the next instruction after the JMP instruction (that's where the -5 comes from) to the target address.<br />
<br />
Now the fun part, patching the Windows API code.<br />
<br />
<blockquote class="tr_bq">
function patch(L:Plua_State):integer;cdecl;<br />
var<br />
bret: BOOL;<br />
begin<br />
bret:=VirtualProtect(w32CreateProcess, sizeof(TThunk), PAGE_EXECUTE_READWRITE, @protect);<br />
CopyMemory(w32CreateProcess, @thunk, sizeof(TThunk));<br />
VirtualProtect(w32CreateProcess, sizeof(TThunk), protect, nil);<br />
result:=1;<br />
end;</blockquote>
<br />
Because the code segment is write protected by default, we first need to turn off the protection. Then we just copy the thunk over CreateProcess's code. We already have a saved copy of that memory so we can easily restore that when we need the original code back.<br />
<br />
The unpatch function is almost identical, except it copies the saved stuff back.<br />
<br />
<blockquote class="tr_bq">
unpatch(L:Plua_State):integer;cdecl;<br />
var<br />
bret: BOOL;<br />
begin<br />
VirtualProtect(w32CreateProcess, sizeof(TThunk), PAGE_EXECUTE_READWRITE, @protect);<br />
CopyMemory(w32CreateProcess, @save, sizeof(TThunk));<br />
VirtualProtect(w32CreateProcess, sizeof(TThunk), protect, nil);<br />
result:=1;<br />
end;</blockquote>
<br />
Finally, the redirected CreateProcess function:<br />
<br />
<blockquote class="tr_bq">
function myCreateProcess(...<br />
lpStartupInfo:LPSTARTUPINFO;<br />
...):WINBOOL;stdcall;<br />
begin<br />
unpatch(nil);<br />
lpStartupInfo^.dwFlags:=lpStartupInfo^.dwFlags or STARTF_USESHOWWINDOW;<br />
lpStartupInfo^.wShowWindow:=SW_HIDE;<br />
result := w32CreateProcess(lpApplicationName,lpCommandLine,lpProcessAttributes,<br />
lpThreadAttributes,bInheritHandles,dwCreationFlags,lpEnvironment,<br />
lpCurrentDirectory,lpStartupInfo,lpProcessInformation);<br />
patch(nil);<br />
end;</blockquote>
<br />
It has exactly the same signature as CreateProcessA. Once we get in here, we first fix the original function so that it can be called. Then we modify the StartupInfo argument to hide the console window. Lastly, call the windows CreateProcessA function and put the thunk back.<br />
<br />
And this perfectly solves the black console window flashing issue in Textadept.<br />
<br />
The complete source code can be found here <a href="http://pastebin.com/zpyHrtRN">http://pastebin.com/zpyHrtRN </a>finalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.com6tag:blogger.com,1999:blog-8755629231838247325.post-88820849951237593502014-06-28T20:39:00.002-07:002014-06-29T00:32:02.903-07:00Dissecting the 128-byte raycasterLately a Reddit post caught my attention which is about a raycaster demo, animated, with mouse control and texture mapping, in only 128 bytes. It looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3aRAVx_dMNjHw0GD5xTaeyWTuywh_YT82G7yaiNLonkscISpYzifr45WKkCObA0Astbj8fZA1p4nbkYzL0udKba3_SKAd8amzQeeoPm_NpBUTL9OJYQrOzWCWm9ApQJKK1nLANNjKgRU/s1600/63518.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3aRAVx_dMNjHw0GD5xTaeyWTuywh_YT82G7yaiNLonkscISpYzifr45WKkCObA0Astbj8fZA1p4nbkYzL0udKba3_SKAd8amzQeeoPm_NpBUTL9OJYQrOzWCWm9ApQJKK1nLANNjKgRU/s1600/63518.png" height="200" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
And this is it in motion:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/cD49RXnEGNE?feature=player_embedded' frameborder='0'></iframe></div>
<br />
Impressive, isn't it? Out of curiosity, I took a look at the source code (<a href="http://olivier.poudade.free.fr/src/Wolf128.asm">http://olivier.poudade.free.fr/src/Wolf128.asm</a>) and spent some time trying to figure out how it works. So now I'd like to share my findings here.<br />
<br />
<h2>
The algorithm</h2>
For each pixel, wolf128.asm performs two ray marching, one on X-Z plane, and one on Y-Z plane, to find out the distance to the nearest wall/ceiling/floor. The ray marching happens on 2D planes and are always axis aligned so there is no vector math needed.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9siqkpU1_uzv3tGsO5hE5_QEiaNBIT89yCtr8jd6IHCd677J7g3WpBs2Qh4k3MUziv-3sTdJN65eeycC-u6PmPa3YmOdYeaVIjcBo6T4WhWeujRAQE9a8L8kbuNeKrW-WpyGtEJMSgmQ/s1600/b1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9siqkpU1_uzv3tGsO5hE5_QEiaNBIT89yCtr8jd6IHCd677J7g3WpBs2Qh4k3MUziv-3sTdJN65eeycC-u6PmPa3YmOdYeaVIjcBo6T4WhWeujRAQE9a8L8kbuNeKrW-WpyGtEJMSgmQ/s1600/b1.png" height="240" width="320" /></a></div>
<br />
For simplicity, below I'll use GLSL code to show how it works. Let's consider only the vertical direction first:<br />
<blockquote class="tr_bq">
out vec4 outputColor;<br />
uniform vec2 iResolution;<br />
void main(void)<br />
{<br />
// normalize y coordinate to 0-200, in consistent with wolf128's<br />
// vga 320x200 mode<br />
vec2 uv = gl_FragCoord.xy / iResolution.xy;<br />
uint y = uint(uv.y * 200.0);<br />
// initial depth is 0<br />
uint z = 0u;<br />
// the distance to wall(ceiling/floor)<br />
uint ydist;<br />
// we'll trace a maximun of 256 steps<br />
for(int i = 0; i < 256; ++i)<br />
{<br />
// the distance to wall is propotional to depth,<br />
// and propotional to the offset of the pixel from<br />
// the center of the screen(which is 100, because<br />
// the height of the screen is 200). In order to be<br />
// consistent with wolf128, everything uses unsigned<br />
// numbers, and we keep 8-bit precision for the result.<br />
ydist = ((y - 100u) * z + 4096u) >> 8;<br />
// If the distance exceeds a predefined threshold<br />
if (ydist >= 32u)<br />
break;<br />
// next itration, increase depth by 1<br />
++z;<br />
}<br />
<br />
// normalize the depth value to [0,1]<br />
float c = float(z) / 256.0;<br />
outputColor = vec4(vec3(c), 1.0);<br />
}</blockquote>
The output of this fragment shader is like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXMFAUZx9mfdBhmUGKgBMf8htOnzTbgWA34s81K-I0fNCc5UlKkCiivqA9-PIHRLq6aTl4qQdSNk92_iifa42BbHE5aQpQmx_ckOW080Fo3blW7WL4hDdPNn8t6HAbt2Zkl9Y8nlxc4Bo/s1600/y.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXMFAUZx9mfdBhmUGKgBMf8htOnzTbgWA34s81K-I0fNCc5UlKkCiivqA9-PIHRLq6aTl4qQdSNk92_iifa42BbHE5aQpQmx_ckOW080Fo3blW7WL4hDdPNn8t6HAbt2Zkl9Y8nlxc4Bo/s1600/y.png" height="229" width="320" /></a></div>
<br />
Fairly simple isn't it? The only thing worth mention is the +4096 in our distance calculation. The reason we need this is because the nature of unsigned numbers. Imagine when the Y coordinate is less then 100, for example 99, now 99-100 will underflow and becomes a very large number, immediately exceeds the threshold. The answer is to add 4096 to the calculation. Why 4096? Because we shift result right by 8 bits and 4096 >> 8 = 16, which is in the middle of our threshold (32). This effectively shifts all results to the positive direction by 16, so <100 coordinates will get results starting from 16 and gradually decrease from there towards 0 until it underflows and trigger the >=32 condition. Meanwhile results from positive coordinates will start from 16 and adds up from there until reach 32.<br />
<br />
Now let's add horizontal walls:<br />
<blockquote class="tr_bq">
out vec4 outputColor;<br />
uniform vec2 iResolution;<br />
void main(void)<br />
{<br />
vec2 uv = gl_FragCoord.xy / iResolution.xy;<br />
uint x = uint(uv.x * 320.0);<br />
uint y = uint(uv.y * 200.0); <br />
uint z = 0u;<br />
uint xdist, ydist;<br />
for(int i = 0; i < 256; ++i)<br />
{<br />
// horizontal center is 160<br />
xdist = ((x - 160u) * z + 4096u) >> 8;<br />
ydist = ((y - 100u) * z + 4096u) >> 8;<br />
// break the loop if we hit a wall in either direction<br />
if ((xdist >=32u) || (ydist >= 32u))<br />
break;<br />
++z;<br />
}<br />
float c = float(z) / 256.0;<br />
outputColor = vec4(vec3(c), 1.0);<br />
}</blockquote>
Almost identical, only added distance tracing for horizontal walls. And the result is no surprising:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixfTthao8KFqQ7Wnm5mQ_ZGg6S8gIacic4lLkISpFgO01McIWdPUiPCKcWnwF-CgAvpEdaPpta02Rd8Yg7ncQyQnfK3oYqiU8Xzju2Qdl8-vZWRzVcjskJqp-JpXdjA7F_mQNW1P3NSvg/s1600/a2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixfTthao8KFqQ7Wnm5mQ_ZGg6S8gIacic4lLkISpFgO01McIWdPUiPCKcWnwF-CgAvpEdaPpta02Rd8Yg7ncQyQnfK3oYqiU8Xzju2Qdl8-vZWRzVcjskJqp-JpXdjA7F_mQNW1P3NSvg/s1600/a2.png" height="220" width="320" /></a></div>
<br />
The above two shaders merely renders the depth value of a virtual tunnel (or distance field, if you prefer to use that term). Now let's add some textures.<br />
<br />
Given the fact that for each pixel we already have the distance to horizontal and vertical walls and we have the depth value, that's enough information on all 3 dimensions. A very simple but effective way to generate some texture is to XOR all of them together, like this: <br />
<blockquote class="tr_bq">
<div class="articalContent newfont_family" id="sina_keyword_ad_area2">
<wbr></wbr> <wbr></wbr> <wbr></wbr>uint texel =
xdist ^ ydist ^ z;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>texel %=
16u; // adjust the period of the pattern to your liking<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>float c =
float(texel) / 16.0;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr> outputColor
= vec4(vec3(c), 1.0);</div>
</blockquote>
<br />
The result is this:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfDYBWYIY1-mAlCTzmV4_Vj3sDliRn0eHZi8Dpw4xNngipyC6z1OcsCNfo5trC7pu4detenW11wlPMY_bIKKMUQDUegB7v0jIfCQR39VW21l65ayDqSLjlbDyl_MRdTxx3JB9p0RlmBJ4/s1600/a3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfDYBWYIY1-mAlCTzmV4_Vj3sDliRn0eHZi8Dpw4xNngipyC6z1OcsCNfo5trC7pu4detenW11wlPMY_bIKKMUQDUegB7v0jIfCQR39VW21l65ayDqSLjlbDyl_MRdTxx3JB9p0RlmBJ4/s1600/a3.png" height="221" width="320" /></a></div>
<br />
Now we are talking! <br />
<br />
The next step is to make some corridors in this tunnel. We can do this with the depth information which we already have. The only change we need to make is change the loop exit condition. When we hit a horizontal wall, do not exit immediately, instead, check whether the depth satisfies some sort of conditions, for example turn wall on and off for every other 32 units: <br />
<blockquote class="tr_bq">
<div class="articalContent newfont_family" id="sina_keyword_ad_area2">
<wbr></wbr> <wbr></wbr> <wbr></wbr>if ((xdist
>=32u && ((z & 32u) != 0u)) || (ydist >=
32u))<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>break;</div>
</blockquote>
This is what we get from this change:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3v7ttbLNa6-Rbc4-hF6Zql38cyPH8jrM0iXYNHkP-4Qai2xy1BrASqZasUhtif8lFHjBwu0wY81zYfogCvCEXtqxd872jgYG81vXlkUj-KJmq71Ozsofr_oNUM-y4dqu88KkcnD7A_Bk/s1600/a4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3v7ttbLNa6-Rbc4-hF6Zql38cyPH8jrM0iXYNHkP-4Qai2xy1BrASqZasUhtif8lFHjBwu0wY81zYfogCvCEXtqxd872jgYG81vXlkUj-KJmq71Ozsofr_oNUM-y4dqu88KkcnD7A_Bk/s1600/a4.png" height="223" width="320" /></a></div>
Last thing, right now the maze looks quite boring, let's add some variation to it. The way we do it is to add or subtract some random values before checking the distance: <br />
<blockquote class="tr_bq">
<div class="articalContent newfont_family" id="sina_keyword_ad_area2">
<wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr>
switch(z / 64u)<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr>
{<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr>
case 0u: xdist -= 10u; break;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr>
case 1u: xdist -= 40u; break;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr>
case 2u: xdist -= 20u; break;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr>
case 3u: xdist -= 30u; break;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr> <wbr></wbr>
}</div>
</blockquote>
Now it looks almost exactly the same as the original wolf128.asm program:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC0-7nMJ08Cvpi-XB7nzqL4yIKIDOkx0a4NygPWjXZRarDAaruuxUbtp7DxYnBE9cyLLOriyHXuZZLb6LHUxzVsKI0AWGxQIqKKnUktmfx_1woa0nP2S94jT6d8Etf90RqOoSzwCWTf3A/s1600/a5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC0-7nMJ08Cvpi-XB7nzqL4yIKIDOkx0a4NygPWjXZRarDAaruuxUbtp7DxYnBE9cyLLOriyHXuZZLb6LHUxzVsKI0AWGxQIqKKnUktmfx_1woa0nP2S94jT6d8Etf90RqOoSzwCWTf3A/s1600/a5.png" height="225" width="320" /></a></div>
<br />
The full fragment shader code that produces the above output is this:<br />
<blockquote class="tr_bq">
out vec4 outputColor;<br />
uniform vec2 iResolution;<br />
void main(void)<br />
{ <br />
<div class="articalContent newfont_family" id="sina_keyword_ad_area2">
<wbr></wbr> <wbr></wbr> <wbr></wbr>vec2 uv =
gl_FragCoord.xy / iResolution.xy;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>uint x =
uint(uv.x * 320.0);<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>uint y =
uint(uv.y * 200.0);<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr><br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>uint z =
0u;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>uint xdist,
ydist;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>for(int i =
0; i < 256; ++i)<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>{<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>xdist = ((x - 160u) * z + 4096u) >>
8;<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>ydist = ((y - 100u) * z + 4096u) >>
8;<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>switch(z / 64u)<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>{<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>case 0u: xdist -= 10u; break;<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>case 1u: xdist -= 40u; break;<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>case 2u: xdist -= 20u; break;<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>case 3u: xdist -= 30u; break;<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>}<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>if ((xdist >=32u && ((z & 32u) !=
0u)) || (ydist >= 32u))<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>break;<br />
<wbr></wbr> <wbr></wbr>
<wbr></wbr> <wbr></wbr> <wbr></wbr>
<wbr></wbr>++z;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>}<br />
<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>uint texel =
(xdist & 255u) ^ (ydist & 255u) ^ z;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>texel %=
16u;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>float c =
float(texel) / 16.0;<br />
<wbr></wbr> <wbr></wbr> <wbr></wbr>outputColor
= vec4(vec3(c), 1.0);<br />
}</div>
</blockquote>
That's all about the algorithm. Next to follow is<br />
<br />
<h2>
Assembly code analysis</h2>
In order to minimize the size, wolf128.asm is a DOS .COM file. The advantage of .COM file is that it has zero fat. Every single byte in the file is program code. When executed, DOS(or Windows) loads the code to offset 0x100 of the current code segment, and fill the 256 bytes before it with the so called Program Segment Prefix (or PSP).<br />
<br />
Below I'll explain the code line by line.<br />
<br />
<span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ; Call BIOS INT 10h set the display mode to VGA mode 13h,<br /> ; which is 320x200,256 color. It takes advantage of ah's<br /> ; initial value being 0, therefore save one instruction to<br /> ; load ah.<br /> mov al,13h<br /> int 10h<br /> ; bx has initial value 0, and ds is the same as cs,so ds:bx<br /> ; points to PSP. <br /> ; es <- 9FFF (PSP+2 is the end of DOS program area,which is 9FFF)<br /> ; dx is also assigned,but not used。Why load es with 9fff? That's<br /> ; because the VGA frame buffers starts at A000<br /> les dx,[bx]<br /> ; cl <- 255, max loop count<br />A:mov cl,0ffh<br /> ; bl <- cl,bl keeps track of depth<br />B:mov bl,cl<br /> ; this is equivalent to bl = 255-cl<br /> not bl<br /> ; ax <- 0xffee (di has initial value 0xfffe,minus 10h and get 0xffee)<br /> ; This will be the screen buffer size. Why 0xffee instead of<br /> ; 320x200=0xfa00? This is because in order to save space, wolf128 always<br /> ; writes 65535 bytes for each frame. Since our es segment is 9fff, and di<br /> ; is fffe, after 2 bytes, di will wrap back to 0, which is 9fff:0, and 16<br /> ; bytes before the VGA frame buffer at a000:0. So that's a total of 18<br /> ; extra bytes written before the frame buffer: 65535 - 18 = 0xffee<br /> lea ax,[di-10h]<br /> ; bp <- 320,screen width<br /> mov bp,140h<br /> ; dx <- 0000,cdq is in fact a 32-bit instruction, it sign extends eax to<br /> ; edx. here it takes advantage of the fact that the high word in eax is<br /> ; always 0 in 16-bit programs.<br /> cdq<br /> ; DX:AX(FFEE) divide by BP(320),get quotient(Y coordinate) in AX<br /> ; remainder(X coordinate) in DX<br /> div bp<br /> ; calling G twice is equvalent to<br /> ; ax = ((ax - 100) * z + 0x13b0);<br /> ; dx = ((dx - 100) * z + 0x13b0);<br /> ; You should already be familiar with this formular. But Why 0x13b0<br /> ; instead of 0x1000(4096)? And why both are minus 100? Those are all<br /> ; for reducing program size. 0x13b0 is the first 2 bytes of the<br /> ; program, which can be loaded by taking advantage of SI's initial<br /> ; value being 0x100. And if the 2 formulars are written separately<br /> ; it'll take more instructions. The results are kept in 16-bit<br /> ; registers AX and DX but later we only use AH and DH, this is like<br /> ; an 8-bit right shift for free.<br /> call G<br /> call G<br /> ; the program keeps mouse button state at ds:1dh<br /> test [1dh],7<br /> ; if no button is pressed then no need to look at mouse position<br /> jz C<br /> ; ds:1fh keeps mouse X coordinate. Add to x distance if button is pressed<br /> add dh,[1fh]<br /> ; ds:1eh is mouse Y coordinate, subtract from depth<br /> sub bl,[1eh]<br /> jmp short E<br /> ; fs has initial value 0, under DOS address 0x46c stores the current<br /> ; tick count. Put the tick in DL.<br />C:mov dl,[fs:46ch]<br /> ; Subtract an arbitary constant(0xb0,the first byte of program)<br /> ; It's picked to avoid collision with the walls too frequently<br /> sub bl,[si]<br /> ; move to the right every 64 ticks<br /> test dl,40h<br /> jnz D<br /> add dh,dl <br /> ; move forward<br />D:add bl,dl<br /> ; The shld instruction here effectively shifts depth right by 6 bits<br /> ; and put it in BP<br />E:shld bp,bx,10<br /> ; x distance minus an arbitary offset parameterized by depth>>6 to add<br /> ; variaty to the scene.<br /> ; The data used here is the first 4 bytes of PSP, but can be anything.<br /> sub dh,[bp]<br /> ; Save x distance in al<br /> mov al,dh<br /> ; What these 3 instructions do are very similar to<br /> ; (xdist >=32u && ((z & 32u) != 0u)) || (ydist >= 32u) <br /> and dh,bl<br /> or dh,ah<br /> and dh,20h<br /> ; If condition is not met then --cl and keep marching<br /> loopz B<br /><br /> ; XOR al,bl,ah(x,y,z) together to create texture<br /> xor al,bl<br /> xor al,ah<br /> ; This undocumented instructino is a variant of AAM. It splits the<br /> ; high and low 4 bits of AL and put them in AH and Al. This effectively<br /> ; performs al % 16.<br /> db 0d4h,10h<br /> ; Add 16 to texure. Why 16? because the we want to map the texture<br /> ; value to the second row of the VGA mode 13h palette (which is<br /> ; different shades of grays)</span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "Courier New",Courier,monospace; font-size: small;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXQ9FWmgzzxK-Dn2DjM7MjlEe2dI9RA4RYSN8-BHmEFPQ6AWetqtIhatCyHy17RYsdeXhohX84_2jnbWZ219dEGoof69EEoN37bwmW3wYSyVY0LqALukoIM5zHUiEhvs6IgiPFP8qLCAs/s1600/VGA_Palette_-_Big.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXQ9FWmgzzxK-Dn2DjM7MjlEe2dI9RA4RYSN8-BHmEFPQ6AWetqtIhatCyHy17RYsdeXhohX84_2jnbWZ219dEGoof69EEoN37bwmW3wYSyVY0LqALukoIM5zHUiEhvs6IgiPFP8qLCAs/s1600/VGA_Palette_-_Big.PNG" /></a></span></div>
<span style="font-family: "Courier New",Courier,monospace; font-size: small;"><br /> add al,10h<br /> ; write al to es:di (and di increase by 1)<br /> stosb<br /><br /> ; If di is not 0, it means we are not finished with a frame<br /> ; go back to compute the next pixel<br /> or di,di<br /> jnz A<br /><br /> ; read mouse state<br /> ; INT 33,3 - Get Mouse Position and Button Status<br /> ; CX = horizontal (X) position (0..639)<br /> ; DX = vertical (Y) position (0..199)<br /> ; BX = button status:<br /> ; |F-8|7|6|5|4|3|2|1|0| Button Status<br /> ; | | | | | | | | `---- left button (1 = pressed)<br /> ; | | | | | | | `----- right button (1 = pressed)<br /> ; `------------------- unused<br /> mov ax,3<br /> int 33h<br /> ; left button down?<br /> test bl,al<br /> ; Store button state at 1dh<br /> mov [1dh],bl<br /> ; If button is not down, goto F<br /> jz F<br /> ; If button is down, store Y coordinate at 1eh<br /> mov [1eh],dl<br /> ; X coordinate at 1fh<br /> mov [1fh],cl<br /><br /> ; Read keyboard scancode from port 60h<br />F:in ax,60h<br /> ; The scancode of ESC is 1, so if scancode - 1 == 0, then quit<br /> dec ax<br /> jnz B<br /><br /> ; This procedure is the formular<br /> ; ((x - 100) * z + 0x13b0)<br />G:xchg ax,dx<br /> sub ax,64h<br /> imul ax,bx<br /> add ax,[si]<br /> ret</span><br />
<br />
<span style="font-size: small;">This is it, the assembly code explained. Being assembly code it may still be rather difficult to read so below is a clone I wrote in D language. It does exactly the same thing as the assembly code, and has exactly the same code flow and is even annotated with the original assembly code, have fun!</span><br />
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;"><br /></span></span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;">import std.stdio;<br />
import std.datetime;<br />
import std.algorithm;<br />
import std.array;<br />
import std.random;<br />
import derelict.sdl2.sdl;</span>
<span style="font-family: "Courier New",Courier,monospace;"><br />
void render(SDL_Renderer* ren, SDL_Texture* tex)<br />
{<br />
</span></span><br />
<div class="articalContent newfont_family" id="sina_keyword_ad_area2">
<wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // the VGA
frame buffer starts from A000 but wolf128's ES points<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // to 9FFF
so the first 16 bytes are not displayed.<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ubyte[65536]
fb; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// 9fff:0000 - 9fff:ffff<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // initial
values;<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ubyte[] data
= [0xCD, 0x20, 0xFF, 0x9F]; // the first 4 bytes of PSP<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ubyte
mouseButton = 0xff; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> //
ds:1dh<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ubyte
mouseX </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> =
0xff; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// ds:1eh<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ubyte
mouseY </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> =
0xff; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// ds:1fh<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ushort idx =
0xfffe; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// di = 0xfffe on start<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> //
registers<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
ubyte </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
stepsLeft; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// cl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
ubyte </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
z; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// bl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ushort
offsetInFrame; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// ax<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ushort
width; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// bp<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ushort
y; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// ax/ah<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> ushort
x; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// dx/dh<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
ubyte </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
texCoord; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// al<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
ubyte </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
texel; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// al<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
uint </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
temp; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// dx:ax<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
uint </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
temp2; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// bp<br />
nextframe:<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // A:mov
cl,0ffh<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> stepsLeft =
255;<br />
nextstep:<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // B:mov
bl,cl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> not bl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> z = 255 -
stepsLeft;<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
offsetInFrame = cast(ushort)(idx - 16); // lea ax,[di-10h]<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> width =
320; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// mov bp,140h<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"><br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> temp =
offsetInFrame; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// cdq<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> y =
cast(ushort)(temp / width); // div bp<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> x =
cast(ushort)(temp % width);</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> x =
cast(ushort)((x - 100) * z + 0x13b0); // call G<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> y =
cast(ushort)((y - 100) * z + 0x13b0); // call G</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> x >>=
8; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// ; x in dh<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> y >>=
8; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// ; y in ah</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // test
[1dh],7<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // jz
C<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> if
(mouseButton & 7)<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> {<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
x +=
mouseX; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// add dh,[1fh]<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
z -=
mouseY; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// sub bl,[1eh]<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> }<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> else<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> {<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// C:mov dl,[fs:46ch]<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
ubyte ticks = cast(ubyte)(Clock.currSystemTick().msecs/60);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
z -=
0xb0; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// sub bl,[si]<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// test dl,40h<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// jnz D<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
if ((ticks & 0x40) == 0)<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
x +=
ticks; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// add dh,dl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
z +=
ticks; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// D:add bl,dl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> }</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> temp2 = z
>>
6; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// shld bp,bx,10<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> x -=
data[temp2]; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// sub dh,[bp]<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> texCoord =
cast(ubyte)x; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// mov al,dh<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> x &=
z; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// and dh,bl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> x |=
y; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// or dh,ah<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> x &=
0x20; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// and dh,20h<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> if
(stepsLeft-- && x == 0) </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // loopz B<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
goto nextstep;</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> texel =
texCoord ^
z; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// xor al,bl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> texel =
texel ^ cast(ubyte)y; // xor al,ah<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> texel %=
16; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// db 0d4h,10h<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> texel +=
16; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// add al,10h; map to the 2nd row of VGA palette<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> fb[idx++] =
texel; </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// stosb</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // or
di,di<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // jnz
A<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> if (idx !=
0)<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
goto nextframe;</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // mov
ax,3<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> // int
33h<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> SDL_Event
event;<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> if
(SDL_PollEvent(&event))<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> {<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// test bl,al<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// mov [1dh],bl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
mouseButton = (event.type == SDL_MOUSEBUTTONDOWN) ? 2 : 0;<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
if (mouseButton)<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
{<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
mouseX = cast(ubyte)event.button.x; // mov [1eh],dl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
mouseY = cast(ubyte)event.button.y; // mov [1fh],cl<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
}<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"><br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// in ax,60h<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// dec ax<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
// jnz B<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
if (event.type == SDL_KEYUP && event.key.keysym.sym ==
SDLK_ESCAPE)<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
return;<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> }</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
SDL_UpdateTexture(tex, null,
cast(const(void)*)convert(fb[16..(16+320*200)]), 320 *
uint.sizeof);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
SDL_RenderCopy(ren, tex, null, null);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
SDL_RenderPresent(ren);</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> goto
nextframe;<br />
}</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
//
---------------------------------------------------------------------</span>
<span style="font-family: "Courier New",Courier,monospace;"><br />
uint convertPixel(ubyte p)<br />
{<br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> p =
cast(ubyte)((p - 16) * 16);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> return p |
(p << 8) | (p << 16) | 0xff000000;<br />
}</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
uint[] convert(const(ubyte)[] buf)<br />
{<br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">return
map!convertPixel(buf).array;<br />
}</span><span style="font-size: small;">
<span style="font-family: "Courier New",Courier,monospace;"><br />
int main(char[][] args)<br />
{<br />
</span></span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">DerelictSDL2.load();<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">SDL_Window*
win;<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
SDL_Renderer* ren;<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
SDL_Init(SDL_INIT_VIDEO);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;">
SDL_CreateWindowAndRenderer(320, 200, 0, &win, &ren);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> SDL_Texture*
tex = SDL_CreateTexture(ren, SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, 320, 200);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> render(ren,
tex);<br />
</span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> </span><wbr></wbr><span style="font-family: "Courier New",Courier,monospace; font-size: small;"> return
0;<br />
}
</span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />finalpatchhttp://www.blogger.com/profile/00977023159563294844noreply@blogger.com6