;=============================================================================== ; ; PS/2キーボードプロトコルコンバージョンアダプタ(PPCA) ; ; Author : K.Takahashi(tokoya) ; Version : 1.00 ; Last Update : 2000/11/17 ; Target : AT90S2313 ; Comment : 外部クロック8MHz使用 ; ; 2000/09/19 : 初版 ; 2000/10/24 : トランスレートモード追加 ; 2000/11/06 : キーボードへのコマンド送信機能追加 ; 2000/11/15 : 変換テーブルの構造を変更 ; 2000/11/16 : ホストからキーボードへコマンド送信する機能を追加 ; 2000/11/17 : 拡張トランスレートモードを追加 ; ;=============================================================================== .include "2313def.inc" .include "CodeTbl.inc" .def tx_cmd = r12 ; キーボードへの送信コマンド .def tx_opt = r13 ; キーボードへの送信オプション .def rx_code = r14 ; キーボードからの受信コード .def tx_code = r15 ; キーボードへの送信コード .def tp_main = r16 ; メインワーク .def tp_int = r17 ; 割り込み内使用ワーク .def tp_send = r18 ; ホストへの送信キャラクタ .def i0_code = r19 .def i0_count = r20 .def pt_count = r21 ; パリティカウント .def tx_count = r22 .def fg_mode = r23 ; S - SCANCODE ; T - TRANSLATE ; X - EXTEND TRANSLATE .def fg_key = r24 ; bit0 - key_up ; bit1 - key_shift ; bit2 - edge_flag ; bit3 - e0_flag ; bit4 - e1_flag .def fg_txrx = r25 ; bit0 - tx_request ; bit1 - tx_option ; bit2 - rx_busy ; bit3 - rx_wait .def key_stat = r26 ; bit0 - left_ctrl ; bit1 - left_shift ; bit2 - left_alt ; bit3 - right_ctrl ; bit4 - right_shift ; bit5 - right_alt .def led_stat = r27 ; bit0 - Scroll Lock ; bit1 - Num Lock ; bir2 = Caps Lock .def fg_cmd = r28 ; bit0 - 1Byte Command ; bit1 - 2Byte Command(First) ; bit2 - 2Byte Command(Second) ; bit3 - LED Set .equ ASCII_MODE = 0 .equ KEY_UP = 0 .equ KEY_SHIFT = 1 .equ EDGE_FLAG = 2 .equ E0_FLAG = 3 .equ E1_FLAG = 4 .equ TX_REQUEST = 0 .equ TX_OPTION = 1 .equ RXC_WAIT = 2 .equ RX_BUSY = 3 .equ L_CTRL = 0 .equ L_SHIFT = 1 .equ L_ALT = 2 .equ R_CTRL = 3 .equ R_SHIFT = 4 .equ R_ALT = 5 .equ KB_CLK = 2 .equ KB_DATA = 4 .equ SCROLL_LOCK = 0 .equ NUM_LOCK = 1 .equ CAPS_LOCK = 2 .equ X1BYTE_CMD = 0 .equ X2BYTE_CMD_F = 1 .equ X2BYTE_CMD_S = 2 .equ LED_SET = 3 .equ MAKE_L_CTRL = 0x90 .equ MAKE_L_SHIFT = 0x91 .equ MAKE_L_ALT = 0x92 .equ MAKE_R_CTRL = 0x93 .equ MAKE_R_SHIFT = 0x94 .equ MAKE_R_ALT = 0x95 .equ BREAK_L_CTRL = 0x96 .equ BREAK_L_SHIFT = 0x97 .equ BREAK_L_ALT = 0x98 .equ BREAK_R_CTRL = 0x99 .equ BREAK_R_SHIFT = 0x9A .equ BREAK_R_ALT = 0x9B .CSEG .ORG $0 rjmp RESET rjmp EXT_INT0 ; キーボード割り込み rjmp EXT_INT1 ; マウス割り込み rjmp DUMMY rjmp DUMMY rjmp DUMMY rjmp DUMMY rjmp UART_RXC ; シリアル受信割り込み rjmp DUMMY rjmp DUMMY rjmp DUMMY DUMMY: reti ;--------------------------------------- ; 初期化 ;--------------------------------------- RESET: ldi tp_main,low(RAMEND) ; スタックポインタ設定 out SPL,tp_main ldi tp_main,0b11111111 ; ポートBを出力に設定(デバッグ用) out DDRB,tp_main ldi tp_main,0b01000011 ; ポートDのPD5〜PD2を入力に設定 out DDRD,tp_main ldi tp_main,0b00000000 ; プルアップ無し out PORTD,tp_main ldi tp_main,(1<