1
/* gtktiemu - a TI89/92/92+ emulator
2
* (c) Copyright 2000-2001, Romain Lievin and Thomas Corvazier
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
TI keyboard management
30
#include "callbacks.h"
35
static int key_states[NB_MAX_KEYS];
39
{TIKEY_DOWN, TIKEY_RIGHT, TIKEY_UP, TIKEY_LEFT, TIKEY_HAND,
40
TIKEY_SHIFT, TIKEY_DIAMOND, TIKEY_2ND},
41
{TIKEY_3, TIKEY_2, TIKEY_1, TIKEY_F8, TIKEY_W, TIKEY_S, TIKEY_Z, TIKEY_NU},
42
{TIKEY_6, TIKEY_5, TIKEY_4, TIKEY_F3, TIKEY_E, TIKEY_D, TIKEY_X, TIKEY_NU},
43
{TIKEY_9, TIKEY_8, TIKEY_7, TIKEY_F7, TIKEY_R, TIKEY_F, TIKEY_C,
45
{TIKEY_COMMA, TIKEY_PARIGHT, TIKEY_PALEFT, TIKEY_F2, TIKEY_T, TIKEY_G,
46
TIKEY_V, TIKEY_SPACE},
47
{TIKEY_TAN, TIKEY_COS, TIKEY_SIN, TIKEY_F6, TIKEY_Y, TIKEY_H, TIKEY_B,
49
{TIKEY_P, TIKEY_ENTER2, TIKEY_LN, TIKEY_F1, TIKEY_U, TIKEY_J, TIKEY_N,
51
{TIKEY_MULTIPLY, TIKEY_APPS, TIKEY_CLEAR, TIKEY_F5, TIKEY_I, TIKEY_K,
52
TIKEY_M, TIKEY_EQUALS},
53
{TIKEY_NU, TIKEY_ESCAPE, TIKEY_MODE, TIKEY_PLUS, TIKEY_O, TIKEY_L,
54
TIKEY_THETA, TIKEY_BACKSPACE},
55
{TIKEY_NEGATE, TIKEY_PERIOD, TIKEY_0, TIKEY_F4, TIKEY_Q, TIKEY_A,
56
TIKEY_ENTER1, TIKEY_MINUS}
61
{TIKEY_ALPHA, TIKEY_DIAMOND, TIKEY_SHIFT, TIKEY_2ND, TIKEY_RIGHT,
62
TIKEY_DOWN, TIKEY_LEFT, TIKEY_UP},
63
{TIKEY_F5, TIKEY_CLEAR, TIKEY_POWER, TIKEY_DIVIDE, TIKEY_MULTIPLY,
64
TIKEY_MINUS, TIKEY_PLUS, TIKEY_ENTER1},
65
{TIKEY_F4, TIKEY_BACKSPACE, TIKEY_T, TIKEY_COMMA, TIKEY_9, TIKEY_6,
66
TIKEY_3, TIKEY_NEGATE},
67
{TIKEY_F3, TIKEY_CATALOG, TIKEY_Z, TIKEY_PARIGHT, TIKEY_8, TIKEY_5,
68
TIKEY_2, TIKEY_PERIOD},
69
{TIKEY_F2, TIKEY_MODE, TIKEY_Y, TIKEY_PALEFT, TIKEY_7, TIKEY_4, TIKEY_1,
71
{TIKEY_F1, TIKEY_HOME, TIKEY_X, TIKEY_EQUALS, TIKEY_PIPE, TIKEY_EE,
72
TIKEY_STORE, TIKEY_APPS},
73
{TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID,
74
TIKEY_VOID, TIKEY_ESCAPE},
75
{TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID,
76
TIKEY_VOID, TIKEY_VOID},
77
{TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID,
78
TIKEY_VOID, TIKEY_VOID},
79
{TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID, TIKEY_VOID,
80
TIKEY_VOID, TIKEY_VOID}
86
void ti68k_setActiveKey(int key, int active)
88
key_states[key] = active;
91
/* Returns true if the corresponding key was pressed */
92
int ti68k_isKeyPressed(int key)
94
return key_states[key];
97
int hw_update_kbd(void)
99
int rc = cb_update_keys();
101
if( (on_key = ti68k_isKeyPressed(TIKEY_ON)) )
103
if(specialflags & SPCFLAG_STOP)
104
specialflags &= ~SPCFLAG_STOP;
105
if(specialflags < 6) // no ints: ON works but FARGO do not
108
specialflags |= SPCFLAG_INT;
111
key_states[TIKEY_ON] = 0;
117
specialflags |= SPCFLAG_INT;
126
UBYTE get_rowmask(UBYTE r)
130
int *row = key_row+(r<<3);
134
rc |= key_states[row[i]]<<(7-i);
140
UBYTE read_keyboard_mask(void)
147
mask = (((UWORD)ti_io[0x18])<<8)|ti_io[0x19];
151
arg |= get_rowmask(i);
154
return (UBYTE)(~arg);
159
if(current_rom_info.calc_type & TI92)
160
key_row = (int*)keyRow92;
162
key_row = (int*)keyRow89;