Add charwin library and matching code generator optimizations
This commit is contained in:
parent
594610c302
commit
4017cc386b
|
@ -0,0 +1,505 @@
|
||||||
|
#include "charwin.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void copy_fwd(char * sdp, const char * ssp, char * cdp, const char * csp, char n)
|
||||||
|
{
|
||||||
|
for(char i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
sdp[i] = ssp[i];
|
||||||
|
cdp[i] = csp[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma native(copy_fwd)
|
||||||
|
|
||||||
|
static void fill_fwd(char * sdp, char * cdp, char ch, char color, char n)
|
||||||
|
{
|
||||||
|
for(char i=0; i<n; i++)
|
||||||
|
{
|
||||||
|
sdp[i] = ch;
|
||||||
|
cdp[i] = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma native(fill_fwd)
|
||||||
|
|
||||||
|
static void copy_bwd(char * sdp, const char * ssp, char * cdp, const char * csp, char n)
|
||||||
|
{
|
||||||
|
while (n)
|
||||||
|
{
|
||||||
|
n--;
|
||||||
|
sdp[n] = ssp[n];
|
||||||
|
cdp[n] = csp[n];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma native(copy_bwd)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cwin_init(CharWin * win, char * screen, char sx, char sy, char wx, char wy)
|
||||||
|
{
|
||||||
|
win->sx = sx;
|
||||||
|
win->sy = sy;
|
||||||
|
win->wx = wx;
|
||||||
|
win->wy = wy;
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy = 0;
|
||||||
|
win->sp = screen + 40 * sy + sx;
|
||||||
|
win->cp = (char *)0xd800 + 40 * sy + sx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cwin_clear(CharWin * win)
|
||||||
|
{
|
||||||
|
cwin_fill(win, ' ', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_fill(CharWin * win, char ch, char color)
|
||||||
|
{
|
||||||
|
char *sp = win->sp, * cp = win->cp;
|
||||||
|
for(char y=0; y<win->wy; y++)
|
||||||
|
{
|
||||||
|
fill_fwd(sp, cp, ch, color, win->wx);
|
||||||
|
sp += 40;
|
||||||
|
cp += 40;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cwin_cursor_show(CharWin * win, bool show)
|
||||||
|
{
|
||||||
|
char * cp = win->sp + 40 * win->cy + win->cx;
|
||||||
|
if (show)
|
||||||
|
*cp |= 0x80;
|
||||||
|
else
|
||||||
|
*cp &= 0x7f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_cursor_move(CharWin * win, char cx, char cy)
|
||||||
|
{
|
||||||
|
win->cx = cx;
|
||||||
|
win->cy = cy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool cwin_cursor_left(CharWin * win)
|
||||||
|
{
|
||||||
|
if (win->cx > 0)
|
||||||
|
{
|
||||||
|
win->cx--;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cwin_cursor_right(CharWin * win)
|
||||||
|
{
|
||||||
|
if (win->cx + 1 < win->wx)
|
||||||
|
{
|
||||||
|
win->cx++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cwin_cursor_up(CharWin * win)
|
||||||
|
{
|
||||||
|
if (win->cy > 0)
|
||||||
|
{
|
||||||
|
win->cy--;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cwin_cursor_down(CharWin * win)
|
||||||
|
{
|
||||||
|
if (win->cy + 1 < win->cy)
|
||||||
|
{
|
||||||
|
win->cy++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cwin_cursor_forward(CharWin * win)
|
||||||
|
{
|
||||||
|
if (win->cx + 1 < win->wx)
|
||||||
|
{
|
||||||
|
win->cx++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (win->cy + 1 < win->wy)
|
||||||
|
{
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cwin_cursor_backward(CharWin * win)
|
||||||
|
{
|
||||||
|
if (win->cx > 0)
|
||||||
|
{
|
||||||
|
win->cx--;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (win->cy > 0)
|
||||||
|
{
|
||||||
|
win->cx = win->wx - 1;
|
||||||
|
win->cy--;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_read_string(CharWin * win, char * buffer)
|
||||||
|
{
|
||||||
|
char * sp = win->sp;
|
||||||
|
|
||||||
|
char i = 0;
|
||||||
|
for(char y=0; y<win->wy; y++)
|
||||||
|
{
|
||||||
|
for(char x=0; x<win->wx; x++)
|
||||||
|
{
|
||||||
|
char c = sp[x];
|
||||||
|
if (c & 0x40)
|
||||||
|
c ^= 0xc0;
|
||||||
|
if (!(c & 0x20))
|
||||||
|
c |= 0x40;
|
||||||
|
buffer[i++] = c;
|
||||||
|
}
|
||||||
|
sp += 40;
|
||||||
|
}
|
||||||
|
while (i > 0 && buffer[i - 1] == ' ')
|
||||||
|
i--;
|
||||||
|
buffer[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_write_string(CharWin * win, const char * buffer)
|
||||||
|
{
|
||||||
|
char * dp = win->sp;
|
||||||
|
for(char y=0; y<win->wy; y++)
|
||||||
|
{
|
||||||
|
for(char x=0; x<win->wx; x++)
|
||||||
|
{
|
||||||
|
char c = *buffer;
|
||||||
|
if (c)
|
||||||
|
{
|
||||||
|
c &= 0xbf;
|
||||||
|
if (c & 0x80)
|
||||||
|
c ^= 0xc0;
|
||||||
|
|
||||||
|
dp[x] = c;
|
||||||
|
buffer++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
dp[x] = ' ';
|
||||||
|
}
|
||||||
|
dp += 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void cwin_put_char(CharWin * win, char ch, char color)
|
||||||
|
{
|
||||||
|
cwin_putat_char(win, win->cx, win->cy, ch, color);
|
||||||
|
win->cx++;
|
||||||
|
if (win->cx == win->wx)
|
||||||
|
{
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_put_chars(CharWin * win, const char * chars, char num, char color)
|
||||||
|
{
|
||||||
|
cwin_putat_chars(win, win->cx, win->cy, chars, color);
|
||||||
|
win->cx += num;
|
||||||
|
if (win->cx >= win->wx)
|
||||||
|
{
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char cwin_put_string(CharWin * win, const char * str, char color)
|
||||||
|
{
|
||||||
|
char n = cwin_putat_string(win, win->cx, win->cy, str, color);
|
||||||
|
win->cx += n;
|
||||||
|
if (win->cx >= win->wx)
|
||||||
|
{
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy++;
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_putat_char(CharWin * win, char x, char y, char ch, char color)
|
||||||
|
{
|
||||||
|
int offset = 40 * y + x;
|
||||||
|
|
||||||
|
ch &= 0xbf;
|
||||||
|
if (ch & 0x80)
|
||||||
|
ch ^= 0xc0;
|
||||||
|
|
||||||
|
win->sp[offset] = ch;
|
||||||
|
win->cp[offset] = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_putat_chars(CharWin * win, char x, char y, const char * chars, char num, char color)
|
||||||
|
{
|
||||||
|
int offset = 40 * y + x;
|
||||||
|
|
||||||
|
char * sp = win->sp + offset;
|
||||||
|
char * cp = win->cp + offset;
|
||||||
|
|
||||||
|
for(char i=0; i<num; i++)
|
||||||
|
{
|
||||||
|
char ch = chars[i];
|
||||||
|
|
||||||
|
ch &= 0xbf;
|
||||||
|
if (ch & 0x80)
|
||||||
|
ch ^= 0xc0;
|
||||||
|
|
||||||
|
sp[i] = ch;
|
||||||
|
cp[i] = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char cwin_putat_string(CharWin * win, char x, char y, const char * str, char color)
|
||||||
|
{
|
||||||
|
int offset = 40 * y + x;
|
||||||
|
|
||||||
|
char * sp = win->sp + offset;
|
||||||
|
char * cp = win->cp + offset;
|
||||||
|
|
||||||
|
char i = 0;
|
||||||
|
while (char ch = str[i])
|
||||||
|
{
|
||||||
|
ch &= 0xbf;
|
||||||
|
if (ch & 0x80)
|
||||||
|
ch ^= 0xc0;
|
||||||
|
|
||||||
|
sp[i] = ch;
|
||||||
|
cp[i] = color;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cwin_insert_char(CharWin * win)
|
||||||
|
{
|
||||||
|
char y = win->wy - 1, rx = win->wx - 1;
|
||||||
|
|
||||||
|
char * sp = win->sp + 40 * y;
|
||||||
|
char * cp = win->cp + 40 * y;
|
||||||
|
|
||||||
|
while (y > win->cy)
|
||||||
|
{
|
||||||
|
copy_bwd(sp + 1, sp, cp + 1, cp, rx);
|
||||||
|
|
||||||
|
sp -= 40;
|
||||||
|
cp -= 40;
|
||||||
|
sp[40] = sp[rx];
|
||||||
|
cp[40] = cp[rx];
|
||||||
|
y--;
|
||||||
|
}
|
||||||
|
|
||||||
|
sp += win->cx;
|
||||||
|
cp += win->cx;
|
||||||
|
rx -= win->cx;
|
||||||
|
|
||||||
|
copy_bwd(sp + 1, sp, cp + 1, cp, rx);
|
||||||
|
|
||||||
|
sp[0] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_delete_char(CharWin * win)
|
||||||
|
{
|
||||||
|
char * sp = win->sp + 40 * win->cy;
|
||||||
|
char * cp = win->cp + 40 * win->cy;
|
||||||
|
|
||||||
|
char x = win->cx, rx = win->wx - 1;
|
||||||
|
|
||||||
|
copy_fwd(sp + x, sp + x + 1, cp + x, cp + x + 1, rx - x);
|
||||||
|
|
||||||
|
char y = win->cy + 1;
|
||||||
|
while (y < win->wy)
|
||||||
|
{
|
||||||
|
sp[rx] = sp[40];
|
||||||
|
cp[rx] = cp[40];
|
||||||
|
|
||||||
|
sp += 40;
|
||||||
|
cp += 40;
|
||||||
|
|
||||||
|
copy_fwd(sp, sp + 1, cp, cp + 1, rx);
|
||||||
|
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
|
||||||
|
sp[rx] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
int cwin_getch(void)
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
L1:
|
||||||
|
jsr 0xffe4
|
||||||
|
cmp #0
|
||||||
|
beq L1
|
||||||
|
sta accu
|
||||||
|
lda #0
|
||||||
|
sta accu + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cwin_edit_char(CharWin * win, char ch)
|
||||||
|
{
|
||||||
|
switch (ch)
|
||||||
|
{
|
||||||
|
case 13:
|
||||||
|
case 3:
|
||||||
|
return true;
|
||||||
|
|
||||||
|
case 19:
|
||||||
|
win->cx = 0;
|
||||||
|
win->cy = 0;
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case 147:
|
||||||
|
cwin_clear(win);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case 17:
|
||||||
|
cwin_cursor_down(win);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case 145: // CRSR_UP
|
||||||
|
cwin_cursor_up(win);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case 29:
|
||||||
|
cwin_cursor_forward(win);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case 157:
|
||||||
|
cwin_cursor_backward(win);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case 20:
|
||||||
|
if (cwin_cursor_backward(win))
|
||||||
|
cwin_delete_char(win);
|
||||||
|
return false;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (ch >= 32 && ch < 128 || ch >= 160)
|
||||||
|
{
|
||||||
|
if (win->cy + 1 < win->wy || win->cx + 1 < win->wx)
|
||||||
|
{
|
||||||
|
cwin_insert_char(win);
|
||||||
|
cwin_put_char(win, ch, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char cwin_edit(CharWin * win)
|
||||||
|
{
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
cwin_cursor_show(win, true);
|
||||||
|
char ch = cwin_getch();
|
||||||
|
cwin_cursor_show(win, false);
|
||||||
|
|
||||||
|
if (cwin_edit_char(win, ch))
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_scroll_left(CharWin * win, char by)
|
||||||
|
{
|
||||||
|
char * sp = win->sp;
|
||||||
|
char * cp = win->cp;
|
||||||
|
|
||||||
|
char rx = win->wx - by;
|
||||||
|
|
||||||
|
for(char y=0; y<win->wy; y++)
|
||||||
|
{
|
||||||
|
copy_fwd(sp, sp + by, cp, cp + by, rx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_scroll_right(CharWin * win, char by)
|
||||||
|
{
|
||||||
|
char * sp = win->sp;
|
||||||
|
char * cp = win->cp;
|
||||||
|
|
||||||
|
char rx = win->wx - by;
|
||||||
|
|
||||||
|
for(char y=0; y<win->wy; y++)
|
||||||
|
{
|
||||||
|
copy_bwd(sp + by, sp, cp + by, cp, rx);
|
||||||
|
sp += 40;
|
||||||
|
cp += 40;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_scroll_up(CharWin * win, char by)
|
||||||
|
{
|
||||||
|
char * sp = win->sp;
|
||||||
|
char * cp = win->cp;
|
||||||
|
|
||||||
|
char rx = win->wx;
|
||||||
|
int dst = 40 * by;
|
||||||
|
|
||||||
|
for(char y=0; y<win->wy - by; y++)
|
||||||
|
{
|
||||||
|
copy_fwd(sp, sp + dst, cp, cp + dst, rx);
|
||||||
|
sp += 40;
|
||||||
|
cp += 40;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cwin_scroll_down(CharWin * win, char by)
|
||||||
|
{
|
||||||
|
char * sp = win->sp + 40 * win->wy;
|
||||||
|
char * cp = win->cp + 40 * win->wy;
|
||||||
|
|
||||||
|
char rx = win->wx;
|
||||||
|
|
||||||
|
int dst = 40 * by;
|
||||||
|
|
||||||
|
for(char y=0; y<win->wy - by; y++)
|
||||||
|
{
|
||||||
|
sp -= 40;
|
||||||
|
cp -= 40;
|
||||||
|
copy_fwd(sp, sp - dst, cp, cp - dst, rx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char ch, char color)
|
||||||
|
{
|
||||||
|
char * sp = win->sp + 40 * y + x;
|
||||||
|
char * cp = win->cp + 40 * y + x;
|
||||||
|
|
||||||
|
for(char y=0; y<h; y++)
|
||||||
|
{
|
||||||
|
fill_fwd(sp, cp, ch, color, w);
|
||||||
|
sp += 40;
|
||||||
|
cp += 40;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
#ifndef C64_CHARWIN_H
|
||||||
|
#define C64_CHARWIN_H
|
||||||
|
|
||||||
|
struct CharWin
|
||||||
|
{
|
||||||
|
char sx, sy, wx, wy;
|
||||||
|
char cx, cy;
|
||||||
|
|
||||||
|
char * sp, * cp;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialize the CharWin structure for the given screen and coordinates, does
|
||||||
|
// not clear the window
|
||||||
|
//
|
||||||
|
void cwin_init(CharWin * win, char * screen, char sx, char sy, char wx, char wy);
|
||||||
|
|
||||||
|
|
||||||
|
// Clear the window
|
||||||
|
//
|
||||||
|
void cwin_clear(CharWin * win);
|
||||||
|
|
||||||
|
// Fill the window with the given character and color
|
||||||
|
//
|
||||||
|
void cwin_fill(CharWin * win, char ch, char color);
|
||||||
|
|
||||||
|
|
||||||
|
// Show or hide the cursor by setting or clearing the MSB of the character code
|
||||||
|
//
|
||||||
|
void cwin_cursor_show(CharWin * win, bool show);
|
||||||
|
|
||||||
|
// Move the cursor to the given location
|
||||||
|
//
|
||||||
|
void cwin_cursor_move(CharWin * win, char cx, char cy);
|
||||||
|
|
||||||
|
|
||||||
|
// Move the cursor in the window, returns true if the cursor could be moved
|
||||||
|
//
|
||||||
|
bool cwin_cursor_left(CharWin * win);
|
||||||
|
bool cwin_cursor_right(CharWin * win);
|
||||||
|
bool cwin_cursor_up(CharWin * win);
|
||||||
|
bool cwin_cursor_down(CharWin * win);
|
||||||
|
bool cwin_cursor_forward(CharWin * win);
|
||||||
|
bool cwin_cursor_backward(CharWin * win);
|
||||||
|
|
||||||
|
// Read the full window into a string
|
||||||
|
//
|
||||||
|
void cwin_read_string(CharWin * win, char * buffer);
|
||||||
|
|
||||||
|
// Write the fill window with the given string
|
||||||
|
//
|
||||||
|
void cwin_write_string(CharWin * win, const char * buffer);
|
||||||
|
|
||||||
|
// Put a single char at the cursor location and advance the cursor
|
||||||
|
//
|
||||||
|
void cwin_put_char(CharWin * win, char ch, char color);
|
||||||
|
|
||||||
|
// Put an array of chars at the cursor location and advance the cursor
|
||||||
|
//
|
||||||
|
void cwin_put_chars(CharWin * win, const char * chars, char num, char color);
|
||||||
|
|
||||||
|
// Put a zero terminated string at the cursor location and advance the cursor
|
||||||
|
//
|
||||||
|
char cwin_put_string(CharWin * win, const char * str, char color);
|
||||||
|
|
||||||
|
// Put a single char at the given window location
|
||||||
|
//
|
||||||
|
void cwin_putat_char(CharWin * win, char x, char y, char ch, char color);
|
||||||
|
|
||||||
|
// Put an array of chars at the given window location
|
||||||
|
//
|
||||||
|
void cwin_putat_chars(CharWin * win, char x, char y, const char * chars, char num, char color);
|
||||||
|
|
||||||
|
// Put a zero terminated string at the given window location
|
||||||
|
//
|
||||||
|
char cwin_putat_string(CharWin * win, char x, char y, const char * str, char color);
|
||||||
|
|
||||||
|
// Insert one space character at the cursor position
|
||||||
|
//
|
||||||
|
void cwin_insert_char(CharWin * win);
|
||||||
|
|
||||||
|
// Delete the character at the cursor position
|
||||||
|
//
|
||||||
|
void cwin_delete_char(CharWin * win);
|
||||||
|
|
||||||
|
// Edit the window position using the char as the input
|
||||||
|
//
|
||||||
|
bool cwin_edit_char(CharWin * win, char ch);
|
||||||
|
|
||||||
|
// Edit the window using keyboard input, returns the key the exited
|
||||||
|
// the edit, either return or stop
|
||||||
|
//
|
||||||
|
char cwin_edit(CharWin * win);
|
||||||
|
|
||||||
|
// Scroll the window in the given direction, does not fill the new
|
||||||
|
// empty space
|
||||||
|
//
|
||||||
|
void cwin_scroll_left(CharWin * win, char by);
|
||||||
|
void cwin_scroll_right(CharWin * win, char by);
|
||||||
|
void cwin_scroll_up(CharWin * win, char by);
|
||||||
|
void cwin_scroll_down(CharWin * win, char by);
|
||||||
|
|
||||||
|
// Fill the given rectangle with the character and color
|
||||||
|
//
|
||||||
|
void cwin_fill_rect(CharWin * win, char x, char y, char w, char h, char ch, char color);
|
||||||
|
|
||||||
|
#pragma compile("charwin.c")
|
||||||
|
|
||||||
|
#endif
|
|
@ -29,6 +29,8 @@ __asm inp_exit
|
||||||
sta $54
|
sta $54
|
||||||
lda #0
|
lda #0
|
||||||
sta $13
|
sta $13
|
||||||
|
lda #$19
|
||||||
|
sta $16
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4259,6 +4259,16 @@ bool ByteCodeBasicBlock::JoinTailCodeSequences(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mTrueJump && mFalseJump && mTrueJump->mEntryBlocks.Size() == 1 && mFalseJump->mEntryBlocks.Size() == 1)
|
||||||
|
{
|
||||||
|
while (mTrueJump->mIns.Size() > 0 && mFalseJump->mIns.Size() > 0 && !mTrueJump->mIns[0].ChangesAccu() && mTrueJump->mIns[0].IsSame(mFalseJump->mIns[0]))
|
||||||
|
{
|
||||||
|
mIns.Push(mTrueJump->mIns[0]);
|
||||||
|
mTrueJump->mIns.Remove(0);
|
||||||
|
mFalseJump->mIns.Remove(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mTrueJump && mTrueJump->JoinTailCodeSequences())
|
if (mTrueJump && mTrueJump->JoinTailCodeSequences())
|
||||||
changed = true;
|
changed = true;
|
||||||
if (mFalseJump && mFalseJump->JoinTailCodeSequences())
|
if (mFalseJump && mFalseJump->JoinTailCodeSequences())
|
||||||
|
@ -4359,7 +4369,7 @@ bool ByteCodeBasicBlock::PeepHoleOptimizer(int phase)
|
||||||
|
|
||||||
// assert(!(live & LIVE_ACCU));
|
// assert(!(live & LIVE_ACCU));
|
||||||
|
|
||||||
int accuTemp = -1, addrTemp = -1, accuVal = 0;
|
int accuTemp = -1, addrTemp = -1, accuVal = 0, accuTempByte = -1;
|
||||||
bool accuConst = false;
|
bool accuConst = false;
|
||||||
|
|
||||||
for (int i = 0; i < mIns.Size(); i++)
|
for (int i = 0; i < mIns.Size(); i++)
|
||||||
|
@ -4444,6 +4454,22 @@ bool ByteCodeBasicBlock::PeepHoleOptimizer(int phase)
|
||||||
mIns[i + 0].mCode = BC_NOP;
|
mIns[i + 0].mCode = BC_NOP;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if 1
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mCode == BC_STORE_REG_16 &&
|
||||||
|
mIns[i + 1].mCode == BC_BINOP_MULI8_16 && mIns[i + 1].mRegister == mIns[i + 0].mRegister &&
|
||||||
|
mIns[i + 2].mCode == BC_LOAD_REG_16 && mIns[i + 2].mRegister != mIns[i + 0].mRegister &&
|
||||||
|
mIns[i + 3].IsCommutative() && mIns[i + 3].mRegister == mIns[i + 0].mRegister && mIns[i + 3].mRegisterFinal)
|
||||||
|
{
|
||||||
|
mIns[i + 0].mCode = BC_NOP;
|
||||||
|
mIns[i + 1].mRegister = BC_REG_ACCU;
|
||||||
|
mIns[i + 1].mLive |= LIVE_ACCU;
|
||||||
|
mIns[i + 2].mCode = BC_NOP;
|
||||||
|
mIns[i + 3].mRegister = mIns[i + 2].mRegister;
|
||||||
|
mIns[i + 3].mRegisterFinal = mIns[i + 2].mRegisterFinal;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -4790,6 +4816,12 @@ bool ByteCodeBasicBlock::PeepHoleOptimizer(int phase)
|
||||||
mIns[i + 1].mCode = BC_NOP;
|
mIns[i + 1].mCode = BC_NOP;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
else if (mIns[i + 0].mCode == BC_LOAD_REG_16 && mIns[i + 1].mCode == BC_ADDR_REG && mIns[i + 1].mRegister == BC_REG_ACCU && !(mIns[i + 1].mLive & LIVE_ACCU))
|
||||||
|
{
|
||||||
|
mIns[i + 0].mCode = BC_ADDR_REG;
|
||||||
|
mIns[i + 1].mCode = BC_NOP;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
else if (mIns[i + 1].mCode == BC_LOAD_REG_16 && mIns[i].LoadsRegister(mIns[i + 1].mRegister) && mIns[i + 1].mRegisterFinal)
|
else if (mIns[i + 1].mCode == BC_LOAD_REG_16 && mIns[i].LoadsRegister(mIns[i + 1].mRegister) && mIns[i + 1].mRegisterFinal)
|
||||||
{
|
{
|
||||||
mIns[i].mRegister = BC_REG_ACCU;
|
mIns[i].mRegister = BC_REG_ACCU;
|
||||||
|
@ -5005,6 +5037,19 @@ bool ByteCodeBasicBlock::PeepHoleOptimizer(int phase)
|
||||||
mIns[i + 1].mCode = BC_NOP;
|
mIns[i + 1].mCode = BC_NOP;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
#if 1
|
||||||
|
else if (
|
||||||
|
i + 2 == mIns.Size() && mFalseJump &&
|
||||||
|
mIns[i + 0].mCode == BC_LOAD_REG_8 &&
|
||||||
|
mIns[i + 1].mCode == BC_BINOP_CMPUR_8 && accuTempByte == mIns[i + 1].mRegister && !(mExitLive & LIVE_ACCU)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
mIns[i + 0].mCode = BC_NOP;
|
||||||
|
mIns[i + 1].mRegister = mIns[i + 0].mRegister;
|
||||||
|
mBranch = TransposeBranchCondition(mBranch);
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
else if ((mIns[i].mCode == BC_LOAD_LOCAL_16 || mIns[i].mCode == BC_LOAD_ABS_16) && mIns[i + 1].mCode == BC_ADDR_REG && mIns[i].mRegister == mIns[i + 1].mRegister && mIns[i + 1].mRegisterFinal)
|
else if ((mIns[i].mCode == BC_LOAD_LOCAL_16 || mIns[i].mCode == BC_LOAD_ABS_16) && mIns[i + 1].mCode == BC_ADDR_REG && mIns[i].mRegister == mIns[i + 1].mRegister && mIns[i + 1].mRegisterFinal)
|
||||||
|
@ -5028,6 +5073,11 @@ bool ByteCodeBasicBlock::PeepHoleOptimizer(int phase)
|
||||||
mIns[i].mCode = BC_NOP;
|
mIns[i].mCode = BC_NOP;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
else if ((mIns[i].mCode == BC_LOAD_REG_8 || mIns[i].mCode == BC_STORE_REG_8) && accuTempByte == mIns[i].mRegister)
|
||||||
|
{
|
||||||
|
mIns[i].mCode = BC_NOP;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (mIns[i].mCode == BC_ADDR_REG && mIns[i].mRegister == addrTemp)
|
if (mIns[i].mCode == BC_ADDR_REG && mIns[i].mRegister == addrTemp)
|
||||||
{
|
{
|
||||||
|
@ -5074,18 +5124,23 @@ bool ByteCodeBasicBlock::PeepHoleOptimizer(int phase)
|
||||||
if (mIns[i].ChangesAccu())
|
if (mIns[i].ChangesAccu())
|
||||||
{
|
{
|
||||||
accuTemp = -1;
|
accuTemp = -1;
|
||||||
|
accuTempByte = -1;
|
||||||
accuConst = false;
|
accuConst = false;
|
||||||
}
|
}
|
||||||
if (mIns[i].ChangesAddr())
|
if (mIns[i].ChangesAddr())
|
||||||
addrTemp = -1;
|
addrTemp = -1;
|
||||||
if (accuTemp != -1 && mIns[i].ChangesRegister(accuTemp))
|
if (accuTemp != -1 && mIns[i].ChangesRegister(accuTemp))
|
||||||
accuTemp = -1;
|
accuTemp = -1;
|
||||||
|
if (accuTempByte != -1 && mIns[i].ChangesRegister(accuTempByte))
|
||||||
|
accuTempByte = -1;
|
||||||
if (addrTemp != -1 && mIns[i].ChangesRegister(addrTemp))
|
if (addrTemp != -1 && mIns[i].ChangesRegister(addrTemp))
|
||||||
addrTemp = -1;
|
addrTemp = -1;
|
||||||
|
|
||||||
if (mIns[i].mCode == BC_LOAD_REG_16 || mIns[i].mCode == BC_STORE_REG_16 || mIns[i].mCode == BC_LOAD_REG_32 || mIns[i].mCode == BC_STORE_REG_32)
|
if (mIns[i].mCode == BC_LOAD_REG_16 || mIns[i].mCode == BC_STORE_REG_16 || mIns[i].mCode == BC_LOAD_REG_32 || mIns[i].mCode == BC_STORE_REG_32)
|
||||||
accuTemp = mIns[i].mRegister;
|
accuTemp = mIns[i].mRegister;
|
||||||
if (mIns[i].mCode == BC_ADDR_REG && mIns[i].mRegister != BC_REG_ACCU)
|
else if (mIns[i].mCode == BC_LOAD_REG_8)
|
||||||
|
accuTempByte = mIns[i].mRegister;
|
||||||
|
else if (mIns[i].mCode == BC_ADDR_REG && mIns[i].mRegister != BC_REG_ACCU)
|
||||||
addrTemp = mIns[i].mRegister;
|
addrTemp = mIns[i].mRegister;
|
||||||
|
|
||||||
if (mIns[i].mRegister == BC_REG_ACCU && !mIns[i].mRelocate)
|
if (mIns[i].mRegister == BC_REG_ACCU && !mIns[i].mRelocate)
|
||||||
|
|
|
@ -20,7 +20,7 @@ const char* ByteCodeDisassembler::TempName(uint8 tmp, char* buffer, InterCodePro
|
||||||
return "ADDR";
|
return "ADDR";
|
||||||
else if (tmp == BC_REG_ACCU)
|
else if (tmp == BC_REG_ACCU)
|
||||||
return "ACCU";
|
return "ACCU";
|
||||||
else if (tmp >= BC_REG_FPARAMS && tmp <= BC_REG_FPARAMS + 7)
|
else if (tmp >= BC_REG_FPARAMS && tmp < BC_REG_FPARAMS_END)
|
||||||
{
|
{
|
||||||
sprintf_s(buffer, 10, "P%d", tmp - BC_REG_FPARAMS);
|
sprintf_s(buffer, 10, "P%d", tmp - BC_REG_FPARAMS);
|
||||||
return buffer;
|
return buffer;
|
||||||
|
@ -723,7 +723,7 @@ const char* NativeCodeDisassembler::TempName(uint8 tmp, char* buffer, InterCodeP
|
||||||
sprintf_s(buffer, 10, "IP + %d", tmp - BC_REG_IP);
|
sprintf_s(buffer, 10, "IP + %d", tmp - BC_REG_IP);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
else if (tmp >= BC_REG_FPARAMS && tmp <= BC_REG_FPARAMS + 7)
|
else if (tmp >= BC_REG_FPARAMS && tmp < BC_REG_FPARAMS_END)
|
||||||
{
|
{
|
||||||
sprintf_s(buffer, 10, "P%d", tmp - BC_REG_FPARAMS);
|
sprintf_s(buffer, 10, "P%d", tmp - BC_REG_FPARAMS);
|
||||||
return buffer;
|
return buffer;
|
||||||
|
|
|
@ -129,7 +129,7 @@ void GlobalAnalyzer::AutoInline(void)
|
||||||
dec = dec->mNext;
|
dec = dec->mNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nparams <= 8)
|
if (nparams <= BC_REG_FPARAMS_END - BC_REG_FPARAMS)
|
||||||
{
|
{
|
||||||
f->mBase->mFlags |= DTF_FASTCALL;
|
f->mBase->mFlags |= DTF_FASTCALL;
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -289,7 +289,9 @@ Declaration * GlobalAnalyzer::Analyze(Expression* exp, Declaration* procDec)
|
||||||
{
|
{
|
||||||
if (ldec->mType == DT_VARIABLE)
|
if (ldec->mType == DT_VARIABLE)
|
||||||
ldec->mFlags |= DTF_VAR_ALIASING;
|
ldec->mFlags |= DTF_VAR_ALIASING;
|
||||||
}
|
}
|
||||||
|
else if (exp->mToken == TK_MUL)
|
||||||
|
return exp->mDecType;
|
||||||
break;
|
break;
|
||||||
case EX_POSTFIX:
|
case EX_POSTFIX:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
uint8 BC_REG_WORK = 0x03;
|
uint8 BC_REG_WORK = 0x03;
|
||||||
uint8 BC_REG_WORK_Y = 0x02;
|
uint8 BC_REG_WORK_Y = 0x02;
|
||||||
uint8 BC_REG_FPARAMS = 0x0d;
|
uint8 BC_REG_FPARAMS = 0x0d;
|
||||||
|
uint8 BC_REG_FPARAMS_END = 0x19;
|
||||||
|
|
||||||
uint8 BC_REG_IP = 0x19;
|
uint8 BC_REG_IP = 0x19;
|
||||||
uint8 BC_REG_ACCU = 0x1b;
|
uint8 BC_REG_ACCU = 0x1b;
|
||||||
|
|
|
@ -84,6 +84,7 @@ inline int sprintf_s(char* buffer, int size, const char* format, ...)
|
||||||
extern uint8 BC_REG_WORK;
|
extern uint8 BC_REG_WORK;
|
||||||
extern uint8 BC_REG_WORK_Y;
|
extern uint8 BC_REG_WORK_Y;
|
||||||
extern uint8 BC_REG_FPARAMS;
|
extern uint8 BC_REG_FPARAMS;
|
||||||
|
extern uint8 BC_REG_FPARAMS_END;
|
||||||
|
|
||||||
extern uint8 BC_REG_IP;
|
extern uint8 BC_REG_IP;
|
||||||
extern uint8 BC_REG_ACCU;
|
extern uint8 BC_REG_ACCU;
|
||||||
|
|
|
@ -1498,6 +1498,31 @@ bool NativeCodeInstruction::ValueForwarding(NativeRegisterDataSet& data, AsmInsT
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ASMIT_STA:
|
||||||
|
if (mMode == ASMIM_ZERO_PAGE && data.mRegs[CPU_REG_A].mMode == NRDM_ZERO_PAGE && mAddress == data.mRegs[CPU_REG_A].mValue)
|
||||||
|
{
|
||||||
|
mType = ASMIT_NOP;
|
||||||
|
mMode = ASMIM_IMPLIED;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ASMIT_STX:
|
||||||
|
if (mMode == ASMIM_ZERO_PAGE && data.mRegs[CPU_REG_X].mMode == NRDM_ZERO_PAGE && mAddress == data.mRegs[CPU_REG_X].mValue)
|
||||||
|
{
|
||||||
|
mType = ASMIT_NOP;
|
||||||
|
mMode = ASMIM_IMPLIED;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ASMIT_STY:
|
||||||
|
if (mMode == ASMIM_ZERO_PAGE && data.mRegs[CPU_REG_Y].mMode == NRDM_ZERO_PAGE && mAddress == data.mRegs[CPU_REG_Y].mValue)
|
||||||
|
{
|
||||||
|
mType = ASMIT_NOP;
|
||||||
|
mMode = ASMIM_IMPLIED;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case ASMIT_ADC:
|
case ASMIT_ADC:
|
||||||
if (data.mRegs[CPU_REG_C].mMode == NRDM_IMMEDIATE && data.mRegs[CPU_REG_C].mValue == 0)
|
if (data.mRegs[CPU_REG_C].mMode == NRDM_IMMEDIATE && data.mRegs[CPU_REG_C].mValue == 0)
|
||||||
{
|
{
|
||||||
|
@ -7362,13 +7387,14 @@ bool NativeCodeBasicBlock::ApplyEntryDataSet(void)
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeCodeBasicBlock::FindZeroPageAlias(const NumberSet& statics, NumberSet& invalid, uint8* alias)
|
void NativeCodeBasicBlock::FindZeroPageAlias(const NumberSet& statics, NumberSet& invalid, uint8* alias, int accu)
|
||||||
{
|
{
|
||||||
if (!mVisited)
|
if (!mVisited)
|
||||||
{
|
{
|
||||||
mVisited = true;
|
mVisited = true;
|
||||||
|
|
||||||
int accu = -1;
|
if (mNumEntries > 1)
|
||||||
|
accu = -1;
|
||||||
|
|
||||||
for (int i = 0; i < mIns.Size(); i++)
|
for (int i = 0; i < mIns.Size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -7400,9 +7426,9 @@ void NativeCodeBasicBlock::FindZeroPageAlias(const NumberSet& statics, NumberSet
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mTrueJump)
|
if (mTrueJump)
|
||||||
mTrueJump->FindZeroPageAlias(statics, invalid, alias);
|
mTrueJump->FindZeroPageAlias(statics, invalid, alias, accu);
|
||||||
if (mFalseJump)
|
if (mFalseJump)
|
||||||
mFalseJump->FindZeroPageAlias(statics, invalid, alias);
|
mFalseJump->FindZeroPageAlias(statics, invalid, alias, accu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7477,6 +7503,11 @@ void NativeCodeBasicBlock::GlobalRegisterXMap(int reg)
|
||||||
ins.mType = ASMIT_DEX;
|
ins.mType = ASMIT_DEX;
|
||||||
ins.mMode = ASMIM_IMPLIED;
|
ins.mMode = ASMIM_IMPLIED;
|
||||||
break;
|
break;
|
||||||
|
case ASMIT_LDX:
|
||||||
|
assert(ins.mAddress == reg);
|
||||||
|
ins.mType = ASMIT_NOP;
|
||||||
|
ins.mMode = ASMIM_IMPLIED;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7517,6 +7548,11 @@ void NativeCodeBasicBlock::GlobalRegisterYMap(int reg)
|
||||||
ins.mType = ASMIT_DEY;
|
ins.mType = ASMIT_DEY;
|
||||||
ins.mMode = ASMIM_IMPLIED;
|
ins.mMode = ASMIM_IMPLIED;
|
||||||
break;
|
break;
|
||||||
|
case ASMIT_LDY:
|
||||||
|
assert(ins.mAddress == reg);
|
||||||
|
ins.mType = ASMIT_NOP;
|
||||||
|
ins.mMode = ASMIM_IMPLIED;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7685,10 +7721,6 @@ void NativeCodeBasicBlock::GlobalRegisterXYCheck(int* xregs, int* yregs)
|
||||||
for (int i = 0; i < mIns.Size(); i++)
|
for (int i = 0; i < mIns.Size(); i++)
|
||||||
{
|
{
|
||||||
const NativeCodeInstruction& ins(mIns[i]);
|
const NativeCodeInstruction& ins(mIns[i]);
|
||||||
if (ins.ChangesXReg())
|
|
||||||
xregs[0] = -1;
|
|
||||||
if (ins.ChangesYReg())
|
|
||||||
yregs[0] = -1;
|
|
||||||
if (ins.mMode == ASMIM_ZERO_PAGE)
|
if (ins.mMode == ASMIM_ZERO_PAGE)
|
||||||
{
|
{
|
||||||
switch (ins.mType)
|
switch (ins.mType)
|
||||||
|
@ -7699,6 +7731,24 @@ void NativeCodeBasicBlock::GlobalRegisterXYCheck(int* xregs, int* yregs)
|
||||||
if (xregs[ins.mAddress] >= 0)
|
if (xregs[ins.mAddress] >= 0)
|
||||||
xregs[ins.mAddress]++;
|
xregs[ins.mAddress]++;
|
||||||
break;
|
break;
|
||||||
|
case ASMIT_LDY:
|
||||||
|
if (yregs[ins.mAddress] >= 0)
|
||||||
|
yregs[ins.mAddress] += 2;
|
||||||
|
for (int i = 1; i < 256; i++)
|
||||||
|
if (i != ins.mAddress)
|
||||||
|
yregs[i] = -1;
|
||||||
|
|
||||||
|
xregs[ins.mAddress] = -1;
|
||||||
|
break;
|
||||||
|
case ASMIT_LDX:
|
||||||
|
if (xregs[ins.mAddress] >= 0)
|
||||||
|
xregs[ins.mAddress] += 2;
|
||||||
|
for (int i = 1; i < 256; i++)
|
||||||
|
if (i != ins.mAddress)
|
||||||
|
xregs[i] = -1;
|
||||||
|
|
||||||
|
yregs[ins.mAddress] = -1;
|
||||||
|
break;
|
||||||
case ASMIT_STA:
|
case ASMIT_STA:
|
||||||
if (ins.mLive & LIVE_CPU_REG_Z)
|
if (ins.mLive & LIVE_CPU_REG_Z)
|
||||||
{
|
{
|
||||||
|
@ -7737,6 +7787,13 @@ void NativeCodeBasicBlock::GlobalRegisterXYCheck(int* xregs, int* yregs)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ins.ChangesXReg())
|
||||||
|
xregs[0] = -1;
|
||||||
|
if (ins.ChangesYReg())
|
||||||
|
yregs[0] = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xregs[0] >= 0 || yregs[0] >= 0)
|
if (xregs[0] >= 0 || yregs[0] >= 0)
|
||||||
|
@ -7749,19 +7806,28 @@ void NativeCodeBasicBlock::GlobalRegisterXYCheck(int* xregs, int* yregs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeCodeBasicBlock::RemapZeroPage(const uint8* remap)
|
bool NativeCodeBasicBlock::RemapZeroPage(const uint8* remap)
|
||||||
{
|
{
|
||||||
|
bool modified = false;
|
||||||
|
|
||||||
if (!mVisited)
|
if (!mVisited)
|
||||||
{
|
{
|
||||||
mVisited = true;
|
mVisited = true;
|
||||||
|
|
||||||
for (int i = 0; i < mIns.Size(); i++)
|
for (int i = 0; i < mIns.Size(); i++)
|
||||||
{
|
{
|
||||||
|
int addr;
|
||||||
|
|
||||||
switch (mIns[i].mMode)
|
switch (mIns[i].mMode)
|
||||||
{
|
{
|
||||||
case ASMIM_ZERO_PAGE:
|
case ASMIM_ZERO_PAGE:
|
||||||
case ASMIM_INDIRECT_Y:
|
case ASMIM_INDIRECT_Y:
|
||||||
mIns[i].mAddress = remap[mIns[i].mAddress];
|
addr = remap[mIns[i].mAddress];
|
||||||
|
if (addr != mIns[i].mAddress)
|
||||||
|
{
|
||||||
|
mIns[i].mAddress = addr;
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ASMIM_ABSOLUTE:
|
case ASMIM_ABSOLUTE:
|
||||||
if (mIns[i].mType == ASMIT_JSR && mIns[i].mLinkerObject)
|
if (mIns[i].mType == ASMIT_JSR && mIns[i].mLinkerObject)
|
||||||
|
@ -7770,18 +7836,26 @@ void NativeCodeBasicBlock::RemapZeroPage(const uint8* remap)
|
||||||
|
|
||||||
for (int j = 0; j < lo->mNumTemporaries; j++)
|
for (int j = 0; j < lo->mNumTemporaries; j++)
|
||||||
{
|
{
|
||||||
lo->mTemporaries[j] = remap[lo->mTemporaries[j]];
|
addr = remap[lo->mTemporaries[j]];
|
||||||
|
if (addr != lo->mTemporaries[j])
|
||||||
|
{
|
||||||
|
lo->mTemporaries[j] = addr;
|
||||||
|
modified = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mTrueJump)
|
if (mTrueJump && mTrueJump->RemapZeroPage(remap))
|
||||||
mTrueJump->RemapZeroPage(remap);
|
modified = true;
|
||||||
if (mFalseJump)
|
|
||||||
mFalseJump->RemapZeroPage(remap);
|
if (mFalseJump && mFalseJump->RemapZeroPage(remap))
|
||||||
|
modified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NativeCodeBasicBlock::SameTail(const NativeCodeInstruction& ins) const
|
bool NativeCodeBasicBlock::SameTail(const NativeCodeInstruction& ins) const
|
||||||
|
@ -8094,6 +8168,37 @@ bool NativeCodeBasicBlock::FindAddressSumY(int at, int reg, int & apos, int& bre
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (
|
||||||
|
mIns[j + 0].mType == ASMIT_STA && mIns[j + 0].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[j + 1].mType == ASMIT_CLC &&
|
||||||
|
mIns[j + 2].mType == ASMIT_ADC && mIns[j + 2].mMode == ASMIM_ZERO_PAGE &&
|
||||||
|
mIns[j + 3].mType == ASMIT_STA && mIns[j + 3].mMode == ASMIM_ZERO_PAGE && mIns[j + 3].mAddress == reg &&
|
||||||
|
mIns[j + 4].mType == ASMIT_LDA && mIns[j + 4].mMode == ASMIM_ZERO_PAGE && mIns[j + 4].mAddress == mIns[j + 2].mAddress + 1 &&
|
||||||
|
mIns[j + 5].mType == ASMIT_ADC && mIns[j + 5].mMode == ASMIM_IMMEDIATE && mIns[j + 5].mAddress == 0 &&
|
||||||
|
mIns[j + 6].mType == ASMIT_STA && mIns[j + 6].mMode == ASMIM_ZERO_PAGE && mIns[j + 6].mAddress == reg + 1)
|
||||||
|
{
|
||||||
|
breg = mIns[j + 2].mAddress;
|
||||||
|
ireg = mIns[j + 0].mAddress;
|
||||||
|
|
||||||
|
int k = j + 7;
|
||||||
|
while (k < at)
|
||||||
|
{
|
||||||
|
if (mIns[k].mMode == ASMIM_ZERO_PAGE && (mIns[k].mAddress == breg || mIns[k].mAddress == breg + 1 || mIns[k].mAddress == ireg) && mIns[k].ChangesAddress())
|
||||||
|
return false;
|
||||||
|
if (breg == reg)
|
||||||
|
{
|
||||||
|
if (mIns[k].mMode == ASMIM_ZERO_PAGE && (mIns[k].mAddress == breg || mIns[k].mAddress == breg + 1))
|
||||||
|
return false;
|
||||||
|
if (mIns[k].mMode == ASMIM_INDIRECT_Y && mIns[k].mAddress == breg)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
apos = j;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (mIns[j + 6].mMode == ASMIM_ZERO_PAGE && (mIns[j + 6].mAddress == reg || mIns[j + 6].mAddress == reg + 1) && mIns[j + 6].ChangesAddress())
|
if (mIns[j + 6].mMode == ASMIM_ZERO_PAGE && (mIns[j + 6].mAddress == reg || mIns[j + 6].mAddress == reg + 1) && mIns[j + 6].ChangesAddress())
|
||||||
return false;
|
return false;
|
||||||
|
@ -9832,6 +9937,25 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass)
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mType == ASMIT_STA &&
|
||||||
|
mIns[i + 1].mType == ASMIT_LDY && mIns[i + 0].SameEffectiveAddress(mIns[i + 1]))
|
||||||
|
{
|
||||||
|
mIns[i + 1].mType = ASMIT_TAY;
|
||||||
|
mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 0].mLive |= LIVE_CPU_REG_A;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
else if (
|
||||||
|
mIns[i + 0].mType == ASMIT_STA &&
|
||||||
|
mIns[i + 1].mType == ASMIT_LDX && mIns[i + 0].SameEffectiveAddress(mIns[i + 1]))
|
||||||
|
{
|
||||||
|
mIns[i + 1].mType = ASMIT_TAX;
|
||||||
|
mIns[i + 1].mMode = ASMIM_IMPLIED;
|
||||||
|
mIns[i + 0].mLive |= LIVE_CPU_REG_A;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
|
|
||||||
else if (
|
else if (
|
||||||
mIns[i + 0].mType == ASMIT_TXA &&
|
mIns[i + 0].mType == ASMIT_TXA &&
|
||||||
mIns[i + 1].mType == ASMIT_STA && (mIns[i + 1].mMode == ASMIM_ZERO_PAGE || mIns[i + 1].mMode == ASMIM_ABSOLUTE))
|
mIns[i + 1].mType == ASMIT_STA && (mIns[i + 1].mMode == ASMIM_ZERO_PAGE || mIns[i + 1].mMode == ASMIM_ABSOLUTE))
|
||||||
|
@ -10323,6 +10447,17 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(int pass)
|
||||||
mIns[i + 3].mType = ASMIT_DEC;
|
mIns[i + 3].mType = ASMIT_DEC;
|
||||||
progress = true;
|
progress = true;
|
||||||
}
|
}
|
||||||
|
else if (mIns[i + 0].mType == ASMIT_LDA && mIns[i + 3].mType == ASMIT_STA && mIns[i + 0].SameEffectiveAddress(mIns[i + 3]) &&
|
||||||
|
mIns[i + 1].mType == ASMIT_SEC && mIns[i + 2].mType == ASMIT_SBC && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 1 &&
|
||||||
|
(mIns[i + 0].mMode == ASMIM_ABSOLUTE || mIns[i + 0].mMode == ASMIM_ZERO_PAGE) &&
|
||||||
|
(mIns[i + 3].mLive & LIVE_CPU_REG_C) == 0)
|
||||||
|
{
|
||||||
|
mIns[i + 0].mType = ASMIT_DEC;
|
||||||
|
mIns[i + 1].mType = ASMIT_NOP;
|
||||||
|
mIns[i + 2].mType = ASMIT_NOP;
|
||||||
|
mIns[i + 3].mType = ASMIT_LDA;
|
||||||
|
progress = true;
|
||||||
|
}
|
||||||
else if (mIns[i + 1].mType == ASMIT_LDA && mIns[i + 3].mType == ASMIT_STA && mIns[i + 1].SameEffectiveAddress(mIns[i + 3]) &&
|
else if (mIns[i + 1].mType == ASMIT_LDA && mIns[i + 3].mType == ASMIT_STA && mIns[i + 1].SameEffectiveAddress(mIns[i + 3]) &&
|
||||||
mIns[i + 0].mType == ASMIT_CLC && mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 1 &&
|
mIns[i + 0].mType == ASMIT_CLC && mIns[i + 2].mType == ASMIT_ADC && mIns[i + 2].mMode == ASMIM_IMMEDIATE && mIns[i + 2].mAddress == 1 &&
|
||||||
(mIns[i + 1].mMode == ASMIM_ABSOLUTE || mIns[i + 1].mMode == ASMIM_ZERO_PAGE) &&
|
(mIns[i + 1].mMode == ASMIM_ABSOLUTE || mIns[i + 1].mMode == ASMIM_ZERO_PAGE) &&
|
||||||
|
@ -11201,7 +11336,7 @@ void NativeCodeProcedure::Compile(InterCodeProcedure* proc)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void NativeCodeProcedure::MapFastParamsToTemps(void)
|
bool NativeCodeProcedure::MapFastParamsToTemps(void)
|
||||||
{
|
{
|
||||||
NumberSet used(256), modified(256), statics(256), pairs(256);
|
NumberSet used(256), modified(256), statics(256), pairs(256);
|
||||||
|
|
||||||
|
@ -11213,7 +11348,7 @@ void NativeCodeProcedure::MapFastParamsToTemps(void)
|
||||||
for (int i = BC_REG_TMP; i < 256; i++)
|
for (int i = BC_REG_TMP; i < 256; i++)
|
||||||
used -= i;
|
used -= i;
|
||||||
|
|
||||||
for (int i = BC_REG_FPARAMS; i < BC_REG_FPARAMS + 8; i++)
|
for (int i = BC_REG_FPARAMS; i < BC_REG_FPARAMS_END; i++)
|
||||||
if (!modified[i])
|
if (!modified[i])
|
||||||
statics += i;
|
statics += i;
|
||||||
|
|
||||||
|
@ -11222,7 +11357,7 @@ void NativeCodeProcedure::MapFastParamsToTemps(void)
|
||||||
alias[i] = 0;
|
alias[i] = 0;
|
||||||
|
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
mEntryBlock->FindZeroPageAlias(statics, used, alias);
|
mEntryBlock->FindZeroPageAlias(statics, used, alias, -1);
|
||||||
|
|
||||||
for (int i = 1; i < 256; i++)
|
for (int i = 1; i < 256; i++)
|
||||||
{
|
{
|
||||||
|
@ -11235,7 +11370,7 @@ void NativeCodeProcedure::MapFastParamsToTemps(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
mEntryBlock->RemapZeroPage(alias);
|
return mEntryBlock->RemapZeroPage(alias);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeCodeProcedure::Optimize(void)
|
void NativeCodeProcedure::Optimize(void)
|
||||||
|
@ -11243,7 +11378,7 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
#if 1
|
#if 1
|
||||||
int step = 0;
|
int step = 0;
|
||||||
|
|
||||||
bool changed;
|
bool changed, xmapped = false, ymapped = false;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
changed = false;
|
changed = false;
|
||||||
|
@ -11291,7 +11426,8 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
|
|
||||||
if (step == 2)
|
if (step == 2)
|
||||||
{
|
{
|
||||||
MapFastParamsToTemps();
|
if (MapFastParamsToTemps())
|
||||||
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (step > 2)
|
if (step > 2)
|
||||||
|
@ -11320,12 +11456,20 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
xregs[BC_REG_WORK + i] = -1;
|
xregs[BC_REG_WORK + i] = -1;
|
||||||
yregs[BC_REG_WORK + i] = -1;
|
yregs[BC_REG_WORK + i] = -1;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 8; i++)
|
|
||||||
|
if (!mInterProc->mLeafProcedure)
|
||||||
{
|
{
|
||||||
xregs[BC_REG_FPARAMS + i] = -1;
|
for (int i = BC_REG_FPARAMS; i < BC_REG_FPARAMS_END; i++)
|
||||||
yregs[BC_REG_FPARAMS + i] = -1;
|
{
|
||||||
|
xregs[i] = -1;
|
||||||
|
yregs[i] = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (xmapped)
|
||||||
|
xregs[0] = -1;
|
||||||
|
if (ymapped)
|
||||||
|
yregs[0] = -1;
|
||||||
|
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
mEntryBlock->GlobalRegisterXYCheck(xregs, yregs);
|
mEntryBlock->GlobalRegisterXYCheck(xregs, yregs);
|
||||||
|
@ -11339,7 +11483,10 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
{
|
{
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
mEntryBlock->GlobalRegisterXMap(j);
|
mEntryBlock->GlobalRegisterXMap(j);
|
||||||
|
if (j >= BC_REG_FPARAMS && j < BC_REG_FPARAMS_END)
|
||||||
|
mEntryBlock->mTrueJump->mIns.Insert(0, NativeCodeInstruction(ASMIT_LDX, ASMIM_ZERO_PAGE, j));
|
||||||
changed = true;
|
changed = true;
|
||||||
|
xmapped = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11353,7 +11500,10 @@ void NativeCodeProcedure::Optimize(void)
|
||||||
{
|
{
|
||||||
ResetVisited();
|
ResetVisited();
|
||||||
mEntryBlock->GlobalRegisterYMap(j);
|
mEntryBlock->GlobalRegisterYMap(j);
|
||||||
|
if (j >= BC_REG_FPARAMS && j < BC_REG_FPARAMS_END)
|
||||||
|
mEntryBlock->mTrueJump->mIns.Insert(0, NativeCodeInstruction(ASMIT_LDY, ASMIM_ZERO_PAGE, j));
|
||||||
changed = true;
|
changed = true;
|
||||||
|
ymapped = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -201,8 +201,8 @@ public:
|
||||||
bool ApplyEntryDataSet(void);
|
bool ApplyEntryDataSet(void);
|
||||||
|
|
||||||
void CollectZeroPageUsage(NumberSet& used, NumberSet& modified, NumberSet& pairs);
|
void CollectZeroPageUsage(NumberSet& used, NumberSet& modified, NumberSet& pairs);
|
||||||
void FindZeroPageAlias(const NumberSet& statics, NumberSet& invalid, uint8* alias);
|
void FindZeroPageAlias(const NumberSet& statics, NumberSet& invalid, uint8* alias, int accu);
|
||||||
void RemapZeroPage(const uint8* remap);
|
bool RemapZeroPage(const uint8* remap);
|
||||||
|
|
||||||
void GlobalRegisterXYCheck(int* xregs, int * yregs);
|
void GlobalRegisterXYCheck(int* xregs, int * yregs);
|
||||||
void GlobalRegisterXMap(int reg);
|
void GlobalRegisterXMap(int reg);
|
||||||
|
@ -238,7 +238,7 @@ class NativeCodeProcedure
|
||||||
|
|
||||||
void CompileInterBlock(InterCodeProcedure* iproc, InterCodeBasicBlock* iblock, NativeCodeBasicBlock*block);
|
void CompileInterBlock(InterCodeProcedure* iproc, InterCodeBasicBlock* iblock, NativeCodeBasicBlock*block);
|
||||||
|
|
||||||
void MapFastParamsToTemps(void);
|
bool MapFastParamsToTemps(void);
|
||||||
void CompressTemporaries(void);
|
void CompressTemporaries(void);
|
||||||
|
|
||||||
void BuildDataFlowSets(void);
|
void BuildDataFlowSets(void);
|
||||||
|
|
|
@ -75,7 +75,7 @@ int main(int argc, const char** argv)
|
||||||
DWORD length = ::GetModuleFileNameA(NULL, basePath, sizeof(basePath));
|
DWORD length = ::GetModuleFileNameA(NULL, basePath, sizeof(basePath));
|
||||||
|
|
||||||
#else
|
#else
|
||||||
printf("Starting oscar64 1.1.46\n");
|
printf("Starting oscar64 1.1.47\n");
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
uint32_t length = sizeof(basePath);
|
uint32_t length = sizeof(basePath);
|
||||||
|
|
|
@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,1,46,0
|
FILEVERSION 1,1,47,0
|
||||||
PRODUCTVERSION 1,1,46,0
|
PRODUCTVERSION 1,1,47,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -43,12 +43,12 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "oscar64"
|
VALUE "CompanyName", "oscar64"
|
||||||
VALUE "FileDescription", "oscar64 compiler"
|
VALUE "FileDescription", "oscar64 compiler"
|
||||||
VALUE "FileVersion", "1.1.46.0"
|
VALUE "FileVersion", "1.1.47.0"
|
||||||
VALUE "InternalName", "oscar64.exe"
|
VALUE "InternalName", "oscar64.exe"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2021"
|
VALUE "LegalCopyright", "Copyright (C) 2021"
|
||||||
VALUE "OriginalFilename", "oscar64.exe"
|
VALUE "OriginalFilename", "oscar64.exe"
|
||||||
VALUE "ProductName", "oscar64"
|
VALUE "ProductName", "oscar64"
|
||||||
VALUE "ProductVersion", "1.1.46.0"
|
VALUE "ProductVersion", "1.1.47.0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -14,6 +14,12 @@
|
||||||
"BackwardsCompatibleGUIDGeneration" = "8:TRUE"
|
"BackwardsCompatibleGUIDGeneration" = "8:TRUE"
|
||||||
"Hierarchy"
|
"Hierarchy"
|
||||||
{
|
{
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
|
"MsmKey" = "8:_03D7013B0D39A89CEA9D267005ADCE39"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
"MsmKey" = "8:_0D8B657E4A954DBFAF14055CDFFB384C"
|
"MsmKey" = "8:_0D8B657E4A954DBFAF14055CDFFB384C"
|
||||||
|
@ -40,6 +46,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_2CA3A525072974368303677563606FFE"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_317711E6E48744A18655469B4C53767E"
|
"MsmKey" = "8:_317711E6E48744A18655469B4C53767E"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -58,6 +70,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_3FA71395262A4AB4A1C2839FD6B91190"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_3FFD08277B804985BDF072C0C1877287"
|
"MsmKey" = "8:_3FFD08277B804985BDF072C0C1877287"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -82,6 +100,18 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_777CE896BB0B3C09C1B5FB6CB3BFE84F"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
|
"MsmKey" = "8:_7A40466D5E5D2D3FD71213A0C0AA5075"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_7EA67552E0B34B9BA70152AD9E369EA6"
|
"MsmKey" = "8:_7EA67552E0B34B9BA70152AD9E369EA6"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -130,6 +160,12 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_B2B920A649CF4027457BBAB004078A03"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_B4265CBF352343D2867DBCCE67D9F493"
|
"MsmKey" = "8:_B4265CBF352343D2867DBCCE67D9F493"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -148,12 +184,30 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_CD97BB2D0A3349FD86EE0058561FB8A7"
|
||||||
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_D0E45B48D76B4407B0BDE4378C1DB2C7"
|
"MsmKey" = "8:_D0E45B48D76B4407B0BDE4378C1DB2C7"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_DC9FDF52011EB7C47318682BA0B3F26F"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
|
"MsmKey" = "8:_DE2BF7C92569053E7C3DCE88AB7E2566"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_E218D776D9014F99BE2B046AEF2D6E8B"
|
"MsmKey" = "8:_E218D776D9014F99BE2B046AEF2D6E8B"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -190,12 +244,24 @@
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
|
||||||
|
"OwnerKey" = "8:_FB2E467BC172457785F4279BB0BFE8B6"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_EDDED74E9AC24D9C8C7811F3A20ACA53"
|
"MsmKey" = "8:_EDDED74E9AC24D9C8C7811F3A20ACA53"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
}
|
}
|
||||||
"Entry"
|
"Entry"
|
||||||
{
|
{
|
||||||
|
"MsmKey" = "8:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
||||||
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
}
|
||||||
|
"Entry"
|
||||||
|
{
|
||||||
"MsmKey" = "8:_F8F279E2317342BB8F6FD09FE8FE4EF5"
|
"MsmKey" = "8:_F8F279E2317342BB8F6FD09FE8FE4EF5"
|
||||||
"OwnerKey" = "8:_UNDEFINED"
|
"OwnerKey" = "8:_UNDEFINED"
|
||||||
"MsmSig" = "8:_UNDEFINED"
|
"MsmSig" = "8:_UNDEFINED"
|
||||||
|
@ -293,6 +359,26 @@
|
||||||
}
|
}
|
||||||
"File"
|
"File"
|
||||||
{
|
{
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_03D7013B0D39A89CEA9D267005ADCE39"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:VCRUNTIME140.dll"
|
||||||
|
"TargetName" = "8:VCRUNTIME140.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D8B657E4A954DBFAF14055CDFFB384C"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0D8B657E4A954DBFAF14055CDFFB384C"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\crt.c"
|
"SourcePath" = "8:..\\include\\crt.c"
|
||||||
|
@ -373,6 +459,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2CA3A525072974368303677563606FFE"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:api-ms-win-crt-heap-l1-1-0.dll"
|
||||||
|
"TargetName" = "8:api-ms-win-crt-heap-l1-1-0.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_317711E6E48744A18655469B4C53767E"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_317711E6E48744A18655469B4C53767E"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\math.c"
|
"SourcePath" = "8:..\\include\\math.c"
|
||||||
|
@ -433,6 +539,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FA71395262A4AB4A1C2839FD6B91190"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
|
||||||
|
"TargetName" = "8:api-ms-win-crt-stdio-l1-1-0.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FFD08277B804985BDF072C0C1877287"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3FFD08277B804985BDF072C0C1877287"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\assert.c"
|
"SourcePath" = "8:..\\include\\assert.c"
|
||||||
|
@ -513,6 +639,46 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_777CE896BB0B3C09C1B5FB6CB3BFE84F"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
|
||||||
|
"TargetName" = "8:api-ms-win-crt-filesystem-l1-1-0.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7A40466D5E5D2D3FD71213A0C0AA5075"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:api-ms-win-crt-locale-l1-1-0.dll"
|
||||||
|
"TargetName" = "8:api-ms-win-crt-locale-l1-1-0.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7EA67552E0B34B9BA70152AD9E369EA6"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7EA67552E0B34B9BA70152AD9E369EA6"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\c64\\joystick.h"
|
"SourcePath" = "8:..\\include\\c64\\joystick.h"
|
||||||
|
@ -673,6 +839,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B2B920A649CF4027457BBAB004078A03"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:api-ms-win-crt-math-l1-1-0.dll"
|
||||||
|
"TargetName" = "8:api-ms-win-crt-math-l1-1-0.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B4265CBF352343D2867DBCCE67D9F493"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B4265CBF352343D2867DBCCE67D9F493"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\c64\\joystick.c"
|
"SourcePath" = "8:..\\include\\c64\\joystick.c"
|
||||||
|
@ -733,6 +919,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CD97BB2D0A3349FD86EE0058561FB8A7"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:..\\include\\c64\\charwin.c"
|
||||||
|
"TargetName" = "8:charwin.c"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_247D4CAD3CB843B3A8A4DC2D90F47C28"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:FALSE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D0E45B48D76B4407B0BDE4378C1DB2C7"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D0E45B48D76B4407B0BDE4378C1DB2C7"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\stdlib.h"
|
"SourcePath" = "8:..\\include\\stdlib.h"
|
||||||
|
@ -753,6 +959,46 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DC9FDF52011EB7C47318682BA0B3F26F"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:api-ms-win-crt-string-l1-1-0.dll"
|
||||||
|
"TargetName" = "8:api-ms-win-crt-string-l1-1-0.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DE2BF7C92569053E7C3DCE88AB7E2566"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
|
||||||
|
"TargetName" = "8:api-ms-win-crt-runtime-l1-1-0.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E218D776D9014F99BE2B046AEF2D6E8B"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E218D776D9014F99BE2B046AEF2D6E8B"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\stdlib.c"
|
"SourcePath" = "8:..\\include\\stdlib.c"
|
||||||
|
@ -873,6 +1119,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EA3C0BCB01F2639DFA2E37EC8436E5F6"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:VERSION.dll"
|
||||||
|
"TargetName" = "8:VERSION.dll"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_607E75AF0E2A4CB9908C4C39DF8FE6E4"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:TRUE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EDDED74E9AC24D9C8C7811F3A20ACA53"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_EDDED74E9AC24D9C8C7811F3A20ACA53"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\stdio.c"
|
"SourcePath" = "8:..\\include\\stdio.c"
|
||||||
|
@ -893,6 +1159,26 @@
|
||||||
"IsDependency" = "11:FALSE"
|
"IsDependency" = "11:FALSE"
|
||||||
"IsolateTo" = "8:"
|
"IsolateTo" = "8:"
|
||||||
}
|
}
|
||||||
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F35970F9D8FA46B09F36D7E9DE5532CA"
|
||||||
|
{
|
||||||
|
"SourcePath" = "8:..\\include\\c64\\charwin.h"
|
||||||
|
"TargetName" = "8:charwin.h"
|
||||||
|
"Tag" = "8:"
|
||||||
|
"Folder" = "8:_247D4CAD3CB843B3A8A4DC2D90F47C28"
|
||||||
|
"Condition" = "8:"
|
||||||
|
"Transitive" = "11:FALSE"
|
||||||
|
"Vital" = "11:TRUE"
|
||||||
|
"ReadOnly" = "11:FALSE"
|
||||||
|
"Hidden" = "11:FALSE"
|
||||||
|
"System" = "11:FALSE"
|
||||||
|
"Permanent" = "11:FALSE"
|
||||||
|
"SharedLegacy" = "11:FALSE"
|
||||||
|
"PackageAs" = "3:1"
|
||||||
|
"Register" = "3:1"
|
||||||
|
"Exclude" = "11:FALSE"
|
||||||
|
"IsDependency" = "11:FALSE"
|
||||||
|
"IsolateTo" = "8:"
|
||||||
|
}
|
||||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F8F279E2317342BB8F6FD09FE8FE4EF5"
|
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F8F279E2317342BB8F6FD09FE8FE4EF5"
|
||||||
{
|
{
|
||||||
"SourcePath" = "8:..\\include\\time.c"
|
"SourcePath" = "8:..\\include\\time.c"
|
||||||
|
@ -1002,15 +1288,15 @@
|
||||||
{
|
{
|
||||||
"Name" = "8:Microsoft Visual Studio"
|
"Name" = "8:Microsoft Visual Studio"
|
||||||
"ProductName" = "8:oscar64"
|
"ProductName" = "8:oscar64"
|
||||||
"ProductCode" = "8:{D9384A3A-0824-4B69-BB39-AD285E447E21}"
|
"ProductCode" = "8:{EA556725-C618-4DCA-8731-FE0EF6CF6D7F}"
|
||||||
"PackageCode" = "8:{5A2AEDDB-CA52-4E07-AAED-2D8E2FB82314}"
|
"PackageCode" = "8:{619DBA8C-9505-41A7-89E6-83338C010CCE}"
|
||||||
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
|
"UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}"
|
||||||
"AspNetVersion" = "8:2.0.50727.0"
|
"AspNetVersion" = "8:2.0.50727.0"
|
||||||
"RestartWWWService" = "11:FALSE"
|
"RestartWWWService" = "11:FALSE"
|
||||||
"RemovePreviousVersions" = "11:TRUE"
|
"RemovePreviousVersions" = "11:TRUE"
|
||||||
"DetectNewerInstalledVersion" = "11:TRUE"
|
"DetectNewerInstalledVersion" = "11:TRUE"
|
||||||
"InstallAllUsers" = "11:FALSE"
|
"InstallAllUsers" = "11:FALSE"
|
||||||
"ProductVersion" = "8:1.1.46"
|
"ProductVersion" = "8:1.1.47"
|
||||||
"Manufacturer" = "8:oscar64"
|
"Manufacturer" = "8:oscar64"
|
||||||
"ARPHELPTELEPHONE" = "8:"
|
"ARPHELPTELEPHONE" = "8:"
|
||||||
"ARPHELPLINK" = "8:"
|
"ARPHELPLINK" = "8:"
|
||||||
|
|
Loading…
Reference in New Issue