mirror of
https://github.com/prirun/p50em.git
synced 2026-02-26 16:23:28 +00:00
Changes for gcc on OSX 10.6, cross compile on Intel
This commit is contained in:
2
ea64v.h
2
ea64v.h
@@ -49,7 +49,7 @@ static inline ea_t ea64v (unsigned short inst, ea_t earp) {
|
||||
|
||||
opcode = ((inst & 036000) != 032000) ? ((inst & 036000) >> 4) : ((inst & 076000) >> 4);
|
||||
opcode |= ((inst >> 2) & 3); /* opcode extension */
|
||||
TRACE(T_EAV, " new opcode=%5#0o, y=%d, br=%d, ixy=%d, xok=%d\n", opcode, (y != 0), br, ixy, xok);
|
||||
TRACE(T_EAV, " new opcode=%#05o, y=%d, br=%d, ixy=%d, xok=%d\n", opcode, (y != 0), br, ixy, xok);
|
||||
#endif
|
||||
|
||||
ea_s = crs[PBH+br*2] | (ea_s & RINGMASK16);
|
||||
|
||||
34
em.c
34
em.c
@@ -741,7 +741,7 @@ int readlicense(int first) {
|
||||
bcopy((char *)newlicense.rserver->h_addr, (char *)&raddr.sin_addr.s_addr, newlicense.rserver->h_length);
|
||||
license = newlicense;
|
||||
if (first)
|
||||
printf("License id: %08x server %s [%s:%d]\n", license.id, license.server, inet_ntoa(raddr.sin_addr.s_addr), license.sport);
|
||||
printf("License id: %08x server %s [%s:%d]\n", license.id, license.server, (char *) inet_ntoa(raddr.sin_addr.s_addr), license.sport);
|
||||
|
||||
#endif
|
||||
return 1;
|
||||
@@ -1027,7 +1027,7 @@ static pa_t mapva(ea_t ea, ea_t rp, short intacc, unsigned short *access) {
|
||||
*(stlbp->pmep) &= ~020000; /* reset unmodified bit in memory */
|
||||
}
|
||||
pa = stlbp->ppa | (ea & 0x3FF);
|
||||
TRACE(T_MAP," for ea %o/%o, iacc=%d, stlbix=%d, pa=%o loaded at #%d\n", ea>>16, ea&0xffff, intacc, stlbix, pa, stlbp->load_ic);
|
||||
TRACE(T_MAP," for ea %o/%o, iacc=%d, stlbix=%d, pa=%o loaded at #%lu\n", ea>>16, ea&0xffff, intacc, stlbix, pa, stlbp->load_ic);
|
||||
} else {
|
||||
pa = ea;
|
||||
}
|
||||
@@ -1796,7 +1796,7 @@ static int (*devmap[64])(int, int, int) = {
|
||||
|
||||
|
||||
static void warn(char *msg) {
|
||||
printf("emulator warning:\n instruction #%d at %o/%o: %o %o keys=%o, modals=%o\n %s\n", gvp->instcount, gvp->prevpc >> 16, gvp->prevpc & 0xFFFF, get16t(gvp->prevpc), get16t(gvp->prevpc+1),crs[KEYS], crs[MODALS], msg);
|
||||
printf("emulator warning:\n instruction #%lu at %o/%o: %o %o keys=%o, modals=%o\n %s\n", gvp->instcount, gvp->prevpc >> 16, gvp->prevpc & 0xFFFF, get16t(gvp->prevpc), get16t(gvp->prevpc+1),crs[KEYS], crs[MODALS], msg);
|
||||
}
|
||||
|
||||
|
||||
@@ -1833,7 +1833,7 @@ static void fatal(char *msg) {
|
||||
printf("Fatal error");
|
||||
if (msg)
|
||||
printf(": %s", msg);
|
||||
printf("\ninstruction #%d at %o/%o %s: %o %o\nA='%o/%d B='%o/%d L='%o/%d X=%o/%d\nowner=%o %s, keys=%o, modals=%o\n", gvp->instcount, gvp->prevpc >> 16, gvp->prevpc & 0xFFFF, searchloadmap(gvp->prevpc,' '), get16t(gvp->prevpc), get16t(gvp->prevpc+1), crs[A], *(short *)(crs+A), crs[B], *(short *)(crs+B), *(unsigned int *)(crs+A), *(int *)(crs+A), crs[X], *(short *)(crs+X), crs[OWNERL], searchloadmap(*(unsigned int *)(crs+OWNER),' '), crs[KEYS], crs[MODALS]);
|
||||
printf("\ninstruction #%lu at %o/%o %s: %o %o\nA='%o/%d B='%o/%d L='%o/%d X=%o/%d\nowner=%o %s, keys=%o, modals=%o\n", gvp->instcount, gvp->prevpc >> 16, gvp->prevpc & 0xFFFF, searchloadmap(gvp->prevpc,' '), get16t(gvp->prevpc), get16t(gvp->prevpc+1), crs[A], *(short *)(crs+A), crs[B], *(short *)(crs+B), *(unsigned int *)(crs+A), *(int *)(crs+A), crs[X], *(short *)(crs+X), crs[OWNERL], searchloadmap(*(unsigned int *)(crs+OWNER),' '), crs[KEYS], crs[MODALS]);
|
||||
|
||||
/* dump concealed stack entries */
|
||||
|
||||
@@ -1948,7 +1948,7 @@ static void fault(unsigned short fvec, unsigned short fcode, ea_t faddr) {
|
||||
faultnamep = faultname[fvec-FIRSTFAULT];
|
||||
else
|
||||
faultnamep = faultname[LASTFAULT-FIRSTFAULT+1];
|
||||
TRACE(T_FAULT, "#%d: fault '%o (%s), fcode=%o, faddr=%o/%o, faultrp=%o/%o\n", gvp->instcount, fvec, faultnamep, fcode, faddr>>16, faddr&0xFFFF, faultrp>>16, faultrp&0xFFFF);
|
||||
TRACE(T_FAULT, "#%lu: fault '%o (%s), fcode=%o, faddr=%o/%o, faultrp=%o/%o\n", gvp->instcount, fvec, faultnamep, fcode, faddr>>16, faddr&0xFFFF, faultrp>>16, faultrp&0xFFFF);
|
||||
|
||||
if (crs[MODALS] & 010) { /* process exchange is enabled */
|
||||
ring = (RPH>>13) & 3; /* save current ring */
|
||||
@@ -2020,7 +2020,7 @@ static void fault(unsigned short fvec, unsigned short fcode, ea_t faddr) {
|
||||
RP = m; /* NOTE: changes RP(segno) to segment 0 */
|
||||
INCRP;
|
||||
} else {
|
||||
printf("#%d: fault '%o, fcode=%o, faddr=%o/%o, faultrp=%o/%o\n", gvp->instcount, fvec, fcode, faddr>>16, faddr&0xFFFF, faultrp>>16, faultrp&0xFFFF);
|
||||
printf("#%lu: fault '%o, fcode=%o, faddr=%o/%o, faultrp=%o/%o\n", gvp->instcount, fvec, fcode, faddr>>16, faddr&0xFFFF, faultrp>>16, faultrp&0xFFFF);
|
||||
fatal("Fault vector is zero, process exchange is disabled.");
|
||||
}
|
||||
}
|
||||
@@ -2186,7 +2186,7 @@ special:
|
||||
|
||||
opcode = ((inst & 036000) != 032000) ? ((inst & 036000) >> 4) : ((inst & 076000) >> 4);
|
||||
opcode |= ((inst >> 2) & 3); /* opcode extension */
|
||||
TRACE(T_EAR, " special, new opcode=%5#0o, class=%d\n", opcode, class);
|
||||
TRACE(T_EAR, " special, new opcode=%#05o, class=%d\n", opcode, class);
|
||||
#endif
|
||||
|
||||
if (class < 2) { /* class 0/1 */
|
||||
@@ -3655,7 +3655,7 @@ static nfy(unsigned short inst) {
|
||||
pcbp = MAKEVA(crs[OWNERH], bol);
|
||||
utempl = get32r0(pcbp+PCBWAIT);
|
||||
if (utempl != ea) {
|
||||
printf("NFY: bol=%o, pcb waiting on %o/%o != ea %o/%o\n", utempl>>16, utempl&0xFFFF, ea>>16, ea&0xFFFF);
|
||||
printf("NFY: bol=%o, pcb waiting on %o/%o != ea %o/%o\n", bol, utempl>>16, utempl&0xFFFF, ea>>16, ea&0xFFFF);
|
||||
fatal(NULL);
|
||||
}
|
||||
bol = get16r0(pcbp+PCBLINK); /* get new beginning of wait list */
|
||||
@@ -4331,14 +4331,14 @@ main (int argc, char **argv) {
|
||||
/* initialize global variables */
|
||||
|
||||
if (sizeof(gv) > 16*1024)
|
||||
printf("em: size of global vars = %d\n", sizeof(gv));
|
||||
printf("em: size of global vars = %lu\n", sizeof(gv));
|
||||
|
||||
gvp = &gv;
|
||||
gvp->physmem = physmem;
|
||||
gvp->intvec = -1;
|
||||
gvp->instcount = 0;
|
||||
gvp->inhcount = 0;
|
||||
gvp->instpermsec = 2000;
|
||||
gvp->instpermsec = 15000;
|
||||
gvp->livereglim = 040;
|
||||
gvp->mapvacalls = 0;
|
||||
gvp->mapvamisses = 0;
|
||||
@@ -4945,7 +4945,7 @@ fetch:
|
||||
|
||||
crs[TIMER]++;
|
||||
if (crs[TIMER] == 0) {
|
||||
TRACE(T_PX, "#%d: pcb %o timer overflow\n", gvp->instcount, crs[OWNERL]);
|
||||
TRACE(T_PX, "#%lu: pcb %o timer overflow\n", gvp->instcount, crs[OWNERL]);
|
||||
ea = *(ea_t *)(crs+OWNER);
|
||||
m = get16r0(ea+4) | 1; /* set process abort flag */
|
||||
put16r0(m, ea+4);
|
||||
@@ -5068,7 +5068,7 @@ xec:
|
||||
gvp->traceflags = 0;
|
||||
#endif
|
||||
|
||||
TRACE(T_FLOW, "\n #%u [%s %o] IT=%d SB: %o/%o LB: %o/%o %s XB: %o/%o\n%o/%o: %o A='%o/%:0d B='%o/%d L='%o/%d E='%o/%d X=%o/%d Y=%o/%d%s%s%s%s K=%o M=%o\n", gvp->instcount, searchloadmap(*(unsigned int *)(crs+OWNER),'x'), crs[OWNERL], *(short *)(crs+TIMER), crs[SBH], crs[SBL], crs[LBH], crs[LBL], searchloadmap(*(unsigned int *)(crs+LBH),'l'), crs[XBH], crs[XBL], RPH, RPL-1, inst, crs[A], *(short *)(crs+A), crs[B], *(short *)(crs+B), *(unsigned int *)(crs+L), *(int *)(crs+L), *(unsigned int *)(crs+E), *(int *)(crs+E), crs[X], *(short *)(crs+X), crs[Y], *(short *)(crs+Y), (crs[KEYS]&0100000)?" C":"", (crs[KEYS]&020000)?" L":"", (crs[KEYS]&0200)?" LT":"", (crs[KEYS]&0100)?" EQ":"", crs[KEYS], crs[MODALS]);
|
||||
TRACE(T_FLOW, "\n #%lu [%s %o] IT=%d SB: %o/%o LB: %o/%o %s XB: %o/%o\n%o/%o: %o A='%o/%u B='%o/%d L='%o/%d E='%o/%d X=%o/%d Y=%o/%d%s%s%s%s K=%o M=%o\n", gvp->instcount, searchloadmap(*(unsigned int *)(crs+OWNER),'x'), crs[OWNERL], *(short *)(crs+TIMER), crs[SBH], crs[SBL], crs[LBH], crs[LBL], searchloadmap(*(unsigned int *)(crs+LBH),'l'), crs[XBH], crs[XBL], RPH, RPL-1, inst, crs[A], *(short *)(crs+A), crs[B], *(short *)(crs+B), *(unsigned int *)(crs+L), *(int *)(crs+L), *(unsigned int *)(crs+E), *(int *)(crs+E), crs[X], *(short *)(crs+X), crs[Y], *(short *)(crs+Y), (crs[KEYS]&0100000)?" C":"", (crs[KEYS]&020000)?" L":"", (crs[KEYS]&0200)?" LT":"", (crs[KEYS]&0100)?" EQ":"", crs[KEYS], crs[MODALS]);
|
||||
|
||||
/* begin instruction decode: generic? */
|
||||
|
||||
@@ -5101,7 +5101,7 @@ xec:
|
||||
x=1, opcode='15 03 -> jsx (RV) (aka '35 03)
|
||||
*/
|
||||
|
||||
TRACE(T_EAR|T_EAV, " opcode=%5#0o, i=%o, x=%o\n", ((inst & 036000) != 032000) ? ((inst & 036000) >> 4) : ((inst & 076000) >> 4), inst & 0100000, ((inst & 036000) != 032000) ? (inst & 040000) : 0);
|
||||
TRACE(T_EAR|T_EAV, " opcode=%#05o, i=%o, x=%o\n", ((inst & 036000) != 032000) ? ((inst & 036000) >> 4) : ((inst & 076000) >> 4), inst & 0100000, ((inst & 036000) != 032000) ? (inst & 040000) : 0);
|
||||
|
||||
if ((crs[KEYS] & 016000) == 014000) { /* 64V mode */
|
||||
ea = ea64v(inst, earp);
|
||||
@@ -7390,7 +7390,7 @@ d_smcs: /* 0101200 */
|
||||
|
||||
d_badgen:
|
||||
TRACEA(" unrecognized generic instruction!\n");
|
||||
printf("em: #%d %o/%o: Unrecognized generic instruction '%o!\n", gvp->instcount, RPH, RPL, inst);
|
||||
printf("em: #%lu %o/%o: Unrecognized generic instruction '%o!\n", gvp->instcount, RPH, RPL, inst);
|
||||
//gvp->traceflags = ~T_MAP;
|
||||
fault(UIIFAULT, RPL, RP);
|
||||
fatal(NULL);
|
||||
@@ -8404,7 +8404,7 @@ imode:
|
||||
case 011:
|
||||
TRACE(T_FLOW, " LH\n");
|
||||
if (*(int *)&ea < 0) {
|
||||
TRACE(T_FLOW, " ea=%x, immu32=%x, crsl[%d]=%x\n", ea, immu32, dr, crsl[dr]);
|
||||
TRACE(T_FLOW, " ea=%x, immu32=%lx, crsl[%d]=%x\n", ea, immu32, dr, crsl[dr]);
|
||||
crs[dr*2] = immu32 >> 16;
|
||||
} else
|
||||
crs[dr*2] = get16(ea);
|
||||
@@ -8902,7 +8902,7 @@ imode:
|
||||
case 1:
|
||||
imodepcl:
|
||||
stopwatch_push(&sw_pcl);
|
||||
TRACE(T_FLOW|T_PCL, "#%d %o/%:0o: PCL %o/%o %s\n", gvp->instcount, RPH, RPL-2, ea>>16, ea&0xFFFF, searchloadmap(ea, 'e'));
|
||||
TRACE(T_FLOW|T_PCL, "#%lu %o/%0o: PCL %o/%o %s\n", gvp->instcount, RPH, RPL-2, ea>>16, ea&0xFFFF, searchloadmap(ea, 'e'));
|
||||
if (gvp->numtraceprocs > 0 && TRACEUSER)
|
||||
for (i=0; i<gvp->numtraceprocs; i++)
|
||||
if (traceprocs[i].ecb == (ea & 0xFFFFFFF) && traceprocs[i].sb == -1) {
|
||||
@@ -9002,7 +9002,7 @@ imodepcl:
|
||||
case 055:
|
||||
if (*(int *)&ea < 0) {
|
||||
TRACE(T_FLOW, " ACP\n");
|
||||
TRACE(T_INST, " before acp, crsl[%d]=%o/%o, immu32=%d, CP(dr)=%d\n", dr, crsl[dr]>>16, crsl[dr]&0xFFFF, immu32, EACP(crsl[dr]));
|
||||
TRACE(T_INST, " before acp, crsl[%d]=%o/%o, immu32=%lu, CP(dr)=%d\n", dr, crsl[dr]>>16, crsl[dr]&0xFFFF, immu32, EACP(crsl[dr]));
|
||||
utempl = EACP(crsl[dr]);
|
||||
utempl += *(int *)&immu32;
|
||||
crsl[dr] = CPEA(crsl[dr], utempl);
|
||||
|
||||
11
emdev.h
11
emdev.h
@@ -472,7 +472,7 @@ readasr:
|
||||
}
|
||||
} else if (n == 1) {
|
||||
if (!(crs[MODALS] & 010) && (ch == '')) {
|
||||
printf("\nRebooting at instruction #%d\n", gvp->instcount);
|
||||
printf("\nRebooting at instruction #%lu\n", gvp->instcount);
|
||||
// gvp->savetraceflags = ~T_MAP; /****/
|
||||
longjmp(bootjmp, 1);
|
||||
}
|
||||
@@ -482,9 +482,9 @@ readasr:
|
||||
if (gvp->savetraceflags == 0) {
|
||||
TRACEA("\nTRACE ENABLED:\n\n");
|
||||
gvp->savetraceflags = ~T_MAP;
|
||||
gvp->savetraceflags = T_FLOW|T_FAULT;
|
||||
gvp->savetraceflags = T_GET;
|
||||
gvp->savetraceflags = ~0;
|
||||
gvp->savetraceflags = T_FLOW|T_FAULT;
|
||||
} else {
|
||||
TRACEA("\nTRACE DISABLED:\n\n");
|
||||
gvp->savetraceflags = 0;
|
||||
@@ -731,7 +731,7 @@ readerr:
|
||||
if (n < 4) {
|
||||
fprintf(stderr," only read %d bytes for reclen\n", n);
|
||||
fmterr:
|
||||
fprintf(stderr," TAP format error at position %d\n", lseek(fd, 0, SEEK_CUR));
|
||||
fprintf(stderr," TAP format error at position %u\n", (unsigned int) lseek(fd, 0, SEEK_CUR));
|
||||
*mtstat |= 0x200; /* raw error */
|
||||
return 0;
|
||||
}
|
||||
@@ -1175,7 +1175,7 @@ int devmt (int class, int func, int device) {
|
||||
dmcpair = get32io(dmxreg); /* fetch begin/end pair */
|
||||
dmxaddr = dmcpair>>16;
|
||||
dmxnw = (dmcpair & 0xffff) - dmxaddr + 1;
|
||||
TRACE(T_INST|T_TIO, " DMC channels: ['%o]='%o, ['%o]='%o, nwords=%d", dmxreg, dmxaddr, dmxreg+1, (dmcpair & 0xffff), dmxnw);
|
||||
TRACE(T_INST|T_TIO, " DMC channels: ['%o]='%o, ['%o]='%o, nwords=%d", dmxreg, dmxaddr, dmxreg+1, (unsigned int) (dmcpair & 0xffff), dmxnw);
|
||||
} else { /* DMA */
|
||||
dmxreg = dmxreg << 1;
|
||||
dmxnw = regs.sym.regdmx[dmxreg];
|
||||
@@ -1631,7 +1631,7 @@ int globdisk (char *devfile, int size, int device, int unit) {
|
||||
return -1;
|
||||
}
|
||||
if (g.gl_pathc != 1) {
|
||||
fprintf(stderr,"globdisk: %d matches for %s\n", g.gl_pathc, devfile);
|
||||
fprintf(stderr,"globdisk: %d matches for %s\n", (int) g.gl_pathc, devfile);
|
||||
return -1;
|
||||
}
|
||||
strncpy(devfile, g.gl_pathv[0], size);
|
||||
@@ -2304,7 +2304,6 @@ int devamlc (int class, int func, int device) {
|
||||
31,000 chars per second. This rate may be further boosted if
|
||||
there are lines DMQ buffers with 255 or more characters. */
|
||||
|
||||
#define AMLCPOLL 50
|
||||
#define AMLCPOLL 100
|
||||
|
||||
/* DSSCOUNTDOWN is the number of carrier status requests that should
|
||||
|
||||
25
makefile
25
makefile
@@ -1,30 +1,41 @@
|
||||
# makefile to create various emulator builds
|
||||
# Targets: em debug hobby dongle lmserver
|
||||
# Targets: em debug trace hobby dongle lmserver magrst
|
||||
# Note: -arch ppc requires /Developer/SDKs/MacOSX10.4u.sdk
|
||||
|
||||
em:
|
||||
cc -DNOTRACE -DFAST -DNOMEM -O -c em.c -fobey-inline -mdynamic-no-pic -I../dongle/mx/ppc/api;g++ -o em em.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
cc -arch ppc -DNOTRACE -DFAST -DNOMEM -O -c em.c -fobey-inline -mdynamic-no-pic -I../dongle/mx/ppc/api;g++ -arch ppc -o em em.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
strip em
|
||||
rm em.o
|
||||
|
||||
|
||||
debug:
|
||||
cc -DNOREGS -g -O0 -DNOTRACE -DFAST -DNOMEM -c em.c -fobey-inline -mdynamic-no-pic -I../dongle/mx/ppc/api;g++ -o em em.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
cc -arch ppc -DNOREGS -g -O0 -DNOTRACE -DFAST -DNOMEM -c em.c -fobey-inline -mdynamic-no-pic -I../dongle/mx/ppc/api;g++ -arch ppc -o em em.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
rm em.o
|
||||
|
||||
|
||||
trace:
|
||||
cc -arch ppc -DNOREGS -g -O0 -DFAST -DNOMEM -c em.c -fobey-inline -mdynamic-no-pic -I../dongle/mx/ppc/api;g++ -arch ppc -o em em.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
rm em.o
|
||||
|
||||
|
||||
fixed:
|
||||
cc -arch ppc -DFIXEDCLOCK -DNOIDLE -DNOREGS -g -O0 -DFAST -DNOMEM -c em.c -fobey-inline -mdynamic-no-pic -I../dongle/mx/ppc/api;g++ -arch ppc -o em em.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
rm em.o
|
||||
|
||||
|
||||
hobby:
|
||||
cc -DHOBBY -DNOTRACE -DFAST -O em.c -fobey-inline -mdynamic-no-pic -o em
|
||||
cc -arch ppc -DHOBBY -DNOTRACE -DFAST -O em.c -fobey-inline -mdynamic-no-pic -o em
|
||||
strip em
|
||||
|
||||
|
||||
dongle:
|
||||
cc -c dongle.c -I../dongle/mx/ppc/api;g++ -o dongle dongle.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
cc -arch ppc -c dongle.c -I../dongle/mx/ppc/api;g++ -arch ppc -o dongle dongle.o ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
rm dongle.o
|
||||
|
||||
|
||||
lmserver:
|
||||
cc -c lmserver.c -I../dongle/mx/ppc/api;g++ lmserver.o -o lmserver ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
cc -arch ppc -c lmserver.c -I../dongle/mx/ppc/api;g++ -arch ppc lmserver.o -o lmserver ../dongle/mx/ppc/api/libmxmac260.a -framework IOKit -framework CoreFoundation
|
||||
rm lmserver.o
|
||||
|
||||
magrst:
|
||||
cc -o magrst magrst.c istext.c
|
||||
cc -arch ppc -o magrst magrst.c istext.c
|
||||
|
||||
Reference in New Issue
Block a user