diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-02-18 04:16:33 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-02-18 04:16:33 +0100 |
commit | 2fc31e9a709476696ee0b1827f31c7fcbf69a809 (patch) | |
tree | 0e4abace1b578a94ce3cf6c9f2983ee9885a51d2 /sys/src/boot | |
parent | c9c06dd8ba2a5ce322a0a25b08c17a892bd75a4f (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.h | 1 | ||||
-rw-r--r-- | sys/src/boot/pc/l.s | 3 | ||||
-rw-r--r-- | sys/src/boot/pc/sub.c | 66 |
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 |