BASIC compiler/interpreter for PIC32MX/MZ-80K
Revision | 84d223af7509730f6d3f4711bb8fea56a0bb31d9 (tree) |
---|---|
Time | 2019-05-03 09:15:23 |
Author | Katsumi <kmorimatsu@sour...> |
Commiter | Katsumi |
Megalopa: revise KEYS interrupt.
@@ -20,9 +20,6 @@ void pre_run(void); | ||
20 | 20 | void post_run(void); |
21 | 21 | void err_peri_not_init(void); |
22 | 22 | |
23 | -// KEYPORT mask for available button inputs | |
24 | -#define KEYPORTMASK (KEYUP|KEYDOWN|KEYLEFT|KEYRIGHT|KEYSTART|KEYFIRE) | |
25 | - | |
26 | 23 | // 30, 36, 40, 48, 64, 80 characters per line for Megalopa |
27 | 24 | void printcomma(void); |
28 | 25 |
@@ -865,6 +865,7 @@ ON GOTO分やON GOSUB文はサポートしていません。ただし、例え | ||
865 | 865 | ・割り込み機能(INTERRUPTステートメント)を追加。 |
866 | 866 | ・オプション機能(OPTIONステートメント)を追加。 |
867 | 867 | ・アイドル機能(IDLEステートメント)を追加。 |
868 | + ・READKEY()関数を追加。 | |
868 | 869 | ・EXEC()関数を追加。 |
869 | 870 | ・変数名などで、英数字に加えてアンダースコアーが使用可能に。 |
870 | 871 | ・PRINTでカンマを使った時の表示不具合を修正。 |
@@ -44,7 +44,6 @@ int g_int_vector[NUM_INTERRUPT_TYPES]; | ||
44 | 44 | |
45 | 45 | // Current button status |
46 | 46 | static int g_keys_interrupt; |
47 | -static unsigned short g_keys_mask; | |
48 | 47 | |
49 | 48 | /* |
50 | 49 | Initialize and termination |
@@ -346,13 +345,18 @@ void CS0Handler(void){ | ||
346 | 345 | // Raise DRAWCOUNT interrupt flag |
347 | 346 | raise_interrupt_flag(INTERRUPT_DRAWCOUNT); |
348 | 347 | // Check buttons |
349 | - keys=KEYPORT&KEYPORTMASK; | |
350 | - if (g_keys_mask==KEYPORTMASK && 0<=g_keys_interrupt && g_keys_interrupt!=keys) { | |
348 | + if (inPS2MODE()) { | |
349 | + keys=readbuttons(); | |
350 | + ps2mode(); | |
351 | + } else { | |
352 | + keys=readbuttons(); | |
353 | + } | |
354 | + keys=keys & (KEYUP|KEYDOWN|KEYLEFT|KEYRIGHT|KEYSTART|KEYFIRE); | |
355 | + if (0<=g_keys_interrupt && g_keys_interrupt!=keys) { | |
351 | 356 | // Raise KEYS interrupt flag |
352 | 357 | raise_interrupt_flag(INTERRUPT_KEYS); |
353 | 358 | } |
354 | 359 | g_keys_interrupt=keys; |
355 | - g_keys_mask=KEYPORTMASK; | |
356 | 360 | // Check PS/2 keyboard input |
357 | 361 | if (g_int_vector[INTERRUPT_INKEY]) { |
358 | 362 | if (keycodeExists()) raise_interrupt_flag(INTERRUPT_INKEY); |