Adventurer #14
30 июня 2003 |
|
Tutorials - a new word in demomakinge: chankovy engine 2x2.
Chunks 2x2 Poisoned CyberJack / TBK The new word in demomakinge:) Greetings to all who consider themselves encoders - steep and so-so! Today I will try to surprise you :) Modern coding (for Spectrum, of coz) is mainly based on chankovyh engines. And this correct - for otherwise it is very difficult to realize many things. Explain the details will not - all of it was already quite a long time. Especially, the choice is already made ... Chunks are different. Contrary popular belief, all Gopnik, versed in code, as I have in Chinese cooking, chunks - is not only the squares 4x4:) Roughly speaking, the chunks - this is such a technology in which the screen is filled with blocks having the same size, usually image is built not just on screen, and in the buffer and we have random access to any part of the image, regardless of others (in contrast to our planar screen), and we usually draw the image in more colors than have our ZX (15, not forgotten?) Since the campaign against illiteracy complete dummies are not included in my plans, at this muddled description I close this question - who should be may find the information in other publications (Deja Vu, Demo or Die, Buzz, etc) So - chunks may be different. On Speke mostly yuzayutsya size 4x4 (two types - pixel [Refresh, Dogma, Inbetween] and Multicolor [Eye Ache 1 / 2, Rage, Stellar Contour]), as is the optimal ratio between resolution and volume screen. 8x8 species, as purely attribute [any demos 95-97 years] and pixel-attribute [Emergency, 63Bit3, Smile_4K], because of the low-resolution strongly lose, so how to do something normal in 32h24 almost unreal. Oh, forgot say - speaking about the code, I am mind 3D - because it is the most difficult (Hence interesting) application koderskih abilities. All this has been tested very long (97y year), and many have already nabilo mouth. Is there no alternative? And there is a solution - and also long been known. Remember these things Higher State / 3SC, Over The Top / Enigma, Matricks / Baze? Well Yes, I'm talking about a 2x2 chunk. Many coders who have long not new, now suspiciously grins. Yes, yes, at first view the benefits of such a size chanok a little as the screen grows as much a factor of 4 compared to 4x4 (and, hence, the frame will be constructed to 4 times longer) - and in the memory of this screen to jostle it is not so easy. And the use of tiny windows - is not out. And even feature - a chunk of 2x2, we have 5 colors, it's awfully small for the implementation of lighting in the 3D-parts (and Phong, and Gourado, and even look Flat just awful). To top everything else and c2p brake, so as there is more than reading and less write (compared to 4x4, again). But! I would not just waste your time (as well as their own, which to me is much more expensive:) if not sold chunks 2x2 Our Deme, which we unfortunately could not lead to CAFe'02, and now can not in any way bring to end: (((That's about This I tell you now ... Most simply solve the problem lack of 5-colors. Itself dithering. Who does not know - in some Deja Vu was a good The article about it. Incidentally, birdie. Relatively recently in Psychoz # 11c was published Article Dark / X-Trade of dithering a 2x2 chunk. Despite all my respect to the individual, the code dithering there terribly weak. More in 2000 to year we are on par with Baze/3SC came up with the correct routine c2p chanok for 2x2, and its intro Matricks it is just applied dithering in 16 colors (Admittedly, c2p there it personal more braking). C2p code like this: sp - chunk screen de - 1st line on spectrum screen (# 401F) bc - 2nd line on spectrum screen (# 4120) pop hl ld a, (hl) pop hl ld l, (hl) ld h, a ldd ld a, (hl) ld (bc), a Total: 10 +7 +10 +7 +4 +16 +7 +7 = 68tct [Recall that two Dark'a familiarity drawn 90 94 tact, it is 92 cycles on average] The trick you use LDD. A small feature - the picture is drawn inverted horizontally, as SP is growing up, and BC and DE reduced. Chunks of the form% --- xxxx0. For dither will have to put a table of graphics in different banks and to work on one screen. Explain I will not detail because it is all well already passed stage:) Who Still interesting and clear - contact me explain. As you can see, this speed is quite normal - the whole screen is drawn in approximately 3 frames. But problem is too big-screen remains so it is inadequate solution. Experimenting with different engines and filters, I came head of a great idea:) And that if we miscalculate the screen is not completely but only partially and the remainder of the fill program, say, a linear interpolation? Then, you can not use the brake filter (a la Sair00s) for latent defects engine-that is, we get benefits in both speed and volume of the screen. There are some parallels with the Amiga regime HAM8 (I understand), where the color of pixels depends on the nodal and the latest demos are working to resolve not 640x480 or 320x240, and a lot less. So I do not amizhnik (really), it can now be said to huge stupidity - but it does not matter:) This talking about the Spectrum. What I mean by a linear interpolation? I have not cheated Each chunk screen, and in one horizontally - and missed get as an average between the two already known. Type this: so do the usual: ! C0! C1! C2! C3! C4! C5! C6! C7! C8! and so do I: ! C0! -! C2! -! C4! -! C6! -! C8! (C0 + c2) / 2 (c4 + c6) / 2 As a result, the picture gets some blurring, which personally I like:) Anyway issue immediately chankovy screen a little risky, because of the low resolution and simplified shading image is often obtained, so to speak, scary:) In the past demah Sair00s about the same interpolates two the screen - I did a cost. If interpolation conduct a separate operation, then any benefits in speed, we did not find since it is not too rapid (takes two from memory the numbers add up on the table We get the result and puts it in Memory - 40 cycles per chunk go). I therefore distort and combined with interpolation c2p: sp - chunk screen de - spectrum screen h - previous chunk pop bc ld a, (bc) ld l, a ld a, (hl) ld (de), a inc h inc d ldi dec d ld h, b Total: 10 +7 +4 +7 +7 +4 +4 +16 +4 +4 = 67tct Mdaaaa:) I'll try to explain available. In order to draw the familiarity, (8x2 pixel), we must consider three chunks: ! ! ! ! - C0 - c1! - C2 - c3! ! ! ! ^ ^ ^ We have 16 tables (as the chunk previous familiarity may be of any color), and the address of graphics is calculated as follows (for the second familiarity): c1 * # 0100 + c2 * # 0010 + c3 Chunks of the form% 110hhhh0 those # E0-# FE. At the end of the sector is a table junior addresses schedules, ie from addresses # E0E0, # E2E0, etc. In the very same 32 sectors is schedule. Discrepancy came out - so the graphics and the multiplication table located in the same address, their creeping occurs at each other. I walked around it, throwing two color:) That is, I do not have 16 real flowers, and 14. But since more convenient to work in sixteen colors, so I just combined 0 and 1, 14 and 15 colors (in the table "multiplication" on display the same value). You can actually do something and honest 1916 colors, but only by slowing down c2p-so I chose this output. Dithering I made with two cans with different chankovoy graphics - for even rows and odd. All this eats lots of memory, but still works on one screen:) What are we all this for you? We have the following - in comparison with chunks 4x4 screen size has doubled (rather than four), the screen is completely rebuilt in about three frames, we do not need an additional filter, the image quality much better than (Still would be a chunk fell by 4 times). That is, we lose in speed, but we win as a. On this engine is quite possible to do something that we tried to prove in his Deme. The annex to the magazine you will find the source generilki chankovoy Graphics and c2p in text format, but unfortunately for many, syntax Storm'a:) And also small demonstration engine. respect to all spectrum's coders and Adventurer's readers!!! (C) Triebkraft --------------------------------- I am, of course, with a slightly stormozil his article (as well as with demoy : (), And that though the thread compensate for this negative aspect, bring to your attention an optimized version of c2p-routine with interpolation. Wrote it JtN / / 4d, comments will not:) The principle of operation is the same, and in general - need to head to think more. pop hl; 10 l, (hl); 7 ld a, h; 4 exa; 4 ld h, a; 4 ldd; 16 ld a, (hl); 7 ld (bc), a; 7 ; = 59t !!!!!!!!!!!
Other articles:
Similar articles:
В этот день... 21 November