SRC = keymap.c \
matrix.c \
led.c \
- x68k.c
+ protocol/x68k.c
+# protocol/serial_uart.c
CONFIG_H = config_pjrc.h
F_CPU = 16000000
+# Boot Section Size in bytes
+# Teensy halfKay 512
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
# Build Options
# *Comment out* to disable the options.
#
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-NKRO_ENABLE = yes # USB Nkey Rollover
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
/* legacy keymap support */
#define USE_LEGACY_KEYMAP
-/* mouse keys */
-#ifdef MOUSEKEY_ENABLE
-# define MOUSEKEY_DELAY_TIME 255
-#endif
-
/* USART configuration
* asynchronous, 2400baud, 8-data bit, non parity, 1-stop bit, no flow control
# define KBD_RX_INIT() do { \
UBRR1L = (uint8_t) KBD_RX_UBBR; \
UBRR1H = (uint8_t) (KBD_RX_UBBR>>8); \
- UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); \
+ UCSR1B |= (1<<RXCIE1) | (1<<RXEN1) | (1<<TXEN1); \
+ } while(0)
+
+
+ #define SERIAL_UART_BAUD 2400
+ #define SERIAL_UART_DATA UDR1
+ #define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1)
+ #define SERIAL_UART_RXD_VECT USART1_RX_vect
+ #define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1))
+ #define SERIAL_UART_INIT() do { \
+ UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \
+ UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \
+ UCSR1B = (1<<RXCIE1) | (1<<RXEN1) | /* RX: interrupt, RX: enable */ \
+ (1<<TXEN1); /* TX: enable */ \
+ UCSR1C = (1<<UPM11) | (1<<UPM10) | /* parity: none(00), even(01), odd(11) */ \
+ (0<<UCSZ12) | (1<<UCSZ11) | (1<<UCSZ10); /* 8bit-data(011) */ \
+ sei(); \
} while(0)
#else
# error "USART configuration is needed."
*/
#include "stdint.h"
-#include "x68k.h"
+#include "serial.h"
#include "led.h"
+#include "debug.h"
+#include "x68k.h"
void led_set(uint8_t usb_led)
{
- // not supported now
+ /* X68000 LED bits 0: on, 1: off
+ * bit 7 1(fixed)
+ * bit 6 全角
+ * bit 5 ひらがな
+ * bit 4 INS
+ * bit 3 CAPS
+ * bit 2 コード入力
+ * bit 1 ローマ字
+ * bit 0 かな
+ */
+ uint8_t led = 0xFF;
+ xprintf("usb_led: %02X\n", usb_led);
+ if (usb_led&(1<<USB_LED_NUM_LOCK)) led &= ~(1<<2);
+ if (usb_led&(1<<USB_LED_CAPS_LOCK)) led &= ~(1<<3);
+ if (usb_led&(1<<USB_LED_SCROLL_LOCK)) led &= ~(1<<1);
+ if (usb_led&(1<<USB_LED_COMPOSE)) led &= ~(1<<4);
+ if (usb_led&(1<<USB_LED_KANA)) led &= ~(1<<0);
+ xprintf("led: %02X\n", led);
+ x68k_send(led);
}
return data;
}
+void x68k_send(uint8_t d)
+{
+ while (!(UCSR1A&(1<<UDRE1)));
+ UDR1 = d;
+}
+
// USART RX complete interrupt
ISR(KBD_RX_VECT)
{
/* host role */
void x68k_init(void);
uint8_t x68k_recv(void);
+void x68k_send(uint8_t d);
/* device role */