summaryrefslogtreecommitdiff
path: root/sample
diff options
context:
space:
mode:
authorhpa <hpa>2003-11-13 21:57:23 +0000
committerhpa <hpa>2003-11-13 21:57:23 +0000
commit7aabe805b949c456fde27dee0c020e66c23d7777 (patch)
tree14245958032aadb5de74fb70c7fbbd8fe7eaa020 /sample
parentd5e75bb5c1edd17e54761d0b534ef3a75bc26710 (diff)
downloadsyslinux-7aabe805b949c456fde27dee0c020e66c23d7777.tar.gz
opentest.c -> filetest.c
Diffstat (limited to 'sample')
-rw-r--r--sample/Makefile2
-rw-r--r--sample/filetest.c60
-rw-r--r--sample/opentest.c120
3 files changed, 61 insertions, 121 deletions
diff --git a/sample/Makefile b/sample/Makefile
index ad8626ec..35ee3788 100644
--- a/sample/Makefile
+++ b/sample/Makefile
@@ -25,7 +25,7 @@ PPMTOLSS16 = ../ppmtolss16
.SUFFIXES: .lss .c .o .elf .c32
-all: syslogo.lss hello.c32 hello2.c32 opentest.c32
+all: syslogo.lss hello.c32 hello2.c32 filetest.c32
%.o: %.S
$(CC) $(SFLAGS) -c -o $@ $<
diff --git a/sample/filetest.c b/sample/filetest.c
new file mode 100644
index 00000000..52c5ea21
--- /dev/null
+++ b/sample/filetest.c
@@ -0,0 +1,60 @@
+#include <com32.h>
+
+#define NULL ((void *)0)
+
+static inline void memset(void *buf, int ch, unsigned int len)
+{
+ asm volatile("cld; rep; stosb"
+ : "+D" (buf), "+c" (len) : "a" (ch) : "memory");
+}
+
+static void strcpy(char *dst, const char *src)
+{
+ while ( *src )
+ *dst++ = *src++;
+
+ *dst = '\0';
+}
+
+int __start(void)
+{
+ unsigned int ax,cx,dx,es,si,di,t;
+ com32sys_t inreg,outreg;
+
+ memset(&inreg, 0, sizeof inreg);
+ memset(&outreg, 0, sizeof outreg);
+ strcpy(__com32.cs_bounce, "test.txt");
+ inreg.eax.w[0] = 0x0006; // Open file
+ inreg.esi.w[0] = OFFS(__com32.cs_bounce);
+ inreg.es = SEG(__com32.cs_bounce);
+ __com32.cs_intcall(0x22, &inreg, &outreg);
+
+ si = outreg.esi.w[0];
+ cx = outreg.ecx.w[0];
+ ax = outreg.eax.l;
+
+ if ( ax > 65536 )
+ ax = 65536; /* Max in one call */
+
+ while ( si ) {
+ t = (ax+cx-1)/cx;
+
+ memset(&inreg, 0, sizeof inreg);
+ inreg.esi.w[0] = si;
+ inreg.ecx.w[0] = t;
+ inreg.eax.w[0] = 0x0007; // Read file
+ inreg.ebx.w[0] = OFFS(__com32.cs_bounce);
+ inreg.es = SEG(__com32.cs_bounce);
+ __com32.cs_intcall(0x22, &inreg, &inreg);
+ si = inreg.esi.w[0];
+
+ // This is broken if we hit null, but works for (DOS) text files
+ memset(&inreg, 0, sizeof inreg);
+ inreg.eax.w[0] = 0x0002;
+ inreg.ebx.w[0] = OFFS(__com32.cs_bounce);
+ inreg.es = SEG(__com32.cs_bounce);
+ __com32.cs_intcall(0x22, &inreg, NULL);
+ }
+
+ return 0;
+}
diff --git a/sample/opentest.c b/sample/opentest.c
deleted file mode 100644
index 4ffb7a0e..00000000
--- a/sample/opentest.c
+++ /dev/null
@@ -1,120 +0,0 @@
-#ident "$Id$"
-/* ----------------------------------------------------------------------- *
- *
- * Copyright 2002 H. Peter Anvin - All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, Inc., 53 Temple Place Ste 330,
- * Bostom MA 02111-1307, USA; either version 2 of the License, or
- * (at your option) any later version; incorporated herein by reference.
- *
- * -----------------------------------------------------------------------
-*/
-
-/*
- * startup.c
- *
- * Simple COM32 image
- *
- * This program shows how to open and read a file by SYSLINUX API call
- */
-
-#include <com32.h>
-
-#define NULL ((void *)0)
-
-static inline void memset(void *buf, int ch, unsigned int len)
-{
- asm volatile("cld; rep; stosb"
- : "+D" (buf), "+c" (len) : "a" (ch) : "memory");
-}
-
-static void strcpy(char *dst, const char *src)
-{
- while ( *src )
- *dst++ = *src++;
-
- *dst = '\0';
-}
-
-static void getversion(void)
-{
- com32sys_t inreg;
-
- memset(&inreg, 0, sizeof inreg);
-
- inreg.eax.w[0] = 0x0001; // Get version
- __com32.cs_intcall(0x22, &inreg, NULL);
-};
-
-
-static void writemsg(const char *msg)
-{
- com32sys_t inreg;
-
- memset(&inreg, 0, sizeof inreg);
-
- strcpy(__com32.cs_bounce, msg);
- inreg.eax.w[0] = 0x0002; /* Write string */
- inreg.ebx.w[0] = OFFS(__com32.cs_bounce);
- inreg.es = SEG(__com32.cs_bounce);
- __com32.cs_intcall(0x22, &inreg, NULL);
-};
-
-static void runcmd(const char *msg)
-{
- com32sys_t inreg;
-
- memset(&inreg, 0, sizeof inreg);
-
- strcpy(__com32.cs_bounce, msg);
- inreg.eax.w[0] = 0x0003; /* Run command */
- inreg.ebx.w[0] = OFFS(__com32.cs_bounce);
- inreg.es = SEG(__com32.cs_bounce);
- __com32.cs_intcall(0x22, &inreg, NULL);
-};
-
-
-int __start(void)
-{
- char data[512];
- int cx,ax,es,si,di,dx,t;
-
- com32sys_t inreg,outreg;
- memset(&inreg, 0, sizeof inreg);
- memset(&outreg, 0, sizeof outreg);
- strcpy(__com32.cs_bounce, "test.txt");
- inreg.eax.w[0] = 0x0006; // Open file
- inreg.esi.w[0] = OFFS(__com32.cs_bounce);
- inreg.es = SEG(__com32.cs_bounce);
- __com32.cs_intcall(0x22, &inreg, &outreg);
-
- si = outreg.esi.w[0];
- cx = outreg.ecx.b[0];
- ax = outreg.eax.b[0];
- if ((ax % cx) == 0)
- t = ax / cx;
- else
- t = (ax / cx) + 1;
-
- memset(&inreg, 0, sizeof inreg);
- memset(&outreg, 0, sizeof outreg);
- inreg.esi.w[0] = si;
- inreg.ecx.w[0] = t;
- inreg.eax.w[0] = 0x0007; //Read file
- inreg.ebx.w[0] = OFFS(__com32.cs_bounce);
- inreg.es = SEG(__com32.cs_bounce);
- __com32.cs_intcall(0x22, &inreg, NULL);
-/*
- inreg.eax.w[0] = 0x0002; // Write string
- inreg.ebx.w[0] = OFFS(__com32.cs_bounce);
- inreg.es = SEG(__com32.cs_bounce);
- __com32.cs_intcall(0x22, &inreg, NULL);
-*/
-
- writemsg("\r\n");
- runcmd("bzImage initrd=root.gz");
- writemsg("\r\n");
- return 0;
-}