Board index » delphi » Keyboard stuffs...

Keyboard stuffs...

I'm making a game... and I need help with the keyboard...
I don't need to write a full interupt handler, but i would like
some help detecting a key release...

When I use Interupt 16h with function 01h, and i put a ball
on the screen, the ball doesn't stop moving when i let up on the key...
if i use function 00h, then it does allow me to release the key but
while i'm pressing the key, it waits for another keypress and it makes
the ball move very slowly...  can anyone help me with this?

Please reply to O...@gconn.com or GPLeCh...@aol.com thanks -Keith W. II

 

Re:Keyboard stuffs...


Quote
Keith Weatherby II wrote:

> I'm making a game... and I need help with the keyboard...
> I don't need to write a full interupt handler, but i would like
> some help detecting a key release...

There is a source code file for just this on my web page:
http://www.cris.com/~rhinoh/tp.htm
Go to sources and it will be there.  Good luck!

--
R. Hannay                      
Rhi...@Cris.com
http://www.cris.com/~rhinoh/tp.htm

Re:Keyboard stuffs...


Quote
Keith Weatherby II wrote:

> I'm making a game... and I need help with the keyboard...
> I don't need to write a full interupt handler, but i would like
> some help detecting a key release...

> When I use Interupt 16h with function 01h, and i put a ball
> on the screen, the ball doesn't stop moving when i let up on the key...
> if i use function 00h, then it does allow me to release the key but
> while i'm pressing the key, it waits for another keypress and it makes
> the ball move very slowly...  can anyone help me with this?

> Please reply to O...@gconn.com or GPLeCh...@aol.com thanks -Keith W. II

The way I would do it is by reading "port[$60]" (the keyboard is seeding
all his codes by this port) ex:

{$X+}

uses crt;

var
   u : byte;

begin
     u := 1;
     repeat
           writeln (port[$60]);
           delay (100);
     until u = 0;
end.

Should solve your problem.

                                -=Fungus=-
                It's grows everywhere...

Re:Keyboard stuffs...


Quote
Fungus wrote:
> The way I would do it is by reading "port[$60]" (the keyboard is
> seeding all his codes by this port) ex:

> {$X+}

> uses crt;

> var
>    u : byte;

> begin
>      u := 1;
>      repeat
>            writeln (port[$60]);
>            delay (100);
>      until u = 0;
> end.

I would advise against polling port[$60] if no data is
waiting. This seems to generate chaos with some mouse types
(eg. PS/2). Hook int 09 and read port[$60] from there.
Solved that problem for me.

   __/  __/   -  Christian Froeschlin
  /    /
 /     _/     * If you eliminate the impossible, whatever remains, *
___/ _/       * however improbable, must be the BUG !              *

Re:Keyboard stuffs...


Quote
>I'm making a game... and I need help with the keyboard...
>I don't need to write a full interupt handler, but i would like
>some help detecting a key release...

Both of these are programs I wrote a long time ago. I certainly wouldn't write
that way now. The first buffers keyboard interrupts so you can see what
different keys do. See how many keys you can press at one time for fun. Press
ESC to exit. The second is a TSR to trap print screen. I found a better way to
do that, but it's an example of trapping the keyboard.

********************
****** SCANCODE.ASM
********************

PSECT  SEGMENT PARA
       ASSUME  CS:PSECT,DS:PSECT,ES:PSECT,SS:PSECT

       ORG     0
LOWER  EQU     $

       ORG     100H
STA:   JMP     STB

TIME:  DB      0
SW:    DB      0
STATA: DB      0
STATB: DB      0
BUFF:  DB      256 DUP (0)

MORE:  DB      " ","$"
NONE:  DB      13,10,"$"

SIGN:  DB      13,10,"scancode 81H (Esc) terminates program",13,10,10,"$"

STB:   LEA     DX,SIGN
       MOV     AH,9
       INT     33
       XOR     AX,AX
       PUSH    AX
       POP     DS
       LEA     BX,LOWER+24H
       MOV     AL,[BX]
       INC     BX
       MOV     AH,[BX]
       INC     BX
       PUSH    AX
       MOV     AL,[BX]
       INC     BX
       MOV     AH,[BX]
       PUSH    AX
       LEA     BX,LOWER+70H
       MOV     AL,[BX]
       INC     BX
       MOV     AH,[BX]
       INC     BX
       PUSH    AX
       MOV     AL,[BX]
       INC     BX
       MOV     AH,[BX]
       PUSH    AX
       LEA     BX,LOWER+24H
       LEA     CX,HAND
       PUSH    CS
       POP     AX
       MOV     [BX],CL
       INC     BX
       MOV     [BX],CH
       INC     BX
       MOV     [BX],AL
       INC     BX
       MOV     [BX],AH
       LEA     BX,LOWER+70H
       LEA     CX,TICK
       PUSH    CS
       POP     AX
       MOV     [BX],CL
       INC     BX
       MOV     [BX],CH
       INC     BX
       MOV     [BX],AL
       INC     BX
       MOV     [BX],AH
       PUSH    CS
       POP     DS
POLL:  LEA     BX,TIME
       MOV     AH,[BX]
       OR      AH,AH
       JZ      POLL
       XOR     AX,AX
       MOV     [BX],AH
       LEA     BX,STATA
       MOV     AH,[BX]
       INC     BX
       MOV     AL,[BX]
       CMP     AL,AH
       JNZ     DSPL
       LEA     BX,SW
       MOV     AH,[BX]
       OR      AH,AH
       JZ      POLL
       XOR     AX,AX
       MOV     [BX],AH
       LEA     DX,NONE
       MOV     AH,9
       INT     33
       JMP     POLL
DSPL:  INC     AL
       MOV     [BX],AL
       XOR     AX,AX
       MOV     AL,[BX]
       INC     BX
       ADD     BX,AX
       MOV     AL,[BX]
       PUSH    AX
       PUSH    AX
       SHR     AL,1
       SHR     AL,1
       SHR     AL,1
       SHR     AL,1
       CALL    DIG
       POP     AX
       CALL    DIG
       LEA     BX,SW
       MOV     AH,1
       MOV     [BX],AH
       LEA     DX,MORE
       MOV     AH,9
       INT     33
       POP     AX
       CMP     AL,81H
       JNZ     POLL
       XOR     AX,AX
       PUSH    AX
       POP     DS
       LEA     BX,LOWER+70H
       POP     CX
       POP     AX
       MOV     [BX],AL
       INC     BX
       MOV     [BX],AH
       INC     BX
       MOV     [BX],CL
       INC     BX
       MOV     [BX],CH
       LEA     BX,LOWER+24H
       POP     CX
       POP     AX
       MOV     [BX],AL
       INC     BX
       MOV     [BX],AH
       INC     BX
       MOV     [BX],CL
       INC     BX
       MOV     [BX],CH
       XOR     AX,AX
       INT     32
DIG:   AND     AL,15
       CMP     AL,10
       JL      DIGA
       ADD     AL,7
DIGA:  ADD     AL,48
       MOV     DL,AL
       MOV     AH,2
       INT     33
       RET

       HAND    PROC    FAR
       CLI
       PUSH    AX
       PUSH    BX
       PUSH    DS
       IN      AL,60H
       PUSH    AX
       IN      AL,61H
       MOV     AH,AL
       OR      AL,80H
       OUT     61H,AL
       MOV     AL,AH
       OUT     61H,AL
       PUSH    CS
       POP     DS
       LEA     BX,STATA
       XOR     AX,AX
       MOV     AL,[BX]
       INC     AL
       MOV     [BX],AL
       INC     BX
       INC     BX
       ADD     BX,AX
       POP     AX
       MOV     [BX],AL
       MOV     AL,20H
       OUT     20H,AL
       POP     DS
       POP     BX
       POP     AX
       STI
       IRET
       HAND    ENDP

       TICK    PROC    FAR
       CLI
       PUSH    DS
       PUSH    AX
       PUSH    BX
       PUSH    CS
       POP     DS
       LEA     BX,TIME
       MOV     AH,1
       MOV     [BX],AH
       POP     BX
       POP     AX
       POP     DS
       STI
       IRET
       TICK    ENDP

PSECT   ENDS
       END     STA

********************
****** SCAN55.ASM
********************

PSECT  SEGMENT PARA
       ASSUME  CS:PSECT,DS:PSECT,ES:PSECT,SS:PSECT

       ORG     0
LOWER  EQU     $
PSP    EQU     $+05CH

       ORG     100H
STA:   JMP     STB

HAND:  PUSH    AX
       IN      AL,60H
       CMP     AL,55
       JZ      PNTSC
       POP     AX
       DB      0EAH
JUMP:  DB      4 DUP (0)
PNTSC: CLI
       IN      AL,61H
       MOV     AH,AL
       OR      AL,80H
       OUT     61H,AL
       MOV     AL,AH
       OUT     61H,AL
       MOV     AL,20H
       OUT     20H,AL
       POP     AX
       STI
       IRET

STB:   XOR     AX,AX
       PUSH    AX
       POP     DS
       LEA     BX,LOWER+24H
       MOV     AL,[BX]
       INC     BX
       MOV     AH,[BX]
       INC     BX
       PUSH    AX
       MOV     AL,[BX]
       INC     BX
       MOV     AH,[BX]
       PUSH    AX
       PUSH    CS
       POP     DS
       LEA     BX,JUMP
       POP     CX
       POP     AX
       MOV     [BX],AL
       INC     BX
       MOV     [BX],AH
       INC     BX
       MOV     [BX],CL
       INC     BX
       MOV     [BX],CH
       XOR     AX,AX
       PUSH    AX
       POP     DS
       LEA     BX,LOWER+24H
       LEA     CX,PSP
       PUSH    CS
       POP     AX
       MOV     [BX],CL
       INC     BX
       MOV     [BX],CH
       INC     BX
       MOV     [BX],AL
       INC     BX
       MOV     [BX],AH
       PUSH    CS
       POP     ES
       PUSH    CS
       POP     DS
       LEA     DI,PSP
       LEA     SI,HAND
       MOV     CX,STB-HAND
       CLD
       REP MOVSB
       LEA     DX,PSP+(STB-HAND)
       INT     39

PSECT   ENDS
       END     STA

--
try my bookmark editor for Netscape and Explorer
http://cust.iamerica.net/mcdivitt/other.htm

Other Threads