[syslinux] Re: Can not use read file SYSLINUX API call
Phung Chi Kien
kienpc at dubmail.net
Mon Sep 15 03:25:53 PDT 2003
Hi all, this is my code file:
#ident "$Id: startup.c,v 1.3 2003/07/01 00:42:13 hpa Exp $"
/* ----------------------------------------------------------------------- *
*
* 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;
}
Please review to find the problem of my code.
Thanks
----- Original Message -----
From: "H. Peter Anvin" <hpa at zytor.com>
To: "Phung Chi Kien" <kienpc at dubmail.net>
Cc: <SYSLINUX at zytor.com>
Sent: Monday, September 15, 2003 1:00 PM
Subject: Re: Can not use read file SYSLINUX API call
> Phung Chi Kien wrote:
> > Hi Peter Anvin
> > I tried to use open file and read file SYSLINUX API. But it always make
my
> > PC104 freeze. My snip code :
> >
>
> Can you please include the whole file, so that it can be compiled?
>
> -hpa
More information about the Syslinux
mailing list