X-Files #02
31 марта 1998 |
|
Programming - The effect of "Flying sprite.
==============================> ^|||||| PROGRAMMING ||||||` '\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ @ ________________________________ Konstantin Limonov (Smoke / CLV). ________________________________ Hello to all fans of assembly! In this issue, I (Smoke) I want to offer your attention to the procedures of a small but very expressive - "Flying Sprite! ________________________________ Such an effect you probably have seen the heap and any INTRO MUSICDEMO. Assembler these procedures look different, but the principle of action they have almost the same. I imagine my variant.Konechno, he is not the best and effective, but the most simple and intuitive to each nachinayuschimu koderu.Vse line program are numbered and you can see a detailed commentary on each of them after the text itself programmy.Itak begin ... ________________________________ FLY LD DE, # 0000 2000 CALL CL_SP 01 PTX LD HL, POX 02 LD A, (HL) 03 CP # FF 2004 JR NZ, LIP1 05 LD HL, POX 06 LD (PTX + # 01), HL 07 JR PTX 2008 LIP1 LD D, A 09 PTY LD HL, POY 1910 LD A, (HL) 11 CP # FF 1912 JR NZ, LIP2 13 LD HL, POY 1914 LD (PTY + # 01), HL 15 JR PTY 16 LIP2 LD E, A 17 CALL PLOT 18 LD (FLY + # 01), HL 19 PUSH HL 1920 LD DE, SPSIZE 21 LD HL, SPRT-SSIZE 22 LIP3 ADD HL, DE 23 DJNZ LIP3 24 POP DE 1925 CALL GET_SP 26 LD HL, (PTX + # 01) 27 INC HL 28 LD (PTX + # 01), HL 29 LD HL, (PTY + # 01) 30 INC HL 31 LD (PTY + # 01), HL 32 RET 1933 PLOT LD A, # AF 34 SUB E 35 AND A 36 RRA 37 SCF 38 RRA 39 AND A 40 RRA 41 XOR E 42 AND # F8 1943 XOR E 44 LD H, A 45 LD A, D 46 RLCA 47 RLCA 48 RLCA 49 XOR E 50 AND # C7 51 XOR E 52 RLCA 53 RLCA 54 LD L, A 55 LD A, D 56 AND # July 1957 LD B, A 58 INC B 59 RET 1960 GET_SP LD B, VIS * # August 1961 LIP4 PUSH DE, BC 62 LD B, DLINA 63 LIP4_X PUSH BC 1964 LDI 1965 POP BC 1966 DJNZ LIP4_X 67 POP BC, DE 1968 CALL DE_LINE 69 DJNZ LIP4 70 RET 1971 CL_SP LD BC, VIS * # 800 72 LIP5 PUSH BC, DE 1973 XOR A 74 LD B, DLINA 75 LIP6 LD (DE), A 76 INC DE 1977 DJNZ LIP6 78 POP DE, BC 79 CALL DE_LINE 80 DJNZ LIP5 81 RET 1982 ;------------------------------ DE_LINE INC D 83 LD A, D 84 AND # July 1985 RET Z 86 LD A, E 87 ADD A, # 20 88 LD E, A 89 RET C 90 LD A, D 91 SUB # August 1992 LD D, A 93 RET 1994 ;------------------------------ SPRT INCBIN SPRITES 95 POX INCBIN COORD-X 96 POY INCBIN COORD-Y 97 ;------------------------------ Now consider this procedure more podrobno.Itak, starting with the 0-th stroki.V this line in the register pair DE loading address in display area, where at a given moment is sprayt.Zatem in line 01 is invoked procedure erase sprayta.Pri this image is under the sprite teryaetsya.Poetomu would be better if you are not situated on place where it will "fly" sprite some graphical information. On line 02, in the register pair HL send the address of the Table coordinate axis 'X'. (For instructions on how to prepare a table of coordinates, you can read below). In the battery load coordinates from a spreadsheet and produced check at the end of the table (code end of the table is the number of # FF (255 DEC)). If this is the end table, the row 02 being upgraded so that the register pair HL is set top the table of coordinates. If it is one of the coordinates, then transition occurs on line 09. The resulting X-coordinate is transferred to the register of D. Then is similar to loading and checking the coordinates of Y. In the transition to line 17, we are Register D coordinate X, and coordinate in register E Y. Next, at 18 prompt a call to the procedure takes a string PLOT.Ona 34 th to the 60 yu.Protsedura PLOT engaged in the calculation of addresses in the display area at coordinates defined in pikselah.V register pair HL, it returns the address in the display area, and in the case B number of the sprite, which must this time printed on the screen monitora.Vnimanie! The program uses the same sprites 8 width and height, but each sprite is shifted relative the previous one pixel vpravo.Eto necessary for smooth move the sprite left and vpravo.Pochemu sprites eight?? Yes, because a byte is of eight bits! Prepare a set of sprites can, in Basically, in ART-STUDIO, but better use for this, for example, program of Digital Reality - "SpriteLand v1.xx". But keep in mind that zdvige sprite, its width will increase by one character (!) Remember this! When the program is also necessary to know the length of one sprite in bytes. After calculating the coordinates of the address, he entered into line 00, where he needed to erase sprayta.Posle this same address is sent to the stack, and in lines 21 th to 24 th of searching desired sprite from the table and then restoring the address of the press, line 26, is a challenge procedures for printing a sprite. The printing process is a sprite on the screen takes a line from 61 th to 71-yu.Ona easy to predela.V line 61 to the register B is loaded height of your sprite familiarity multiplied by eight. After all, familiarity in one 8-NIL lines, is not it? The next line store registers DE and BC, and then organized another round of Print each line sprayta.V principle, you can uncover this cycle of erasing the line with the 63rd on 67-th, instead type in this place so many teams LDI, much familiarity in width takes your sprayt.Dalee, in line 68 th, restored registers BC and DE, but then comes the challenge procedure for calculating the addresses of Print next line of the sprite under predyduschey.Eta procedure is so well known and simple, that describe how it works just bessmyslenno.Luchshe Read the book "Inforkom'A: "Elementary graphics", "Applied Graphics" and "Dynamic schedule. "And, of course, ZX-REVIEW! With the line 72 th to 82 th is erasing procedure sprayta.Ona works on the same principle as the how to print sprayta.Nu, generally, will understand! And then I'll I'll die for klav'oy from such mental stress. ____________ Well it's time to tell you how to make a table of coordinates which will "fly" your sprite. In the annex of the magazine you will find small program in BASIC, which will help you in the first porah.Potom, based on it, you can create something called svoe.Ona - LISSADGU, and builds, so called the figure Lissazhu.Chtoby understand what is at stake, one should at least know a little elektrotehniku.Tak here, the objects that appear as a result of program on the screen, and there are those most figures Lissazhu.Programma has several variables: ________________________________ 'K' - multiplicity. 'G' - a phase shift. 'A1' and 'A2' - amplitude. ________________________________ Try to enter, such parameters: K [5, G [0, A1 [110, A2 [70, or are: K [2, G [1, A1 [90, A2 [75, and once everything is clear! Only Remember the one condition - sprite will be printed starting from the upper left corner, and in those points, which will be shown on the screen! So watch out for so that your sprite is not got a edge of the screen (on the curb! Joke!)! Make corresponding indentation for as many pixels as a wide your sprite! Well, after the programm will prompt you to save the created table to disk, you can safely substitute their names in the assembly code in line 96 and 97.A in line 95, substitute the name you created on the table spraytov.I This, perhaps, could be zakonchit.Good luck, young coders! ________________ CUL8R! Written by Smoke 18/11/97-00: 07 ________________ P.S. The name of the assembly file for CD: (SPRFLY).
Other articles:
Similar articles:
В этот день... 3 December