30 Commits

Author SHA1 Message Date
Matt Jenkins
5da189ad36 Changed %2 to %s in string format 2014-04-19 13:37:15 +01:00
Matt Jenkins
de9ae5c603 Merge branch 'master' into double_precision 2014-04-19 12:42:19 +01:00
Matt Jenkins
9cf1805a1d Added double precision test programs 2014-04-19 10:31:33 +01:00
Matt Jenkins
4e2777e9fb Added double precision test programs 2014-04-19 10:31:25 +01:00
Matt Jenkins
6316b05ec3 Added gccdump.s to gitignore 2014-04-19 10:26:30 +01:00
Matt Jenkins
738874016f Merge github.com:igor-m/retrobsd-1 into double_precision 2014-04-19 10:04:52 +01:00
igor-m
6ce8e28a85 Fix of 16byte stack alignment, doprnt.c does not require va_arg fix now 2014-04-19 09:50:04 +02:00
igor-m
4783836659 New SPI IOCTL modi - R,W,RB,WB,RWB 2014-04-17 19:49:40 +02:00
igor-m
249b5716bb Original spi.c and spi.h 2014-04-17 01:17:06 +02:00
igor-m
1d1151403b Revert "Added comment to spi.c"
This reverts commit 28aae2c427.
2014-04-17 01:06:49 +02:00
igor-m
54a771c6f0 Revert "Added comment to spi.c"
This reverts commit 28aae2c427.
2014-04-17 00:53:24 +02:00
igor-m
eddfd51e51 Fix of vaarg alignment addr calc 2014-04-17 00:14:41 +02:00
igor-m
d9033fbf2d target.mk back with -fno-short-double 2014-04-17 00:07:00 +02:00
igor-m
28aae2c427 Added comment to spi.c 2014-04-16 15:24:09 +02:00
igor-m
6d689c335c Added SPI modes R,W,RB,WB,RWB 2014-04-16 15:03:35 +02:00
igor-m
bad98ad239 Single -fno-short-double in target.mk 2014-04-14 13:30:22 +02:00
igor-m
c04495837f Fix of the vaarg fix 2014-04-13 09:34:13 +02:00
igor-m
297b14aa0c Fixes with aliasing - using ieee.h 2014-04-12 13:39:05 +02:00
igor-m
190aa1e633 Fixes with aliasing 2014-04-12 12:51:40 +02:00
igor-m
0220852a66 Fix of va_arg aliasing in doprnt.c 2014-04-12 01:25:31 +02:00
igor-m
2afff6f8aa Fix to doprnt.c and moded modff, modf etc 2014-04-12 01:14:47 +02:00
igor-m
5b1496e5c3 Fix6 2014-04-11 22:55:29 +02:00
igor-m
bcff791a3c Fix5 2014-04-11 22:45:22 +02:00
igor-m
98d034efe1 Fix4 2014-04-11 22:24:56 +02:00
igor-m
0f6e23c2fe Fix 3 2014-04-11 21:55:53 +02:00
igor-m
af3db0bcd2 Another attempt to fix isinff.c, grrh 2014-04-11 21:51:23 +02:00
igor-m
b73ccfb9dc Attempt to fix isinff.c 2014-04-11 21:23:23 +02:00
igor-m
c31e4fa1e8 Was within untracked files ?? 2014-04-11 20:13:51 +02:00
igor-m
16e7b63b48 Fix the Double Precision changes 2014-04-11 19:35:55 +02:00
igor-m
16214d4557 Double Precision Floating Math implementation 2014-04-11 13:36:20 +02:00
49 changed files with 1544 additions and 1636 deletions

View File

@@ -12,7 +12,6 @@
# Supported boards
#
MAX32 = sys/pic32/max32/MAX32
MAX32-ETH = sys/pic32/max32-eth/MAX32-ETH
UBW32 = sys/pic32/ubw32/UBW32
UBW32UART = sys/pic32/ubw32-uart/UBW32-UART
UBW32UARTSDRAM = sys/pic32/ubw32-uart-sdram/UBW32-UART-SDRAM

View File

@@ -40,7 +40,6 @@ TARGET = $(MAXCOLOR) # for the Colour Maximite board
TARGET = $(EXPLORER16) # for the Explorer 16 board
TARGET = $(STARTERKIT) # for the PIC32 USB or Ethernet Starter Kit
TARGET = $(MAX32) # default
TARGET = $(MAX32-ETH) # for the chipKIT MAX32 board with Arduino Ethernet shield
TARGET = $(DUINOMITE) # for the Duinomite board with USB console
TARGET = $(DUINOMITEUART) # for the Duinomite board with UART console
TARGET = $(DUINOMITEE) # for the Duinomite E board with USB console
@@ -90,7 +89,7 @@ on a board used.
#### Max32 board:
```shell
$ cd sys/pic32/ubw32
$ AVRTOOLS=/Applications/Mpide.app/Contents/Resources/Java/hardware/tools/avr
$ AVRTOOLS=/Applications/Mpide.app/Contents/Resources/Java/hardware/tools
$AVRTOOLS/bin/avrdude -C$AVRTOOLS/etc/avrdude.conf -c stk500v2 -p pic32 \
-P /dev/tty.usbserial-* -b 115200 -v -U flash:w:unix.hex:i
```

0
cross.mk Normal file → Executable file
View File

47
include/ieee.h Normal file
View File

@@ -0,0 +1,47 @@
typedef union // LITTLE ENDIAN
{
double value;
struct
{
unsigned long lsw;
unsigned long msw;
} parts;
} ieee_double_shape_type;
/* Get two 32 bit ints from a double. */
#define EXTRACT_WORDS(ix0,ix1,d) \
do { \
ieee_double_shape_type ew_u; \
ew_u.value = (d); \
(ix0) = ew_u.parts.msw; \
(ix1) = ew_u.parts.lsw; \
} while (0)
/* Get the more significant 32 bit int from a double. */
#define GET_HIGH_WORD(i,d) \
do { \
ieee_double_shape_type gh_u; \
gh_u.value = (d); \
(i) = gh_u.parts.msw; \
} while (0)
/* Set a double from two 32 bit ints. */
#define INSERT_WORDS(d,ix0,ix1) \
do { \
ieee_double_shape_type iw_u; \
iw_u.parts.msw = (ix0); \
iw_u.parts.lsw = (ix1); \
(d) = iw_u.value; \
} while (0)
#define SET_HIGH_WORD(d,v) \
do { \
ieee_double_shape_type sh_u; \
sh_u.value = (d); \
sh_u.parts.msw = (v); \
(d) = sh_u.value; \
} while (0)

View File

@@ -12,8 +12,9 @@ extern double sinh(), cosh(), tanh();
extern double gamma();
extern double j0(), j1(), jn(), y0(), y1(), yn();
#define HUGE 1.701411733192644270e38
#define LOGHUGE 39
// ###PITO #define HUGE 1.701411733192644270e38
#define HUGE 1.79769313486231570000e+308
#define LOGHUGE 307
int isnanf(float x);
int isnan(double x);

View File

@@ -22,8 +22,8 @@
#define va_copy(dest, src) __builtin_va_copy((dest), (src))
#ifndef _VA_LIST_T
#define _VA_LIST_T
#ifndef _VA_LIST
#define _VA_LIST
#ifdef __GNUC__
typedef __builtin_va_list va_list;
#endif

1
lib/.gitignore vendored
View File

@@ -11,3 +11,4 @@ ranlib.h
retroImage
size
strip
gccdump.s

0
lib/Makefile Normal file → Executable file
View File

57
src/cmd/9degree/9degree.c Normal file
View File

@@ -0,0 +1,57 @@
#include <stdio.h>
#include <math.h>
#include <sys/time.h>
void print64x( double x ) {
char* p;
int j;
p = (char *) &x;
for( j=0; j< sizeof(x); j++) {
printf("%02X", p[(sizeof(x)-1)-j]&0xFF);
}
}
void print32x( float x ) {
char* p;
int j;
p = (char *) &x;
for( j=0; j< sizeof(x); j++) {
printf("%02X", p[(sizeof(x)-1)-j]&0xFF);
}
}
int main() {
struct timeval start, stop;
volatile double _p64, q64, r64, e64;
long i;
unsigned long elapsed;
_p64 = 3.1415926535897932384626433832795;
for(i=0;i<100;i++) {
// 64bit test
// 9 degree test input
q64 = i;
// Convert to radians
q64 = q64 * _p64 / 180.0;
// Make the test
gettimeofday(&start, NULL);
r64 = (asin(acos(atan(tan(cos(sin(q64)))))));
gettimeofday(&stop, NULL);
// Convert to degree
r64 = r64 * 180.0 / _p64;
elapsed = stop.tv_usec - start.tv_usec;
printf("%ld degree 64bit test result= %1.15e time= %lu " , i, r64, elapsed );
printf("= 0x");
print64x( r64 );
printf("\n");
}
return 0;
}

1
src/cmd/9degree/Makefile Symbolic link
View File

@@ -0,0 +1 @@
../generic.mk

View File

@@ -17,7 +17,7 @@ SUBDIR = adb adc-demo ar as awk basic cc chflags chpass \
rdprof ranlib re renice retroforth scm setty sl \
sed sh smallc smlrc stty sysctl test uname wiznet xargs \
zmodem gtest msec unixbench cron compress date2 tip \
talloc devupdate uucp smux
talloc devupdate uucp smux 9degree mathtest scantest
# /sbin
SUBDIR += chown chroot disktool fsck getty init \

View File

@@ -1592,15 +1592,13 @@ foff16: expr_flags = 0;
opcode |= offset & 0xffff;
break;
case FHIGH16: /* high 16-bit byte address */
if (expr_flags & EXPR_HI) {
if (relinfo.flags != RABS) {
/* %hi function - assume signed offset */
relinfo.flags |= RHIGH16S;
relinfo.flags |= (expr_flags & EXPR_HI) ? RHIGH16S : RHIGH16;
relinfo.offset = offset & 0xffff;
offset += 0x8000;
opcode |= offset >> 16;
} else {
opcode |= offset & 0xffff;
}
opcode |= offset >> 16;
break;
case FOFF18: /* 18-bit PC-relative word address */
case FAOFF18:

31
src/cmd/generic.mk Normal file
View File

@@ -0,0 +1,31 @@
#==========================================
# Makefile: makefile for adc-demo
# Copyright 2012 Majenko Technolohies
# (matt@majenko.co.uk
# Last Modified: 29/01/2012
#==========================================
TOPSRC = $(shell cd ../../..; pwd)
include $(TOPSRC)/target.mk
PWD = $(shell pwd)
PROG = $(shell basename "$(PWD)")
OBJS = $(PROG).o
SRCS = $(PROG).c
all: $(PROG)
-include Makefile.app
$(PROG): ${OBJS}
${CC} ${LDFLAGS} -o $(PROG).elf ${OBJS} ${LIBS}
${OBJDUMP} -S $(PROG).elf > $(PROG).dis
${SIZE} $(PROG).elf
${ELF2AOUT} $(PROG).elf $@
clean:
-rm -f $(PROG) ${OBJS} $(PROG).elf $(PROG).dis
install: all
install $(PROG) $(DESTDIR)/bin/

View File

@@ -61,7 +61,7 @@ $Binits.o: inits.c; $(CC) $(CFLAGS) -c -I. -o $@ $<
$Binput.o: input.c; $(CC) $(CFLAGS) -c -I. -o $@ $<
$Blex.o: lex.c; $(CC) $(CFLAGS) -c -I. -o $@ $<
$Blist.o: list.c; $(CC) $(CFLAGS) -c -I. -o $@ $<
$Bmain.o: main.c; $(CC) $(CFLAGS) -DVERSION=\"$(VERSION)\" -c -I. -o $@ $<
$Bmain.o: main.c; $(CC) $(CFLAGS) -DVERSION=\"`svnversion`\" -c -I. -o $@ $<
$Bnull.o: null.c; $(CC) $(CFLAGS) -c -I. -o $@ $<
$Boutput.o: output.c; $(CC) $(CFLAGS) -c -I. -o $@ $<
$Bprof.o: prof.c; $(CC) $(CFLAGS) -c -I. -o $@ $<

1
src/cmd/mathtest/Makefile Symbolic link
View File

@@ -0,0 +1 @@
../generic.mk

View File

@@ -0,0 +1,49 @@
// Pito 12/2013
#include <stdio.h>
#include <math.h>
// print out double (IEEE 64bit) variable in HEX
// ie. 9.0 is 4022000000000000
// more on http://babbage.cs.qc.cuny.edu/IEEE-754/
void print64x( double x ) {
const unsigned char* p;
int j;
p = (unsigned char *) &x;
printf("%02X", p[7]);
printf("%02X", p[6]);
printf("%02X", p[5]);
printf("%02X", p[4]);
printf("%02X", p[3]);
printf("%02X", p[2]);
printf("%02X", p[1]);
printf("%02X", p[0]);
}
void print32x( float x ) {
const char* p;
int j;
p = (char *) &x;
for( j=0; j< sizeof(x); j++) {
printf("%02X", p[(sizeof(x)-1)-j]&0xFF);
}
}
int main() {
volatile double num1 = 1.2499999999999998193580478994e-10;
volatile double num2 = 2.16000000000000081281633984229e-10;
volatile double res = 0;
res = num1 + num2;
// print64x(num1);
// printf(" + ");
// print64x(num2);
// printf(" = ");
// print64x(res);
// printf("\n");
printf("%1.15e + %1.15e = %1.15e\n", num1, num2, res);
return 0;
}

1
src/cmd/scantest/Makefile Symbolic link
View File

@@ -0,0 +1 @@
../generic.mk

View File

@@ -0,0 +1,84 @@
// Pito 12/2013
#include <stdio.h>
#include <math.h>
// print out double (IEEE 64bit) variable in HEX
// ie. 9.0 is 4022000000000000
// more on http://babbage.cs.qc.cuny.edu/IEEE-754/
void print64x( double x ) {
const unsigned char* p;
int j;
p = (unsigned char *) &x;
printf("%02X", p[7]);
printf("%02X", p[6]);
printf("%02X", p[5]);
printf("%02X", p[4]);
printf("%02X", p[3]);
printf("%02X", p[2]);
printf("%02X", p[1]);
printf("%02X", p[0]);
}
void print32x( float x ) {
const char* p;
int j;
p = (char *) &x;
for( j=0; j< sizeof(x); j++) {
printf("%02X", p[(sizeof(x)-1)-j]&0xFF);
}
}
int main() {
double num;
int i;
double sum;
FILE *InFile, *OutFile;
char str[100];
double backup;
double result;
if ((OutFile = fopen("num.dat","w")) == 0) {
printf("num.dat not found\n");
return (1);
}
for (i=0; i<=10000; i++) {
num = 0.0001L * (double)(i);
num = num * num * num;
fprintf(OutFile, "%1.15e\n", num);
}
fclose(OutFile);
if ((InFile = fopen("num.dat","r")) == 0) {
printf("num.dat not found\n");
return (1);
}
sum = 0;
num = 0;
for (i=0; i<=10000; i++) {
backup = sum;
fgets (str, 80, InFile);
sscanf (str,"%le",&num);
result = sum + num;
if (sum != backup) {
printf("*** SUM CHANGED: %1.15e => %1.15e ***\n", backup, sum);
}
sum = result;
}
printf("Sum test result = %1.15e\n", sum);
printf("Shall be result = 2.500500025000002e+03\n");
printf("Sum test result (HEX) = ");
print64x( sum );
printf("\n");
printf("Shall be result (HEX) = 40A389000346DC62\n");
fclose(InFile);
return 0;
}

File diff suppressed because it is too large Load Diff

0
src/libc/compat/Makefile Normal file → Executable file
View File

4
src/libc/gen/Makefile Normal file → Executable file
View File

@@ -19,7 +19,7 @@ STDSRC = abort.c alarm.c atof.c atoi.c atol.c calloc.c closedir.c crypt.c \
getpass.c getpwent.c getloadavg.c getmntinfo.c \
getttyent.c getttynam.c getusershell.c getwd.c \
initgroups.c isatty.c isinff.c isnanf.c ldexp.c malloc.c mktemp.c \
modff.c ndbm.c nlist.c knlist.c opendir.c perror.c popen.c \
modff.c modf.c ndbm.c nlist.c knlist.c opendir.c perror.c popen.c \
psignal.c qsort.c random.c readdir.c regex.c scandir.c \
seekdir.c setmode.c sethostname.c setenv.c siglist.c \
signal.c siginterrupt.c sigsetops.c \
@@ -36,7 +36,7 @@ STDOBJ = abort.o alarm.o atof.o atoi.o atol.o calloc.o closedir.o crypt.o \
getpass.o getpwent.o getloadavg.o getmntinfo.o \
getttyent.o getttynam.o getusershell.o getwd.o \
initgroups.o isatty.o isinff.o isnanf.o ldexp.o malloc.o mktemp.o \
modff.o ndbm.o nlist.o knlist.o opendir.o perror.o popen.o \
modff.o modf.o ndbm.o nlist.o knlist.o opendir.o perror.o popen.o \
psignal.o qsort.o random.o readdir.o regex.o scandir.o \
seekdir.o setmode.o sethostname.o setenv.o siglist.o \
signal.o siginterrupt.o sigsetops.o \

View File

@@ -27,4 +27,4 @@ int isinff (float x)
/*
* For PIC32, double is the same as float.
*/
int isinf (double x) __attribute__((alias ("isinff")));
//int isinf (double x) __attribute__((alias ("isinff")));

View File

@@ -27,4 +27,4 @@ int isnanf (float x)
/*
* For PIC32, double is the same as float.
*/
int isnan (double x) __attribute__((alias ("isnanf")));
//int isnan (double x) __attribute__((alias ("isnanf")));

View File

@@ -1,46 +1,46 @@
#include <math.h>
#include <ieee.h>
static const double
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */
huge = 1.0e+308,
tiny = 1.0e-307;
static double
_copysign(double x, double y)
{
unsigned long hx,hy;
GET_HIGH_WORD(hx,x);
GET_HIGH_WORD(hy,y);
SET_HIGH_WORD(x,(hx&0x7fffffff)|(hy&0x80000000));
return x;
}
double
ldexp(fr, exp)
double fr;
int exp;
ldexp(double x, int n)
{
double huge = 1.701411834604692293e38;
int neg;
int i;
neg = 0;
if (fr < 0) {
fr = -fr;
neg = 1;
unsigned long k,hx,lx;
EXTRACT_WORDS(hx,lx,x);
k = (hx&0x7ff00000)>>20; /* extract exponent */
if (k==0) { /* 0 or subnormal x */
if ((lx|(hx&0x7fffffff))==0) return x; /* +-0 */
x *= two54;
GET_HIGH_WORD(hx,x);
k = ((hx&0x7ff00000)>>20) - 54;
if (n< -50000) return tiny*x; /*underflow*/
}
if (k==0x7ff) return x+x; /* NaN or Inf */
k = k+n;
if (k > 0x7fe) return huge*_copysign(huge,x); /* overflow */
if (k > 0) /* normal result */
{SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20)); return x;}
if (k <= -54) {
if (n > 50000) /* in case integer overflow in n+k */
return huge*_copysign(huge,x); /*overflow*/
else return tiny*_copysign(tiny,x); /*underflow*/
}
fr = frexp(fr, &i);
while (fr < 0.5) {
fr = 2*fr;
i = i-1;
}
exp = exp+i;
if (exp > 127) {
if (neg)
return(-huge);
else
return(huge);
}
if (exp < -127)
return(0);
while (exp > 30) {
fr = fr*(1L<<30);
exp = exp-30;
}
while (exp < -30) {
fr = fr/(1L<<30);
exp = exp+30;
}
if (exp > 0)
fr = fr*(1L<<exp);
if (exp < 0)
fr = fr/(1L<<-exp);
if (neg)
fr = -fr;
return(fr);
k += 54; /* subnormal result */
SET_HIGH_WORD(x,(hx&0x800fffff)|(k<<20));
return x*twom54;
}

View File

@@ -7,18 +7,7 @@
* is preserved.
*/
#include <math.h>
/* Get two 32 bit ints from a double. */
#define EXTRACT_WORDS(high,low,d) \
high = *(unsigned long long*) &d; \
low = (*(unsigned long long*) &d) >> 32
/* Set a double from two 32 bit ints. */
#define INSERT_WORDS(d,high,low) \
*(unsigned long long*) &(x) = (unsigned long long) (high) << 32 | (low)
#include <ieee.h>
/*
* modf(double x, double *iptr)
@@ -37,10 +26,12 @@ double modf (double x, double *iptr)
unsigned long i;
EXTRACT_WORDS (i0, i1, x);
//
j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; /* exponent of x */
if (j0 < 20) { /* integer part in high x */
if (j0 < 0) { /* |x|<1 */
INSERT_WORDS (*iptr, i0 & 0x80000000, 0);
//
/* *iptr = +-0 */
return x;
} else {
@@ -48,10 +39,12 @@ double modf (double x, double *iptr)
if (((i0 & i) | i1) == 0) { /* x is integral */
*iptr = x;
INSERT_WORDS (x, i0 & 0x80000000, 0);
//
/* return +-0 */
return x;
} else {
INSERT_WORDS (*iptr, i0 & (~i), 0);
//
return x - *iptr;
}
}
@@ -62,6 +55,7 @@ double modf (double x, double *iptr)
return x * one;
INSERT_WORDS (x, i0 & 0x80000000, 0);
//
/* return +-0 */
return x;
} else { /* fraction part in low x */
@@ -69,10 +63,12 @@ double modf (double x, double *iptr)
if ((i1 & i) == 0) { /* x is integral */
*iptr = x;
INSERT_WORDS (x, i0 & 0x80000000, 0);
//
/* return +-0 */
return x;
} else {
INSERT_WORDS (*iptr, i0, i1 & (~i));
//
return x - *iptr;
}
}

View File

@@ -52,4 +52,4 @@ float modff (float fx, float *iptr)
/*
* For PIC32, double is the same as float.
*/
double modf (double x, double *iptr) __attribute__((alias ("modff")));
//double modf (double x, double *iptr) __attribute__((alias ("modff")));

0
src/libc/gen/ndbm.c Normal file → Executable file
View File

0
src/libc/mips/sys/Makefile Normal file → Executable file
View File

0
src/libc/stdio/Makefile Normal file → Executable file
View File

View File

@@ -42,7 +42,9 @@
#include <math.h>
/* Max number conversion buffer length: a long in base 2, plus NUL byte. */
#define MAXNBUF (sizeof(long) * 8 + 1)
//#define MAXNBUF (sizeof(long) * 8 + 1)
/* Max number conversion buffer length: MAXEXP(308) + MAXFRACTION(15) + 2 */
#define MAXNBUF 308+15+2
static unsigned char *ksprintn (unsigned char *buf, unsigned long v, unsigned char base,
int width, unsigned char *lp);
@@ -61,6 +63,8 @@ _doprnt (char const *fmt, va_list ap, FILE *stream)
int n, width, dwidth, retval, uppercase, extrazeros, sign;
unsigned long ul;
double d;
if (! stream)
return 0;
if (! fmt)
@@ -361,7 +365,11 @@ number: if (sign && ((long) ul != 0L)) {
case 'F':
case 'g':
case 'G': {
double d = va_arg (ap, double);
// ---va_arg alignment fix
d = va_arg(ap, double);
// ---
/*
* don't do unrealistic precision; just pad it with
* zeroes later, so buffer size stays rational.
@@ -583,10 +591,11 @@ cvt (double number, int prec, int sharpflag, unsigned char *negp, unsigned char
* get integer portion of number; put into the end of the buffer; the
* .01 is added for modf (356.0 / 10, &integer) returning .59999999...
*/
for (p = endp - 1; integer; ++expcnt) {
tmp = modf (integer / 10, &integer);
*p-- = (int) ((tmp + .01) * 10) + '0';
}
p = endp - 1;
for (; integer && p >= startp; ++expcnt) {
tmp = modf(integer * 0.1L , &integer);
*p-- = (int)((tmp + .01L) * 10) + '0';
}
switch (fmtch) {
case 'f':
/* reverse integer into beginning of buffer */

View File

@@ -1,6 +1,10 @@
#include <stdio.h>
#include <ctype.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#define HAVE_FLOAT 1
#define SPC 01
#define STP 02

0
src/libc/stdlib/Makefile Normal file → Executable file
View File

View File

@@ -7,7 +7,7 @@ TOPSRC = $(shell cd ../../..; pwd)
include $(TOPSRC)/target.mk
DEFS =
CFLAGS += ${DEFS} -Os
CFLAGS += ${DEFS}
SRCS = strcspn.c strpbrk.c strerror.c strsep.c strspn.c strstr.c strtok.c strtok_r.c
OBJS = strcspn.o strpbrk.o strerror.o strsep.o strspn.o strstr.o strtok.o strtok_r.o

View File

@@ -39,15 +39,17 @@ asin(arg)
double
acos(arg)
double arg;
double arg;
{
if(arg < 0)
arg = -arg;
double sign = 1.0;
if(arg < 0.0){
arg = -arg;
sign = -1.0;
}
if(arg > 1.0){
errno = EDOM;
return(0.0);
}
if(arg > 1.){
errno = EDOM;
return(0.);
}
return(pio2 - asin(arg));
}
return(pio2 - sign*asin(arg));
}

View File

@@ -13,7 +13,7 @@
*/
#include <math.h>
double static sq2p1 =2.414213562373095048802e0;
static double sq2p1 =2.414213562373095048802e0;
static double sq2m1 = .414213562373095048802e0;
static double pio2 =1.570796326794896619231e0;
static double pio4 = .785398163397448309615e0;

View File

@@ -1,23 +1,47 @@
/* Get two 32 bit ints from a double. */
#define EXTRACT_WORDS(high,low,d) \
high = *(unsigned long long*) &d; \
low = (*(unsigned long long*) &d) >> 32
/* Set a double from two 32 bit ints. */
#define INSERT_WORDS(d,high,low) \
*(unsigned long long*) &(x) = (unsigned long long) (high) << 32 | (low)
typedef union
typedef union // LITTLE ENDIAN
{
double value;
struct
{
uint32_t lsw;
uint32_t msw;
unsigned long lsw;
unsigned long msw;
} parts;
} ieee_double_shape_type;
/* Get two 32 bit ints from a double. */
#define EXTRACT_WORDS(ix0,ix1,d) \
do { \
ieee_double_shape_type ew_u; \
ew_u.value = (d); \
(ix0) = ew_u.parts.msw; \
(ix1) = ew_u.parts.lsw; \
} while (0)
/* Get the more significant 32 bit int from a double. */
#define GET_HIGH_WORD(i,d) \
do { \
ieee_double_shape_type gh_u; \
gh_u.value = (d); \
(i) = gh_u.parts.msw; \
} while (0)
/* Set a double from two 32 bit ints. */
#define INSERT_WORDS(d,ix0,ix1) \
do { \
ieee_double_shape_type iw_u; \
iw_u.parts.msw = (ix0); \
iw_u.parts.lsw = (ix1); \
(d) = iw_u.value; \
} while (0)
#define SET_HIGH_WORD(d,v) \
do { \
ieee_double_shape_type sh_u; \
sh_u.value = (d); \
sh_u.parts.msw = (v); \
(d) = sh_u.value; \
} while (0)

View File

@@ -113,6 +113,7 @@ struct sigstack {
struct sigcontext {
int sc_onstack; /* sigstack state to restore */
long sc_mask; /* signal mask to restore */
int sc_align[2]; /* align to 16 bytes */
int sc_r1; /* r1 to restore */
int sc_r2; /* and other registers */
int sc_r3;

2
sys/kernel/kern_exec.c Normal file → Executable file
View File

@@ -432,7 +432,7 @@ badarg:
*/
ucp = USER_DATA_END - nc - NBPW;
ap = ucp - na*NBPW - 2*NBPW;
u.u_frame [FRAME_SP] = ap - 16;
u.u_frame [FRAME_SP] = (ap - 16) & ~0xf; /* align to 16 bytes */
u.u_frame [FRAME_R4] = na - ne; /* $a0 := argc */
u.u_frame [FRAME_R5] = ap; /* $a1 := argv */
u.u_frame [FRAME_R6] = ap + (na-ne+1)*NBPW; /* $a2 := env */

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,7 @@ SUBDIR = baremetal dip duinomite duinomite-uart duinomite-e \
duinomite-e-uart explorer16 max32 max32-eth maximite \
meb pinguino-micro starter-kit ubw32 ubw32-uart \
ubw32-uart-sdram baremetal fubarino fubarino-uart \
fubarino-uart-sramc mmb-mx7 maximite-color \
32mxsdram-uart
fubarino-uart-sramc mmb-mx7 maximite-color 32mxsdram-uart
default:

View File

@@ -2,7 +2,6 @@ always
file rd_sramc.o
require rdisk
define SRAMC_ENABLED YES
define SRAMC%0_ENABLED YES
end always
option data

View File

@@ -24,19 +24,29 @@
* The values are dependant upon the presence of the -fno-short-double
* compiler option.
*/
#define DBL_EPSILON FLT_EPSILON
#define DBL_MAX FLT_MAX
#define DBL_MIN FLT_MIN
#define DBL_DIG FLT_DIG
#define DBL_MANT_DIG FLT_MANT_DIG
#define DBL_MAX_10_EXP FLT_MAX_10_EXP
#define DBL_MAX_EXP FLT_MAX_EXP
#define DBL_MIN_10_EXP FLT_MIN_10_EXP
#define DBL_MIN_EXP FLT_MIN_EXP
//#define DBL_EPSILON FLT_EPSILON
//#define DBL_MAX FLT_MAX
//#define DBL_MIN FLT_MIN
//#define DBL_DIG FLT_DIG
//#define DBL_MANT_DIG FLT_MANT_DIG
//#define DBL_MAX_10_EXP FLT_MAX_10_EXP
//#define DBL_MAX_EXP FLT_MAX_EXP
//#define DBL_MIN_10_EXP FLT_MIN_10_EXP
//#define DBL_MIN_EXP FLT_MIN_EXP
/*
* These values provide information pertaining to the long double type.
*/
#define DBL_EPSILON 2.2204460492503131E-16
#define DBL_MAX 1.7976931348623157E+308
#define DBL_MIN 2.2250738585072014E-308
#define DBL_DIG 15
#define DBL_MANT_DIG 53
#define DBL_MAX_10_EXP 308
#define DBL_MAX_EXP 1024
#define DBL_MIN_10_EXP (-307)
#define DBL_MIN_EXP (-1021)
#define LDBL_EPSILON 2.2204460492503131E-16
#define LDBL_MAX 1.7976931348623157E+308
#define LDBL_MIN 2.2250738585072014E-308

View File

@@ -6,7 +6,7 @@ S = ../../../tools/configsys/../../sys/kernel
vpath %.c $(M):$(S)
vpath %.S $(M):$(S)
KERNOBJ += _startup.o adc.o clock.o cons.o devsw.o exception.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o oc.o rd_sd.o rd_sramc.o rdisk.o signal.o spi.o spi_bus.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
KERNOBJ += _startup.o adc.o clock.o cons.o devsw.o exception.o glcd.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o oc.o rd_sd.o rdisk.o signal.o spi_bus.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o usb_device.o usb_function_cdc.o usb_uart.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o
EXTRA_TARGETS = bootloader
DEFS += -DADC_ENABLED=YES
@@ -16,11 +16,11 @@ DEFS += -DBL_CRYSTAL=8
DEFS += -DBL_LED_PIN=5
DEFS += -DBL_LED_PORT=TRISE
DEFS += -DBUS_DIV=1
DEFS += -DBUS_KHZ=120000
DEFS += -DCONSOLE_DEVICE=tty1
DEFS += -DCPU_IDIV=1
DEFS += -DCPU_KHZ=120000
DEFS += -DCPU_MUL=15
DEFS += -DBUS_KHZ=80000
DEFS += -DCONSOLE_DEVICE=ttyUSB0
DEFS += -DCPU_IDIV=2
DEFS += -DCPU_KHZ=80000
DEFS += -DCPU_MUL=20
DEFS += -DCPU_ODIV=1
DEFS += -DCRYSTAL=8
DEFS += -DDC0_DEBUG=DEVCFG0_DEBUG_DISABLED
@@ -35,8 +35,8 @@ DEFS += -DDC1_POSCMOD=DEVCFG1_POSCMOD_HS
DEFS += -DDC1_SOSC=0
DEFS += -DDC1_WDTEN=0
DEFS += -DDC1_WDTPS=DEVCFG1_WDTPS_1
DEFS += -DDC2_PLLIDIV=DEVCFG2_FPLLIDIV_1
DEFS += -DDC2_PLLMUL=DEVCFG2_FPLLMUL_15
DEFS += -DDC2_PLLIDIV=DEVCFG2_FPLLIDIV_2
DEFS += -DDC2_PLLMUL=DEVCFG2_FPLLMUL_20
DEFS += -DDC2_PLLODIV=DEVCFG2_FPLLODIV_1
DEFS += -DDC2_UPLL=0
DEFS += -DDC2_UPLLIDIV=DEVCFG2_UPLLIDIV_2
@@ -48,6 +48,7 @@ DEFS += -DDC3_USBID=DEVCFG3_FUSBIDIO
DEFS += -DDC3_USERID=0xffff
DEFS += -DDC3_VBUSON=DEVCFG3_FVBUSONIO
DEFS += -DFLASH_JUMP=0x9d000000
DEFS += -DGLCD_ENABLED=YES
DEFS += -DGPIO_ENABLED=YES
DEFS += -DHID_FEATURE_REPORT_BYTES=2
DEFS += -DHID_INPUT_REPORT_BYTES=2
@@ -55,36 +56,24 @@ DEFS += -DHID_INT_IN_EP_SIZE=64
DEFS += -DHID_INT_OUT_EP_SIZE=64
DEFS += -DHID_OUTPUT_REPORT_BYTES=2
DEFS += -DHID_RPT01_SIZE=29
DEFS += -DHZ=1000
DEFS += -DKERNEL
DEFS += -DLED_KERNEL_PIN=5
DEFS += -DLED_KERNEL_PORT=TRISE
DEFS += -DNBUF=8
DEFS += -DNMOUNT=3
DEFS += -DNPROC=25
DEFS += -DOC_ENABLED=YES
DEFS += -DPARTITION="sramc0:sa@2048,fs@6140"
DEFS += -DPIC32MX7
DEFS += -DSD0_CS_PIN=9
DEFS += -DSD0_CS_PORT=TRISG
DEFS += -DSD0_MHZ=20
DEFS += -DSD0_PORT=2
DEFS += -DSPI_ENABLED=YES
DEFS += -DSRAMC0_ENABLED=YES
DEFS += -DSRAMC_ENABLED=YES
DEFS += -DUART1_BAUD=115200
DEFS += -DUART1_ENABLED=YES
DEFS += -DUART2_BAUD=115200
DEFS += -DUART2_ENABLED=YES
DEFS += -DUARTUSB_ENABLED=YES
DEFS += -DUCB_METER
DEFS += -DUSB_EP0_BUFF_SIZE=8
DEFS += -DUSB_MAX_EP_NUMBER=1
DEFS += -DUSB_MAX_EP_NUMBER=3
DEFS += -DUSB_NUM_STRING_DESCRIPTORS=3
LDSCRIPT = ../../../tools/configsys/../../sys/pic32/cfg/bootloader.ld
CONFIG = FUBARINO-UART2CONS-UART1-SRAMC
CONFIG = FUBARINO
CONFIGPATH = ../../../tools/configsys
include ../../../tools/configsys/../../sys/pic32/kernel-post.mk

2
sys/pic32/gcc-config.mk Normal file → Executable file
View File

@@ -1,7 +1,7 @@
# chipKIT PIC32 compiler from UECIDE
ifdef UECIDE
ifndef GCCPREFIX
GCCPREFIX = ${UECIDE}/compilers/pic32-tools/bin/pic32-
GCCPREFIX = ${HOME}/.uecide/compilers/pic32-tools/bin/pic32-
LDFLAGS = -Wl,--oformat=elf32-tradlittlemips
endif
endif

0
sys/pic32/kernel-post.mk Normal file → Executable file
View File

View File

@@ -3,7 +3,6 @@
*
* This version is for 8MB RAMDISK v.1.1 and compatible
* Pito 7.4.2014 - PIC32MX PMP bus version
* Pito 28.4.2014 - Mod for 2 Units
* Under by retrobsd.org used Licence
* No warranties of any kind
*
@@ -30,29 +29,23 @@
int sw_dkn = -1; /* Statistics slot number */
// 8MB Ramdisk v.1.1. wiring
// Ramdisk v.1.1. wiring
// PMP RAMDISK
// ===================
// PMD<D0-D7> D0-D7
// PMRD /RD
// PMWR /WR
// PMA<0> /DATA
// PMA<1> 0-Unit0
// PMA<10> 0-Unit1
//#define NDATA (1<<0)
//#define UNIT0 (1<<1)
//#define UNIT1 (1<<10)
// RD and WR pulses duration settings
// Minimal recommended settings, increase them when unstable
// No warranties of any kind
// for 120MHz clock, 70ns PSRAM, 8MB Ramdisk v.1.1.
// for 120MHz clock, 70ns PSRAM, Ramdisk v.1.1.
#define ADR_PULSE 1
#define WR_PULSE 5
#define RD_PULSE 11
// for 80MHz clock, 70ns PSRAM, 8MB Ramdisk v.1.1.
// for 80MHz clock, 70ns PSRAM, Ramdisk v.1.1.
//#define ADR_PULSE 1
//#define WR_PULSE 3
//#define RD_PULSE 8
@@ -68,31 +61,35 @@ int sw_dkn = -1; /* Statistics slot number */
//#define RD_PULSE 4
typedef union {
unsigned int value;
unsigned value;
struct {
unsigned nib1: 4; // lowest nibble
unsigned nib2: 4;
unsigned nib3: 4;
unsigned nib4: 4;
unsigned nib5: 4;
unsigned nib6: 4;
unsigned nib7: 4;
unsigned nib8: 4; // highest nibble
unsigned nib1: 4; // lowest nibble
unsigned nib2: 4;
unsigned nib3: 4;
unsigned nib4: 4;
unsigned nib5: 4;
unsigned nib6: 4;
unsigned nib7: 4;
unsigned nib8: 4; // highest nibble
};
} nybbles;
} nybbles ;
/*
* Load the 24 bit address to Ramdisk.
*
*/
inline static void dev_load_address (unsigned int addr)
inline static void
dev_load_address (addr)
unsigned addr;
{
nybbles temp;
temp.value = addr;
while(PMMODE & 0x8000); // Poll - if busy, wait
PMADDR = 1; // set ADR mode (1) to write the Address
PMMODE = 0b10<<8 | (ADR_PULSE<<2); // full ADR speed
PMDIN = temp.nib6; /* write 4 bits */
@@ -111,6 +108,7 @@ inline static void dev_load_address (unsigned int addr)
while(PMMODE & 0x8000); // Poll - if busy, wait
PMDIN = temp.nib1; /* write 4 bits */
}
/*
@@ -119,82 +117,64 @@ inline static void dev_load_address (unsigned int addr)
*/
int sramc_size ( int unit )
{
int srsize;
switch (unit) {
case 0: srsize = 8192; break;
case 1: srsize = 8192; break;
}
return srsize;
return 8192; // 4096 for 4MB ramdisk
}
/*
* Read a block of data.
*/
inline int sramc_read (int unit, unsigned int blockno, register char *data, register unsigned int nbytes)
inline int sramc_read (int unit, unsigned int blockno, char *data, unsigned int nbytes)
{
int i;
//printf("sramc%d: rd blockno %u, nbytes %u, addr %p\n", unit, blockno, nbytes, data);
while(PMMODE & 0x8000); // Poll - if busy, wait
switch (unit) {
// set Unit address and ADDRESS mode (1)
case 0: PMADDR = 0b10000000001; break;
case 1: PMADDR = 0b00000000011; break;
}
//DEBUG9("sramc%d: read block %u, length %u bytes, addr %p\n",
// major(dev), blockno, nbytes, data);
dev_load_address (blockno * DEV_BSIZE);
/* Read data. */
while(PMMODE & 0x8000); // Poll - if busy, wait
PMMODE = 0b10<<8 | (RD_PULSE<<2); // read slowly
PMADDR = 0; // set DATA mode (0)
PMADDR = PMADDR & 0b10000000010; // set DATA mode
PMMODE = 0b10<<8 | (RD_PULSE<<2); // read slowly
PMDIN; // Read the PMDIN to clear previous data and latch new data
while (nbytes--) {
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
*data++ = PMDIN; /* read a byte of data */
}
while(PMMODE & 0x8000); // Poll - if busy, wait
PMADDR = 0b10000000011; // deselect
for (i=0; i<nbytes; i++) {
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
*data++ = PMDIN; /* read a byte of data */
}
return 1;
}
/*
* Write a block of data.
*/
inline int sramc_write (int unit, unsigned int blockno, register char *data, register unsigned int nbytes)
inline int sramc_write (int unit, unsigned int blockno, char *data, unsigned int nbytes)
{
unsigned i;
//printf("sramc%d: wr blockno %u, nbytes %u , addr %p\n", unit, blockno, nbytes, data);
while(PMMODE & 0x8000); // Poll - if busy, wait
switch (unit) {
// set Unit address and ADDRESS mode (1)
case 0: PMADDR = 0b10000000001; break;
case 1: PMADDR = 0b00000000011; break;
}
//DEBUG9("sramc%d: write block %u, length %u bytes, addr %p\n",
// major(dev), blockno, nbytes, data);
dev_load_address (blockno * DEV_BSIZE);
/* Write data. */
while (PMMODE & 0x8000); // Poll - if busy, wait
PMADDR = 0; // set DATA mode (0)
PMMODE = 0b10<<8 | (WR_PULSE<<2); // faster with write
PMADDR = PMADDR & 0b10000000010; // set DATA mode
for (i=0; i<nbytes; i++) {
while(PMMODE & 0x8000); // Poll - if busy, wait
PMDIN = (*data++); /* write a byte of data */
}
while(nbytes--) {
while(PMMODE & 0x8000); // Poll - if busy, wait
PMDIN = (*data++); /* write a byte of data*/
}
while(PMMODE & 0x8000); // Poll - if busy, wait
PMADDR = 0b10000000011; // deselect
return 1;
}
@@ -204,8 +184,6 @@ inline int sramc_write (int unit, unsigned int blockno, register char *data, reg
*/
void sramc_init (int unit)
{
// printf("ramdisk%d: init\n",unit);
struct buf *bp;
// Initialize PMP hardware
@@ -218,50 +196,31 @@ void sramc_init (int unit)
// MODE WAITB WAITM WAITE
PMMODE = 0b10<<8 | 0 | (14<<2) | 0 ; // Mode2 Master 8bit
PMAEN = 0b10000000011; // PMA<>, use A10,A1,A0
PMAEN = 1; // PMA<0>, use A0 only
PMADDR = 0b10000000010; // start with DATA mode
PMADDR = 0; // start with DATA mode
PMCONSET = 1<<15; // PMP enabled
asm volatile ("nop");
// make a couple of dummy reads - it refreshes the cpld internals a little bit :)
switch (unit) {
case 0: PMADDR = 0b10000000000; // start with DATA mode
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
PMDIN; /* read a byte of data */
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
PMDIN; /* read a byte of data */
bp = prepartition_device("sramc0");
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
PMDIN; /* read a byte of data */
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
PMDIN; /* read a byte of data */
if(bp) {
PMADDR = 1; // go with with ADDRESS mode now
DEBUG3("sramc%d: init done\n",unit);
bp = prepartition_device("sramc0");
if(bp)
{
sramc_write(0, 0, bp->b_addr, 512);
brelse(bp);
}
// printf("sramc%d: init done\n",unit);
break;
}
case 1: PMADDR = 0b00000000010; // start with DATA mode
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
PMDIN; /* read a byte of data */
while(PMMODE & 0x8000); // Poll - if busy, wait before reading
PMDIN; /* read a byte of data */
bp = prepartition_device("sramc1");
if(bp) {
sramc_write(1, 0, bp->b_addr, 512);
brelse(bp);
}
// printf("sramc%d: init done\n",unit);
break;
}
while(PMMODE & 0x8000); // Poll - if busy, wait
PMADDR = 0b10000000011; // go with with ADDRESS mode
return;
}
/*
@@ -269,6 +228,6 @@ void sramc_init (int unit)
*/
int sramc_open (int unit)
{
// printf("sramc%d: open done\n",unit);
DEBUG3("sramc%d: open\n",unit);
return 0;
}

View File

@@ -44,16 +44,12 @@ int spi_open(unsigned int bus, unsigned int *tris, unsigned int pin)
case 2:
spi_devices[dno].bus = (struct spireg *)&SPI2CON;
break;
#ifdef SPI3CON
case 3:
spi_devices[dno].bus = (struct spireg *)&SPI3CON;
break;
#endif
#ifdef SPI4CON
case 4:
spi_devices[dno].bus = (struct spireg *)&SPI4CON;
break;
#endif
default:
return -1;
}
@@ -628,14 +624,11 @@ char *spi_name(int dno)
if(spi_devices[dno].bus == (struct spireg *)&SPI2CON)
return "SPI2";
#ifdef SPI3CON
if(spi_devices[dno].bus == (struct spireg *)&SPI3CON)
return "SPI3";
#endif
#ifdef SPI4CON
if(spi_devices[dno].bus == (struct spireg *)&SPI4CON)
return "SPI4";
#endif
return "SPI?";
}

13
target.mk Normal file → Executable file
View File

@@ -1,15 +1,12 @@
MACHINE = mips
DESTDIR ?= $(TOPSRC)
RELEASE = 0.0
BUILD = $(shell git rev-list HEAD --count)
VERSION = $(RELEASE)-$(BUILD)
# chipKIT PIC32 compiler from UECIDE
ifdef UECIDE
ifndef GCCPREFIX
GCCPREFIX = ${UECIDE}/compilers/pic32-tools/bin/pic32-
GCCPREFIX = ${HOME}/.uecide/compilers/pic32-tools/bin/pic32-
LDFLAGS = -Wl,--oformat=elf32-tradlittlemips
INCLUDES = -I${UECIDE}/compilers/pic32-tools/lib/gcc/pic32mx/4.5.1/include
INCLUDES = -I${HOME}/.uecide/compilers/pic32-tools/lib/gcc/pic32mx/4.5.1/include
endif
endif
@@ -37,8 +34,8 @@ ifndef GCCPREFIX
INCLUDES =
endif
CC = $(GCCPREFIX)gcc -mips32r2 -EL -msoft-float -nostdinc -fshort-double -I$(TOPSRC)/include $(INCLUDES)
CXX = $(GCCPREFIX)g++ -mips32r2 -EL -msoft-float -nostdinc -fshort-double -I$(TOPSRC)/include $(INCLUDES)
CC = $(GCCPREFIX)gcc -mips32r2 -EL -msoft-float -fno-short-double -nostdinc -I$(TOPSRC)/include $(INCLUDES)
CXX = $(GCCPREFIX)g++ -mips32r2 -EL -msoft-float -fno-short-double -nostdinc -I$(TOPSRC)/include $(INCLUDES)
LD = $(GCCPREFIX)ld
AR = $(GCCPREFIX)ar
RANLIB = $(GCCPREFIX)ranlib
@@ -53,7 +50,7 @@ TAGSFILE = tags
MANROFF = nroff -man -h -Tascii
ELF2AOUT = $(TOPSRC)/tools/elf2aout/elf2aout
CFLAGS = -O
CFLAGS = -O
LDFLAGS += -N -nostartfiles -fno-dwarf2-cfi-asm -T$(TOPSRC)/src/elf32-mips.ld \
$(TOPSRC)/src/crt0.o -L$(TOPSRC)/src

View File

@@ -160,19 +160,11 @@ bool config::load(const char *filename)
pos = temp.find("=");
if(pos>0)
{
stringstream data;
string l,r;
l = temp.substr(0,pos);
uc(l);
r = temp.substr(pos+1,temp.size());
data << r;
while (in >> temp) {
if (temp[0] == '#') {
break;
}
data << " " << temp;
}
this->instances["GLOBAL"].settings[l] = data.str();
this->instances["GLOBAL"].settings[l] = r;
this->instances["GLOBAL"].device="GLOBAL";
this->instances["GLOBAL"].unit=0;
}