From: Frank K. <fbk...@zy...> - 2009-07-17 10:23:26
|
zak100 wrote: > Hi, > Thanks for your help. > > > I have received your mz folder. It has two binaries: boot and image. 'boot' > is fine > but when i tried to load image to sector 2 it didnt work. Maybe I am doing > something > wrong. What *I* do is to combine "boot.bin" plus "mzt1.exe"(!) into "image.bin", and load the whole thing, starting at sector 1. You could use "image.bin", loading it to sector 1 - "writeit" won't do (only does 512 bytes), but "partcopy" ought to - "partcopy image.bin 0 323 -f0", I think would do it. (I create "image.bin" with "cat", but you could use "copy /b boot.bin+mzt1.exe image bin", I think) Alternatively, you could write them separately - "boot.bin" with "writeit" or "partcopy", and "partcopy" for "mzt1.exe". The idea is simply to eliminate the "exe2bin" step, and load an MZ executable. > However, I didnt find any 'C' files. Heh! No, I'm not taking the course, so I don't have to follow the rules. :) I don't "do" C, unless absolutely necessary - haven't got a 16-bit compiler, in any case. If you look at "kmain.asm", "write.asm" and "getkey.asm", you'll see that they're "fake C" - you "should" be able to replace them with "real C" equivalents... if I've done it right (big if). "mzt1.asm" serves the purpose (approximately) of "crt0" or whatever your compiler calls the "startup code" that calls "main" - "kmain", in this case. I've modified your bootsector (the one we "translated" from Tasmese) - among other things, I altered it to read just one sector (reading 5 tracks wasn't working for me, for some reason). My "mzt1.exe" is well under that, so far, but when it gets more extensive, the bootsector is going to have to change. I mention this because, in my experience, C tends to produce "bloated" code, compared to asm, and if you go over 512 bytes, it's going to mysteriously quit working. Another way I haven't "followed the assignment" is that I used int 10h for "write()". I'm confident I can write a string to B800:????, if I can find the string! The purpose of this step of the exercise, for me, is to be able to find my data! I figure if I can find the string, I can find "cursor_x" and "cursor_y", and I know how to find the "screen". This seems to "work"... as long as I put code and data in the same segment. So far, my attempts to declare a "proper stack" and put "data" in "segment data" have failed. What I'm seeing in the executable header doesn't match what I "expect" to see. If and when I figure out how to deal with that, and with far calls and far data, I won't be stuck in a single 64k segment! (plus, it's not nice to teach beginners to ignore the warning about "no stack"! :) I don't know what compiler you're using, or what you're telling it. Are you sticking to "model tiny"? I'm not sure what a compiler (and Alink) will emit, from the code you posted. If you want to send me some "output" - either before or after "exe2bin", or both, I'll try to figure out how we might load it (if you're still having trouble with that). No guarantee - I can't always figure out how to load my own stuff. :) "Post exe2bin" should be "easier"... maybe... Sorry I wasn't clearer about how to use that example. I was pretty tired when I posted. ("try this *one* more thing and test it and then I'm going to bed!"...) I should have mentioned that while "build" won't work in dos (a bash script), it has some clues to how to put the thing together. Lemme see if I remember how to write a dos batch file... call nasm -f bin bootmz.asm -o boot.bin call nasm -f obj mzt1.asm call nasm -f obj kmain.asm call nasm -f obj write.asm call nasm -f obj getkey.asm call alink -oEXE mzt1.obj kmain.obj write.obj getkey.obj call copy /b boot.bin+mzt1.exe image.bin call partcopy image.bin 0 323 -f0 echo done That's totally untested (and doesn't check returned errorlevels). Good luck! Best, Frank |