Date: Sun, 11 Jan 2004 20:18:28 +0100 From: Marcin Dalecki <mdcki@gmx.net> To: Martin Nilsson <martin@gneto.com> Cc: freebsd-hackers@freebsd.org Subject: Re: Assembler coding help needed. Message-ID: <4001A184.5060301@gmx.net> In-Reply-To: <4001552B.5060108@gneto.com> References: <4001552B.5060108@gneto.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Martin Nilsson wrote: > I'm trying to find out why I can't boot 5.2 from USB CDROM on Supermicro > motherboards. (I have an old Gateway P3 that can!). > > I've found out that that only 0x20 of 0x4c sectors of the loader are > read in and it therfor traps when executed. (read is only called once). > > My last attempt at programming x86 assembler was ~15years ago so I'm a > bit rusty :-) > > The below loop from cdboot.s is what I'm having problem understanding, > how can this fail on one box but not on another? > > # > # Load the binary into the buffer. Due to real mode addressing limitations > # we have to read it in in 64k chunks. > # > mov DIR_SIZE(%bx),%eax # Read file length > add $SECTOR_SIZE-1,%eax # Convert length to sectors > shr $11,%eax > > %eax is 0x4c here on both machines! > > cmp $BUFFER_LEN,%eax > jbe load_sizeok > mov $msg_load2big,%si # Error message > call error > load_sizeok: movzbw %al,%cx # Num sectors to read > mov DIR_EXTENT(%bx),%eax # Load extent > xor %edx,%edx > mov DIR_EA_LEN(%bx),%dl > add %edx,%eax # Skip extended > mov $MEM_READ_BUFFER,%ebx # Read into the buffer > load_loop: mov %cl,%dh > cmp $MAX_READ_SEC,%cl # Truncate to max read size > jbe load_notrunc > mov $MAX_READ_SEC,%dh > load_notrunc: sub %dh,%cl # Update count > push %eax # Save > call read # Read it in The fun will be ^^^^ here. The rest is self contained and doesn't depend on CPU variant or periphery. > pop %eax # Restore > add $MAX_READ_SEC,%eax # Update LBA > add $MAX_READ,%ebx # Update dest addr > jcxz load_done # Done? > jmp load_loop # Keep going > load_done: > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4001A184.5060301>