added GCC/MinGW-compatible assembler

This commit is contained in:
anyc 2014-05-19 22:53:14 +02:00
parent 872f4521a0
commit d34e2db9e1
28 changed files with 1536 additions and 5 deletions

View File

@ -286,13 +286,22 @@
static void RCT2_CALLPROC_EBPSAFE(int address)
{
#ifdef _MSC_VER
__asm push ebp
__asm call address
__asm pop ebp
#else
__asm__ ( "\
push ebp \n\
call %[address] \n\
pop ebp \n\
" : [address] "+m" (address) );
#endif
}
static void RCT2_CALLPROC_X(int address, int _eax, int _ebx, int _ecx, int _edx, int _esi, int _edi, int _ebp)
{
#ifdef _MSC_VER
__asm {
push address
mov eax, _eax
@ -305,10 +314,33 @@ static void RCT2_CALLPROC_X(int address, int _eax, int _ebx, int _ecx, int _edx,
call [esp]
add esp, 4
}
#else
__asm__ ( "\
\n\
push ebx \n\
push ebp \n\
push %[address] \n\
mov eax, %[_eax] \n\
mov ebx, %[_ebx] \n\
mov ecx, %[_ecx] \n\
mov edx, %[_edx] \n\
mov esi, %[_esi] \n\
mov edi, %[_edi] \n\
mov ebp, %[_ebp] \n\
call [esp] \n\
add esp, 4 \n\
pop ebp \n\
pop ebx \n\
" : [address] "+m" (address), [_eax] "+m" (_eax), [_ebx] "+m" (_ebx), [_ecx] "+m" (_ecx), [_edx] "+m" (_edx), [_esi] "+m" (_esi), [_edi] "+m" (_edi), [_ebp] "+m" (_ebp)
:
: "eax","ecx","edx","esi","edi"
);
#endif
}
static void RCT2_CALLFUNC_X(int address, int *_eax, int *_ebx, int *_ecx, int *_edx, int *_esi, int *_edi, int *_ebp)
{
#ifdef _MSC_VER
__asm {
// Store C's base pointer
push ebp
@ -375,6 +407,80 @@ static void RCT2_CALLFUNC_X(int address, int *_eax, int *_ebx, int *_ecx, int *_
add esp, 4
}
#else
__asm__ ( "\
\n\
/* Store C's base pointer*/ \n\
push ebx \n\
push ebp \n\
\n\
/* Store %[address] to call*/ \n\
push %[address] \n\
\n\
/* Set all registers to the input values*/ \n\
mov eax, [%[_eax]] \n\
mov eax, [eax] \n\
mov ebx, [%[_ebx]] \n\
mov ebx, [ebx] \n\
mov ecx, [%[_ecx]] \n\
mov ecx, [ecx] \n\
mov edx, [%[_edx]] \n\
mov edx, [edx] \n\
mov esi, [%[_esi]] \n\
mov esi, [esi] \n\
mov edi, [%[_edi]] \n\
mov edi, [edi] \n\
mov ebp, [%[_ebp]] \n\
mov ebp, [ebp] \n\
\n\
/* Call function*/ \n\
call [esp] \n\
add esp, 4 \n\
\n\
/* Store output eax*/ \n\
push eax \n\
\n\
/* Put original C base pointer into eax*/ \n\
mov eax, [esp+4] \n\
\n\
/* Store output ebp*/ \n\
push ebp \n\
\n\
/* Set ebp to the original C base pointer*/ \n\
mov ebp, eax \n\
\n\
/* Put output ebp into ebp parameter*/ \n\
mov eax, [esp] \n\
push ebx \n\
mov ebx, [%[_ebp]] \n\
mov [ebx], eax \n\
pop ebx \n\
add esp, 4 \n\
\n\
/* Get resulting ebx, ecx, edx, esi, edi registers*/ \n\
mov eax, [%[_edi]] \n\
mov [eax], edi \n\
mov eax, [%[_esi]] \n\
mov [eax], esi \n\
mov eax, [%[_edx]] \n\
mov [eax], edx \n\
mov eax, [%[_ecx]] \n\
mov [eax], ecx \n\
mov eax, [%[_ebx]] \n\
mov [eax], ebx \n\
pop eax \n\
\n\
/* Get resulting eax register*/ \n\
mov ebx, [%[_eax]] \n\
mov [ebx], eax \n\
\n\
add esp, 4 \n\
pop ebx \n\
" : [address] "+m" (address), [_eax] "+m" (_eax), [_ebx] "+m" (_ebx), [_ecx] "+m" (_ecx), [_edx] "+m" (_edx), [_esi] "+m" (_esi), [_edi] "+m" (_edi), [_ebp] "+m" (_ebp)
:
: "eax","ecx","edx","esi","edi"
);
#endif
}
#endif

View File

@ -1310,7 +1310,12 @@ static void game_pause_toggle()
{
char input_bl;
#ifdef _MSC_VER
__asm mov input_bl, bl
#else
__asm__ ( "mov %[input_bl], bl " : [input_bl] "+m" (input_bl) );
#endif
if (input_bl & 1) {
RCT2_GLOBAL(0x009DEA6E, uint32) ^= 1;
@ -1321,7 +1326,12 @@ static void game_pause_toggle()
unpause_sounds();
}
#ifdef _MSC_VER
__asm mov ebx, 0
#else
__asm__ ( "mov ebx, 0 " );
#endif
}
/**
@ -1333,9 +1343,24 @@ static void game_load_or_quit()
char input_bl, input_dl;
short input_di;
#ifdef _MSC_VER
__asm mov input_bl, bl
#else
__asm__ ( "mov %[input_bl], bl " : [input_bl] "+m" (input_bl) );
#endif
#ifdef _MSC_VER
__asm mov input_dl, dl
#else
__asm__ ( "mov %[input_dl], dl " : [input_dl] "+m" (input_dl) );
#endif
#ifdef _MSC_VER
__asm mov input_di, di
#else
__asm__ ( "mov %[input_di], di " : [input_di] "+m" (input_di) );
#endif
if (!(input_bl & 1))
return; // 0;
@ -1353,7 +1378,12 @@ static void game_load_or_quit()
break;
}
#ifdef _MSC_VER
__asm mov ebx, 0
#else
__asm__ ( "mov ebx, 0 " );
#endif
}
/**

View File

@ -189,10 +189,18 @@ void rct2_update()
{
// Set 0x009DE564 to the value of esp
// RCT2 sets the stack pointer to the value of this address when ending the current game tick from anywhere
#ifdef _MSC_VER
__asm {
mov eax, 009DE564h
mov [eax], esp
}
#else
__asm__ ( "\
\n\
mov eax, 0x009DE564 \n\
mov [eax], esp \n\
" : : : "eax" );
#endif
if (!setjmp(_end_update_jump))
rct2_update_2();

View File

@ -282,6 +282,7 @@ static int scenario_load_basic(char *path)
CloseHandle(hFile);
RCT2_GLOBAL(0x009AA00C, uint8) = 0;
if (s6Info->flags != 255) {
#ifdef _MSC_VER
__asm {
push ebp
mov ebp, 0141F6F8h
@ -291,14 +292,34 @@ static int scenario_load_basic(char *path)
mov _eax, eax
jb loc_67628F
}
#else
__asm__ ( "\
push ebp \n\
mov ebp, 0x0141F6F8 \n\
mov eax, 0x006A9428 \n\
call eax \n\
pop ebp \n\
mov %[_eax], eax \n\
jb loc_67628F \n\
" : [_eax] "+m" (_eax) : : "eax" );
#endif
int ebp = RCT2_GLOBAL(0x009ADAF8, uint32);
format_string(s6Info->name, RCT2_GLOBAL(ebp, sint16), NULL);
format_string(s6Info->details, RCT2_GLOBAL(ebp + 4, sint16), NULL);
RCT2_GLOBAL(0x009AA00C, uint8) = RCT2_GLOBAL(ebp + 6, uint8);
RCT2_CALLPROC(0x006A982D);
#ifdef _MSC_VER
__asm mov _eax, eax
#else
__asm__ ( "mov %[_eax], eax " : [_eax] "+m" (_eax) );
#endif
#ifdef _MSC_VER
loc_67628F :
#else
__asm__ ( "loc_67628F :");
#endif
return _eax;
}
return 1;
@ -879,8 +900,14 @@ void scenario_update()
for (int i = 0; i < 100; ++i) {
int carry;
RCT2_CALLPROC_EBPSAFE(0x006744A9); // clears carry flag on failure -.-
#ifdef _MSC_VER
__asm mov carry, 0;
__asm adc carry, 0;
#else
__asm__ ( "mov %[carry], 0; " : [carry] "+m" (carry) );
__asm__ ( "adc %[carry], 0; " : [carry] "+m" (carry) );
#endif
if (!carry)
break;
}

View File

@ -102,6 +102,7 @@ rct_widget *window_get_scroll_widget(rct_window *w, int scrollIndex)
}
static void RCT2_CALLPROC_WE_UPDATE(int address, rct_window* w)
{
#ifdef _MSC_VER
__asm {
push address
push w
@ -109,6 +110,16 @@ static void RCT2_CALLPROC_WE_UPDATE(int address, rct_window* w)
call[esp + 4]
add esp, 8
}
#else
__asm__ ( "\
push %[address]\n\
mov eax, %[w] \n\
push eax \n\
mov esi, %[w] \n\
call [esp+4] \n\
add esp, 8 \n\
" : [address] "+m" (address), [w] "+m" (w) : : "eax", "esi" );
#endif
}
/**
*

View File

@ -117,8 +117,13 @@ static void window_about_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
__asm mov w, esi
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -143,8 +148,13 @@ static void window_about_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
__asm mov dpi, edi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -153,8 +153,18 @@ static void window_banner_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -176,7 +186,12 @@ static void window_banner_mousedown()
{
short widgetIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
switch (widgetIndex) {
case WIDX_MAIN_COLOR:
@ -192,7 +207,12 @@ static void window_banner_dropdown()
{
short widgetIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx;
#else
__asm__ ( "mov %[widgetIndex], dx; " : [widgetIndex] "+m" (widgetIndex) );
#endif
if (widgetIndex == WIDX_MAIN_COLOR)
RCT2_CALLPROC_EBPSAFE(0x006BA548);
@ -204,7 +224,12 @@ static void window_banner_textinput()
{
short widgetIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx;
#else
__asm__ ( "mov %[widgetIndex], dx; " : [widgetIndex] "+m" (widgetIndex) );
#endif
if (widgetIndex == WIDX_BANNER_TEXT) {
RCT2_CALLPROC_EBPSAFE(0x006BA6D8);
@ -221,8 +246,18 @@ static void window_banner_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -183,8 +183,18 @@ static void window_cheats_money_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -214,8 +224,18 @@ static void window_cheats_guests_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
rct_peep* peep;
uint16 sprite_idx;
@ -245,7 +265,11 @@ static void window_cheats_update(rct_window *w)
{
rct_window *w2;
#ifdef _MSC_VER
__asm mov w2, esi
#else
__asm__ ( "mov %[w2], esi " : [w2] "+m" (w2) );
#endif
w->var_48E++;
widget_invalidate(w->classification, w->number, WIDX_TAB_1+w->page);
@ -256,7 +280,12 @@ static void window_cheats_invalidate()
int i;
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
strcpy((char*)0x009BC677, "Cheats");
rct_widget *widgets = window_cheats_page_widgets[w->page];
@ -276,8 +305,18 @@ static void window_cheats_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_cheats_draw_tab_images(dpi, w);

View File

@ -129,8 +129,18 @@ static void window_clear_scenery_mouseup()
int limit;
short widgetIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -183,7 +193,12 @@ static void window_clear_scenery_invalidate()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
// Set the preview image button to be pressed down
w->pressed_widgets |= (1 << WIDX_PREVIEW);
@ -202,8 +217,18 @@ static void window_clear_scenery_paint()
rct_drawpixelinfo *dpi;
int x, y;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -269,8 +269,18 @@ static void window_dropdown_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -223,7 +223,12 @@ static void window_footpath_close()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
RCT2_CALLPROC_EBPSAFE(0x006A7831);
RCT2_CALLPROC_X(0x006CB70A, 0, 0, 0, 0, 0, 0, 0);
@ -242,8 +247,18 @@ static void window_footpath_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -298,9 +313,24 @@ static void window_footpath_mousedown()
rct_window *w;
rct_widget *widget;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov widget, edi
#else
__asm__ ( "mov %[widget], edi " : [widget] "+m" (widget) );
#endif
switch (widgetIndex) {
case WIDX_FOOTPATH_TYPE:
@ -345,9 +375,24 @@ static void window_footpath_dropdown()
rct_window *w;
rct_path_type *pathType;
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_FOOTPATH_TYPE)
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_PATH_TYPE, uint8) = SELECTED_PATH_TYPE_NORMAL;
@ -397,10 +442,30 @@ static void window_footpath_toolupdate()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov x, eax
#else
__asm__ ( "mov %[x], eax " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, ebx
#else
__asm__ ( "mov %[y], ebx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CONSTRUCT_ON_LAND) {
window_footpath_set_provisional_path_at_point(x, y);
@ -419,10 +484,30 @@ static void window_footpath_tooldown()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov x, eax
#else
__asm__ ( "mov %[x], eax " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, ebx
#else
__asm__ ( "mov %[y], ebx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CONSTRUCT_ON_LAND) {
window_footpath_place_path_at_point(x, y);
@ -441,10 +526,30 @@ static void window_footpath_tooldrag()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov x, eax
#else
__asm__ ( "mov %[x], eax " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, ebx
#else
__asm__ ( "mov %[y], ebx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CONSTRUCT_ON_LAND) {
RCT2_CALLPROC_X(0x006A82C5, x, y, 0, 0, (int)w, 0, 0);
@ -461,10 +566,30 @@ static void window_footpath_toolup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov x, eax
#else
__asm__ ( "mov %[x], eax " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, ebx
#else
__asm__ ( "mov %[y], ebx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CONSTRUCT_ON_LAND) {
RCT2_CALLPROC_X(0x006A8380, x, y, 0, 0, (int)w, 0, 0);
@ -510,7 +635,12 @@ static void window_footpath_invalidate()
rct_path_type *pathType;
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
// Press / unpress footpath and queue type buttons
w->pressed_widgets &= ~(1 << WIDX_FOOTPATH_TYPE);
@ -547,8 +677,18 @@ static void window_footpath_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -154,8 +154,18 @@ static void window_game_bottom_toolbar_mouseup()
rct_window *w, *mainWindow;
rct_news_item *newsItem;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_LEFT_OUTSET:
@ -207,8 +217,18 @@ static void window_game_bottom_toolbar_tooltip()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_MONEY:
@ -230,7 +250,12 @@ static void window_game_bottom_toolbar_tooltip()
break;
}
#ifdef _MSC_VER
__asm mov dx, widgetIndex
#else
__asm__ ( "mov dx, %[widgetIndex] " : [widgetIndex] "+m" (widgetIndex) );
#endif
}
/**
@ -243,7 +268,12 @@ static void window_game_bottom_toolbar_invalidate()
rct_window *w;
rct_news_item *newsItem;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
// Anchor the middle and right panel to the right
x = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16);
@ -335,8 +365,18 @@ static void window_game_bottom_toolbar_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
// Draw panel grey backgrounds
gfx_fill_rect(
@ -543,7 +583,8 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo *dpi, rc
_edi = (int)e->paint.dpi;
_cx = x;
_dx = y;
__asm {
#ifdef _MSC_VER
__asm {
mov cx, _cx
mov dx, _dx
mov esi, w
@ -556,6 +597,22 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo *dpi, rc
after:
pop ebp
}
#else
__asm__ ( "\
\n\
mov cx, %[_cx] \n\
mov dx, %[_dx] \n\
mov esi, %[w] \n\
mov edi, %[_edi] \n\
push ebp \n\
mov ebp, 0x0066C3B8 \n\
push %[after] \n\
push esi \n\
jmp ebp \n\
%[after]: \n\
pop ebp \n\
" : [_cx] "+m" (_cx), [_dx] "+m" (_dx), [w] "+m" (w), [_edi] "+m" (_edi), [after] "+m" (after) );
#endif
break;
*/

View File

@ -148,8 +148,18 @@ static void window_game_top_toolbar_mouseup()
short widgetIndex;
rct_window *w, *mainWindow;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_PAUSE:
@ -251,9 +261,24 @@ static void window_game_top_toolbar_mousedown()
rct_widget *widget;
rct_viewport *mainViewport;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov widget, edi
#else
__asm__ ( "mov %[widget], edi " : [widget] "+m" (widget) );
#endif
if (widgetIndex == WIDX_FILE_MENU) {
gDropdownItemsFormat[0] = 882;
@ -339,8 +364,18 @@ static void window_game_top_toolbar_dropdown()
{
short widgetIndex, dropdownIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
if (widgetIndex == WIDX_FILE_MENU) {
switch (dropdownIndex) {
@ -402,7 +437,12 @@ static void window_game_top_toolbar_invalidate()
int x;
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
// Anchor the right half of the buttons to the right
x = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16);
@ -472,8 +512,18 @@ static void window_game_top_toolbar_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -187,8 +187,18 @@ static void window_guest_list_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -208,7 +218,12 @@ static void window_guest_list_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
w->min_width = 350;
w->min_height = 330;
@ -233,9 +248,24 @@ static void window_guest_list_mousedown()
rct_window *w;
rct_widget *widget;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov widget, edi
#else
__asm__ ( "mov %[widget], edi " : [widget] "+m" (widget) );
#endif
switch (widgetIndex) {
case WIDX_TAB_1:
@ -303,9 +333,24 @@ static void window_guest_list_dropdown()
short dropdownIndex, widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_PAGE_DROPDOWN_BUTTON:
@ -347,7 +392,12 @@ static void window_guest_list_scrollgetsize()
rct_window *w;
rct_peep *peep;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (_window_guest_list_selected_tab) {
case PAGE_INDIVIDUAL:
@ -400,8 +450,18 @@ static void window_guest_list_scrollgetsize()
window_invalidate(w);
}
#ifdef _MSC_VER
__asm mov ecx, 447
#else
__asm__ ( "mov ecx, 447 " );
#endif
#ifdef _MSC_VER
__asm mov edx, y
#else
__asm__ ( "mov edx, %[y] " : [y] "+m" (y) );
#endif
}
/**
@ -415,8 +475,18 @@ static void window_guest_list_scrollmousedown()
rct_window *w;
rct_peep *peep;
#ifdef _MSC_VER
__asm mov y, dx
#else
__asm__ ( "mov %[y], dx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (_window_guest_list_selected_tab) {
case PAGE_INDIVIDUAL:
@ -468,8 +538,18 @@ static void window_guest_list_scrollmouseover()
short y;
rct_window *w;
#ifdef _MSC_VER
__asm mov y, dx
#else
__asm__ ( "mov %[y], dx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
i = y / (_window_guest_list_selected_tab == PAGE_INDIVIDUAL ? 10 : 21);
i += _window_guest_list_selected_page * 3173;
@ -496,7 +576,12 @@ static void window_guest_list_invalidate()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
w->pressed_widgets &= ~(1 << WIDX_TAB_1);
w->pressed_widgets &= ~(1 << WIDX_TAB_2);
@ -530,8 +615,18 @@ static void window_guest_list_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
// Widgets
window_draw_widgets(w, dpi);
@ -594,8 +689,18 @@ static void window_guest_list_scrollpaint()
rct_peep *peep;
rct_peep_thought *thought;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
// Background fill
gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width - 1, dpi->y + dpi->height - 1, ((char*)0x0141FC48)[w->colours[1] * 8]);

View File

@ -165,8 +165,18 @@ static void window_land_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -214,9 +224,24 @@ static void window_land_mousedown()
rct_window *w;
rct_widget *widget;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov widget, edi
#else
__asm__ ( "mov %[widget], edi " : [widget] "+m" (widget) );
#endif
switch (widgetIndex) {
case WIDX_FLOOR:
@ -266,9 +291,24 @@ static void window_land_dropdown()
short dropdownIndex, widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_FLOOR:
@ -325,7 +365,12 @@ static void window_land_invalidate()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
w->pressed_widgets = (1 << WIDX_PREVIEW);
if (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE, uint8) != 255)
@ -350,8 +395,18 @@ static void window_land_paint()
rct_drawpixelinfo *dpi;
int x, y, price, numTiles;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -48,6 +48,7 @@ void window_main_open()
window->widgets = main_widgets;
// RCT2_CALLPROC_X(0x006EB009, window->x, window->y, 0x4000000, 0x0FFF0FFF, window, 0, 0);
#ifdef _MSC_VER
__asm {
mov esi, window
mov edx, 0FFF0FFFh
@ -62,6 +63,24 @@ void window_main_open()
pop ebp
or word ptr [edi+12h], 400h
}
#else
__asm__ ( "\
\n\
push ebx \n\
mov esi, %[window] \n\
mov edx, 0x0FFF0FFF \n\
mov eax, [esi+0x2C] \n\
mov ebx, [esi+0x30] \n\
mov ecx, 0x4000000 \n\
push ebp \n\
mov ebp, 0x6EB009 \n\
call ebp \n\
\n\
pop ebp \n\
or word ptr [edi+0x12], 0x400 \n\
pop ebx \n\
" : [window] "+m" (window) : : "esi","edx","eax","ecx" );
#endif
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, sint32) = 0;
RCT2_GLOBAL(0x009E32B0, uint8) = 0;

View File

@ -187,8 +187,18 @@ static void window_map_mouseup()
/*short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -243,7 +253,11 @@ static void window_map_invalidate()
uint32 pressed_widgets;
int i, height;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
// set the pressed widgets
pressed_widgets = (uint32)w->pressed_widgets;
@ -366,8 +380,18 @@ static void window_map_paint()
int image_id;
int i, x, y;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -129,8 +129,18 @@ static void window_news_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CLOSE)
window_close(w);
@ -195,7 +205,12 @@ static void window_news_scrollgetsize()
height += 42;
}
#ifdef _MSC_VER
__asm mov edx, height
#else
__asm__ ( "mov edx, %[height] " : [height] "+m" (height) );
#endif
}
/**
@ -209,9 +224,24 @@ static void window_news_scrollmousedown()
rct_window *w;
rct_news_item *newsItems;
#ifdef _MSC_VER
__asm mov x, cx
#else
__asm__ ( "mov %[x], cx " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, dx
#else
__asm__ ( "mov %[y], dx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
buttonIndex = 0;
newsItems = RCT2_ADDRESS(RCT2_ADDRESS_NEWS_ITEM_LIST, rct_news_item);
@ -274,8 +304,18 @@ static void window_news_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
}
@ -291,8 +331,18 @@ static void window_news_scrollpaint()
rct_drawpixelinfo *dpi;
rct_news_item *newsItems, *newsItem, *newsItem2;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
y = 0;
newsItems = RCT2_ADDRESS(RCT2_ADDRESS_NEWS_ITEM_LIST, rct_news_item);

View File

@ -199,8 +199,18 @@ static void window_options_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -218,9 +228,19 @@ static void window_options_mouseup()
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) ^= PARK_FLAGS_SHOW_REAL_GUEST_NAMES;
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SHOW_REAL_GUEST_NAMES)
__asm xor al, al
#ifdef _MSC_VER
__asm xor al, al
#else
__asm__ ( "xor al, al " );
#endif
else
__asm mov al, 1
#ifdef _MSC_VER
__asm mov al, 1
#else
__asm__ ( "mov al, 1 " );
#endif
RCT2_CALLPROC_EBPSAFE(0x0069C52F);
break;
@ -268,8 +288,18 @@ static void window_options_mousedown()
rct_window *w;
rct_widget *widget;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
widget = &w->widgets[widgetIndex - 1];
@ -386,16 +416,36 @@ static void window_options_dropdown()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (dropdownIndex == -1)
return;
switch (widgetIndex) {
case WIDX_SOUND_DROPDOWN:
__asm movzx ax, dropdownIndex // the switch replaces ax value
#ifdef _MSC_VER
__asm movzx ax, dropdownIndex
#else
__asm__ ( "movzx ax, %[dropdownIndex] " : : [dropdownIndex] "g" ((char)dropdownIndex) );
#endif
// the switch replaces ax value
RCT2_CALLPROC_EBPSAFE(0x006BA9B5); // part of init audio
window_invalidate(w);
break;
@ -434,7 +484,12 @@ static void window_options_dropdown()
window_options_update_height_markers();
break;
case WIDX_RESOLUTION_DROPDOWN:
__asm movzx ax, dropdownIndex // the switch replaces ax value
#ifdef _MSC_VER
__asm movzx ax, dropdownIndex
#else
__asm__ ( "movzx ax, %[dropdownIndex] " : : [dropdownIndex] "g" ((char)dropdownIndex) );
#endif
// the switch replaces ax value
RCT2_CALLPROC_EBPSAFE(0x006BB37D);
break;
case WIDX_TEMPERATURE_DROPDOWN:
@ -461,7 +516,12 @@ static void window_options_dropdown()
static void window_options_update(rct_window *w)
{
//Has use asm verison incase called by WM_INVALIDATE
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
sint32 format_args = RCT2_GLOBAL(0x009AF280, sint32);
@ -568,8 +628,18 @@ static void window_options_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);

View File

@ -643,7 +643,12 @@ static void window_park_entrance_close()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3))
if (w->classification == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, rct_windowclass) && w->number == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWNUMBER, rct_windownumber))
@ -659,8 +664,18 @@ static void window_park_entrance_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -699,7 +714,12 @@ static void window_park_entrance_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
w->flags |= WF_RESIZABLE;
window_set_resize(w, 230, 174 + 9, 230 * 3, (274 + 9) * 3);
@ -716,9 +736,24 @@ static void window_park_entrance_mousedown()
rct_window *w;
rct_widget *widget;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov widget, edi
#else
__asm__ ( "mov %[widget], edi " : [widget] "+m" (widget) );
#endif
if (widgetIndex == WIDX_OPEN_OR_CLOSE) {
gDropdownItemsFormat[0] = 1142;
@ -752,8 +787,18 @@ static void window_park_entrance_dropdown()
{
short widgetIndex, dropdownIndex;
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
if (widgetIndex == WIDX_OPEN_OR_CLOSE) {
if (dropdownIndex == -1)
@ -790,10 +835,30 @@ static void window_park_entrance_toolupdate()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov x, eax
#else
__asm__ ( "mov %[x], eax " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, ebx
#else
__asm__ ( "mov %[y], ebx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_BUY_LAND_RIGHTS) {
RCT2_CALLPROC_X(0x0068AAE1, x, y, 0, 0, (int)w, 0, 0);
@ -820,10 +885,30 @@ static void window_park_entrance_tooldown()
short x, y, widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov x, ax
#else
__asm__ ( "mov %[x], ax " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, bx
#else
__asm__ ( "mov %[y], bx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
RCT2_CALLPROC_X(0x006681E6, x, y, 0, widgetIndex, (int)w, 0, 0);
}
@ -837,10 +922,30 @@ static void window_park_entrance_tooldrag()
short x, y, widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov x, ax
#else
__asm__ ( "mov %[x], ax " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, bx
#else
__asm__ ( "mov %[y], bx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
RCT2_CALLPROC_X(0x006681FB, x, y, 0, widgetIndex, (int)w, 0, 0);
}
@ -854,8 +959,18 @@ static void window_park_entrance_toolabort()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_BUY_LAND_RIGHTS) {
hide_gridlines();
@ -877,10 +992,30 @@ static void window_park_entrance_textinput()
rct_window *w;
char *text;
#ifdef _MSC_VER
__asm mov result, cl
#else
__asm__ ( "mov %[result], cl " : [result] "+m" (result) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov text, edi
#else
__asm__ ( "mov %[text], edi " : [text] "+m" (text) );
#endif
if (widgetIndex == WIDX_RENAME) {
if (result) {
@ -901,7 +1036,12 @@ static void window_park_entrance_invalidate()
int i;
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
w->widgets = window_park_page_widgets[w->page];
window_init_scroll_widgets(w);
@ -953,8 +1093,18 @@ static void window_park_entrance_paint()
rct_drawpixelinfo *dpi;
rct_widget *labelWidget;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
@ -1117,8 +1267,18 @@ static void window_park_rating_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CLOSE)
window_close(w);
@ -1134,7 +1294,12 @@ static void window_park_rating_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_set_resize(w, 230, 182, 230, 182);
}
@ -1158,7 +1323,12 @@ static void window_park_rating_invalidate()
rct_window *w;
rct_widget *widgets;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
@ -1187,8 +1357,18 @@ static void window_park_rating_paint()
rct_widget *widget;
uint8 *history;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
@ -1255,8 +1435,18 @@ static void window_park_guests_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CLOSE)
window_close(w);
@ -1272,7 +1462,12 @@ static void window_park_guests_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_set_resize(w, 230, 182, 230, 182);
}
@ -1297,7 +1492,12 @@ static void window_park_guests_invalidate()
rct_window *w;
rct_widget *widgets;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
@ -1326,8 +1526,18 @@ static void window_park_guests_paint()
rct_widget *widget;
uint8 *history;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
@ -1365,8 +1575,18 @@ static void window_park_price_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CLOSE)
window_close(w);
@ -1382,7 +1602,12 @@ static void window_park_price_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_set_resize(w, 230, 124, 230, 124);
}
@ -1397,8 +1622,18 @@ static void window_park_price_mousedown()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -1443,7 +1678,12 @@ static void window_park_price_invalidate()
rct_window *w;
rct_widget *widgets;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
@ -1483,8 +1723,18 @@ static void window_park_price_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
@ -1510,8 +1760,18 @@ static void window_park_stats_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CLOSE)
window_close(w);
@ -1527,7 +1787,12 @@ static void window_park_stats_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_set_resize(w, 230, 109, 230, 109);
}
@ -1567,7 +1832,12 @@ static void window_park_stats_invalidate()
rct_window *w;
rct_widget *widgets;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
@ -1594,8 +1864,18 @@ static void window_park_stats_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
@ -1677,8 +1957,18 @@ static void window_park_objective_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -1707,7 +1997,12 @@ static void window_park_objective_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_set_resize(w, 230, 224, 230, 224);
}
@ -1730,7 +2025,12 @@ static void window_park_objective_invalidate()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_park_set_pressed_tab(w);
@ -1758,8 +2058,18 @@ static void window_park_objective_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);
@ -1839,8 +2149,18 @@ static void window_park_awards_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CLOSE)
window_close(w);
@ -1856,7 +2176,12 @@ static void window_park_awards_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_set_resize(w, 230, 182, 230, 182);
}
@ -1880,7 +2205,12 @@ static void window_park_awards_invalidate()
rct_window *w;
rct_widget *widgets;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
widgets = window_park_page_widgets[w->page];
if (w->widgets != widgets) {
@ -1908,8 +2238,18 @@ static void window_park_awards_paint()
rct_drawpixelinfo *dpi;
rct_award *award;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_park_draw_tab_images(dpi, w);

View File

@ -178,8 +178,18 @@ static void window_ride_list_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -213,7 +223,12 @@ static void window_ride_list_resize()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
w->min_width = 340;
w->min_height = 124;
@ -240,9 +255,24 @@ static void window_ride_list_mousedown()
rct_window *w;
rct_widget *widget;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov widget, edi
#else
__asm__ ( "mov %[widget], edi " : [widget] "+m" (widget) );
#endif
if (widgetIndex == WIDX_OPEN_CLOSE_ALL) {
gDropdownItemsFormat[0] = STR_CLOSE_ALL;
@ -275,9 +305,24 @@ static void window_ride_list_dropdown()
short dropdownIndex, widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_OPEN_CLOSE_ALL) {
if (dropdownIndex == 0)
@ -314,7 +359,12 @@ static void window_ride_list_scrollgetsize()
int top, height;
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
height = w->var_476 * 10;
if (w->var_47A != -1) {
@ -330,8 +380,18 @@ static void window_ride_list_scrollgetsize()
window_invalidate(w);
}
#ifdef _MSC_VER
__asm mov ecx, 0
#else
__asm__ ( "mov ecx, 0 " );
#endif
#ifdef _MSC_VER
__asm mov edx, height
#else
__asm__ ( "mov edx, %[height] " : [height] "+m" (height) );
#endif
}
/**
@ -344,8 +404,18 @@ static void window_ride_list_scrollmousedown()
short y;
rct_window *w;
#ifdef _MSC_VER
__asm mov y, dx
#else
__asm__ ( "mov %[y], dx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
index = y / 10;
if (index >= w->var_476)
@ -365,8 +435,18 @@ static void window_ride_list_scrollmouseover()
short y;
rct_window *w;
#ifdef _MSC_VER
__asm mov y, dx
#else
__asm__ ( "mov %[y], dx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
index = y / 10;
if (index >= w->var_476)
@ -394,7 +474,12 @@ static void window_ride_list_invalidate()
int i;
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
window_ride_list_widgets[WIDX_CURRENT_INFORMATION_TYPE].image = STR_STATUS + _window_ride_list_information_type;
@ -427,8 +512,18 @@ static void window_ride_list_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
window_ride_list_draw_tab_images(dpi, w);
@ -458,8 +553,18 @@ static void window_ride_list_scrollpaint()
rct_drawpixelinfo *dpi;
rct_ride *ride;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width, dpi->y + dpi->height, RCT2_GLOBAL(0x0141FC48 + (w->colours[1] * 8), uint8));

View File

@ -175,8 +175,18 @@ static void window_save_prompt_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
// TODO
}
@ -186,8 +196,18 @@ static void window_save_prompt_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
}

View File

@ -98,8 +98,18 @@ static void window_title_exit_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (RCT2_GLOBAL(RCT2_ADDRESS_RUN_INTRO_TICK_PART, int) != 0)
return;
@ -117,8 +127,18 @@ static void window_title_exit_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
}

View File

@ -99,8 +99,18 @@ static void window_title_logo_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
gfx_draw_sprite(dpi, SPR_MENU_LOGO, w->x, w->y);

View File

@ -109,7 +109,12 @@ static void window_title_menu_mouseup()
{
short widgetIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
if (widgetIndex == WIDX_START_NEW_GAME) {
window_scenarioselect_open();
} else if (widgetIndex == WIDX_CONTINUE_SAVED_GAME) {
@ -123,9 +128,24 @@ static void window_title_menu_mousedown()
rct_window *w;
rct_widget *widget;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov widget, edi
#else
__asm__ ( "mov %[widget], edi " : [widget] "+m" (widget) );
#endif
if (widgetIndex == WIDX_SHOW_TUTORIAL) {
gDropdownItemsFormat[0] = STR_TUTORIAL_BEGINNERS;
@ -159,8 +179,18 @@ static void window_title_menu_dropdown()
{
short widgetIndex, dropdownIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov dropdownIndex, ax
#else
__asm__ ( "mov %[dropdownIndex], ax " : [dropdownIndex] "+m" (dropdownIndex) );
#endif
if (widgetIndex == WIDX_SHOW_TUTORIAL) {
tutorial_start(dropdownIndex);
@ -192,8 +222,18 @@ static void window_title_menu_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
}

View File

@ -173,8 +173,18 @@ static void window_scenarioselect_mouseup()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex == WIDX_CLOSE)
window_close(w);
@ -185,8 +195,18 @@ static void window_scenarioselect_mousedown()
short widgetIndex;
rct_window *w;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
if (widgetIndex >= WIDX_TAB1 && widgetIndex <= WIDX_TAB5) {
w->selected_tab = widgetIndex - 4;
@ -205,7 +225,12 @@ static void window_scenarioselect_scrollgetsize()
rct_window *w;
rct_scenario_basic *scenario;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
height = 0;
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
@ -216,8 +241,18 @@ static void window_scenarioselect_scrollgetsize()
height += 24;
}
#ifdef _MSC_VER
__asm mov ecx, 0
#else
__asm__ ( "mov ecx, 0 " );
#endif
#ifdef _MSC_VER
__asm mov edx, height
#else
__asm__ ( "mov edx, %[height] " : [height] "+m" (height) );
#endif
}
static void window_scenarioselect_scrollmousedown()
@ -227,9 +262,24 @@ static void window_scenarioselect_scrollmousedown()
rct_window *w;
rct_scenario_basic *scenario;
#ifdef _MSC_VER
__asm mov x, cx
#else
__asm__ ( "mov %[x], cx " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, dx
#else
__asm__ ( "mov %[y], dx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
@ -255,9 +305,24 @@ static void window_scenarioselect_scrollmouseover()
rct_window *w;
rct_scenario_basic *scenario, *selected;
#ifdef _MSC_VER
__asm mov x, cx
#else
__asm__ ( "mov %[x], cx " : [x] "+m" (x) );
#endif
#ifdef _MSC_VER
__asm mov y, dx
#else
__asm__ ( "mov %[y], dx " : [y] "+m" (y) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
selected = NULL;
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
@ -284,7 +349,12 @@ static void window_scenarioselect_invalidate()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
w->pressed_widgets &= ~(0x10 | 0x20 | 0x40 | 0x80 | 0x100);
w->pressed_widgets |= 1LL << (w->selected_tab + 4);
@ -298,8 +368,18 @@ static void window_scenarioselect_paint()
rct_widget *widget;
rct_scenario_basic *scenario;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);
@ -360,8 +440,18 @@ static void window_scenarioselect_scrollpaint()
rct_drawpixelinfo *dpi;
rct_scenario_basic *scenario;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
colour = ((char*)0x0141FC48)[w->colours[1] * 8];
colour = (colour << 24) | (colour << 16) | (colour << 8) | colour;

View File

@ -188,8 +188,18 @@ static void window_tooltip_paint()
rct_window *w;
rct_drawpixelinfo *dpi;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
int left = w->x;
int top = w->y;

View File

@ -130,8 +130,18 @@ static void window_water_mouseup()
int limit;
short widgetIndex;
#ifdef _MSC_VER
__asm mov widgetIndex, dx
#else
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
#endif
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
switch (widgetIndex) {
case WIDX_CLOSE:
@ -184,7 +194,12 @@ static void window_water_invalidate()
{
rct_window *w;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
// Set the preview image button to be pressed down
w->pressed_widgets |= (1 << WIDX_PREVIEW);
@ -203,8 +218,18 @@ static void window_water_paint()
rct_drawpixelinfo *dpi;
int x, y;
#ifdef _MSC_VER
__asm mov w, esi
#else
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
#endif
#ifdef _MSC_VER
__asm mov dpi, edi
#else
__asm__ ( "mov %[dpi], edi " : [dpi] "+m" (dpi) );
#endif
window_draw_widgets(w, dpi);