diff options
author | hpa <hpa> | 2003-11-10 19:29:50 +0000 |
---|---|---|
committer | hpa <hpa> | 2003-11-10 19:29:50 +0000 |
commit | d5e75bb5c1edd17e54761d0b534ef3a75bc26710 (patch) | |
tree | ca497e61382c1074c29b1b37834b13feca03f622 | |
parent | c74911057c187678826796b0aedab4913b639379 (diff) | |
download | syslinux-d5e75bb5c1edd17e54761d0b534ef3a75bc26710.tar.gz syslinux-d5e75bb5c1edd17e54761d0b534ef3a75bc26710.tar.xz syslinux-d5e75bb5c1edd17e54761d0b534ef3a75bc26710.zip |
Test for the OPEN API command
-rw-r--r-- | sample/Makefile | 2 | ||||
-rw-r--r-- | sample/opentest.c | 120 |
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; +} |