aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhpa <hpa>2003-11-10 19:29:50 +0000
committerhpa <hpa>2003-11-10 19:29:50 +0000
commitd5e75bb5c1edd17e54761d0b534ef3a75bc26710 (patch)
treeca497e61382c1074c29b1b37834b13feca03f622
parentc74911057c187678826796b0aedab4913b639379 (diff)
downloadsyslinux-d5e75bb5c1edd17e54761d0b534ef3a75bc26710.tar.gz
syslinux-d5e75bb5c1edd17e54761d0b534ef3a75bc26710.tar.xz
syslinux-d5e75bb5c1edd17e54761d0b534ef3a75bc26710.zip
Test for the OPEN API command
-rw-r--r--sample/Makefile2
-rw-r--r--sample/opentest.c120
2 files changed, 121 insertions, 1 deletions
diff --git a/sample/Makefile b/sample/Makefile
index 5626d131..ad8626ec 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
+all: syslogo.lss hello.c32 hello2.c32 opentest.c32
%.o: %.S
$(CC) $(SFLAGS) -c -o $@ $<
diff --git a/sample/opentest.c b/sample/opentest.c
new file mode 100644
index 00000000..4ffb7a0e
--- /dev/null
+++ b/sample/opentest.c
@@ -0,0 +1,120 @@
+#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;
+}