Compare commits

...

3 Commits

Author SHA1 Message Date
Ada Gottensträter abf969f43e Fix serial input spam when no terminal on stdin 2022-10-09 22:41:15 +02:00
Ada Gottensträter 3499f9c879 Optimize some more 2022-04-20 17:57:06 +02:00
Ada Gottensträter 6b3f7c1a6a Fix some bugs and compiler warnings 2022-03-29 19:45:31 +02:00
7 changed files with 22 additions and 28 deletions

View File

@ -38,7 +38,7 @@ OBJECTS = $(patsubst %,$(BUILD)/%, $(SOURCES:.c=.o))
# commented them out for the time being
#LDFLAGS = -Wl,--relax -Wl,--gc-sections
LDFLAGS = -lm
OPT := -O3 -flto -fno-fat-lto-objects
OPT := -O3 -flto -fno-fat-lto-objects -march=native
CFLAGS = -c -g -Wall -Wno-format $(OPT) -D LINUX
all: directory $(SOURCES) $(OBJECTS) Makefile

View File

@ -24,7 +24,7 @@ extern int32_t baudrate;
extern int32_t eeprom;
extern char *hubram;
extern int32_t printbreak;
extern PasmVarsT PasmVars[8];
extern PasmVarsT PasmVars[16];
extern SerialT serial_in;
extern SerialT serial_out;
@ -247,7 +247,7 @@ int32_t RunProp(int32_t maxloops)
while (runflag && (maxloops < 0 || loopcount < maxloops))
{
runflag = step_chip();
CheckCommand();
//CheckCommand();
if (baudrate)
{
CheckSerialOut(&serial_out);

2
gdb.c
View File

@ -19,7 +19,7 @@
extern FILE *logfile;
extern FILE *tracefile;
extern FILE *cmdfile;
extern PasmVarsT PasmVars[8];
extern PasmVarsT PasmVars[16];
extern char *hubram;
char cmd[1028];
extern int32_t profile;

View File

@ -11,7 +11,7 @@ extern char *hubram;
extern int32_t memsize;
extern char lockstate[16];
extern char lockalloc[16];
extern PasmVarsT PasmVars[8];
extern PasmVarsT PasmVars[16];
extern int32_t pasmspin;
extern int32_t cycleaccurate;
extern int32_t loopcount;
@ -28,12 +28,16 @@ void PrintResults(int32_t zcri, int32_t zflag, int32_t cflag, int32_t result)
static int32_t parity(int32_t val)
{
#if 0
val ^= val >> 16;
val ^= val >> 8;
val ^= val >> 4;
val ^= val >> 2;
val ^= val >> 1;
return val & 1;
#else
return __builtin_parity(val);
#endif
}
static int32_t abs(int32_t val)

View File

@ -56,12 +56,12 @@ static int wrl_flags1 = 0;
static int rdl_flags0 = 0;
static int rdl_flags1 = 0;
char *GetOpname2(unsigned int, int *, int *, int *);
char *GetOpname2(unsigned int, int *, int *, int *, int);
static void NotImplemented(int instruction)
{
int dummy;
char *opname = GetOpname2(instruction, &dummy, &dummy, &dummy);
char *opname = GetOpname2(instruction, &dummy, &dummy, &dummy,0);
printf("%s%s not implemented - %8.8x%s", NEW_LINE, opname, instruction, NEW_LINE);
spinsim_exit(1);
}
@ -2641,13 +2641,13 @@ int32_t ExecutePasmInstruction2(PasmVarsT *pasmvars)
if (value2 >= 0xfff80 && value2 < 0xfffc0)
wrl_flags0 |= 1 << ((value2 >> 2) & 15);
result = read_unaligned_long(value2);
if ((value1 & 0xff) != 0xff)
if (value1 & 0xff)
result = (result & ~0xff) | (value1 & 0xff);
if ((value1 & 0xff) != 0xff00)
if (value1 & 0xff00)
result = (result & ~0xff00) | (value1 & 0xff00);
if ((value1 & 0xff) != 0xff0000)
if (value1 & 0xff0000)
result = (result & ~0xff0000) | (value1 & 0xff0000);
if ((value1 & 0xff) != 0xff000000)
if (value1 & 0xff000000)
result = (result & ~0xff000000) | (value1 & 0xff000000);
write_unaligned_long(value2, result);
if (pasmvars->printflag > 1)
@ -3618,7 +3618,7 @@ int32_t ExecutePasmInstruction2(PasmVarsT *pasmvars)
case 43: // pop
pasmvars->retptr = (pasmvars->retptr - 1) & 7;
pasmvars->retstack[pasmvars->retptr] = value1;
result = pasmvars->retstack[pasmvars->retptr];
if (pasmvars->retptr == 7)
printf("return stack underflow%s", NEW_LINE);
break;

View File

@ -14,7 +14,7 @@
#include "spinsim.h"
extern int32_t printflag;
extern PasmVarsT PasmVars[8];
extern PasmVarsT PasmVars[16];
extern char *hubram;
extern int32_t memsize;
extern int32_t loopcount;
@ -37,21 +37,10 @@ int32_t MAP_ADDR(int32_t addr)
{
if ((addr & 0xfffffff0) == 0x12340000)
{
addr = memsize + (addr & 15);
}
else if (memsize == 65536)
{
addr &= 0xffff;
}
else if (((uint32_t)addr) >= memsize)
{
#if 0
fprintf(tracefile, "MAP_ADDR(%d): address out of bounds %8.8x\n", loopcount, addr);
addr = memsize + 12;
#else
addr &= memsize - 1;
#endif
}
addr = memsize + (addr & 15);
} else {
addr &= memsize - 1;
}
//fprintf(tracefile, "MAP_ADDR: %8.8x %8.8x\n", addr, ((uint32_t *)hubram)[addr>>2]);
return addr;

View File

@ -525,6 +525,7 @@ int CheckSerialIn(SerialT *serial)
value = getch();
//printf("CheckSerialIn: value = %x\n", value);
if (value == 0x1d) return 1;
if (value == EOF) return 0;
serial->flag = 1;
serial->value = value;
}