summaryrefslogtreecommitdiff
path: root/sys/src/boot
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-02-18 04:16:33 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2013-02-18 04:16:33 +0100
commit2fc31e9a709476696ee0b1827f31c7fcbf69a809 (patch)
tree0e4abace1b578a94ce3cf6c9f2983ee9885a51d2 /sys/src/boot
parentc9c06dd8ba2a5ce322a0a25b08c17a892bd75a4f (diff)
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.
Diffstat (limited to 'sys/src/boot')
-rw-r--r--sys/src/boot/pc/fns.h1
-rw-r--r--sys/src/boot/pc/l.s3
-rw-r--r--sys/src/boot/pc/sub.c66
3 files changed, 36 insertions, 34 deletions
diff --git a/sys/src/boot/pc/fns.h b/sys/src/boot/pc/fns.h
index 8409fc421..8f80c38e6 100644
--- 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[];
diff --git a/sys/src/boot/pc/l.s b/sys/src/boot/pc/l.s
index b7f925ae9..44a22a266 100644
--- a/sys/src/boot/pc/l.s
+++ b/sys/src/boot/pc/l.s
@@ -289,6 +289,9 @@ TEXT bootname(SB), $0
#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';
diff --git a/sys/src/boot/pc/sub.c b/sys/src/boot/pc/sub.c
index f1b931cc2..8881bffe9 100644
--- 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 @@ print(char *s)
}
int
-getc(void)
-{
- int c;
-
- c = kbdgetc();
- if(c == 0 && uart != -1)
- c = uartgetc(uart);
- return c & 0x7f;
-}
-
-void
-memset(void *dst, int v, int n)
+readn(void *f, void *data, int len)
{
- uchar *d = dst;
+ uchar *p, *e;
- 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 @@ strchr(char *s, int c)
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