Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
back2root:archives:denthor:part-08 [2021/09/05 14:05] – [C] frater | back2root:archives:denthor:part-08 [2021/09/18 20:39] (Version actuelle) – [Optimisation] frater | ||
---|---|---|---|
Ligne 24: | Ligne 24: | ||
==== Optimisation ==== | ==== Optimisation ==== | ||
- | Before I begin with the note on 3-D, I would like to stress that many of these routines, and probably most of your own, could be sped up quite a bit with a little optimisation. One must realise, however, that you must | + | Before I begin with the note on 3-D, I would like to stress that many of these routines, and probably most of your own, could be sped up quite a bit with a little optimisation. |
- | take a look at WHAT to optimise ... converting a routine that is only called once at startup into a tightly coded assembler routine may show off your merits as a coder, but does absolutely nothing to speed up your program. Something that is called often per frame is something that needs to be as fast as possible. For some, a much used procedure is the PutPixel procedure. Here is the putpixel procedure I gave you last week: | + | |
+ | One must realise, however, that you must take a look at WHAT to optimise ... converting a routine that is only called once at startup into a tightly coded assembler routine may show off your merits as a coder, but does absolutely nothing to speed up your program. | ||
+ | |||
+ | Something that is called often per frame is something that needs to be as fast as possible. For some, a much used procedure is the PutPixel procedure. Here is the putpixel procedure I gave you last week: | ||
<code pascal> | <code pascal> | ||
Ligne 66: | Ligne 69: | ||
</ | </ | ||
- | Right, now for some optimising. Firstly, if you have 286 instructions turned on, you may replace the 6 shl,1 with shl,6. Secondly, the Pascal compiler automatically pushes and pops ES, so those two lines may be removed. DS:[SI] is not altered in this procedure, so we may remove those too. Also, instead of moving COL into ah, we move it into AL and call stosb (es: | + | Right, now for some optimising. Firstly, if you have 286 instructions turned on, you may replace the 6 shl,1 with shl, |
+ | |||
+ | Secondly, the Pascal compiler automatically pushes and pops ES, so those two lines may be removed. DS:[SI] is not altered in this procedure, so we may remove those too. Also, instead of moving COL into ah, we move it into AL and call stosb (es: | ||
<code pascal> | <code pascal> | ||
Ligne 92: | Ligne 97: | ||
Total = 95 clock ticks | Total = 95 clock ticks | ||
- | Now, let us move the value of BX directly into DI, thereby removing a costly push and pop. The MOV and the XOR of DX can be replaced by it's equivalent, SHL DX,8 | + | Now, let us move the value of BX directly into DI, thereby removing a costly push and pop. The MOV and the XOR of DX can be replaced by it's equivalent, |
<code pascal> | <code pascal> | ||
Ligne 113: | Ligne 118: | ||
Total = 71 clock ticks | Total = 71 clock ticks | ||
- | As you can see, we have brought the clock ticks down from 153 ticks to 71 ticks ... quite an improvement. (The current ASPHYXIA putpixel takes 48 clock ticks) . As you can see, by going through your routines a few times, you can spot and remove unnecessary instructions, | + | As you can see, we have brought the clock ticks down from 153 ticks to 71 ticks ... quite an improvement. (The current ASPHYXIA putpixel takes 48 clock ticks). |
+ | |||
+ | As you can see, by going through your routines a few times, you can spot and remove unnecessary instructions, | ||
==== Defining a 3-D object ==== | ==== Defining a 3-D object ==== |