Browse Source

Strip ASM code

pull/238/head
Anders Jenbo 7 years ago
parent
commit
f605138c79
  1. 121
      Source/_asm.cpp
  2. 10251
      Source/_render.cpp
  3. 6
      Source/appfat.cpp
  4. 356
      Source/control.cpp
  5. 44
      Source/drlg_l1.cpp
  6. 44
      Source/drlg_l2.cpp
  7. 51
      Source/drlg_l3.cpp
  8. 51
      Source/drlg_l4.cpp
  9. 1293
      Source/engine.cpp
  10. 150
      Source/gendung.cpp
  11. 33
      Source/inv.cpp
  12. 23
      Source/items.cpp
  13. 58
      Source/minitext.cpp
  14. 41
      Source/objects.cpp
  15. 76
      Source/scrollrt.cpp
  16. 19
      Source/stores.cpp
  17. 301
      Source/town.cpp
  18. 19
      Source/towners.cpp
  19. 4
      types.h

121
Source/_asm.cpp

@ -1,121 +0,0 @@
static __inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src);
static __inline unsigned int asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src, unsigned int mask);
static __inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
unsigned char l = w >> 1;
if (w & 1) {
(*dst)[0] = tbl[(*src)[0]];
(*src)++;
(*dst)++;
}
if (l & 1) {
(*dst)[0] = tbl[(*src)[0]];
(*dst)[1] = tbl[(*src)[1]];
*src += 2;
*dst += 2;
}
asm_cel_light_square(l >> 1, tbl, dst, src);
}
static __inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
for (; w; --w) {
(*dst)[0] = tbl[(*src)[0]];
(*dst)[1] = tbl[(*src)[1]];
(*dst)[2] = tbl[(*src)[2]];
(*dst)[3] = tbl[(*src)[3]];
*src += 4;
*dst += 4;
}
}
static __inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
if (!(w & 1)) {
asm_trans_light_edge_1_3(w >> 1, tbl, dst, src);
} else {
(*src)++;
(*dst)++;
asm_trans_light_edge_0_2(w >> 1, tbl, dst, src);
}
}
static __inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
unsigned char l = w >> 1;
if (w & 1) {
(*dst)[0] = tbl[(*src)[0]];
*src += 2;
*dst += 2;
}
if (l) {
asm_trans_light_square_0_2(l, tbl, dst, src);
}
}
static __inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
for (; w; --w) {
(*dst)[0] = tbl[(*src)[0]];
(*dst)[2] = tbl[(*src)[2]];
*src += 4;
*dst += 4;
}
}
static __inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
if (!(w & 1)) {
asm_trans_light_edge_0_2(w >> 1, tbl, dst, src);
} else {
(*dst)[0] = tbl[(*src)[0]];
(*src)++;
(*dst)++;
asm_trans_light_edge_1_3(w >> 1, tbl, dst, src);
}
}
static __inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
unsigned char l = w >> 1;
if (w & 1) {
(*dst)[1] = tbl[(*src)[1]];
*src += 2;
*dst += 2;
}
if (l) {
asm_trans_light_square_1_3(l, tbl, dst, src);
}
}
static __inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src)
{
for (; w; --w) {
(*dst)[1] = tbl[(*src)[1]];
(*dst)[3] = tbl[(*src)[3]];
*src += 4;
*dst += 4;
}
}
static __inline unsigned int asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE **dst, BYTE **src, unsigned int mask)
{
for (; w; --w, (*src)++, (*dst)++, mask *= 2) {
if (mask & 0x80000000)
(*dst)[0] = tbl[(*src)[0]];
}
return mask;
}

10251
Source/_render.cpp

File diff suppressed because it is too large Load Diff

6
Source/appfat.cpp

@ -21,13 +21,7 @@ void TriggerBreak()
LPTOP_LEVEL_EXCEPTION_FILTER pFilter;
pFilter = SetUnhandledExceptionFilter(BreakFilter);
#ifdef USE_ASM
__asm {
int 3
}
#else
__debugbreak();
#endif
SetUnhandledExceptionFilter(pFilter);
#endif
}

356
Source/control.cpp

@ -179,75 +179,6 @@ void DrawSpellCel(int xp, int yp, BYTE *Trans, int nCel, int w)
dst = &gpBuffer[xp + PitchTbl[yp]];
tbl = SplTransTbl;
#ifdef USE_ASM
__asm {
mov ebx, Trans
mov eax, nCel
shl eax, 2
add ebx, eax
mov eax, [ebx+4]
sub eax, [ebx]
mov end, eax
mov esi, Trans
add esi, [ebx]
mov edi, dst
mov eax, end
add eax, esi
mov end, eax
mov ebx, tbl
label1:
mov edx, w
label2:
xor eax, eax
lodsb
or al, al
js label6
sub edx, eax
mov ecx, eax
shr ecx, 1
jnb label3
lodsb
xlat
stosb
jecxz label5
label3:
shr ecx, 1
jnb label4
lodsw
xlat
ror ax, 8
xlat
ror ax, 8
stosw
jecxz label5
label4:
lodsd
xlat
ror eax, 8
xlat
ror eax, 8
xlat
ror eax, 8
xlat
ror eax, 8
stosd
loop label4
label5:
or edx, edx
jz label7
jmp label2
label6:
neg al
add edi, eax
sub edx, eax
jnz label2
label7:
sub edi, BUFFER_WIDTH
sub edi, w
cmp esi, end
jnz label1
}
#else
int i;
BYTE width;
BYTE *src;
@ -291,7 +222,6 @@ void DrawSpellCel(int xp, int yp, BYTE *Trans, int nCel, int w)
}
}
}
#endif
}
void SetSpellTrans(char t)
@ -560,174 +490,6 @@ void CPrintString(int nOffset, int nCel, char col)
{
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
__asm {
mov ebx, pPanelText
mov eax, nCel
shl eax, 2
add ebx, eax
mov edx, [ebx+4]
sub edx, [ebx]
mov esi, pPanelText
add esi, [ebx]
mov edi, gpBuffer
add edi, nOffset
mov ebx, edx
add ebx, esi
xor edx, edx
mov dl, col
cmp edx, COL_WHITE
jz c0_label1
cmp edx, COL_BLUE
jz c1_label1
cmp edx, COL_RED
jz c2_label1
jmp d_label1
// Case 0
c0_label1:
mov edx, 13
c0_label2:
xor eax, eax
lodsb
or al, al
js c0_label6
sub edx, eax
mov ecx, eax
shr ecx, 1
jnb c0_label3
movsb
jecxz c0_label5
c0_label3:
shr ecx, 1
jnb c0_label4
movsw
jecxz c0_label5
c0_label4:
rep movsd
c0_label5:
or edx, edx
jz c0_label7
jmp c0_label2
c0_label6:
neg al
add edi, eax
sub edx, eax
jnz c0_label2
c0_label7:
sub edi, BUFFER_WIDTH + 13
cmp ebx, esi
jnz c0_label1
jmp labret
// Case 1
c1_label1:
mov edx, 13
c1_label2:
xor eax, eax
lodsb
or al, al
js c1_label6
sub edx, eax
mov ecx, eax
c1_label3:
lodsb
cmp al, PAL16_GRAY + 13
ja c1_label4
cmp al, PAL16_GRAY
jb c1_label5
sub al, PAL16_GRAY - (PAL16_BLUE + 2)
jmp c1_label5
c1_label4:
mov al, PAL16_BLUE + 15
c1_label5:
stosb
loop c1_label3
or edx, edx
jz c1_label7
jmp c1_label2
c1_label6:
neg al
add edi, eax
sub edx, eax
jnz c1_label2
c1_label7:
sub edi, BUFFER_WIDTH + 13
cmp ebx, esi
jnz c1_label1
jmp labret
// Case 2
c2_label1:
mov edx, 13
c2_label2:
xor eax, eax
lodsb
or al, al
js c2_label5
sub edx, eax
mov ecx, eax
c2_label3:
lodsb
cmp al, PAL16_GRAY
jb c2_label4
sub al, PAL16_GRAY - PAL16_RED
c2_label4:
stosb
loop c2_label3
or edx, edx
jz c2_label6
jmp c2_label2
c2_label5:
neg al
add edi, eax
sub edx, eax
jnz c2_label2
c2_label6:
sub edi, BUFFER_WIDTH + 13
cmp ebx, esi
jnz c2_label1
jmp labret
// Default
d_label1:
mov edx, 13
d_label2:
xor eax, eax
lodsb
or al, al
js d_label6
sub edx, eax
mov ecx, eax
d_label3:
lodsb
cmp al, PAL16_GRAY
jb d_label5
cmp al, PAL16_GRAY + 14
jnb d_label4
sub al, PAL16_GRAY - (PAL16_YELLOW + 2)
jmp d_label5
d_label4:
mov al, PAL16_YELLOW + 15
d_label5:
stosb
loop d_label3
or edx, edx
jz d_label7
jmp d_label2
d_label6:
neg al
add edi, eax
sub edx, eax
jnz d_label2
d_label7:
sub edi, BUFFER_WIDTH + 13
cmp ebx, esi
jnz d_label1
labret:
}
#else
int i;
BYTE width, pix;
BYTE *src, *dst, *end;
@ -845,7 +607,6 @@ void CPrintString(int nOffset, int nCel, char col)
}
break;
}
#endif
}
void AddPanelString(char *str, BOOL just)
@ -872,38 +633,6 @@ void DrawPanelBox(int x, int y, int w, int h, int sx, int sy)
nSrcOff = x + PANEL_WIDTH * y;
nDstOff = sx + BUFFER_WIDTH * sy;
#ifdef USE_ASM
__asm {
mov esi, pBtmBuff
add esi, nSrcOff
mov edi, gpBuffer
add edi, nDstOff
xor ebx, ebx
mov bx, word ptr w
xor edx, edx
mov dx, word ptr h
label1:
mov ecx, ebx
shr ecx, 1
jnb label2
movsb
jecxz label4
label2:
shr ecx, 1
jnb label3
movsw
jecxz label4
label3:
rep movsd
label4:
add esi, PANEL_WIDTH
sub esi, ebx
add edi, BUFFER_WIDTH
sub edi, ebx
dec edx
jnz label1
}
#else
int wdt, hgt;
BYTE *src, *dst;
@ -935,7 +664,6 @@ void DrawPanelBox(int x, int y, int w, int h, int sx, int sy)
wdt--;
}
}
#endif
}
void SetFlaskHeight(BYTE *pCelBuff, int min, int max, int c, int r)
@ -948,21 +676,6 @@ void SetFlaskHeight(BYTE *pCelBuff, int min, int max, int c, int r)
nDstOff = c + BUFFER_WIDTH * r;
w = max - min;
#ifdef USE_ASM
__asm {
mov esi, pCelBuff
add esi, nSrcOff
mov edi, gpBuffer
add edi, nDstOff
mov edx, w
label1:
mov ecx, 88 / 4
rep movsd
add edi, BUFFER_WIDTH - 88
dec edx
jnz label1
}
#else
BYTE *src, *dst;
src = &pCelBuff[nSrcOff];
@ -970,35 +683,10 @@ void SetFlaskHeight(BYTE *pCelBuff, int min, int max, int c, int r)
for (; w; w--, src += 88, dst += BUFFER_WIDTH)
memcpy(dst, src, 88);
#endif
}
void DrawFlask(BYTE *pCelBuff, int w, int nSrcOff, BYTE *pBuff, int nDstOff, int h)
{
#ifdef USE_ASM
__asm {
mov esi, pCelBuff
add esi, nSrcOff
mov edi, pBuff
add edi, nDstOff
mov edx, h
label1:
mov ecx, 59
label2:
lodsb
or al, al
jz label3
mov [edi], al
label3:
inc edi
loop label2
add esi, w
sub esi, 59
add edi, BUFFER_WIDTH - 59
dec edx
jnz label1
}
#else
int wdt, hgt;
BYTE *src, *dst;
@ -1013,7 +701,6 @@ void DrawFlask(BYTE *pCelBuff, int w, int nSrcOff, BYTE *pBuff, int nDstOff, int
dst++;
}
}
#endif
}
void DrawLifeFlask()
@ -2083,48 +1770,6 @@ void RedBack()
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
if (leveltype != DTYPE_HELL) {
__asm {
mov edi, gpBuffer
add edi, SCREENXY(0, 0)
mov ebx, pLightTbl
add ebx, idx
mov edx, PANEL_TOP
lx_label1:
mov ecx, SCREEN_WIDTH
lx_label2:
mov al, [edi]
xlat
stosb
loop lx_label2
add edi, BUFFER_WIDTH - SCREEN_WIDTH
dec edx
jnz lx_label1
}
} else {
__asm {
mov edi, gpBuffer
add edi, SCREENXY(0, 0)
mov ebx, pLightTbl
add ebx, idx
mov edx, PANEL_TOP
l4_label1:
mov ecx, SCREEN_WIDTH
l4_label2:
mov al, [edi]
cmp al, 32
jb l4_label3
xlat
l4_label3:
stosb
loop l4_label2
add edi, BUFFER_WIDTH - SCREEN_WIDTH
dec edx
jnz l4_label1
}
}
#else
int w, h;
BYTE *dst, *tbl;
@ -2148,7 +1793,6 @@ void RedBack()
}
}
}
#endif
}
char GetSBookTrans(int ii, BOOL townok)

44
Source/drlg_l1.cpp

@ -206,32 +206,10 @@ void DRLG_L1Pass3()
lv = 22 - 1;
#ifdef USE_ASM
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
v3 = *((WORD *)&pMegaTiles[lv * 8] + 2) + 1;
v4 = *((WORD *)&pMegaTiles[lv * 8] + 3) + 1;
#endif
for (j = 0; j < MAXDUNY; j += 2)
{
@ -249,32 +227,10 @@ void DRLG_L1Pass3()
for (i = 0; i < DMAXX; i++) {
lv = dungeon[i][j] - 1;
/// ASSERT: assert(lv >= 0);
#ifdef USE_ASM
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
v3 = *((WORD *)&pMegaTiles[lv * 8] + 2) + 1;
v4 = *((WORD *)&pMegaTiles[lv * 8] + 3) + 1;
#endif
dPiece[xx][yy] = v1;
dPiece[xx + 1][yy] = v2;
dPiece[xx][yy + 1] = v3;

44
Source/drlg_l2.cpp

@ -427,32 +427,10 @@ void DRLG_L2Pass3()
lv = 12 - 1;
#ifdef USE_ASM
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
v3 = *((WORD *)&pMegaTiles[lv * 8] + 2) + 1;
v4 = *((WORD *)&pMegaTiles[lv * 8] + 3) + 1;
#endif
for (j = 0; j < MAXDUNY; j += 2)
{
@ -469,32 +447,10 @@ void DRLG_L2Pass3()
xx = 16;
for (i = 0; i < DMAXX; i++) {
lv = dungeon[i][j] - 1;
#ifdef USE_ASM
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
v3 = *((WORD *)&pMegaTiles[lv * 8] + 2) + 1;
v4 = *((WORD *)&pMegaTiles[lv * 8] + 3) + 1;
#endif
dPiece[xx][yy] = v1;
dPiece[xx + 1][yy] = v2;
dPiece[xx][yy + 1] = v3;

51
Source/drlg_l3.cpp

@ -1638,32 +1638,10 @@ void DRLG_L3Pass3()
lv = 8 - 1;
#ifdef USE_ASM
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
v3 = *((WORD *)&pMegaTiles[lv * 8] + 2) + 1;
v4 = *((WORD *)&pMegaTiles[lv * 8] + 3) + 1;
#endif
for (j = 0; j < MAXDUNY; j += 2)
{
@ -1680,34 +1658,6 @@ void DRLG_L3Pass3()
xx = 16;
for (i = 0; i < DMAXX; i++) {
lv = dungeon[i][j] - 1;
#ifdef USE_ASM
if (lv >= 0) {
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
} else {
v1 = 0;
v2 = 0;
v3 = 0;
v4 = 0;
}
#else
if (lv >= 0) {
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
@ -1719,7 +1669,6 @@ void DRLG_L3Pass3()
v3 = 0;
v4 = 0;
}
#endif
dPiece[xx][yy] = v1;
dPiece[xx + 1][yy] = v2;
dPiece[xx][yy + 1] = v3;

51
Source/drlg_l4.cpp

@ -1900,32 +1900,10 @@ void DRLG_L4Pass3()
lv = 30 - 1;
#ifdef USE_ASM
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
v3 = *((WORD *)&pMegaTiles[lv * 8] + 2) + 1;
v4 = *((WORD *)&pMegaTiles[lv * 8] + 3) + 1;
#endif
for (j = 0; j < MAXDUNY; j += 2)
{
@ -1942,34 +1920,6 @@ void DRLG_L4Pass3()
xx = 16;
for (i = 0; i < DMAXX; i++) {
lv = dungeon[i][j] - 1;
#ifdef USE_ASM
if (lv >= 0) {
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
} else {
v1 = 0;
v2 = 0;
v3 = 0;
v4 = 0;
}
#else
if (lv >= 0) {
v1 = *((WORD *)&pMegaTiles[lv * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[lv * 8] + 1) + 1;
@ -1981,7 +1931,6 @@ void DRLG_L4Pass3()
v3 = 0;
v4 = 0;
}
#endif
dPiece[xx][yy] = v1;
dPiece[xx + 1][yy] = v2;
dPiece[xx][yy + 1] = v3;

1293
Source/engine.cpp

File diff suppressed because it is too large Load Diff

150
Source/gendung.cpp

@ -130,11 +130,9 @@ void MakeSpeedCels()
BOOL blood_flag;
DWORD *pFrameTable;
MICROS *pMap;
#ifndef USE_ASM
int l, k;
BYTE width, pix;
BYTE *src, *dst, *tbl;
#endif
for (i = 0; i < MAXTILES; i++) {
tile_defs[i] = i;
@ -166,19 +164,7 @@ void MakeSpeedCels()
for (i = 1; i < nlevel_frames; i++) {
z = i;
#ifdef USE_ASM
__asm {
mov ebx, pDungeonCels
mov eax, z
shl eax, 2
add ebx, eax
mov eax, [ebx+4]
sub eax, [ebx]
mov nDataSize, eax
}
#else
nDataSize = pFrameTable[i + 1] - pFrameTable[i];
#endif
level_frame_sizes[i] = nDataSize & 0xFFFF;
}
@ -192,80 +178,13 @@ void MakeSpeedCels()
blood_flag = TRUE;
if (level_frame_count[i] != 0) {
if (level_frame_types[i] != 0x1000) {
#ifdef USE_ASM
t = level_frame_sizes[i];
__asm {
mov ebx, pDungeonCels
mov eax, z
shl eax, 2
add ebx, eax
mov esi, pDungeonCels
add esi, [ebx]
xor ebx, ebx
mov ecx, t
jecxz l1_label3
l1_label1:
lodsb
cmp al, 0
jz l1_label2
cmp al, 32
jnb l1_label2
mov blood_flag, ebx
l1_label2:
loop l1_label1
l1_label3:
nop
}
#else
src = &pDungeonCels[pFrameTable[i]];
for (j = level_frame_sizes[i]; j; j--) {
pix = *src++;
if (pix && pix < 32)
blood_flag = FALSE;
}
#endif
} else {
#ifdef USE_ASM
__asm {
mov ebx, pDungeonCels
mov eax, z
shl eax, 2
add ebx, eax
mov esi, pDungeonCels
add esi, [ebx]
xor ebx, ebx
mov ecx, 32
l2_label1:
push ecx
mov edx, 32
l2_label2:
xor eax, eax
lodsb
or al, al
js l2_label5
sub edx, eax
mov ecx, eax
l2_label3:
lodsb
cmp al, 0
jz l2_label4
cmp al, 32
jnb l2_label4
mov blood_flag, ebx
l2_label4:
loop l2_label3
or edx, edx
jz l2_label6
jmp l2_label2
l2_label5:
neg al
sub edx, eax
jnz l2_label2
l2_label6:
pop ecx
loop l2_label1
}
#else
src = &pDungeonCels[pFrameTable[i]];
for (k = 32; k; k--) {
for (l = 32; l;) {
@ -284,7 +203,6 @@ void MakeSpeedCels()
}
}
}
#endif
}
if (!blood_flag)
level_frame_count[i] = 0;
@ -326,84 +244,17 @@ void MakeSpeedCels()
t = level_frame_sizes[i];
for (j = 1; j < blk_cnt; j++) {
SpeedFrameTbl[i][j] = frameidx;
#ifdef USE_ASM
__asm {
mov ebx, pDungeonCels
mov eax, z
shl eax, 2
add ebx, eax
mov esi, pDungeonCels
add esi, [ebx]
mov edi, pSpeedCels
add edi, frameidx
mov ebx, j
shl ebx, 8
add ebx, pLightTbl
mov ecx, t
jecxz l3_label2
l3_label1:
lodsb
xlat
stosb
loop l3_label1
l3_label2:
nop
}
#else
src = &pDungeonCels[pFrameTable[z]];
dst = &pSpeedCels[frameidx];
tbl = &pLightTbl[256 * j];
for (k = t; k; k--) {
*dst++ = tbl[*src++];
}
#endif
frameidx += t;
}
} else {
for (j = 1; j < blk_cnt; j++) {
SpeedFrameTbl[i][j] = frameidx;
#ifdef USE_ASM
__asm {
mov ebx, pDungeonCels
mov eax, z
shl eax, 2
add ebx, eax
mov esi, pDungeonCels
add esi, [ebx]
mov edi, pSpeedCels
add edi, frameidx
mov ebx, j
shl ebx, 8
add ebx, pLightTbl
mov ecx, 32
l4_label1:
push ecx
mov edx, 32
l4_label2:
xor eax, eax
lodsb
stosb
or al, al
js l4_label4
sub edx, eax
mov ecx, eax
l4_label3:
lodsb
xlat
stosb
loop l4_label3
or edx, edx
jz l4_label5
jmp l4_label2
l4_label4:
neg al
sub edx, eax
jnz l4_label2
l4_label5:
pop ecx
loop l4_label1
}
#else
src = &pDungeonCels[pFrameTable[z]];
dst = &pSpeedCels[frameidx];
tbl = &pLightTbl[256 * j];
@ -423,7 +274,6 @@ void MakeSpeedCels()
}
}
}
#endif
frameidx += level_frame_sizes[i];
}
}

33
Source/inv.cpp

@ -119,38 +119,6 @@ void InvDrawSlotBack(int X, int Y, int W, int H)
dst = &gpBuffer[X + PitchTbl[Y]];
#ifdef USE_ASM
__asm {
mov edi, dst
xor edx, edx
xor ebx, ebx
mov dx, word ptr H
mov bx, word ptr W
label1:
mov ecx, ebx
label2:
mov al, [edi]
cmp al, PAL16_BLUE
jb label5
cmp al, PAL16_BLUE + 15
ja label3
sub al, PAL16_BLUE - PAL16_BEIGE
jmp label4
label3:
cmp al, PAL16_GRAY
jb label5
sub al, PAL16_GRAY - PAL16_BEIGE
label4:
mov [edi], al
label5:
inc edi
loop label2
sub edi, BUFFER_WIDTH
sub edi, ebx
dec edx
jnz label1
}
#else
int wdt, hgt;
BYTE pix;
@ -166,7 +134,6 @@ void InvDrawSlotBack(int X, int Y, int W, int H)
*dst++ = pix;
}
}
#endif
}
void DrawInv()

23
Source/items.cpp

@ -2938,28 +2938,6 @@ void DrawULine(int y)
{
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
int yy;
yy = PitchTbl[SStringY[y] + 198] + 26 + 64;
__asm {
mov esi, gpBuffer
mov edi, esi
add esi, SCREENXY(26, 25)
add edi, yy
mov ebx, BUFFER_WIDTH - 266
mov edx, 3
copyline:
mov ecx, 266 / 4
rep movsd
movsw
add esi, ebx
add edi, ebx
dec edx
jnz copyline
}
#else
int i;
BYTE *src, *dst;
@ -2968,7 +2946,6 @@ void DrawULine(int y)
for (i = 0; i < 3; i++, src += BUFFER_WIDTH, dst += BUFFER_WIDTH)
memcpy(dst, src, 266);
#endif
}
void DrawUniqueInfo()

58
Source/minitext.cpp

@ -87,63 +87,6 @@ void PrintQTextChr(int sx, int sy, BYTE *pCelBuff, int nCel)
pStart = &gpBuffer[PitchTbl[209]];
pEnd = &gpBuffer[PitchTbl[469]];
#ifdef USE_ASM
__asm {
mov ebx, pCelBuff
mov eax, nCel
shl eax, 2
add ebx, eax
mov eax, [ebx+4]
sub eax, [ebx]
mov end, eax
mov esi, pCelBuff
add esi, [ebx]
mov edi, dst
mov ebx, end
add ebx, esi
label1:
mov edx, 22
label2:
xor eax, eax
lodsb
or al, al
js label7
sub edx, eax
cmp edi, pStart
jb label5
cmp edi, pEnd
ja label5
mov ecx, eax
shr ecx, 1
jnb label3
movsb
jecxz label6
label3:
shr ecx, 1
jnb label4
movsw
jecxz label6
label4:
rep movsd
jmp label6
label5:
add esi, eax
add edi, eax
label6:
or edx, edx
jz label8
jmp label2
label7:
neg al
add edi, eax
sub edx, eax
jnz label2
label8:
sub edi, BUFFER_WIDTH + 22
cmp ebx, esi
jnz label1
}
#else
int i;
BYTE width;
BYTE *src;
@ -191,7 +134,6 @@ void PrintQTextChr(int sx, int sy, BYTE *pCelBuff, int nCel)
}
}
}
#endif
}
void DrawQText()

41
Source/objects.cpp

@ -1838,25 +1838,8 @@ void objects_set_door_piece(int x, int y)
pn = dPiece[x][y] - 1;
#ifdef USE_ASM
__asm {
mov esi, pLevelPieces
xor eax, eax
mov ax, word ptr pn
mov ebx, 20
mul ebx
add esi, eax
add esi, 16
xor eax, eax
lodsw
mov word ptr v1, ax
lodsw
mov word ptr v2, ax
}
#else
v1 = *((WORD *)pLevelPieces + 10 * pn + 8);
v2 = *((WORD *)pLevelPieces + 10 * pn + 9);
#endif
dpiece_defs_map_1[IsometricCoord(x, y)].mt[0] = v1;
dpiece_defs_map_1[IsometricCoord(x, y)].mt[1] = v2;
}
@ -1866,34 +1849,10 @@ void ObjSetMini(int x, int y, int v)
int xx, yy;
long v1, v2, v3, v4;
#ifdef USE_ASM
__asm {
mov esi, pMegaTiles
xor eax, eax
mov ax, word ptr v
dec eax
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[((WORD)v - 1) * 8]) + 1;
v2 = *((WORD *)&pMegaTiles[((WORD)v - 1) * 8] + 1) + 1;
v3 = *((WORD *)&pMegaTiles[((WORD)v - 1) * 8] + 2) + 1;
v4 = *((WORD *)&pMegaTiles[((WORD)v - 1) * 8] + 3) + 1;
#endif
xx = 2 * x + 16;
yy = 2 * y + 16;

76
Source/scrollrt.cpp

@ -2040,39 +2040,6 @@ void DrawZoom(int x, int y)
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
__asm {
mov esi, gpBuffer
mov edx, nDstOff
mov edi, esi
mov ecx, nSrcOff
add edi, edx
add esi, ecx
mov ebx, edi
add ebx, BUFFER_WIDTH
mov edx, 176
label1:
mov ecx, wdt
label2:
mov al, [esi]
inc esi
mov ah, al
mov [edi], ax
mov [ebx], ax
add edi, 2
add ebx, 2
dec ecx
jnz label2
mov eax, BUFFER_WIDTH
add eax, wdt
sub esi, eax
add eax, eax
sub ebx, eax
sub edi, eax
dec edx
jnz label1
}
#else
int hgt;
BYTE *src, *dst1, *dst2;
@ -2089,7 +2056,6 @@ void DrawZoom(int x, int y)
src++;
}
}
#endif
}
void ClearScreenBuffer()
@ -2098,20 +2064,6 @@ void ClearScreenBuffer()
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
__asm {
mov edi, gpBuffer
add edi, SCREENXY(0, 0)
mov edx, SCREEN_HEIGHT
xor eax, eax
zeroline:
mov ecx, SCREEN_WIDTH / 4
rep stosd
add edi, BUFFER_WIDTH - SCREEN_WIDTH
dec edx
jnz zeroline
}
#else
int i;
BYTE *dst;
@ -2120,7 +2072,6 @@ void ClearScreenBuffer()
for (i = 0; i < SCREEN_HEIGHT; i++, dst += BUFFER_WIDTH) {
memset(dst, 0, SCREEN_WIDTH);
}
#endif
unlock_buf(3);
}
@ -2542,24 +2493,6 @@ void DoBlitScreen(DWORD dwX, DWORD dwY, DWORD dwWdt, DWORD dwHgt)
/// ASSERT: assert(gpBuffer);
#if defined(USE_ASM) && !defined(RGBMODE)
__asm {
mov esi, gpBuffer
mov edi, DDS_desc.lpSurface
add esi, nSrcOff
add edi, nDstOff
mov eax, nSrcWdt
mov ebx, nDstWdt
mov edx, dwHgt
blitline:
mov ecx, dwWdt
rep movsd
add esi, eax
add edi, ebx
dec edx
jnz blitline
}
#else
int wdt, hgt;
BYTE *src, *dst;
@ -2568,18 +2501,9 @@ void DoBlitScreen(DWORD dwX, DWORD dwY, DWORD dwWdt, DWORD dwHgt)
for (hgt = 0; hgt < dwHgt; hgt++, src += nSrcWdt, dst += nDstWdt) {
for (wdt = 0; wdt < 4 * dwWdt; wdt++) {
#ifndef RGBMODE
*dst++ = *src++;
#else
PALETTEENTRY pal = system_palette[*src++];
dst[0] = pal.peBlue;
dst[1] = pal.peGreen;
dst[2] = pal.peRed;
dst += 4;
#endif
}
}
#endif
unlock_buf(6);
}

19
Source/stores.cpp

@ -213,24 +213,6 @@ void DrawSLine(int y)
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
__asm {
mov esi, gpBuffer
mov edi, esi
add esi, xy
add edi, yy
mov ebx, line
mov edx, 3
copyline:
mov ecx, width
rep movsd
movsw
add esi, ebx
add edi, ebx
dec edx
jnz copyline
}
#else
int i;
BYTE *src, *dst;
@ -239,7 +221,6 @@ void DrawSLine(int y)
for (i = 0; i < 3; i++, src += BUFFER_WIDTH, dst += BUFFER_WIDTH)
memcpy(dst, src, BUFFER_WIDTH - line);
#endif
}
void DrawSArrows(int y1, int y2)

301
Source/town.cpp

@ -6,44 +6,6 @@ void town_clear_upper_buf(BYTE *pBuff)
{
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
__asm {
mov edi, pBuff
mov edx, 30
mov ebx, 1
xor eax, eax
label1:
cmp edi, gpBufEnd
jb label4
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
sub edi, BUFFER_WIDTH + 64
or edx, edx
jz label2
sub edx, 2
inc ebx
jmp label1
label2:
mov edx, 2
mov ebx, 15
label3:
cmp edi, gpBufEnd
jb label4
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
sub edi, BUFFER_WIDTH + 64
dec ebx
add edx, 2
cmp edx, 32
jnz label3
label4:
nop
}
#else
int i, j, k;
BYTE *dst;
@ -61,57 +23,12 @@ void town_clear_upper_buf(BYTE *pBuff)
*dst++ = 0;
dst += i;
}
#endif
}
void town_clear_low_buf(BYTE *pBuff)
{
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
__asm {
mov edi, pBuff
mov edx, 30
mov ebx, 1
xor eax, eax
label1:
cmp edi, gpBufEnd
jb label2
add edi, 64
jmp label3
label2:
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
label3:
sub edi, BUFFER_WIDTH + 64
or edx, edx
jz label4
sub edx, 2
inc ebx
jmp label1
label4:
mov edx, 2
mov ebx, 15
label5:
cmp edi, gpBufEnd
jb label6
add edi, 64
jmp label7
label6:
add edi, edx
mov ecx, ebx
rep stosd
add edi, edx
label7:
sub edi, BUFFER_WIDTH + 64
dec ebx
add edx, 2
cmp edx, 32
jnz label5
}
#else
int i, j, k;
BYTE *dst;
@ -137,7 +54,6 @@ void town_clear_low_buf(BYTE *pBuff)
dst += 64;
}
}
#endif
}
void town_special_lower(BYTE *pBuff, int nCel)
@ -145,64 +61,6 @@ void town_special_lower(BYTE *pBuff, int nCel)
#if 0
int w;
BYTE *end;
#ifdef USE_ASM
__asm {
mov ebx, pSpecialCels
mov eax, nCel
shl eax, 2
add ebx, eax
mov eax, [ebx+4]
sub eax, [ebx]
mov end, eax
mov esi, pSpecialCels
add esi, [ebx]
mov edi, pBuff
mov eax, BUFFER_WIDTH + 64
mov w, eax
mov ebx, end
add ebx, esi
label1:
mov edx, 64
label2:
xor eax, eax
lodsb
or al, al
js label7
sub edx, eax
cmp edi, gpBufEnd
jb label3
add esi, eax
add edi, eax
jmp label6
label3:
mov ecx, eax
shr ecx, 1
jnb label4
movsb
jecxz label6
label4:
shr ecx, 1
jnb label5
movsw
jecxz label6
label5:
rep movsd
label6:
or edx, edx
jz label8
jmp label2
label7:
neg al
add edi, eax
sub edx, eax
jnz label2
label8:
sub edi, w
cmp ebx, esi
jnz label1
}
#else
BYTE width;
BYTE *src, *dst;
DWORD *pFrameTable;
@ -251,7 +109,6 @@ void town_special_lower(BYTE *pBuff, int nCel)
}
}
#endif
#endif
}
void town_special_upper(BYTE *pBuff, int nCel)
@ -259,62 +116,6 @@ void town_special_upper(BYTE *pBuff, int nCel)
#if 0
int w;
BYTE *end;
#ifdef USE_ASM
__asm {
mov ebx, pSpecialCels
mov eax, nCel
shl eax, 2
add ebx, eax
mov eax, [ebx+4]
sub eax, [ebx]
mov end, eax
mov esi, pSpecialCels
add esi, [ebx]
mov edi, pBuff
mov eax, BUFFER_WIDTH + 64
mov w, eax
mov ebx, end
add ebx, esi
label1:
mov edx, 64
label2:
xor eax, eax
lodsb
or al, al
js label6
sub edx, eax
cmp edi, gpBufEnd
jb label8
mov ecx, eax
shr ecx, 1
jnb label3
movsb
jecxz label5
label3:
shr ecx, 1
jnb label4
movsw
jecxz label5
label4:
rep movsd
label5:
or edx, edx
jz label7
jmp label2
label6:
neg al
add edi, eax
sub edx, eax
jnz label2
label7:
sub edi, w
cmp ebx, esi
jnz label1
label8:
nop
}
#else
BYTE width;
BYTE *src, *dst;
DWORD *pFrameTable;
@ -361,7 +162,6 @@ void town_special_upper(BYTE *pBuff, int nCel)
}
}
#endif
#endif
}
void town_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int sx, int sy)
@ -1157,39 +957,6 @@ void T_DrawZoom(int x, int y)
/// ASSERT: assert(gpBuffer);
#ifdef USE_ASM
__asm {
mov esi, gpBuffer
mov edx, nDstOff
mov edi, esi
mov ecx, nSrcOff
add edi, edx
add esi, ecx
mov ebx, edi
add ebx, BUFFER_WIDTH
mov edx, 176
label1:
mov ecx, wdt
label2:
mov al, [esi]
inc esi
mov ah, al
mov [edi], ax
mov [ebx], ax
add edi, 2
add ebx, 2
dec ecx
jnz label2
mov eax, BUFFER_WIDTH
add eax, wdt
sub esi, eax
add eax, eax
sub ebx, eax
sub edi, eax
dec edx
jnz label1
}
#else
int hgt;
BYTE *src, *dst1, *dst2;
@ -1206,7 +973,6 @@ void T_DrawZoom(int x, int y)
src++;
}
}
#endif
}
void T_DrawView(int StartX, int StartY)
@ -1315,42 +1081,6 @@ void T_FillSector(BYTE *P3Tiles, BYTE *pSector, int xi, int yi, int w, int h)
for (j = 0; j < h; j++) {
xx = xi;
for (i = 0; i < w; i++) {
#ifdef USE_ASM
__asm {
mov esi, pSector
mov eax, ii
add esi, eax
xor eax, eax
lodsw
or eax, eax
jz label1
dec eax
mov esi, P3Tiles
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
jmp label2
label1:
mov v1, eax
mov v2, eax
mov v3, eax
mov v4, eax
label2:
nop
}
#else
WORD *Map;
Map = (WORD *)&pSector[ii];
@ -1365,7 +1095,6 @@ void T_FillSector(BYTE *P3Tiles, BYTE *pSector, int xi, int yi, int w, int h)
v3 = 0;
v4 = 0;
}
#endif
dPiece[xx][yy] = v1;
dPiece[xx + 1][yy] = v2;
dPiece[xx][yy + 1] = v3;
@ -1381,40 +1110,10 @@ void T_FillTile(BYTE *P3Tiles, int xx, int yy, int t)
{
long v1, v2, v3, v4;
#ifdef USE_ASM
__asm {
mov eax, t
dec eax
mov esi, P3Tiles
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
jmp label1
mov v1, eax
mov v2, eax
mov v3, eax
mov v4, eax
label1:
nop
}
#else
v1 = *((WORD *)&P3Tiles[(t - 1) * 8]) + 1;
v2 = *((WORD *)&P3Tiles[(t - 1) * 8] + 1) + 1;
v3 = *((WORD *)&P3Tiles[(t - 1) * 8] + 2) + 1;
v4 = *((WORD *)&P3Tiles[(t - 1) * 8] + 3) + 1;
#endif
dPiece[xx][yy] = v1;
dPiece[xx + 1][yy] = v2;

19
Source/towners.cpp

@ -125,24 +125,6 @@ int GetActiveTowner(int t)
void SetTownerGPtrs(BYTE *pData, BYTE **pAnim)
{
int i;
#ifdef USE_ASM
BYTE *src;
for (i = 0; i < 8; i++) {
src = pData;
__asm {
mov eax, src
mov ebx, eax
mov edx, i
shl edx, 2
add ebx, edx
mov edx, [ebx]
add eax, edx
mov src, eax
}
pAnim[i] = src;
}
#else
DWORD *pFrameTable;
pFrameTable = (DWORD *)pData;
@ -150,7 +132,6 @@ void SetTownerGPtrs(BYTE *pData, BYTE **pAnim)
for (i = 0; i < 8; i++) {
pAnim[i] = &pData[pFrameTable[i]];
}
#endif
}
void NewTownerAnim(int tnum, BYTE *pAnim, int numFrames, int Delay)

4
types.h

@ -60,10 +60,6 @@ DEVILUTION_BEGIN_NAMESPACE
#include "enums.h"
#include "structs.h"
#if (_MSC_VER >= 800) && (_MSC_VER <= 1200)
#define USE_ASM
#endif
// If defined, use copy protection [Default -> Defined]
#if !defined(_DEBUG) && !defined(SPAWN)
//#define COPYPROT

Loading…
Cancel
Save