Hello Daniel, hello Jim,
Thanks for the tests! Both games use a combination of kbhit + getch (with the arrow keys taking an extra getch, if the first one yields either 0 or 224).
[...]
Right now I'm writing a new real mode game (actually, a demake of my WIP protected mode game, https://montyontherun.itch.io/sub), using ia16-gcc and reading the keyboard with inline ASM by invoking int 16 and int 21. Would that be safer? If so, I can modify all my games to use that option, if so.
Apparently DJGPP uses int 0x16 to implement kbhit (), but int 0x21 to implement getch () --- I am not sure why --- and this might be a source of the "double keypress" problem. (I.e. there might be a DJGPP bug.) In general, I think it is best to stick to one way of getting keyboard input (different OS interfaces may have different buffers for keyboard input, and thus slightly different ideas on which keys have been processed or not). So, if you poll for keyboard input using int 0x16, then you should also consume the keyboard input using int 0x16; if you poll using int 0x21, then consume using int 0x21 as well; if you poll using an IRQ 1 handler, then consume the input there as well; etc. If you still want to build your code to build under DJGPP, perhaps instead of writing inline assembly, you can consider using the _bios_keybrd (.) function (<bios.h>). This function will consistently call int 0x16 to read keyboard input. :-) It is also supported by Open Watcom, and by my libi86 + gcc-ia16. Thank you! -- https://gitlab.com/tkchia :: https://github.com/tkchia _______________________________________________ Freedos-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/freedos-devel
