| /* ----------------------------------------------------------------------- * |
| * |
| * Copyright 2002-2008 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, |
| * Boston MA 02111-1307, USA; either version 2 of the License, or |
| * (at your option) any later version; incorporated herein by reference. |
| * |
| * ----------------------------------------------------------------------- */ |
| |
| /* |
| * hello2.c |
| * |
| * Simple COM32 image |
| * |
| * This version shows how to use the bounce buffer for data transfer |
| * to the BIOS or COMBOOT system calls. |
| */ |
| |
| #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 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); |
| }; |
| |
| int __start(void) |
| { |
| writemsg("Hello, World!\r\n" "cmdline = "); |
| writemsg(__com32.cs_cmdline); |
| writemsg("\r\n"); |
| return 0; |
| } |