ref: 4e74323c047379cabe16bc114f245b7478bc5880
parent: 940edd1da5336e9f2695260670a620f9047b5012
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Sun Feb 17 23:16:33 EST 2013
9boot: fix 9bootiso rearrange sub.c for putc(), readn(), memcmp(), memmove(), strchr() and strlen() and uart to fit into the first 2K of the image.
--- a/sys/src/boot/pc/fns.h
+++ b/sys/src/boot/pc/fns.h
@@ -1,5 +1,6 @@
/* handy strings in l.s */
extern char origin[];
+extern char uart;
extern char hex[];
extern char bootname[];
--- a/sys/src/boot/pc/l.s
+++ b/sys/src/boot/pc/l.s
@@ -289,6 +289,9 @@
#endif
+TEXT uart(SB), $0
+ BYTE $0xff
+
TEXT hex(SB), $0
BYTE $'0'; BYTE $'1'; BYTE $'2'; BYTE $'3';
BYTE $'4'; BYTE $'5'; BYTE $'6'; BYTE $'7';
--- a/sys/src/boot/pc/sub.c
+++ b/sys/src/boot/pc/sub.c
@@ -3,8 +3,6 @@
#include "fns.h"
#include "mem.h"
-int uart = -1;
-
void
putc(int c)
{@@ -24,25 +22,25 @@
}
int
-getc(void)
+readn(void *f, void *data, int len)
{- int c;
+ uchar *p, *e;
- c = kbdgetc();
- if(c == 0 && uart != -1)
- c = uartgetc(uart);
- return c & 0x7f;
-}
-
-void
-memset(void *dst, int v, int n)
-{- uchar *d = dst;
-
- while(n > 0){- *d++ = v;
- n--;
+ putc(' ');+ p = data;
+ e = p + len;
+ while(p < e){+ if(((ulong)p & 0xF000) == 0){+ putc('\b');+ putc(hex[((ulong)p>>16)&0xF]);
+ }
+ if((len = read(f, p, e - p)) <= 0)
+ break;
+ p += len;
}
+ putc('\b');+
+ return p - (uchar*)data;
}
void
@@ -99,26 +97,26 @@
return nil;
}
-int
-readn(void *f, void *data, int len)
+void
+memset(void *dst, int v, int n)
{- uchar *p, *e;
+ uchar *d = dst;
- putc(' ');- p = data;
- e = p + len;
- while(p < e){- if(((ulong)p & 0xF000) == 0){- putc('\b');- putc(hex[((ulong)p>>16)&0xF]);
- }
- if((len = read(f, p, e - p)) <= 0)
- break;
- p += len;
+ while(n > 0){+ *d++ = v;
+ n--;
}
- putc('\b');+}
- return p - (uchar*)data;
+int
+getc(void)
+{+ int c;
+
+ c = kbdgetc();
+ if(c == 0 && uart != -1)
+ c = uartgetc(uart);
+ return c;
}
static int
--
⑨