; The key state is checked twice, 614.4 µs apart, to ignore the momentary "key ; released" events sent by PC-98 keyboards at the typematic rate if a key is ; held down. This ensures that the game consistently sees that specific input ; being pressed. See the HOLDKEY example in the Research/ subdirectory for ; more explanation and sample code showing off this effect. public _input_reset_sense_key_held _input_reset_sense_key_held proc far xor ax, ax mov _input_mp_p1, ax mov _input_mp_p2, ax mov _input_sp, ax mov js_stat, ax jmp short $+2 mov bl, 2 xor ax, ax mov es, ax @@up?: mov ah, byte ptr es:[531h] test ah, 4 jz short @@down? or _input_sp, INPUT_UP @@down?: test ah, 20h jz short @@left? or _input_sp, INPUT_DOWN @@left?: test ah, 8 jz short @@right? or _input_mp_p2, INPUT_SHOT or _input_sp, INPUT_LEFT @@right?: test ah, 10h jz short @@num6? or _input_mp_p2, INPUT_BOMB or _input_sp, INPUT_RIGHT @@num6?: mov ah, byte ptr es:[533h] test ah, 1 jz short @@num1? or _input_mp_p2, INPUT_RIGHT or _input_sp, INPUT_RIGHT @@num1?: test ah, 4 jz short @@num2? or _input_mp_p2, INPUT_DOWN_LEFT or _input_sp, INPUT_DOWN_LEFT @@num2?: test ah, 8 jz short @@num3? or _input_mp_p2, INPUT_DOWN or _input_sp, INPUT_DOWN @@num3?: test ah, 10h jz short @@num4? or _input_mp_p2, INPUT_DOWN_RIGHT or _input_sp, INPUT_DOWN_RIGHT @@num4?: mov ah, byte ptr es:[532h] test ah, 40h jz short @@num7? or _input_mp_p2, INPUT_LEFT or _input_sp, INPUT_LEFT @@num7?: test ah, 4 jz short @@num8? or _input_mp_p2, INPUT_UP_LEFT or _input_sp, INPUT_UP_LEFT @@num8?: test ah, 8 jz short @@num9? or _input_mp_p2, INPUT_UP or _input_sp, INPUT_UP @@num9?: test ah, 10h jz short @@z? or _input_mp_p2, INPUT_UP_RIGHT or _input_sp, INPUT_UP_RIGHT @@z?: mov ah, byte ptr es:[52Fh] test ah, 2 jz short @@x? or _input_mp_p1, INPUT_SHOT or _input_sp, INPUT_SHOT @@x?: test ah, 4 jz short @@v? or _input_mp_p1, INPUT_BOMB or _input_sp, INPUT_BOMB @@v?: test ah, 10h jz short @@b? or _input_mp_p1, INPUT_DOWN_LEFT @@b?: test ah, 20h jz short @@n? or _input_mp_p1, INPUT_DOWN @@n?: test ah, 40h jz short @@f? or _input_mp_p1, INPUT_DOWN_RIGHT @@f?: mov ah, byte ptr es:[52Eh] test ah, 1 jz short @@h? or _input_mp_p1, INPUT_LEFT @@h?: test ah, 4 jz short @@r? or _input_mp_p1, INPUT_RIGHT @@r?: mov ah, byte ptr es:[52Ch] test ah, 8 jz short @@t? or _input_mp_p1, INPUT_UP_LEFT @@t?: test ah, 10h jz short @@y? or _input_mp_p1, INPUT_UP @@y?: test ah, 20h jz short @@q? or _input_mp_p1, INPUT_UP_RIGHT @@q?: test ah, 1 jz short @@esc? or _input_sp, INPUT_Q @@esc?: mov ah, byte ptr es:[52Ah] test ah, 1 jz short @@return? or _input_sp, INPUT_CANCEL @@return?: mov ah, byte ptr es:[52Dh] test ah, 10h jz short @@space? or _input_sp, INPUT_OK @@space?: mov ah, byte ptr es:[530h] test ah, 10h jz short @@wait? or _input_sp, INPUT_SHOT @@wait?: dec bl jz short @@ret mov cx, 1024 @@wait: out 5Fh, al loop @@wait jmp @@up? @@ret: retf _input_reset_sense_key_held endp