From 7b409a086a0f69eb8b85bbf7613c9c047288cd34 Mon Sep 17 00:00:00 2001 From: nmlgc Date: Mon, 11 Jan 2021 17:40:18 +0100 Subject: [PATCH] [Maintenance] Add address constants for the PC-98 BIOS key press bitmap Part of P0133, funded by [Anonymous]. --- pc98kbd.h | 19 +++++++++++++++++++ pc98kbd.inc | 16 ++++++++++++++++ th03/hardware/input_sense.asm | 20 +++++++++++--------- th04/hardware/input_sense.asm | 18 ++++++++++-------- 4 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 pc98kbd.inc diff --git a/pc98kbd.h b/pc98kbd.h index 722ef457..22bfd8ff 100644 --- a/pc98kbd.h +++ b/pc98kbd.h @@ -2,6 +2,25 @@ // ----- // PC-98 keyboard constants +// BIOS key press bitmap addresses +typedef enum { + KEYGROUP_0 = 0x52A, + KEYGROUP_1, + KEYGROUP_2, + KEYGROUP_3, + KEYGROUP_4, + KEYGROUP_5, + KEYGROUP_6, + KEYGROUP_7, + KEYGROUP_8, + KEYGROUP_9, + KEYGROUP_10, + KEYGROUP_11, + KEYGROUP_12, + KEYGROUP_13, + KEYGROUP_14, +} bios_keygroups; + typedef enum { K0_ESC = 0x01, K0_1 = 0x02, diff --git a/pc98kbd.inc b/pc98kbd.inc new file mode 100644 index 00000000..5047554e --- /dev/null +++ b/pc98kbd.inc @@ -0,0 +1,16 @@ +; BIOS key press bitmap addresses +KEYGROUP_0 = 52Ah +KEYGROUP_1 = 52Bh +KEYGROUP_2 = 52Ch +KEYGROUP_3 = 52Dh +KEYGROUP_4 = 52Eh +KEYGROUP_5 = 52Fh +KEYGROUP_6 = 530h +KEYGROUP_7 = 531h +KEYGROUP_8 = 532h +KEYGROUP_9 = 533h +KEYGROUP_10 = 534h +KEYGROUP_11 = 535h +KEYGROUP_12 = 536h +KEYGROUP_13 = 537h +KEYGROUP_14 = 538h diff --git a/th03/hardware/input_sense.asm b/th03/hardware/input_sense.asm index 757a41ba..90f23b5b 100644 --- a/th03/hardware/input_sense.asm +++ b/th03/hardware/input_sense.asm @@ -1,3 +1,5 @@ +include pc98kbd.inc + ; 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 @@ -17,7 +19,7 @@ _input_reset_sense_key_held proc far mov es, ax @@up?: - mov ah, byte ptr es:[531h] + mov ah, byte ptr es:[KEYGROUP_7] test ah, 4 jz short @@down? or _input_sp, INPUT_UP @@ -40,7 +42,7 @@ _input_reset_sense_key_held proc far or _input_sp, INPUT_RIGHT @@num6?: - mov ah, byte ptr es:[533h] + mov ah, byte ptr es:[KEYGROUP_9] test ah, 1 jz short @@num1? or _input_mp_p2, INPUT_RIGHT @@ -65,7 +67,7 @@ _input_reset_sense_key_held proc far or _input_sp, INPUT_DOWN_RIGHT @@num4?: - mov ah, byte ptr es:[532h] + mov ah, byte ptr es:[KEYGROUP_8] test ah, 40h jz short @@num7? or _input_mp_p2, INPUT_LEFT @@ -90,7 +92,7 @@ _input_reset_sense_key_held proc far or _input_sp, INPUT_UP_RIGHT @@z?: - mov ah, byte ptr es:[52Fh] + mov ah, byte ptr es:[KEYGROUP_5] test ah, 2 jz short @@x? or _input_mp_p1, INPUT_SHOT @@ -118,7 +120,7 @@ _input_reset_sense_key_held proc far or _input_mp_p1, INPUT_DOWN_RIGHT @@f?: - mov ah, byte ptr es:[52Eh] + mov ah, byte ptr es:[KEYGROUP_4] test ah, 1 jz short @@h? or _input_mp_p1, INPUT_LEFT @@ -129,7 +131,7 @@ _input_reset_sense_key_held proc far or _input_mp_p1, INPUT_RIGHT @@r?: - mov ah, byte ptr es:[52Ch] + mov ah, byte ptr es:[KEYGROUP_2] test ah, 8 jz short @@t? or _input_mp_p1, INPUT_UP_LEFT @@ -150,19 +152,19 @@ _input_reset_sense_key_held proc far or _input_sp, INPUT_Q @@esc?: - mov ah, byte ptr es:[52Ah] + mov ah, byte ptr es:[KEYGROUP_0] test ah, 1 jz short @@return? or _input_sp, INPUT_CANCEL @@return?: - mov ah, byte ptr es:[52Dh] + mov ah, byte ptr es:[KEYGROUP_3] test ah, 10h jz short @@space? or _input_sp, INPUT_OK @@space?: - mov ah, byte ptr es:[530h] + mov ah, byte ptr es:[KEYGROUP_6] test ah, 10h jz short @@wait? or _input_sp, INPUT_SHOT diff --git a/th04/hardware/input_sense.asm b/th04/hardware/input_sense.asm index fda56689..84756693 100644 --- a/th04/hardware/input_sense.asm +++ b/th04/hardware/input_sense.asm @@ -1,3 +1,5 @@ +include pc98kbd.inc + ; TH05 insists on only updating the affected byte, so... if GAME eq 4 OR_INPUT_LOW macro value @@ -25,7 +27,7 @@ public _input_sense _input_sense proc far xor ax, ax mov es, ax - mov ah, byte ptr es:[531h] + mov ah, byte ptr es:[KEYGROUP_7] test ah, 4 jz short @@down? OR_INPUT_LOW INPUT_UP @@ -46,7 +48,7 @@ _input_sense proc far OR_INPUT_LOW INPUT_RIGHT @@num6?: - mov ah, byte ptr es:[533h] + mov ah, byte ptr es:[KEYGROUP_9] test ah, 1 jz short @@num1? OR_INPUT_LOW INPUT_RIGHT @@ -67,7 +69,7 @@ _input_sense proc far OR_INPUT_HIGH INPUT_DOWN_RIGHT @@num4?: - mov ah, byte ptr es:[532h] + mov ah, byte ptr es:[KEYGROUP_8] test ah, 40h jz short @@num7? OR_INPUT_LOW INPUT_LEFT @@ -88,7 +90,7 @@ _input_sense proc far OR_INPUT_HIGH INPUT_UP_RIGHT @@z?: - mov ah, byte ptr es:[52Fh] + mov ah, byte ptr es:[KEYGROUP_5] test ah, 2 jz short @@x? OR_INPUT_LOW INPUT_SHOT @@ -99,25 +101,25 @@ _input_sense proc far OR_INPUT_LOW INPUT_BOMB @@q?: - mov ah, byte ptr es:[52Ch] + mov ah, byte ptr es:[KEYGROUP_2] test ah, 1 jz short @@esc? OR_INPUT_HIGH INPUT_Q @@esc?: - mov ah, byte ptr es:[52Ah] + mov ah, byte ptr es:[KEYGROUP_0] test ah, 1 jz short @@return? OR_INPUT_HIGH INPUT_CANCEL @@return?: - mov ah, byte ptr es:[52Dh] + mov ah, byte ptr es:[KEYGROUP_3] test ah, 10h jz short @@space? OR_INPUT_HIGH INPUT_OK @@space?: - mov ah, byte ptr es:[530h] + mov ah, byte ptr es:[KEYGROUP_6] test ah, 10h jz short @@shift? OR_INPUT_LOW INPUT_SHOT