Ok, here is the first try to turn the gfxboot wrapper into a com32 module. I had to extend the interface to the gfxboot core a bit to get it working. So it works only with latest gfxboot from git://gitorious.org/gfxboot/gfxboot.git Steffen -------------- next part -------------- A non-text attachment was scrubbed... Name: gfxboot_c32.diff.gz Type: application/x-gzip Size: 7220 bytes Desc: URL: <http://www.zytor.com/pipermail/syslinux/attachments/20091029/c631f5de/attachment.gz>
On 10/29/2009 08:57 AM, Steffen Winterfeldt wrote:> Ok, here is the first try to turn the gfxboot wrapper into a com32 module. I > had to extend the interface to the gfxboot core a bit to get it working. So > it works only with latest gfxboot from > > git://gitorious.org/gfxboot/gfxboot.git > > SteffenHi Steffen, I'm looking at it, and I'm trying to understand the code flow (what calls what). In particular, I'm wondering where the cb_table gets involved. This code, I fear, will not by itself solve the issues that a 16-bit UI causes with multithreaded 32-bit code as it still uses INT 22h. -hpa
Steffen Winterfeldt wrote:> Ok, here is the first try to turn the gfxboot wrapper into a com32 module. I > had to extend the interface to the gfxboot core a bit to get it working. So > it works only with latest gfxboot from > > git://gitorious.org/gfxboot/gfxboot.git >Nice work! Two notes: find_file() used to accept the gfx file directly and not forced the use of a cpio archive. To keep this behaviour the following change is needed: --- gfxboot.c.orig 2009-11-14 11:04:18.000000000 +0100 +++ gfxboot.c 2009-11-14 11:30:48.000000000 +0100 @@ -424,7 +424,7 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Search cpio archive for gfx file. +// Search (cpio archive) for gfx file. // unsigned find_file(unsigned char *buf, unsigned len, unsigned *gfx_file_start, unsigned *file_len, unsigned *code_size) { @@ -433,6 +433,9 @@ *gfx_file_start = 0; *code_size = 0; + if((code_start = magic_ok(buf, code_size))) { + return code_start; + } for(i = 0; i < len;) { if((len - i) >= 0x1a && (buf[i] + (buf[i + 1] << 8)) == 0x71c7) { fname_len = *(unsigned short *) (buf + i + 20); Non kernel type labels are not being run (menu_ptr->kernel and menu_ptr->linux are both NULL). The following change fixes this: --- gfxboot.c.orig 2009-11-14 11:04:18.000000000 +0100 +++ gfxboot.c 2009-11-14 11:30:48.000000000 +0100 @@ -730,7 +733,12 @@ file = menu_ptr->kernel; if(!file) file = menu_ptr->linux; - if(!file) return; + if(!file) { + gfx_done(); + asprintf(&cmd_buf, "%s %s", menu_ptr->label, arg); + syslinux_run_command(cmd_buf); + return; + } // first, load kernel - Sebastian
On Sat, 14 Nov 2009, Sebastian Herbszt wrote:> Steffen Winterfeldt wrote: >> Ok, here is the first try to turn the gfxboot wrapper into a com32 module. >> I >> had to extend the interface to the gfxboot core a bit to get it working. So >> it works only with latest gfxboot from >> >> git://gitorious.org/gfxboot/gfxboot.git >>> Non kernel type labels are not being run (menu_ptr->kernel and > menu_ptr->linux are both NULL). > The following change fixes this:[...] Yes, missed that one. Steffen -- Das Nichtrauchen entfernt uns von der Zivilisation und setzt den Mann mit seinem Dackel gleich. -- J. C.
Steffen Winterfeldt wrote:> Ok, here is the first try to turn the gfxboot wrapper into a com32 module. I > had to extend the interface to the gfxboot core a bit to get it working. So > it works only with latest gfxboot from > > git://gitorious.org/gfxboot/gfxboot.gitrealmode_callback.asm cb_getcwd: mov ax,15h int 22h doc/comboot.txt: AX=0015h [3.10] Get feature flags AX=001Fh [3.74] Get current working directory Should be 1Fh? - Sebastian
On Fri, 20 Nov 2009, Sebastian Herbszt wrote:> Steffen Winterfeldt wrote: >> Ok, here is the first try to turn the gfxboot wrapper into a com32 module. >> I >> had to extend the interface to the gfxboot core a bit to get it working. So >> it works only with latest gfxboot from >> >> git://gitorious.org/gfxboot/gfxboot.git > > realmode_callback.asm > > cb_getcwd: > mov ax,15h > int 22h > > doc/comboot.txt: > AX=0015h [3.10] Get feature flags > AX=001Fh [3.74] Get current working directory > > Should be 1Fh?Yes, is a typo. Steffen -- Das Nichtrauchen entfernt uns von der Zivilisation und setzt den Mann mit seinem Dackel gleich. -- J. C.