From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KTOyH-0004G0-HX for mharc-grub-devel@gnu.org; Wed, 13 Aug 2008 18:37:37 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KTOyE-0004FI-VF for grub-devel@gnu.org; Wed, 13 Aug 2008 18:37:35 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KTOyC-0004Ep-FF for grub-devel@gnu.org; Wed, 13 Aug 2008 18:37:33 -0400 Received: from [199.232.76.173] (port=50653 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KTOyC-0004Ek-AX for grub-devel@gnu.org; Wed, 13 Aug 2008 18:37:32 -0400 Received: from ug-out-1314.google.com ([66.249.92.172]:34506) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KTOyB-0004k7-FI for grub-devel@gnu.org; Wed, 13 Aug 2008 18:37:32 -0400 Received: by ug-out-1314.google.com with SMTP id l31so196600ugc.48 for ; Wed, 13 Aug 2008 15:37:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:in-reply-to :references:content-type:date:message-id:mime-version:x-mailer; bh=EhHVLtNV2/OybxqClRHvyOw1yuq7kBjS8vR4JAidA9Y=; b=vlg4uSERbygAA932j/5QEOmlF8AFI6xPLTjiq7Raew2fxPD2yzJo2FuDrWNWP3SkGS witDXthndqcwiDtq0RlxqYupK+D88H+X316XeN+sAnE5wR7NiQnlGEjC4cX+4gDolZHi 1/ZFDsElvGb9v9PI+DHlNbWAbbf+k6TANV4nE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:in-reply-to:references:content-type:date:message-id :mime-version:x-mailer; b=QhJU/0PYMqMRGwhpEIgMWk9csOMDbKZ6E24CsfNHwLjSzuiiUC0uAMEbm/AX/AnnrP 4UeG3FefVBDIQVwvB0PrfEUyQr4AhA6maMO0drS5PaTiKGbl5YZWAyIspi0vMKvV/T/F aesJvryhH7JuZqkkg7iG7VBwn6PRTfYfzKVY8= Received: by 10.67.115.16 with SMTP id s16mr144564ugm.61.1218667049959; Wed, 13 Aug 2008 15:37:29 -0700 (PDT) Received: from ?192.168.1.100? ( [213.37.137.93]) by mx.google.com with ESMTPS id e34sm2743679ugd.39.2008.08.13.15.37.27 (version=SSLv3 cipher=RC4-MD5); Wed, 13 Aug 2008 15:37:28 -0700 (PDT) From: Javier =?ISO-8859-1?Q?Mart=EDn?= To: The development of GRUB 2 In-Reply-To: <873al83o1m.fsf@xs4all.nl> References: <1217806150.9634.24.camel@localhost> <87iqug33m9.fsf@xs4all.nl> <1217891426.15145.38.camel@localhost> <87vdyfem5k.fsf@xs4all.nl> <1217954381.14674.31.camel@localhost> <1218296029.20937.10.camel@localhost> <87k5el9q99.fsf@xs4all.nl> <1218629785.8757.30.camel@localhost> <20080813130022.GB26618@thorin> <1218637704.8757.60.camel@localhost> <20080813151406.GA31203@thorin> <873al83o1m.fsf@xs4all.nl> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-V6m2e0hdUo0rqMJKIvms" Date: Thu, 14 Aug 2008 00:38:15 +0200 Message-Id: <1218667095.8757.111.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) Subject: Re: [PATCH] Drivemap module X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Aug 2008 22:37:35 -0000 --=-V6m2e0hdUo0rqMJKIvms Content-Type: multipart/mixed; boundary="=-w48Irp0LTIYeDYfc1sh0" --=-w48Irp0LTIYeDYfc1sh0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ok, making a mixup reply... El mi=C3=A9, 13-08-2008 a las 17:14 +0200, Robert Millan escribi=C3=B3:=20 > On Wed, Aug 13, 2008 at 04:28:24PM +0200, Javier Mart=C3=ADn wrote: > > >=20 > > > I don't think this MODNAME approach is a bad idea per se [1][2], but = if we > > > are to do it, IMHO this should really be done globally for consistenc= y, and > > > preferably separately from this patch. > > >=20 > > > [1] But I'd use a const char[] instead of a macro to save space. May= be > > > significant space can be saved when doing this throurough the cod= e! > > >=20 > > > [2] In fact, I think it's a nice idea. > > Ok, so following your [1], what about replacing the define with... ? > >=20 > > static const char[] MODNAME =3D "drivemap"; >=20 > Yes, but I'd merge this change separately from your drivemap patch (eithe= r > before or after, as you prefer), for the whole of the codebase. Doesn't = make > sense to do it in some places but not in others, IMHO. Urgh... It's already been implemented in drivemap, why not put it in with it, then change everything else? Or should I just keep the #define in the meantime? >=20 > > It _could_ be made generic, but the function as it is currently designe= d > > installs a TSR-like assembly routine (more properly a bundle formed by = a > > routine and its data) in conventional memory that it has previously > > reserved. Furthermore, it accesses the real-mode IVT at its "standard" > > location of 0, which could be a weakness since from the 286 on even the > > realmode IVT can be relocated with lidt. > >=20 > > Nevertheless, I don't think this functionality is so badly needed on it= s > > own that it would be good to delay the implementation of "drivemap" to > > wait for the re-engineering of this function. >=20 > Fair enough. The addr=3D0 assumption sounds troubling, though. Why not = use > sidt instead? Well, so is the assumption that GRUB does not enable any kind of paging or memory remapping for that matter. WRT sidt, I think that could be better implemented as a function in kern/i386/pc called grub_machine_get_rmove_ivt() or SLT, because it requires dropping to rmode, executing sidt, going back to pmode and then returning the address, modified to be valid in pmode as required. This approach would cost a few bytes in kernel (I can hear you screaming already), but it would be extensible for the future "interrupt installer" you envisioned, and it would take care of the paging/mappings if there ever were any. Same for a function to get the address of the BDA or other machine-specific addresses. >=20 > > > > +/* Far pointer to the old handler. Stored as a CS:IP in the style= of real-mode > > > > + IVT entries (thus PI:SC in mem). */ > > > > +VARIABLE(grub_drivemap_int13_oldhandler) > > > > + .word 0xdead, 0xbeef > > >=20 > > > Is this a signature? Then a macro would be preferred, so that it can= be shared > > > with whoever checks for it. > > >=20 > > > What is it used for, anyway? In general, I like to be careful when u= sing > > > signatures because they introduce a non-deterministic factor (e.g. GR= UB > > > might have a 1/64k possibility to missbehave). > > Sorry, it was a leftover from early development, in which I had to debu= g > > the installing code to see whether the pointer to the old int13 was > > installer: a pointer of "beef:dead" was a clue that it didn't work. > > Removed and replaced with 32 bits of zeros. =20 >=20 > Ok. >=20 > > >=20 > > > > +FUNCTION(grub_drivemap_int13_handler) > > > > + push %bp > > > > + mov %sp, %bp > > > > + push %ax /* We'll need it later to determine the used BIOS func= tion. */ > > >=20 > > > Please use size modifiers (pushw, movw, etc). > > What for? the operands are clearly unambiguous. >=20 > For consistency (I'm so predictable). We do the same everywhere else. A= lso, > I think some versions of binutils reject instructions that don't have siz= e > qualifiers. Version 0.1 (alpha 2) maybe? IIRC, it's been long since the size qualifiers inference is available in GAS. =20 >=20 > And it's more readable for people used to gas (I know, it's also less rea= dable > for people used to tasm or so). TASM? Don't even name the devil. I like GAS and its directives (even better and NASM and YASM), but many of the conventions of the AT&T syntax are at best broken (i.e. src, dest looks good, but breaks on FP instructions), and memory references are a royal PITA. Given that the code is _not_ platform-portable and that a PPC dev will not understand it even in AT&T syntax, why bother with it... =20 However, I take it that your advertised predictability means that I should consider the "int13h in intel syntax" request denied. Nevertheless, I've attached the two versions of the asm file, so you can check which one is less of a mind boggler. Both assemble to _exactly_ the same machine code (checked with gcc + objdump). El mi=C3=A9, 13-08-2008 a las 17:57 +0200, Marco Gerards escribi=C3=B3: > Robert Millan writes: >=20 > [...] >=20 > >> > This is a lot of code being added to kernel, and space in kernel is = highly > >> > valuable. > >> >=20 > >> > Would the same functionality work if put inside a module? > >> For the reasons discussed above in the loader.h snippet, I don't think > >> so: the only "lighter" solution would be to just put a drivemap_hook > >> variable that would be called before boot, but as I mentioned before, > >> this solution can be employed by other modules as well. > >>=20 > >> Besides (and I realize this is not a great defense) it's not _that_ mu= ch > >> code: just a simple linked-list implementation with add and delete > >> operations, and the iteration of it on loader_boot. I did not check ho= w > >> many bytes does this patch add by itself, but I can run some simulatio= ns > >> (I totally _had_ to say that ^^) if you want. > > > > Having a small kernel is highly desireable for most users. If the kern= el is > > too big, it won't fit and then either we have to use blocklists (which = are > > unreliable), or we have to abort the install. > > > > Please, try to find a way that doesn't increase kernel size significant= ly. > > > > If the kernel interfaces are not extensible enough, you could try to re= adjust > > them for your needs. This approach works well most of the time (althou= gh I > > haven't studied this particular problem in detail). >=20 > Like discussed before. Bring up such modifications like hooks up in a > *separate* thread. I already said that not everyone reads this > discussion. I will not accept a patch that changes the kernel if it > is part of a bigger patch that not many people read. >=20 > Please don't discuss this over with Robert and me, you know that it > was pointed out that this has to be a patch in a separate thread. > Furthermore, this is a way to get some feedback from Bean who wants > something similar, IIRC. I know I will be regretting saying this, but it is _very_ rude to review some five versions of the patch, spotting mostly coding-style errors on each, and then, on version 8, tell me that "you won't accept a patch that contains blah" (with "blah" being essential for the patch to work). Quite the proverbial slap in the face to me. There was a discussion with other people sometime near May and June, true, and many people were mildly opposed to the current design, but I think I had proved that while the implementation could change (e.g. to a fixed-size array), the interface is pretty much as simple as it can get. Besides, and given that it is (and will be for the foreseeable future) only used by drivemap, changes to it should be pretty manageable and havoc-less. WRT Bean's hook proposal, even the BOOT_PRELOAD I've seen discussed works before the _high-level_ "boot" command is issued, while my patch acts from within grub_loader_boot, before grub_X_real_boot is called. However, given that the only actual difference in that timing is that my code works after loader.c has checked whether a kernel has been loaded and that can be checked from "userland" (i.e. modules), I could eventually use Bean's hooks for drivemap. I've searched the archives and haven't found any code, though. Could I get a cookie, er... pointer? -Habbit >=20 > -- > Marco >=20 >=20 >=20 > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > http://lists.gnu.org/mailman/listinfo/grub-devel --=-w48Irp0LTIYeDYfc1sh0 Content-Disposition: attachment; filename=drivemap_int13h.S Content-Type: text/x-csrc; name=drivemap_int13h.S; charset=utf-8 Content-Transfer-Encoding: base64 LyoNCiAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyDQogKiAgQ29weXJpZ2h0 IChDKSAxOTk5LDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNSwyMDA2LDIwMDcsMjAwOCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCiAqDQogKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogKiAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAq ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcg0KICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogKg0K ICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwNCiAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZg0KICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICogIGFsb25nIHdpdGggR1JVQi4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCiAqLw0KDQoNCi8q DQogKiBOb3RlOiBUaGVzZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbWF5IGJlIGNh bGxlZCBmcm9tIEMuDQogKiAgICAgICBCZSBjYXJlZnVsIG9mIHRoYXQgeW91IG11c3Qgbm90IG1v ZGlmeSBzb21lIHJlZ2lzdGVycy4gUXVvdGUNCiAqICAgICAgIGZyb20gZ2NjLTIuOTUuMi9nY2Mv Y29uZmlnL2kzODYvaTM4Ni5oOg0KDQogICAxIGZvciByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSBh Y3Jvc3MgZnVuY3Rpb24gY2FsbHMuDQogICBUaGVzZSBtdXN0IGluY2x1ZGUgdGhlIEZJWEVEX1JF R0lTVEVSUyBhbmQgYWxzbyBhbnkNCiAgIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGhv dXQgYmVpbmcgc2F2ZWQuDQogICBUaGUgbGF0dGVyIG11c3QgaW5jbHVkZSB0aGUgcmVnaXN0ZXJz IHdoZXJlIHZhbHVlcyBhcmUgcmV0dXJuZWQNCiAgIGFuZCB0aGUgcmVnaXN0ZXIgd2hlcmUgc3Ry dWN0dXJlLXZhbHVlIGFkZHJlc3NlcyBhcmUgcGFzc2VkLg0KICAgQXNpZGUgZnJvbSB0aGF0LCB5 b3UgY2FuIGluY2x1ZGUgYXMgbWFueSBvdGhlciByZWdpc3RlcnMgYXMgeW91IGxpa2UuDQoNCiAg YXgsZHgsY3gsYngsc2ksZGksYnAsc3Asc3Qsc3QxLHN0MixzdDMsc3Q0LHN0NSxzdDYsc3Q3LGFy Zw0KeyAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwg IDEsICAxIH0NCiAqLw0KDQovKg0KICogTm90ZTogR1JVQiBpcyBjb21waWxlZCB3aXRoIHRoZSBv cHRpb25zIC1tcnRkIGFuZCAtbXJlZ3Bhcm09My4NCiAqICAgICAgIFNvIHRoZSBmaXJzdCB0aHJl ZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiAlZWF4LCAlZWR4LCBhbmQgJWVjeCwNCiAqICAgICAg IHJlc3BlY3RpdmVseSwgYW5kIGlmIGEgZnVuY3Rpb24gaGFzIGEgZml4ZWQgbnVtYmVyIG9mIGFy Z3VtZW50cw0KICogICAgICAgYW5kIHRoZSBudW1iZXIgaWYgZ3JlYXRlciB0aGFuIHRocmVlLCB0 aGUgZnVuY3Rpb24gbXVzdCByZXR1cm4NCiAqICAgICAgIHdpdGggInJldCAkTiIgd2hlcmUgTiBp cyAoKHRoZSBudW1iZXIgb2YgYXJndW1lbnRzKSAtIDMpICogNC4NCiAqLw0KDQojaW5jbHVkZSA8 Z3J1Yi9zeW1ib2wuaD4NCg0KI2RlZmluZSBHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoeCkg KCh4KSAtIGdydWJfZHJpdmVtYXBfaW50MTNfaGFuZGxlcl9iYXNlKQ0KDQovKiBDb3B5IHN0YXJ0 cyBoZXJlLiAgV2hlbiBkZXBsb3llZCwgdGhpcyBsYWJlbCBtdXN0IGJlIHNlZ21lbnQtYWxpZ25l ZC4gICovDQpWQVJJQUJMRShncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFzZSkNCg0KLyog RmFyIHBvaW50ZXIgdG8gdGhlIG9sZCBoYW5kbGVyLiAgU3RvcmVkIGFzIGEgQ1M6SVAgaW4gdGhl IHN0eWxlIG9mIHJlYWwtbW9kZQ0KICAgSVZUIGVudHJpZXMgKHRodXMgUEk6U0MgaW4gbWVtKS4g ICovDQpWQVJJQUJMRShncnViX2RyaXZlbWFwX2ludDEzX29sZGhhbmRsZXIpDQogIC5sb25nIDAN Cg0KLyogRHJpdmVtYXAgbW9kdWxlIGJ1bmRsZSAtIElOVCAxM2ggaGFuZGxlciAtIEJJT1MgSEQg bWFwICovDQovKiBXZSBuZWVkIHRvIHVzZSByZWxhdGl2ZSBhZGRyZXNzaW5nLCBhbmQgd2l0aCBD UyB0byB0b3AgaXQgYWxsLCBzaW5jZSB3ZQ0KICAgbXVzdCBtYWtlIGFzIGZldyBjaGFuZ2VzIHRv IHRoZSByZWdpc3RlcnMgYXMgcG9zc2libGUuICBJUC1yZWxhdGl2ZQ0KICAgYWRkcmVzc2luZyBs aWtlIG9uIGFtZDY0IHdvdWxkIG1ha2UgbGlmZSB3YXkgZWFzaWVyIGhlcmUuICovDQouY29kZTE2 DQpGVU5DVElPTihncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXIpDQogIHB1c2ggJWJwDQogIG1v diAlc3AsICVicA0KICBwdXNoICVheCAgLyogV2UnbGwgbmVlZCBpdCBsYXRlciB0byBkZXRlcm1p bmUgdGhlIHVzZWQgQklPUyBmdW5jdGlvbi4gICovDQoNCiAgLyogTWFwIHRoZSBkcml2ZSBudW1i ZXIgKGFsd2F5cyBpbiBETD8pLiAgKi8NCiAgcHVzaCAlYXgNCiAgcHVzaCAlYngNCiAgcHVzaCAl c2kNCiAgbW92ICRHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoZ3J1Yl9kcml2ZW1hcF9pbnQx M19tYXBzdGFydCksICVieA0KICB4b3IgJXNpLCAlc2kNCjE6bW92dyAlY3M6KCVieCwlc2kpLCAl YXgNCiAgY21wICVhaCwgJWFsDQogIGp6IDNmIC8qIERSVj1EU1QgPT4gbWFwIGVuZCAtIGRyaXZl IG5vdCByZW1hcHBlZCwgbGVhdmUgREwgYXMtaXMuICAqLw0KICBjbXAgJWRsLCAlYWwNCiAganog MmYgLyogRm91bmQgLSBkcml2ZSByZW1hcHBlZCwgbW9kaWZ5IERMLiAgKi8NCiAgYWRkICQyLCAl c2kNCiAgam1wIDFiIC8qIE5vdCBmb3VuZCwgYnV0IG1vcmUgcmVtYWluaW5nLCBsb29wLiAgKi8N CjI6bW92ICVhaCwgJWRsDQozOnBvcCAlc2kNCiAgcG9wICVieA0KICB4Y2hndyAlYXgsIC00KCVi cCkgLyogUmVjb3ZlciB0aGUgb2xkIEFYIGFuZCBzYXZlIHRoZSBtYXAgZW50cnkgZm9yIGxhdGVy LiAgKi8NCiAgDQogIHB1c2ggJWJwDQogIC8qIFNpbXVsYXRlIGludGVycnVwdCBjYWxsOiBwdXNo IGZsYWdzIGFuZCBkbyBhIGZhciBjYWxsIGluIG9yZGVyIHRvIHNldA0KICAgICB0aGUgc3RhY2sg dGhlIHdheSB0aGUgb2xkIGhhbmRsZXIgZXhwZWN0cyBpdCBzbyB0aGF0IGl0cyBpcmV0IHdvcmtz LiAgKi8NCiAgcHVzaCA2KCVicCkNCiAgbW92dyAoJWJwKSwgJWJwICAvKiBSZXN0b3JlIHRoZSBj YWxsZXIgQlAgKGlzIHRoaXMgbmVlZGVkIGFuZC9vciBzZW5zaWJsZT8pLiAgKi8NCiAgbGNhbGwg KiVjczpHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoZ3J1Yl9kcml2ZW1hcF9pbnQxM19vbGRo YW5kbGVyKQ0KICBwb3AgJWJwIC8qIFRoZSBwdXNoZWQgZmxhZ3Mgd2VyZSByZW1vdmVkIGJ5IGly ZXQuICAqLw0KICAvKiBTZXQgdGhlIHNhdmVkIGZsYWdzIHRvIHdoYXQgdGhlIGludDEzaCBoYW5k bGVyIHJldHVybmVkLiAgKi8NCiAgcHVzaCAlYXgNCiAgcHVzaGYNCiAgcG9wICVheA0KICBtb3Z3 ICVheCwgNiglYnApDQogIHBvcCAlYXgNCg0KICAvKiBSZXZlcnNlIG1hcCBhbnkgcmV0dXJuZWQg ZHJpdmUgbnVtYmVyIGlmIHRoZSBkYXRhIHJldHVybmVkIGluY2x1ZGVzIGl0LiAgDQogICAgIFRo ZSBvbmx5IGZ1bmMgdGhhdCBkb2VzIHRoaXMgc2VlbXMgdG8gYmUgb3JpZ0FIID0gMHgwOCwgYnV0 IG1hbnkgQklPUw0KICAgICByZWZzIHNheSByZXRETCA9ICMgb2YgZHJpdmVzIGNvbm5lY3RlZC4g IEhvd2V2ZXIsIHRoZSBHUlVCIExlZ2FjeSBjb2RlDQogICAgIHRyZWF0cyB0aGlzIGFzIHRoZSBf ZHJpdmUgbnVtYmVyXyBhbmQgInVuZG9lcyIgdGhlIHJlbWFwcGluZy4gIFRodXMsDQogICAgIHRo aXMgc2VjdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgdGVzdGluZyBpZiBpdCdzIHJlcXVpcmVk LiAgKi8NCiMgIGNtcGIgJDB4MDgsIC0xKCVicCkgLyogQ2FsbGVyJ3MgQUguICAqLw0KIyAgam5l IDRmDQojICB4Y2hndyAlYXgsIC00KCVicCkgLyogTWFwIGVudHJ5IHVzZWQuICAqLw0KIyAgY21w ICVhaCwgJWFsICAvKiBEUlY9RFNUID0+IGRyaXZlIG5vdCByZW1hcHBlZC4gICovDQojICBqZSA0 Zg0KIyAgbW92ICVhaCwgJWRsICAvKiBVbmRvIHJlbWFwLiAgKi8NCg0KNDptb3YgJWJwLCAlc3AN CiAgcG9wICVicA0KICBpcmV0DQovKiBUaGlzIGxhYmVsIE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0 aGUgY29waWVkIGJsb2NrLCBzaW5jZSB0aGUgaW5zdGFsbGVyIGNvZGUNCiAgIHJlc2VydmVzIGFk ZGl0aW9uYWwgc3BhY2UgZm9yIG1hcHBpbmdzIGF0IHJ1bnRpbWUgYW5kIGNvcGllcyB0aGVtIG92 ZXIgaXQuICAqLw0KLmFsaWduIDINClZBUklBQkxFKGdydWJfZHJpdmVtYXBfaW50MTNfbWFwc3Rh cnQpDQovKiBDb3B5IHN0b3BzIGhlcmUuICAqLw0KLmNvZGUzMg0KVkFSSUFCTEUoZ3J1Yl9kcml2 ZW1hcF9pbnQxM19zaXplKQ0KICAud29yZCBHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoZ3J1 Yl9kcml2ZW1hcF9pbnQxM19zaXplKQ0KDQo= --=-w48Irp0LTIYeDYfc1sh0 Content-Disposition: attachment; filename=drivemap_int13h_intel.S Content-Type: text/x-csrc; name=drivemap_int13h_intel.S; charset=utf-8 Content-Transfer-Encoding: base64 LyoNCiAqICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyDQogKiAgQ29weXJpZ2h0 IChDKSAxOTk5LDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNSwyMDA2LDIwMDcsMjAwOCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCiAqDQogKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogKiAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAq ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcg0KICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogKg0K ICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwNCiAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZg0KICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLg0KICoNCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICogIGFsb25nIHdpdGggR1JVQi4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCiAqLw0KDQoNCi8q DQogKiBOb3RlOiBUaGVzZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbWF5IGJlIGNh bGxlZCBmcm9tIEMuDQogKiAgICAgICBCZSBjYXJlZnVsIG9mIHRoYXQgeW91IG11c3Qgbm90IG1v ZGlmeSBzb21lIHJlZ2lzdGVycy4gUXVvdGUNCiAqICAgICAgIGZyb20gZ2NjLTIuOTUuMi9nY2Mv Y29uZmlnL2kzODYvaTM4Ni5oOg0KDQogICAxIGZvciByZWdpc3RlcnMgbm90IGF2YWlsYWJsZSBh Y3Jvc3MgZnVuY3Rpb24gY2FsbHMuDQogICBUaGVzZSBtdXN0IGluY2x1ZGUgdGhlIEZJWEVEX1JF R0lTVEVSUyBhbmQgYWxzbyBhbnkNCiAgIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGhv dXQgYmVpbmcgc2F2ZWQuDQogICBUaGUgbGF0dGVyIG11c3QgaW5jbHVkZSB0aGUgcmVnaXN0ZXJz IHdoZXJlIHZhbHVlcyBhcmUgcmV0dXJuZWQNCiAgIGFuZCB0aGUgcmVnaXN0ZXIgd2hlcmUgc3Ry dWN0dXJlLXZhbHVlIGFkZHJlc3NlcyBhcmUgcGFzc2VkLg0KICAgQXNpZGUgZnJvbSB0aGF0LCB5 b3UgY2FuIGluY2x1ZGUgYXMgbWFueSBvdGhlciByZWdpc3RlcnMgYXMgeW91IGxpa2UuDQoNCiAg YXgsZHgsY3gsYngsc2ksZGksYnAsc3Asc3Qsc3QxLHN0MixzdDMsc3Q0LHN0NSxzdDYsc3Q3LGFy Zw0KeyAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwg IDEsICAxIH0NCiAqLw0KDQovKg0KICogTm90ZTogR1JVQiBpcyBjb21waWxlZCB3aXRoIHRoZSBv cHRpb25zIC1tcnRkIGFuZCAtbXJlZ3Bhcm09My4NCiAqICAgICAgIFNvIHRoZSBmaXJzdCB0aHJl ZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiAlZWF4LCAlZWR4LCBhbmQgJWVjeCwNCiAqICAgICAg IHJlc3BlY3RpdmVseSwgYW5kIGlmIGEgZnVuY3Rpb24gaGFzIGEgZml4ZWQgbnVtYmVyIG9mIGFy Z3VtZW50cw0KICogICAgICAgYW5kIHRoZSBudW1iZXIgaWYgZ3JlYXRlciB0aGFuIHRocmVlLCB0 aGUgZnVuY3Rpb24gbXVzdCByZXR1cm4NCiAqICAgICAgIHdpdGggInJldCAkTiIgd2hlcmUgTiBp cyAoKHRoZSBudW1iZXIgb2YgYXJndW1lbnRzKSAtIDMpICogNC4NCiAqLw0KDQojaW5jbHVkZSA8 Z3J1Yi9zeW1ib2wuaD4NCg0KLmludGVsX3N5bnRheCBub3ByZWZpeA0KDQojZGVmaW5lIEdSVUJf RFJJVkVNQVBfSU5UMTNIX09GRlNFVCh4KSAoKHgpIC0gZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5k bGVyX2Jhc2UpDQoNCi8qIENvcHkgc3RhcnRzIGhlcmUuICBXaGVuIGRlcGxveWVkLCB0aGlzIGxh YmVsIG11c3QgYmUgc2VnbWVudC1hbGlnbmVkLiAgKi8NClZBUklBQkxFKGdydWJfZHJpdmVtYXBf aW50MTNfaGFuZGxlcl9iYXNlKQ0KDQovKiBGYXIgcG9pbnRlciB0byB0aGUgb2xkIGhhbmRsZXIu ICBTdG9yZWQgYXMgYSBDUzpJUCBpbiB0aGUgc3R5bGUgb2YgcmVhbC1tb2RlDQogICBJVlQgZW50 cmllcyAodGh1cyBQSTpTQyBpbiBtZW0pLiAgKi8NClZBUklBQkxFKGdydWJfZHJpdmVtYXBfaW50 MTNfb2xkaGFuZGxlcikNCiAgLmxvbmcgMA0KDQovKiBEcml2ZW1hcCBtb2R1bGUgYnVuZGxlIC0g SU5UIDEzaCBoYW5kbGVyIC0gQklPUyBIRCBtYXAgKi8NCi8qIFdlIG5lZWQgdG8gdXNlIHJlbGF0 aXZlIGFkZHJlc3NpbmcsIGFuZCB3aXRoIENTIHRvIHRvcCBpdCBhbGwsIHNpbmNlIHdlDQogICBt dXN0IG1ha2UgYXMgZmV3IGNoYW5nZXMgdG8gdGhlIHJlZ2lzdGVycyBhcyBwb3NzaWJsZS4gIElQ LXJlbGF0aXZlDQogICBhZGRyZXNzaW5nIGxpa2Ugb24gYW1kNjQgd291bGQgbWFrZSBsaWZlIHdh eSBlYXNpZXIgaGVyZS4gKi8NCi5jb2RlMTYNCkZVTkNUSU9OKGdydWJfZHJpdmVtYXBfaW50MTNf aGFuZGxlcikNCiAgcHVzaCBicA0KICBtb3YgYnAsIHNwDQogIHB1c2ggYXggIC8qIFdlJ2xsIG5l ZWQgaXQgbGF0ZXIgdG8gZGV0ZXJtaW5lIHRoZSB1c2VkIEJJT1MgZnVuY3Rpb24uICAqLw0KDQog IC8qIE1hcCB0aGUgZHJpdmUgbnVtYmVyIChhbHdheXMgaW4gREw/KS4gICovDQogIHB1c2ggYXgN CiAgcHVzaCBieA0KICBwdXNoIHNpDQogIG1vdiBieCwgb2Zmc2V0IEdSVUJfRFJJVkVNQVBfSU5U MTNIX09GRlNFVChncnViX2RyaXZlbWFwX2ludDEzX21hcHN0YXJ0KQ0KICB4b3Igc2ksIHNpDQox Om1vdiBheCwgd29yZCBwdHIgY3M6W2J4ICsgc2ldDQogIGNtcCBhbCwgYWgNCiAganogM2YgLyog RFJWPURTVCA9PiBtYXAgZW5kIC0gZHJpdmUgbm90IHJlbWFwcGVkLCBsZWF2ZSBETCBhcy1pcy4g ICovDQogIGNtcCBhbCwgZGwNCiAganogMmYgLyogRm91bmQgLSBkcml2ZSByZW1hcHBlZCwgbW9k aWZ5IERMLiAgKi8NCiAgYWRkIHNpLCAyDQogIGptcCAxYiAvKiBOb3QgZm91bmQsIGJ1dCBtb3Jl IHJlbWFpbmluZywgbG9vcC4gICovDQoyOm1vdiBkbCwgYWgNCjM6cG9wIHNpDQogIHBvcCBieA0K ICB4Y2hnIGF4LCBbYnAgLSA0XSAvKiBSZWNvdmVyIHRoZSBvbGQgQVggYW5kIHNhdmUgdGhlIG1h cCBlbnRyeSBmb3IgbGF0ZXIuICAqLw0KICANCiAgcHVzaCBicA0KICAvKiBTaW11bGF0ZSBpbnRl cnJ1cHQgY2FsbDogcHVzaCBmbGFncyBhbmQgZG8gYSBmYXIgY2FsbCBpbiBvcmRlciB0byBzZXQN CiAgICAgdGhlIHN0YWNrIHRoZSB3YXkgdGhlIG9sZCBoYW5kbGVyIGV4cGVjdHMgaXQgc28gdGhh dCBpdHMgaXJldCB3b3Jrcy4gICovDQogIHB1c2ggW2JwICsgNl0NCiAgbW92IGJwLCB3b3JkIHB0 ciBbYnBdICAvKiBSZXN0b3JlIHRoZSBjYWxsZXIgQlAgKGlzIHRoaXMgbmVlZGVkIGFuZC9vciBz ZW5zaWJsZT8pLiAgKi8NCiAgY2FsbCBkd29yZCBwdHIgY3M6W0dSVUJfRFJJVkVNQVBfSU5UMTNI X09GRlNFVChncnViX2RyaXZlbWFwX2ludDEzX29sZGhhbmRsZXIpXQ0KICBwb3AgYnAgLyogVGhl IHB1c2hlZCBmbGFncyB3ZXJlIHJlbW92ZWQgYnkgaXJldC4gICovDQogIC8qIFNldCB0aGUgc2F2 ZWQgZmxhZ3MgdG8gd2hhdCB0aGUgaW50MTNoIGhhbmRsZXIgcmV0dXJuZWQuICAqLw0KICBwdXNo IGF4DQogIHB1c2hmDQogIHBvcCBheA0KICBtb3Ygd29yZCBwdHIgW2JwICsgNl0sIGF4DQogIHBv cCBheA0KDQogIC8qIFJldmVyc2UgbWFwIGFueSByZXR1cm5lZCBkcml2ZSBudW1iZXIgaWYgdGhl IGRhdGEgcmV0dXJuZWQgaW5jbHVkZXMgaXQuICANCiAgICAgVGhlIG9ubHkgZnVuYyB0aGF0IGRv ZXMgdGhpcyBzZWVtcyB0byBiZSBvcmlnQUggPSAweDA4LCBidXQgbWFueSBCSU9TDQogICAgIHJl ZnMgc2F5IHJldERMID0gIyBvZiBkcml2ZXMgY29ubmVjdGVkLiAgSG93ZXZlciwgdGhlIEdSVUIg TGVnYWN5IGNvZGUNCiAgICAgdHJlYXRzIHRoaXMgYXMgdGhlIF9kcml2ZSBudW1iZXJfIGFuZCAi dW5kb2VzIiB0aGUgcmVtYXBwaW5nLiAgVGh1cywNCiAgICAgdGhpcyBzZWN0aW9uIGhhcyBiZWVu IGRpc2FibGVkIGZvciB0ZXN0aW5nIGlmIGl0J3MgcmVxdWlyZWQuICAqLw0KIyAgY21wIGJ5dGUg cHRyIFticCAtIDFdLCAweDA4IC8qIENhbGxlcidzIEFILiAgKi8NCiMgIGpuZSA0Zg0KIyAgeGNo ZyBheCwgW2JwIC0gNF0gLyogTWFwIGVudHJ5IHVzZWQuICAqLw0KIyAgY21wIGFsLCBhaCAgLyog RFJWPURTVCA9PiBkcml2ZSBub3QgcmVtYXBwZWQuICAqLw0KIyAgamUgNGYNCiMgIG1vdiBkbCwg YWggIC8qIFVuZG8gcmVtYXAuICAqLw0KDQo0Om1vdiBzcCwgYnANCiAgcG9wIGJwDQogIGlyZXQN Ci8qIFRoaXMgbGFiZWwgTVVTVCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBjb3BpZWQgYmxvY2ssIHNp bmNlIHRoZSBpbnN0YWxsZXIgY29kZQ0KICAgcmVzZXJ2ZXMgYWRkaXRpb25hbCBzcGFjZSBmb3Ig bWFwcGluZ3MgYXQgcnVudGltZSBhbmQgY29waWVzIHRoZW0gb3ZlciBpdC4gICovDQouYWxpZ24g Mg0KVkFSSUFCTEUoZ3J1Yl9kcml2ZW1hcF9pbnQxM19tYXBzdGFydCkNCi8qIENvcHkgc3RvcHMg aGVyZS4gICovDQouY29kZTMyDQpWQVJJQUJMRShncnViX2RyaXZlbWFwX2ludDEzX3NpemUpDQog IC53b3JkIEdSVUJfRFJJVkVNQVBfSU5UMTNIX09GRlNFVChncnViX2RyaXZlbWFwX2ludDEzX3Np emUpDQoNCm== --=-w48Irp0LTIYeDYfc1sh0-- --=-V6m2e0hdUo0rqMJKIvms Content-Type: application/pgp-signature; name=signature.asc Content-Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iQIVAwUASKNiVqSl+Fbdeo72AQKSXxAArmRpb6+1E/YsDvOm7DHBNx/LOJcNK/4m dA90ASJzD65NYXtA8SavsvcUS0dhGPc/pfrNLjujiBT/C9KIbeBDZosO213wzF6M XUoHRyzJHvlSKqxvrV+IiSytcnITUhmM7U9/gc72yIf/KUGPGDbdWEPIFlns90an ZJst/8PDmJlX0KbydvQCWuLwiFpVeDKjESL6cOAouxj9y6zOZBUmBIm1rVZY8OJQ dEnxo1AKkk/y525dV9L3TgoOoGsyf0wvcJxN8rPxuII0/sYitInXqr/quIEAL/w8 CNWfVudDWHcEs8poeWw1lgdqKCh6Z7XSFrHqzDxyCAdoaKR99hhs11id6NduOZea bZAmaZyF6I4Ah4lXLaI626r5sThqbUL+PrqT3LzmzmWLx61P10qABH9JNzenhqFa qEponvHwgFnKoB2NrdP+1Ht7xk2HsZ1Ad2B24R/+Wuq6P8rpttUV4TDS3p81D1BD zKCxHAHStn0RBwwsr6hNzt05mX5LUP1NDvrJN6QPimR/YYJcZ1taeEaI/nveEIlK Vcz9wfMyFS+hCQY3Vvo4rq/Ez8LgS7g6I5q4uD4UdvCQoum85U24Wc6Uhh5W6kKg xQXJe/VWhxztaxIbz2Kg2Y49GTz6qmv8/uITGn8SDQ9WdGXKuJ+kxA8zwdRc+3BQ eafx6lr1abw= =1+Bc -----END PGP SIGNATURE----- --=-V6m2e0hdUo0rqMJKIvms--