キーボード入力のサンプルで
で切り替えることができるものを作成しました。
#include <string> #include <sstream> #include <iostream> #define USE_PC // 定義を切り替えることでPC版とX68000版を切り替え可能 #ifdef USE_PC #include <conio.h> // _kbhit, _getch #else #include <stdio.h> #include <stdint.h> // IOCSコールをアセンブラで呼び出す void keyinp(int* pkey) { uint32_t key; __asm__ volatile ( "moveq #0, %%d0\n\t" // _B_KEYINP "trap #15\n\t" "move.l %%d0, %0\n\t" : "=r"(key) : // 入力なし : "d0" // 使用するレジスタ ); *pkey = key; } void keysns(int* pkey) { uint32_t key; __asm__ volatile ( "moveq #1, %%d0\n\t" // _B_KEYSNS "trap #15\n\t" "move.l %%d0, %0\n\t" : "=r"(key) : // 入力なし : "d0" // 使用するレジスタ ); *pkey = key; } void bitsns(int grp, int* pkey) { uint32_t key; __asm__ volatile ( "moveq #4, %%d0\n\t" // _BITSNS "move.w %1, %%d1\n\t" "trap #15\n\t" "move.l %%d0, %0\n\t" : "=r"(key) : "r"(grp) // 入力 : "d0", "d1" // 使用するレジスタ ); *pkey = key; } void skeymod_off() { __asm__ volatile ( "moveq #0x7d, %%d0\n\t" // _SKEY_MOD "moveq #0, %%d1\n\t" "trap #15\n\t" : : // 入力なし : "d0", "d1" // 使用するレジスタ ); } void skeymod_mouse() { __asm__ volatile ( "moveq #0x7d, %%d0\n\t" // _SKEY_MOD "moveq #-1, %%d1\n\t" "trap #15\n\t" : : // 入力なし : "d0", "d1" // 使用するレジスタ ); } #endif bool is_key_pressed() { #ifdef USE_PC return _kbhit(); #else int key; keysns(&key); return (key & 0xff) != 0; // キーが押されているかどうかをチェック #endif } int key_input() { #ifdef USE_PC if (_kbhit()) { return _getch(); // キー入力を取得 } return 0; // 入力がない場合は0を返す #else int key; keyinp(&key); // IOCSコールでキー入力を取得 return key & 0xff; // キーコードを返す #endif } int main() { printf("Start\n"); fflush(stdout); while (true) { int key = 0; if (is_key_pressed()) { key = key_input(); printf("\rKey Input: %x", key & 0xff); fflush(stdout); if (key == 'q') { // 'q'キーが押されたら終了 printf("\nExit on 'q' key.\n"); fflush(stdout); break; } } } return 0; }




