firmware of NBCTRLV1 / AYC01

Dependencies:   SDFileSystemEx mbed

Committer:
bkc_mbed
Date:
Mon Feb 08 05:49:26 2016 +0000
Revision:
0:722cc5360dc3
Child:
1:29f0e76a9999
ver 1.22

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bkc_mbed 0:722cc5360dc3 1 //
bkc_mbed 0:722cc5360dc3 2 // NLGPLAY : NLG file player for mbed
bkc_mbed 0:722cc5360dc3 3 //
bkc_mbed 0:722cc5360dc3 4 // example to write :
bkc_mbed 0:722cc5360dc3 5 // ./lpc21isp -bin file.bin /dev/cu.usbserial-??? 115200 12000
bkc_mbed 0:722cc5360dc3 6 //
bkc_mbed 0:722cc5360dc3 7 // 20151008: updated.
bkc_mbed 0:722cc5360dc3 8 //
bkc_mbed 0:722cc5360dc3 9
bkc_mbed 0:722cc5360dc3 10 #include <stdio.h>
bkc_mbed 0:722cc5360dc3 11
bkc_mbed 0:722cc5360dc3 12 #include "mbed.h"
bkc_mbed 0:722cc5360dc3 13 #include "SDFileSystem.h"
bkc_mbed 0:722cc5360dc3 14 #include "lcd.h"
bkc_mbed 0:722cc5360dc3 15
bkc_mbed 0:722cc5360dc3 16 #include "nlg_mini.h"
bkc_mbed 0:722cc5360dc3 17
bkc_mbed 0:722cc5360dc3 18 // SPIモード
bkc_mbed 0:722cc5360dc3 19 // #define USE_SPI
bkc_mbed 0:722cc5360dc3 20
bkc_mbed 0:722cc5360dc3 21 #ifdef TARGET_LPC1114
bkc_mbed 0:722cc5360dc3 22 // 高速I/Oモード(LPC1114専用)
bkc_mbed 0:722cc5360dc3 23 #define USE_FASTIO
bkc_mbed 0:722cc5360dc3 24 #endif
bkc_mbed 0:722cc5360dc3 25
bkc_mbed 0:722cc5360dc3 26 // ピンアサイン切り替え
bkc_mbed 0:722cc5360dc3 27 #include "pindef.h"
bkc_mbed 0:722cc5360dc3 28
bkc_mbed 0:722cc5360dc3 29
bkc_mbed 0:722cc5360dc3 30 #define PRG_NAME "NLGPLAY"
bkc_mbed 0:722cc5360dc3 31 #define PRG_VER_BASE "V1.22"
bkc_mbed 0:722cc5360dc3 32
bkc_mbed 0:722cc5360dc3 33 #ifndef USE_SPI
bkc_mbed 0:722cc5360dc3 34 #define PRG_VER PRG_VER_BASE
bkc_mbed 0:722cc5360dc3 35 #else
bkc_mbed 0:722cc5360dc3 36 #define PRG_VER PRG_VER_BASE "S"
bkc_mbed 0:722cc5360dc3 37 #endif
bkc_mbed 0:722cc5360dc3 38
bkc_mbed 0:722cc5360dc3 39
bkc_mbed 0:722cc5360dc3 40 //#pragma O3
bkc_mbed 0:722cc5360dc3 41 //#pragma Otime
bkc_mbed 0:722cc5360dc3 42
bkc_mbed 0:722cc5360dc3 43
bkc_mbed 0:722cc5360dc3 44
bkc_mbed 0:722cc5360dc3 45 // (pinname, mode)
bkc_mbed 0:722cc5360dc3 46 DigitalIn sw_play(DP_PLAY, PullUp);
bkc_mbed 0:722cc5360dc3 47 DigitalIn sw_next(DP_NEXT, PullUp);
bkc_mbed 0:722cc5360dc3 48 DigitalIn sw_prev(DP_PREV, PullUp);
bkc_mbed 0:722cc5360dc3 49
bkc_mbed 0:722cc5360dc3 50 #define MAX_PATH 128
bkc_mbed 0:722cc5360dc3 51 #define MAX_FILENAME 64
bkc_mbed 0:722cc5360dc3 52 #define MAX_DIR 64
bkc_mbed 0:722cc5360dc3 53
bkc_mbed 0:722cc5360dc3 54 // Global Variable
bkc_mbed 0:722cc5360dc3 55 struct
bkc_mbed 0:722cc5360dc3 56 {
bkc_mbed 0:722cc5360dc3 57 bool stop;
bkc_mbed 0:722cc5360dc3 58 bool prev;
bkc_mbed 0:722cc5360dc3 59 bool one_mode;
bkc_mbed 0:722cc5360dc3 60
bkc_mbed 0:722cc5360dc3 61 int idx;
bkc_mbed 0:722cc5360dc3 62 int max_entries;
bkc_mbed 0:722cc5360dc3 63
bkc_mbed 0:722cc5360dc3 64 char playlist[MAX_FILENAME];
bkc_mbed 0:722cc5360dc3 65 char file[MAX_FILENAME];
bkc_mbed 0:722cc5360dc3 66 char cwd[MAX_DIR];
bkc_mbed 0:722cc5360dc3 67
bkc_mbed 0:722cc5360dc3 68 NLG_CTX nlg;
bkc_mbed 0:722cc5360dc3 69 int total_sec;
bkc_mbed 0:722cc5360dc3 70 } g;
bkc_mbed 0:722cc5360dc3 71
bkc_mbed 0:722cc5360dc3 72 // キーコード
bkc_mbed 0:722cc5360dc3 73 #define SW_PLAY 1
bkc_mbed 0:722cc5360dc3 74 #define SW_NEXT 2
bkc_mbed 0:722cc5360dc3 75 #define SW_PREV 4
bkc_mbed 0:722cc5360dc3 76
bkc_mbed 0:722cc5360dc3 77
bkc_mbed 0:722cc5360dc3 78 // ボタンが離されるのを待つ
bkc_mbed 0:722cc5360dc3 79 void wait_key_up(void)
bkc_mbed 0:722cc5360dc3 80 {
bkc_mbed 0:722cc5360dc3 81 while(!sw_next || !sw_play || !sw_prev);
bkc_mbed 0:722cc5360dc3 82 }
bkc_mbed 0:722cc5360dc3 83
bkc_mbed 0:722cc5360dc3 84 // ボタンの入力を待つ
bkc_mbed 0:722cc5360dc3 85 void wait_key_down(void)
bkc_mbed 0:722cc5360dc3 86 {
bkc_mbed 0:722cc5360dc3 87 while(sw_next && sw_play && sw_prev);
bkc_mbed 0:722cc5360dc3 88 }
bkc_mbed 0:722cc5360dc3 89
bkc_mbed 0:722cc5360dc3 90 // キー入力
bkc_mbed 0:722cc5360dc3 91 int get_key(void)
bkc_mbed 0:722cc5360dc3 92 {
bkc_mbed 0:722cc5360dc3 93 int key = 0;
bkc_mbed 0:722cc5360dc3 94
bkc_mbed 0:722cc5360dc3 95 if (!sw_next)
bkc_mbed 0:722cc5360dc3 96 key |= SW_NEXT;
bkc_mbed 0:722cc5360dc3 97 if (!sw_play)
bkc_mbed 0:722cc5360dc3 98 key |= SW_PLAY;
bkc_mbed 0:722cc5360dc3 99 if (!sw_prev)
bkc_mbed 0:722cc5360dc3 100 key |= SW_PREV;
bkc_mbed 0:722cc5360dc3 101 return key;
bkc_mbed 0:722cc5360dc3 102 }
bkc_mbed 0:722cc5360dc3 103
bkc_mbed 0:722cc5360dc3 104 // キー開放待ち
bkc_mbed 0:722cc5360dc3 105 void wait_relkey(void)
bkc_mbed 0:722cc5360dc3 106 {
bkc_mbed 0:722cc5360dc3 107 wait_key_up();
bkc_mbed 0:722cc5360dc3 108 wait(0.1);
bkc_mbed 0:722cc5360dc3 109 }
bkc_mbed 0:722cc5360dc3 110
bkc_mbed 0:722cc5360dc3 111 // キー待ち
bkc_mbed 0:722cc5360dc3 112 int wait_anykey(void)
bkc_mbed 0:722cc5360dc3 113 {
bkc_mbed 0:722cc5360dc3 114 wait_key_down();
bkc_mbed 0:722cc5360dc3 115 int key = get_key();
bkc_mbed 0:722cc5360dc3 116
bkc_mbed 0:722cc5360dc3 117 wait(0.1);
bkc_mbed 0:722cc5360dc3 118 wait_relkey();
bkc_mbed 0:722cc5360dc3 119
bkc_mbed 0:722cc5360dc3 120 return key;
bkc_mbed 0:722cc5360dc3 121 }
bkc_mbed 0:722cc5360dc3 122
bkc_mbed 0:722cc5360dc3 123 // LED
bkc_mbed 0:722cc5360dc3 124 DigitalOut led1(LED1, 0);
bkc_mbed 0:722cc5360dc3 125 DigitalOut led2(LED2, 0);
bkc_mbed 0:722cc5360dc3 126
bkc_mbed 0:722cc5360dc3 127 // SPI: MOSI, MISO, SCLK, CS
bkc_mbed 0:722cc5360dc3 128 SDFileSystem sd(DP_MOSI, DP_MISO, DP_SCLK, DP_SCS, "sd");
bkc_mbed 0:722cc5360dc3 129
bkc_mbed 0:722cc5360dc3 130 // LCD
bkc_mbed 0:722cc5360dc3 131 LCD lcd;
bkc_mbed 0:722cc5360dc3 132
bkc_mbed 0:722cc5360dc3 133 #define _WAIT for(int wcnt=0; wcnt < 2; wcnt++)
bkc_mbed 0:722cc5360dc3 134
bkc_mbed 0:722cc5360dc3 135
bkc_mbed 0:722cc5360dc3 136 ////////////////
bkc_mbed 0:722cc5360dc3 137 // 高速IO
bkc_mbed 0:722cc5360dc3 138
bkc_mbed 0:722cc5360dc3 139 #define DBS IO_01 // DATA
bkc_mbed 0:722cc5360dc3 140 #define CTS IO_02 // CTRL
bkc_mbed 0:722cc5360dc3 141 #define RCK IO_04 // LATCH
bkc_mbed 0:722cc5360dc3 142 #define SCK IO_03 // SCLK
bkc_mbed 0:722cc5360dc3 143
bkc_mbed 0:722cc5360dc3 144
bkc_mbed 0:722cc5360dc3 145 DigitalOut io01(DP_IO01, 0); // P1_4
bkc_mbed 0:722cc5360dc3 146 DigitalOut io02(DP_IO02, 0); // P0_3
bkc_mbed 0:722cc5360dc3 147 DigitalOut io03(DP_IO03, 0); // P1_8
bkc_mbed 0:722cc5360dc3 148 DigitalOut io04(DP_IO04, 0); // P0_11
bkc_mbed 0:722cc5360dc3 149
bkc_mbed 0:722cc5360dc3 150 #if 0
bkc_mbed 0:722cc5360dc3 151 // NBV3での試し機能
bkc_mbed 0:722cc5360dc3 152 #define IO_A0 io05
bkc_mbed 0:722cc5360dc3 153 #define IO_WR io06
bkc_mbed 0:722cc5360dc3 154
bkc_mbed 0:722cc5360dc3 155 DigitalOut io05(DP_IO05, 0); // P1_9
bkc_mbed 0:722cc5360dc3 156 DigitalOut io06(DP_IO06, 0); // P1_2
bkc_mbed 0:722cc5360dc3 157
bkc_mbed 0:722cc5360dc3 158 #endif
bkc_mbed 0:722cc5360dc3 159
bkc_mbed 0:722cc5360dc3 160 #define IO_01 (1 << 4) // DBS P1_4
bkc_mbed 0:722cc5360dc3 161 #define IO_02 (1 << 3) // CTS P0_3
bkc_mbed 0:722cc5360dc3 162 #define IO_03 (1 << 8) // SCK P1_8
bkc_mbed 0:722cc5360dc3 163 #define IO_04 (1 << 11) // RCK P0_11
bkc_mbed 0:722cc5360dc3 164
bkc_mbed 0:722cc5360dc3 165 #ifdef USE_FASTIO
bkc_mbed 0:722cc5360dc3 166
bkc_mbed 0:722cc5360dc3 167 // ポート出力
bkc_mbed 0:722cc5360dc3 168 #define DATA_HI LPC_GPIO1->DATA |= DBS
bkc_mbed 0:722cc5360dc3 169 #define DATA_LO LPC_GPIO1->DATA &= ~DBS
bkc_mbed 0:722cc5360dc3 170 #define CTRL_HI LPC_GPIO0->DATA |= CTS
bkc_mbed 0:722cc5360dc3 171 #define CTRL_LO LPC_GPIO0->DATA &= ~CTS
bkc_mbed 0:722cc5360dc3 172 #define SCK_HI LPC_GPIO1->DATA |= SCK
bkc_mbed 0:722cc5360dc3 173 #define SCK_LO LPC_GPIO1->DATA &= ~SCK
bkc_mbed 0:722cc5360dc3 174 #define RCK_HI LPC_GPIO0->DATA |= RCK
bkc_mbed 0:722cc5360dc3 175 #define RCK_LO LPC_GPIO0->DATA &= ~RCK
bkc_mbed 0:722cc5360dc3 176
bkc_mbed 0:722cc5360dc3 177 // 出力設定
bkc_mbed 0:722cc5360dc3 178 #define PORT_DIR LPC_GPIO0->DIR |= (IO_02 | IO_04); \
bkc_mbed 0:722cc5360dc3 179 LPC_GPIO1->DIR |= (IO_01 | IO_03)
bkc_mbed 0:722cc5360dc3 180
bkc_mbed 0:722cc5360dc3 181 #else
bkc_mbed 0:722cc5360dc3 182
bkc_mbed 0:722cc5360dc3 183 // ポート出力
bkc_mbed 0:722cc5360dc3 184 #define DATA_HI io01 = 1
bkc_mbed 0:722cc5360dc3 185 #define DATA_LO io01 = 0
bkc_mbed 0:722cc5360dc3 186 #define CTRL_HI io02 = 1
bkc_mbed 0:722cc5360dc3 187 #define CTRL_LO io02 = 0
bkc_mbed 0:722cc5360dc3 188 #define SCK_HI io03 = 1
bkc_mbed 0:722cc5360dc3 189 #define SCK_LO io03 = 0
bkc_mbed 0:722cc5360dc3 190 #define RCK_HI io04 = 1
bkc_mbed 0:722cc5360dc3 191 #define RCK_LO io04 = 0
bkc_mbed 0:722cc5360dc3 192
bkc_mbed 0:722cc5360dc3 193 // 出力設定
bkc_mbed 0:722cc5360dc3 194 #define PORT_DIR
bkc_mbed 0:722cc5360dc3 195
bkc_mbed 0:722cc5360dc3 196 #endif
bkc_mbed 0:722cc5360dc3 197
bkc_mbed 0:722cc5360dc3 198 SPI *spi;
bkc_mbed 0:722cc5360dc3 199
bkc_mbed 0:722cc5360dc3 200 // I/O初期化
bkc_mbed 0:722cc5360dc3 201 void ioInit()
bkc_mbed 0:722cc5360dc3 202 {
bkc_mbed 0:722cc5360dc3 203 // SPIインスタンスの取得
bkc_mbed 0:722cc5360dc3 204 spi = sd.getSPI();
bkc_mbed 0:722cc5360dc3 205 // 出力
bkc_mbed 0:722cc5360dc3 206 PORT_DIR;
bkc_mbed 0:722cc5360dc3 207 }
bkc_mbed 0:722cc5360dc3 208
bkc_mbed 0:722cc5360dc3 209
bkc_mbed 0:722cc5360dc3 210 #ifndef USE_SPI
bkc_mbed 0:722cc5360dc3 211 // 8x2ビットモード
bkc_mbed 0:722cc5360dc3 212
bkc_mbed 0:722cc5360dc3 213 #define SHIFTOUT io8x2Out
bkc_mbed 0:722cc5360dc3 214
bkc_mbed 0:722cc5360dc3 215 // 8bit 出力
bkc_mbed 0:722cc5360dc3 216 void byteOut(unsigned char data)
bkc_mbed 0:722cc5360dc3 217 {
bkc_mbed 0:722cc5360dc3 218 int i;
bkc_mbed 0:722cc5360dc3 219
bkc_mbed 0:722cc5360dc3 220 for(i = 0; i < 8; i++)
bkc_mbed 0:722cc5360dc3 221 {
bkc_mbed 0:722cc5360dc3 222 if (data & 0x80)
bkc_mbed 0:722cc5360dc3 223 DATA_HI;
bkc_mbed 0:722cc5360dc3 224 else
bkc_mbed 0:722cc5360dc3 225 DATA_LO;
bkc_mbed 0:722cc5360dc3 226
bkc_mbed 0:722cc5360dc3 227 data <<= 1;
bkc_mbed 0:722cc5360dc3 228
bkc_mbed 0:722cc5360dc3 229 SCK_HI;
bkc_mbed 0:722cc5360dc3 230 SCK_LO;
bkc_mbed 0:722cc5360dc3 231 }
bkc_mbed 0:722cc5360dc3 232 }
bkc_mbed 0:722cc5360dc3 233
bkc_mbed 0:722cc5360dc3 234 // 8x2ビット出力 or 16bit出力選択可能
bkc_mbed 0:722cc5360dc3 235 void io8x2Out(unsigned int ctrl, unsigned int data)
bkc_mbed 0:722cc5360dc3 236 {
bkc_mbed 0:722cc5360dc3 237 int i;
bkc_mbed 0:722cc5360dc3 238 // シフトレジスタ直列モード
bkc_mbed 0:722cc5360dc3 239 if (g.one_mode)
bkc_mbed 0:722cc5360dc3 240 {
bkc_mbed 0:722cc5360dc3 241 // データ順
bkc_mbed 0:722cc5360dc3 242 // <- CCCCCCCC76543210
bkc_mbed 0:722cc5360dc3 243
bkc_mbed 0:722cc5360dc3 244 byteOut(ctrl);
bkc_mbed 0:722cc5360dc3 245 byteOut(data);
bkc_mbed 0:722cc5360dc3 246
bkc_mbed 0:722cc5360dc3 247 // ラッチ
bkc_mbed 0:722cc5360dc3 248 RCK_HI;
bkc_mbed 0:722cc5360dc3 249 RCK_LO;
bkc_mbed 0:722cc5360dc3 250 }
bkc_mbed 0:722cc5360dc3 251 else
bkc_mbed 0:722cc5360dc3 252 {
bkc_mbed 0:722cc5360dc3 253 // シフトレジスタ並列モード
bkc_mbed 0:722cc5360dc3 254 for(i = 0; i < 8; i++)
bkc_mbed 0:722cc5360dc3 255 {
bkc_mbed 0:722cc5360dc3 256 /* 2ビット分のデータをそれぞれ出力 */
bkc_mbed 0:722cc5360dc3 257 if (ctrl & 0x80)
bkc_mbed 0:722cc5360dc3 258 CTRL_HI;
bkc_mbed 0:722cc5360dc3 259 else
bkc_mbed 0:722cc5360dc3 260 CTRL_LO;
bkc_mbed 0:722cc5360dc3 261
bkc_mbed 0:722cc5360dc3 262 if (data & 0x80)
bkc_mbed 0:722cc5360dc3 263 DATA_HI;
bkc_mbed 0:722cc5360dc3 264 else
bkc_mbed 0:722cc5360dc3 265 DATA_LO;
bkc_mbed 0:722cc5360dc3 266
bkc_mbed 0:722cc5360dc3 267 ctrl <<= 1;
bkc_mbed 0:722cc5360dc3 268 data <<= 1;
bkc_mbed 0:722cc5360dc3 269 // シフトクロック
bkc_mbed 0:722cc5360dc3 270 SCK_HI;
bkc_mbed 0:722cc5360dc3 271 SCK_LO;
bkc_mbed 0:722cc5360dc3 272 }
bkc_mbed 0:722cc5360dc3 273
bkc_mbed 0:722cc5360dc3 274 // ラッチ
bkc_mbed 0:722cc5360dc3 275 RCK_HI;
bkc_mbed 0:722cc5360dc3 276 RCK_LO;
bkc_mbed 0:722cc5360dc3 277 }
bkc_mbed 0:722cc5360dc3 278 }
bkc_mbed 0:722cc5360dc3 279
bkc_mbed 0:722cc5360dc3 280 #else
bkc_mbed 0:722cc5360dc3 281
bkc_mbed 0:722cc5360dc3 282 // 16bitモード
bkc_mbed 0:722cc5360dc3 283 #define SHIFTOUT io16Out
bkc_mbed 0:722cc5360dc3 284
bkc_mbed 0:722cc5360dc3 285
bkc_mbed 0:722cc5360dc3 286
bkc_mbed 0:722cc5360dc3 287 // 16bit 出力
bkc_mbed 0:722cc5360dc3 288 void io16Out(unsigned char ctrl, unsigned char data)
bkc_mbed 0:722cc5360dc3 289 {
bkc_mbed 0:722cc5360dc3 290 spi->write(ctrl);
bkc_mbed 0:722cc5360dc3 291 spi->write(data);
bkc_mbed 0:722cc5360dc3 292
bkc_mbed 0:722cc5360dc3 293 // byteOut(ctrl);
bkc_mbed 0:722cc5360dc3 294 // byteOut(data);
bkc_mbed 0:722cc5360dc3 295
bkc_mbed 0:722cc5360dc3 296 // LATCH
bkc_mbed 0:722cc5360dc3 297 RCK_HI;
bkc_mbed 0:722cc5360dc3 298 RCK_LO;
bkc_mbed 0:722cc5360dc3 299 }
bkc_mbed 0:722cc5360dc3 300
bkc_mbed 0:722cc5360dc3 301 #endif
bkc_mbed 0:722cc5360dc3 302
bkc_mbed 0:722cc5360dc3 303 /* 制御信号定義 */
bkc_mbed 0:722cc5360dc3 304 #define CS_FM3 (1 << 0)
bkc_mbed 0:722cc5360dc3 305 #define CS_PSG (1 << 1)
bkc_mbed 0:722cc5360dc3 306 #define CS_FM1 (1 << 2)
bkc_mbed 0:722cc5360dc3 307 #define CS_FM2 (1 << 3)
bkc_mbed 0:722cc5360dc3 308 #define A0 (1 << 4)
bkc_mbed 0:722cc5360dc3 309 #define WR (1 << 5)
bkc_mbed 0:722cc5360dc3 310 #define ICL (1 << 6)
bkc_mbed 0:722cc5360dc3 311 #define CTL (1 << 7)
bkc_mbed 0:722cc5360dc3 312
bkc_mbed 0:722cc5360dc3 313
bkc_mbed 0:722cc5360dc3 314 /* アクティブローの制御信号 */
bkc_mbed 0:722cc5360dc3 315 #define ACTLOW (CS_PSG | CS_FM1 | CS_FM2 | CS_FM3 | WR | ICL)
bkc_mbed 0:722cc5360dc3 316
bkc_mbed 0:722cc5360dc3 317
bkc_mbed 0:722cc5360dc3 318 /* NBV2互換出力 */
bkc_mbed 0:722cc5360dc3 319 void regOutBase(int addr, int data, int select)
bkc_mbed 0:722cc5360dc3 320 {
bkc_mbed 0:722cc5360dc3 321 /* アドレスを出力 */
bkc_mbed 0:722cc5360dc3 322 /* A0をローにして待つ */
bkc_mbed 0:722cc5360dc3 323 int ctrl = ACTLOW;
bkc_mbed 0:722cc5360dc3 324
bkc_mbed 0:722cc5360dc3 325 /* 裏レジスタ */
bkc_mbed 0:722cc5360dc3 326 if (addr >= 0x100)
bkc_mbed 0:722cc5360dc3 327 ctrl |= CTL;
bkc_mbed 0:722cc5360dc3 328 addr &= 0xff;
bkc_mbed 0:722cc5360dc3 329
bkc_mbed 0:722cc5360dc3 330 SHIFTOUT(ctrl, 0x00);
bkc_mbed 0:722cc5360dc3 331 SHIFTOUT(ctrl & ~(select | WR), addr);
bkc_mbed 0:722cc5360dc3 332 SHIFTOUT(ctrl, addr);
bkc_mbed 0:722cc5360dc3 333
bkc_mbed 0:722cc5360dc3 334 /* チップ処理待ち */
bkc_mbed 0:722cc5360dc3 335
bkc_mbed 0:722cc5360dc3 336 /* データを出力 */
bkc_mbed 0:722cc5360dc3 337 /* A0をハイにして待つ */
bkc_mbed 0:722cc5360dc3 338 ctrl |= A0;
bkc_mbed 0:722cc5360dc3 339 SHIFTOUT(ctrl, 0x00);
bkc_mbed 0:722cc5360dc3 340 SHIFTOUT(ctrl & ~(select | WR), data);
bkc_mbed 0:722cc5360dc3 341 SHIFTOUT(ctrl, data);
bkc_mbed 0:722cc5360dc3 342
bkc_mbed 0:722cc5360dc3 343 /* チップ処理待ち */
bkc_mbed 0:722cc5360dc3 344 }
bkc_mbed 0:722cc5360dc3 345
bkc_mbed 0:722cc5360dc3 346 /* 出力 */
bkc_mbed 0:722cc5360dc3 347 #define regPSGOut(addr, data) regOutBase(addr, data, CS_PSG)
bkc_mbed 0:722cc5360dc3 348 #define regFMOut(addr, data) regOutBase(addr, data, CS_FM1)
bkc_mbed 0:722cc5360dc3 349 #define regFM2Out(addr, data) regOutBase(addr, data, CS_FM2)
bkc_mbed 0:722cc5360dc3 350
bkc_mbed 0:722cc5360dc3 351 /* 音源出力 */
bkc_mbed 0:722cc5360dc3 352 #define WritePSG regPSGOut
bkc_mbed 0:722cc5360dc3 353 #define WriteOPM regFMOut
bkc_mbed 0:722cc5360dc3 354 #define WriteOPM2 regFM2Out
bkc_mbed 0:722cc5360dc3 355
bkc_mbed 0:722cc5360dc3 356
bkc_mbed 0:722cc5360dc3 357 /* ミュート */
bkc_mbed 0:722cc5360dc3 358 void boardMute(void)
bkc_mbed 0:722cc5360dc3 359 {
bkc_mbed 0:722cc5360dc3 360 int i;
bkc_mbed 0:722cc5360dc3 361
bkc_mbed 0:722cc5360dc3 362 /* PSG初期化 */
bkc_mbed 0:722cc5360dc3 363 regPSGOut(0x00,0);
bkc_mbed 0:722cc5360dc3 364 regPSGOut(0x01,0);
bkc_mbed 0:722cc5360dc3 365
bkc_mbed 0:722cc5360dc3 366 regPSGOut(0x06, 0x00);
bkc_mbed 0:722cc5360dc3 367 regPSGOut(0x07, 0x3f); // ALL OFF
bkc_mbed 0:722cc5360dc3 368 regPSGOut(0x08, 0x00); // CH.A 0
bkc_mbed 0:722cc5360dc3 369 regPSGOut(0x09, 0x00); // CH.B 0
bkc_mbed 0:722cc5360dc3 370 regPSGOut(0x0a, 0x00); // CH.C 0
bkc_mbed 0:722cc5360dc3 371
bkc_mbed 0:722cc5360dc3 372 /* MUTE(disable) */
bkc_mbed 0:722cc5360dc3 373 for(i = 0x20; i < 0x28; i++)
bkc_mbed 0:722cc5360dc3 374 {
bkc_mbed 0:722cc5360dc3 375 regFMOut(i, 0x00);
bkc_mbed 0:722cc5360dc3 376 regFM2Out(i, 0x00);
bkc_mbed 0:722cc5360dc3 377 }
bkc_mbed 0:722cc5360dc3 378
bkc_mbed 0:722cc5360dc3 379 // KEYOFF
bkc_mbed 0:722cc5360dc3 380 for(i = 0x00; i < 0x08; i++)
bkc_mbed 0:722cc5360dc3 381 {
bkc_mbed 0:722cc5360dc3 382 regFMOut(0x08, i & 0x07);
bkc_mbed 0:722cc5360dc3 383 regFM2Out(0x08, i & 0x07);
bkc_mbed 0:722cc5360dc3 384 }
bkc_mbed 0:722cc5360dc3 385
bkc_mbed 0:722cc5360dc3 386 // FORCE RELEASE
bkc_mbed 0:722cc5360dc3 387 for(i= 0x00; i < 0x20; i++)
bkc_mbed 0:722cc5360dc3 388 {
bkc_mbed 0:722cc5360dc3 389 regFMOut(0xE0 + i, 0x0f);
bkc_mbed 0:722cc5360dc3 390 regFM2Out(0xE0 + i, 0x0f);
bkc_mbed 0:722cc5360dc3 391 }
bkc_mbed 0:722cc5360dc3 392
bkc_mbed 0:722cc5360dc3 393 // OPLL ミュート
bkc_mbed 0:722cc5360dc3 394 for(i= 0x00; i <= 0x08; i++)
bkc_mbed 0:722cc5360dc3 395 {
bkc_mbed 0:722cc5360dc3 396 regFMOut(0x20 + i, 0x00);
bkc_mbed 0:722cc5360dc3 397 regFMOut(0x30 + i, 0x0f);
bkc_mbed 0:722cc5360dc3 398 regFM2Out(0x20 + i, 0x00);
bkc_mbed 0:722cc5360dc3 399 regFM2Out(0x30 + i, 0x0f);
bkc_mbed 0:722cc5360dc3 400 }
bkc_mbed 0:722cc5360dc3 401
bkc_mbed 0:722cc5360dc3 402 }
bkc_mbed 0:722cc5360dc3 403
bkc_mbed 0:722cc5360dc3 404 /* ボード初期化 */
bkc_mbed 0:722cc5360dc3 405 void boardInit(void)
bkc_mbed 0:722cc5360dc3 406 {
bkc_mbed 0:722cc5360dc3 407 wait_ms(20);
bkc_mbed 0:722cc5360dc3 408 /* ICLのみをLOW(アクティブ)にする */
bkc_mbed 0:722cc5360dc3 409 SHIFTOUT(ACTLOW & ~(ICL), 0);
bkc_mbed 0:722cc5360dc3 410 wait_ms(150);
bkc_mbed 0:722cc5360dc3 411
bkc_mbed 0:722cc5360dc3 412 /* 元に戻す */
bkc_mbed 0:722cc5360dc3 413 SHIFTOUT(ACTLOW, 0);
bkc_mbed 0:722cc5360dc3 414 wait_ms(10);
bkc_mbed 0:722cc5360dc3 415 }
bkc_mbed 0:722cc5360dc3 416
bkc_mbed 0:722cc5360dc3 417 //////////////////////////////////////////
bkc_mbed 0:722cc5360dc3 418
bkc_mbed 0:722cc5360dc3 419 // 表示
bkc_mbed 0:722cc5360dc3 420 void dispTime()
bkc_mbed 0:722cc5360dc3 421 {
bkc_mbed 0:722cc5360dc3 422 char buf[16];
bkc_mbed 0:722cc5360dc3 423 sprintf(buf, "%02d:%02d",
bkc_mbed 0:722cc5360dc3 424 g.total_sec / 60,
bkc_mbed 0:722cc5360dc3 425 g.total_sec % 60);
bkc_mbed 0:722cc5360dc3 426
bkc_mbed 0:722cc5360dc3 427 lcd.setCursor(3,1);
bkc_mbed 0:722cc5360dc3 428 lcd.printStr(buf);
bkc_mbed 0:722cc5360dc3 429 }
bkc_mbed 0:722cc5360dc3 430
bkc_mbed 0:722cc5360dc3 431 #define WAIT_US 10000 // 10ms
bkc_mbed 0:722cc5360dc3 432 #define SEC_US 1000000 // 1sec
bkc_mbed 0:722cc5360dc3 433 #define NEXT_MAX_US 300000 // 300ms
bkc_mbed 0:722cc5360dc3 434
bkc_mbed 0:722cc5360dc3 435 /* NLGの再生 */
bkc_mbed 0:722cc5360dc3 436 int PlayNLG_Loop(void)
bkc_mbed 0:722cc5360dc3 437 {
bkc_mbed 0:722cc5360dc3 438 int cmd;
bkc_mbed 0:722cc5360dc3 439 int addr, data;
bkc_mbed 0:722cc5360dc3 440
bkc_mbed 0:722cc5360dc3 441 int result = 0;
bkc_mbed 0:722cc5360dc3 442
bkc_mbed 0:722cc5360dc3 443 int us = 0;
bkc_mbed 0:722cc5360dc3 444 int diff_us = 0;
bkc_mbed 0:722cc5360dc3 445
bkc_mbed 0:722cc5360dc3 446 int count_us = 0;
bkc_mbed 0:722cc5360dc3 447 int total_us = 0;
bkc_mbed 0:722cc5360dc3 448
bkc_mbed 0:722cc5360dc3 449 // NEXTボタンのカウンタ
bkc_mbed 0:722cc5360dc3 450 int next_count = 0;
bkc_mbed 0:722cc5360dc3 451
bkc_mbed 0:722cc5360dc3 452 bool wait_skip = false;
bkc_mbed 0:722cc5360dc3 453
bkc_mbed 0:722cc5360dc3 454
bkc_mbed 0:722cc5360dc3 455 // GetTickUsNLG
bkc_mbed 0:722cc5360dc3 456 int tick_us = GetTickUsNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 457
bkc_mbed 0:722cc5360dc3 458 // printf("tick_us:%d\n", tick_us);
bkc_mbed 0:722cc5360dc3 459
bkc_mbed 0:722cc5360dc3 460 g.total_sec = 0;
bkc_mbed 0:722cc5360dc3 461
bkc_mbed 0:722cc5360dc3 462 // タイマースタート
bkc_mbed 0:722cc5360dc3 463 Timer t;
bkc_mbed 0:722cc5360dc3 464 t.start();
bkc_mbed 0:722cc5360dc3 465
bkc_mbed 0:722cc5360dc3 466 // 表示
bkc_mbed 0:722cc5360dc3 467 dispTime();
bkc_mbed 0:722cc5360dc3 468
bkc_mbed 0:722cc5360dc3 469 // LED消灯
bkc_mbed 0:722cc5360dc3 470 led1 = 0;
bkc_mbed 0:722cc5360dc3 471 led2 = 0;
bkc_mbed 0:722cc5360dc3 472
bkc_mbed 0:722cc5360dc3 473 // LEDカウンタ
bkc_mbed 0:722cc5360dc3 474 int led_cnt1 = 0;
bkc_mbed 0:722cc5360dc3 475 int led_cnt2 = 0;
bkc_mbed 0:722cc5360dc3 476
bkc_mbed 0:722cc5360dc3 477 // ループ
bkc_mbed 0:722cc5360dc3 478 while(!g.stop)
bkc_mbed 0:722cc5360dc3 479 {
bkc_mbed 0:722cc5360dc3 480 /* ウエイトの処理 */
bkc_mbed 0:722cc5360dc3 481 while (count_us >= WAIT_US)
bkc_mbed 0:722cc5360dc3 482 {
bkc_mbed 0:722cc5360dc3 483 // ボタンチェック
bkc_mbed 0:722cc5360dc3 484 if (!sw_next)
bkc_mbed 0:722cc5360dc3 485 {
bkc_mbed 0:722cc5360dc3 486 // NEXTが押されている
bkc_mbed 0:722cc5360dc3 487 if (next_count < NEXT_MAX_US)
bkc_mbed 0:722cc5360dc3 488 next_count += count_us;
bkc_mbed 0:722cc5360dc3 489 else
bkc_mbed 0:722cc5360dc3 490 {
bkc_mbed 0:722cc5360dc3 491 // 早送り
bkc_mbed 0:722cc5360dc3 492 next_count = NEXT_MAX_US;
bkc_mbed 0:722cc5360dc3 493 wait_skip = true;
bkc_mbed 0:722cc5360dc3 494 }
bkc_mbed 0:722cc5360dc3 495 }
bkc_mbed 0:722cc5360dc3 496 else
bkc_mbed 0:722cc5360dc3 497 {
bkc_mbed 0:722cc5360dc3 498 // NEXTが離されている
bkc_mbed 0:722cc5360dc3 499 wait_skip = false;
bkc_mbed 0:722cc5360dc3 500
bkc_mbed 0:722cc5360dc3 501 // 一瞬だけボタンが押された場合、次の曲へ
bkc_mbed 0:722cc5360dc3 502 if (next_count > 0 && next_count < NEXT_MAX_US)
bkc_mbed 0:722cc5360dc3 503 {
bkc_mbed 0:722cc5360dc3 504 next_count = 0;
bkc_mbed 0:722cc5360dc3 505 goto song_end;
bkc_mbed 0:722cc5360dc3 506 }
bkc_mbed 0:722cc5360dc3 507
bkc_mbed 0:722cc5360dc3 508 // 早送りの終了
bkc_mbed 0:722cc5360dc3 509 if (next_count == NEXT_MAX_US)
bkc_mbed 0:722cc5360dc3 510 {
bkc_mbed 0:722cc5360dc3 511 next_count = 0;
bkc_mbed 0:722cc5360dc3 512 }
bkc_mbed 0:722cc5360dc3 513 }
bkc_mbed 0:722cc5360dc3 514 // PREVが押された
bkc_mbed 0:722cc5360dc3 515 if (!sw_prev)
bkc_mbed 0:722cc5360dc3 516 {
bkc_mbed 0:722cc5360dc3 517 g.prev = true;
bkc_mbed 0:722cc5360dc3 518 goto song_end;
bkc_mbed 0:722cc5360dc3 519 }
bkc_mbed 0:722cc5360dc3 520
bkc_mbed 0:722cc5360dc3 521 // PLAYが押された
bkc_mbed 0:722cc5360dc3 522 if (!sw_play)
bkc_mbed 0:722cc5360dc3 523 {
bkc_mbed 0:722cc5360dc3 524 g.stop = true;
bkc_mbed 0:722cc5360dc3 525 goto song_end;
bkc_mbed 0:722cc5360dc3 526 }
bkc_mbed 0:722cc5360dc3 527
bkc_mbed 0:722cc5360dc3 528 // スキップでなければ次のタイミングまで待つ
bkc_mbed 0:722cc5360dc3 529 while(!wait_skip && (us = t.read_us()) + diff_us < count_us);
bkc_mbed 0:722cc5360dc3 530
bkc_mbed 0:722cc5360dc3 531 // タイマーリセット
bkc_mbed 0:722cc5360dc3 532 if (!wait_skip)
bkc_mbed 0:722cc5360dc3 533 t.reset();
bkc_mbed 0:722cc5360dc3 534
bkc_mbed 0:722cc5360dc3 535 // 差分を計算
bkc_mbed 0:722cc5360dc3 536 diff_us += us;
bkc_mbed 0:722cc5360dc3 537 while(diff_us >= count_us)
bkc_mbed 0:722cc5360dc3 538 diff_us -= count_us;
bkc_mbed 0:722cc5360dc3 539
bkc_mbed 0:722cc5360dc3 540 // 積算する
bkc_mbed 0:722cc5360dc3 541 total_us += count_us;
bkc_mbed 0:722cc5360dc3 542 count_us = 0;
bkc_mbed 0:722cc5360dc3 543
bkc_mbed 0:722cc5360dc3 544 // 1秒で積算カウントをリセットする
bkc_mbed 0:722cc5360dc3 545 if (total_us >= SEC_US)
bkc_mbed 0:722cc5360dc3 546 {
bkc_mbed 0:722cc5360dc3 547 while(total_us >= SEC_US)
bkc_mbed 0:722cc5360dc3 548 {
bkc_mbed 0:722cc5360dc3 549 g.total_sec++;
bkc_mbed 0:722cc5360dc3 550 total_us -= SEC_US;
bkc_mbed 0:722cc5360dc3 551 }
bkc_mbed 0:722cc5360dc3 552 // 表示
bkc_mbed 0:722cc5360dc3 553 dispTime();
bkc_mbed 0:722cc5360dc3 554 }
bkc_mbed 0:722cc5360dc3 555 }
bkc_mbed 0:722cc5360dc3 556
bkc_mbed 0:722cc5360dc3 557 /* コマンドの読み出し */
bkc_mbed 0:722cc5360dc3 558 cmd = ReadNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 559 if (cmd == EOF)
bkc_mbed 0:722cc5360dc3 560 {
bkc_mbed 0:722cc5360dc3 561 result = EOF;
bkc_mbed 0:722cc5360dc3 562 break;
bkc_mbed 0:722cc5360dc3 563 }
bkc_mbed 0:722cc5360dc3 564
bkc_mbed 0:722cc5360dc3 565 if (cmd < 0x80)
bkc_mbed 0:722cc5360dc3 566 {
bkc_mbed 0:722cc5360dc3 567 addr = ReadNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 568 data = ReadNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 569
bkc_mbed 0:722cc5360dc3 570 // 裏レジスタ
bkc_mbed 0:722cc5360dc3 571 if (cmd >= 0x40)
bkc_mbed 0:722cc5360dc3 572 addr |= 0x100;
bkc_mbed 0:722cc5360dc3 573
bkc_mbed 0:722cc5360dc3 574 switch(cmd & 0x3f)
bkc_mbed 0:722cc5360dc3 575 {
bkc_mbed 0:722cc5360dc3 576 case CMD_PSG:
bkc_mbed 0:722cc5360dc3 577 WritePSG(addr, data);
bkc_mbed 0:722cc5360dc3 578 break;
bkc_mbed 0:722cc5360dc3 579 case CMD_FM1:
bkc_mbed 0:722cc5360dc3 580 WriteOPM(addr, data);
bkc_mbed 0:722cc5360dc3 581 break;
bkc_mbed 0:722cc5360dc3 582 case CMD_FM2:
bkc_mbed 0:722cc5360dc3 583 WriteOPM2(addr, data);
bkc_mbed 0:722cc5360dc3 584 break;
bkc_mbed 0:722cc5360dc3 585 }
bkc_mbed 0:722cc5360dc3 586 }
bkc_mbed 0:722cc5360dc3 587 else
bkc_mbed 0:722cc5360dc3 588 {
bkc_mbed 0:722cc5360dc3 589 /* コマンドの処理 */
bkc_mbed 0:722cc5360dc3 590 switch (cmd)
bkc_mbed 0:722cc5360dc3 591 {
bkc_mbed 0:722cc5360dc3 592 case CMD_IRQ:
bkc_mbed 0:722cc5360dc3 593 count_us += tick_us;
bkc_mbed 0:722cc5360dc3 594
bkc_mbed 0:722cc5360dc3 595 // LED1
bkc_mbed 0:722cc5360dc3 596 led_cnt1++;
bkc_mbed 0:722cc5360dc3 597 if (led_cnt1 >= 48)
bkc_mbed 0:722cc5360dc3 598 {
bkc_mbed 0:722cc5360dc3 599 led_cnt1 = 0;
bkc_mbed 0:722cc5360dc3 600 led1 = !led1;
bkc_mbed 0:722cc5360dc3 601 }
bkc_mbed 0:722cc5360dc3 602
bkc_mbed 0:722cc5360dc3 603 // LED2
bkc_mbed 0:722cc5360dc3 604 led_cnt2++;
bkc_mbed 0:722cc5360dc3 605 if (led_cnt2 >= 192)
bkc_mbed 0:722cc5360dc3 606 {
bkc_mbed 0:722cc5360dc3 607 led_cnt2 = 0;
bkc_mbed 0:722cc5360dc3 608 led2 = !led2;
bkc_mbed 0:722cc5360dc3 609 }
bkc_mbed 0:722cc5360dc3 610 break;
bkc_mbed 0:722cc5360dc3 611 case CMD_CTC0:
bkc_mbed 0:722cc5360dc3 612 data = ReadNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 613 SetCTC0_NLG(&g.nlg, data);
bkc_mbed 0:722cc5360dc3 614 tick_us = GetTickUsNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 615 // printf("CTC0:%d tick_us:%d\n", data, tick_us);
bkc_mbed 0:722cc5360dc3 616
bkc_mbed 0:722cc5360dc3 617 break;
bkc_mbed 0:722cc5360dc3 618 case CMD_CTC3:
bkc_mbed 0:722cc5360dc3 619 data = ReadNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 620 SetCTC3_NLG(&g.nlg, data);
bkc_mbed 0:722cc5360dc3 621 tick_us = GetTickUsNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 622 // printf("CTC3:%d tick_us:%d\n", data, tick_us);
bkc_mbed 0:722cc5360dc3 623 break;
bkc_mbed 0:722cc5360dc3 624 }
bkc_mbed 0:722cc5360dc3 625 }
bkc_mbed 0:722cc5360dc3 626 }
bkc_mbed 0:722cc5360dc3 627
bkc_mbed 0:722cc5360dc3 628 song_end:
bkc_mbed 0:722cc5360dc3 629
bkc_mbed 0:722cc5360dc3 630 return result;
bkc_mbed 0:722cc5360dc3 631 }
bkc_mbed 0:722cc5360dc3 632
bkc_mbed 0:722cc5360dc3 633
bkc_mbed 0:722cc5360dc3 634 // ファイルを再生する
bkc_mbed 0:722cc5360dc3 635 int play_file(const char *filename)
bkc_mbed 0:722cc5360dc3 636 {
bkc_mbed 0:722cc5360dc3 637 /* NLGファイルを開く */
bkc_mbed 0:722cc5360dc3 638 if (OpenNLG(&g.nlg, filename) < 0)
bkc_mbed 0:722cc5360dc3 639 {
bkc_mbed 0:722cc5360dc3 640 return -1;
bkc_mbed 0:722cc5360dc3 641 }
bkc_mbed 0:722cc5360dc3 642
bkc_mbed 0:722cc5360dc3 643 /* 再生する */
bkc_mbed 0:722cc5360dc3 644 PlayNLG_Loop();
bkc_mbed 0:722cc5360dc3 645
bkc_mbed 0:722cc5360dc3 646 /* NLGファイルを閉じる */
bkc_mbed 0:722cc5360dc3 647 CloseNLG(&g.nlg);
bkc_mbed 0:722cc5360dc3 648
bkc_mbed 0:722cc5360dc3 649 return 0;
bkc_mbed 0:722cc5360dc3 650 }
bkc_mbed 0:722cc5360dc3 651
bkc_mbed 0:722cc5360dc3 652 // error_sdcard()
bkc_mbed 0:722cc5360dc3 653 // エラー!
bkc_mbed 0:722cc5360dc3 654 void error_sdcard(void)
bkc_mbed 0:722cc5360dc3 655 {
bkc_mbed 0:722cc5360dc3 656 lcd.printStr2("SD CARD", "ERROR!");
bkc_mbed 0:722cc5360dc3 657
bkc_mbed 0:722cc5360dc3 658 while(1);
bkc_mbed 0:722cc5360dc3 659 }
bkc_mbed 0:722cc5360dc3 660
bkc_mbed 0:722cc5360dc3 661 // COM mode
bkc_mbed 0:722cc5360dc3 662 void loop_for_com(void)
bkc_mbed 0:722cc5360dc3 663 {
bkc_mbed 0:722cc5360dc3 664 int sw, val;
bkc_mbed 0:722cc5360dc3 665 int adr = 0x00;
bkc_mbed 0:722cc5360dc3 666 int baud = 9600;
bkc_mbed 0:722cc5360dc3 667 char buf[16];
bkc_mbed 0:722cc5360dc3 668 Serial pc(DP_TX, DP_RX);
bkc_mbed 0:722cc5360dc3 669
bkc_mbed 0:722cc5360dc3 670 lcd.cls();
bkc_mbed 0:722cc5360dc3 671 lcd.printStrY(0, "COM MODE");
bkc_mbed 0:722cc5360dc3 672
bkc_mbed 0:722cc5360dc3 673 sprintf(buf, "%-8d", baud);
bkc_mbed 0:722cc5360dc3 674 lcd.printStrY(1, buf);
bkc_mbed 0:722cc5360dc3 675
bkc_mbed 0:722cc5360dc3 676 pc.printf("COM\n");
bkc_mbed 0:722cc5360dc3 677
bkc_mbed 0:722cc5360dc3 678 // タイマースタート
bkc_mbed 0:722cc5360dc3 679 Timer t;
bkc_mbed 0:722cc5360dc3 680 t.start();
bkc_mbed 0:722cc5360dc3 681
bkc_mbed 0:722cc5360dc3 682 while(1)
bkc_mbed 0:722cc5360dc3 683 {
bkc_mbed 0:722cc5360dc3 684
bkc_mbed 0:722cc5360dc3 685 sw = pc.getc();
bkc_mbed 0:722cc5360dc3 686
bkc_mbed 0:722cc5360dc3 687 // 0は同期リセット
bkc_mbed 0:722cc5360dc3 688 if (sw == 0x00)
bkc_mbed 0:722cc5360dc3 689 continue;
bkc_mbed 0:722cc5360dc3 690
bkc_mbed 0:722cc5360dc3 691 if (sw >= 1 && sw <= 3)
bkc_mbed 0:722cc5360dc3 692 {
bkc_mbed 0:722cc5360dc3 693 adr = pc.getc();
bkc_mbed 0:722cc5360dc3 694 val = pc.getc();
bkc_mbed 0:722cc5360dc3 695 }
bkc_mbed 0:722cc5360dc3 696
bkc_mbed 0:722cc5360dc3 697 switch(sw)
bkc_mbed 0:722cc5360dc3 698 {
bkc_mbed 0:722cc5360dc3 699 case 1:
bkc_mbed 0:722cc5360dc3 700 regFMOut(adr, val);
bkc_mbed 0:722cc5360dc3 701 break;
bkc_mbed 0:722cc5360dc3 702 case 2:
bkc_mbed 0:722cc5360dc3 703 regFM2Out(adr, val);
bkc_mbed 0:722cc5360dc3 704 break;
bkc_mbed 0:722cc5360dc3 705 case 3:
bkc_mbed 0:722cc5360dc3 706 regPSGOut(adr, val);
bkc_mbed 0:722cc5360dc3 707 break;
bkc_mbed 0:722cc5360dc3 708 case 0x0f:
bkc_mbed 0:722cc5360dc3 709 // 通信速度設定
bkc_mbed 0:722cc5360dc3 710 val = pc.getc();
bkc_mbed 0:722cc5360dc3 711 baud = (9600 * val);
bkc_mbed 0:722cc5360dc3 712 sprintf(buf, "%-8d", baud);
bkc_mbed 0:722cc5360dc3 713 lcd.printStrY(1, buf);
bkc_mbed 0:722cc5360dc3 714
bkc_mbed 0:722cc5360dc3 715 pc.baud(baud);
bkc_mbed 0:722cc5360dc3 716 break;
bkc_mbed 0:722cc5360dc3 717 case 0x10:
bkc_mbed 0:722cc5360dc3 718 //
bkc_mbed 0:722cc5360dc3 719 val = pc.getc();
bkc_mbed 0:722cc5360dc3 720 val = (val * 10000);
bkc_mbed 0:722cc5360dc3 721 while(t.read_us() < val);
bkc_mbed 0:722cc5360dc3 722 pc.putc('.');
bkc_mbed 0:722cc5360dc3 723 t.reset();
bkc_mbed 0:722cc5360dc3 724 break;
bkc_mbed 0:722cc5360dc3 725 case 0x11:
bkc_mbed 0:722cc5360dc3 726 t.reset();
bkc_mbed 0:722cc5360dc3 727 break;
bkc_mbed 0:722cc5360dc3 728 }
bkc_mbed 0:722cc5360dc3 729
bkc_mbed 0:722cc5360dc3 730 // pc.printf("sw = %02x, adr = %02x, val = %02x\n", sw, adr, val);
bkc_mbed 0:722cc5360dc3 731 }
bkc_mbed 0:722cc5360dc3 732 }
bkc_mbed 0:722cc5360dc3 733
bkc_mbed 0:722cc5360dc3 734
bkc_mbed 0:722cc5360dc3 735 // chk_isdir
bkc_mbed 0:722cc5360dc3 736 // ディレクトリか否か
bkc_mbed 0:722cc5360dc3 737 // return : bool
bkc_mbed 0:722cc5360dc3 738 // false if not directory
bkc_mbed 0:722cc5360dc3 739
bkc_mbed 0:722cc5360dc3 740 bool chk_isdir(const char *cwd, const char *dir)
bkc_mbed 0:722cc5360dc3 741 {
bkc_mbed 0:722cc5360dc3 742 char tmp[256];
bkc_mbed 0:722cc5360dc3 743 sprintf(tmp,"%s/%s", cwd, dir);
bkc_mbed 0:722cc5360dc3 744
bkc_mbed 0:722cc5360dc3 745 DIR *dp = opendir(tmp);
bkc_mbed 0:722cc5360dc3 746 if (!dp)
bkc_mbed 0:722cc5360dc3 747 return false;
bkc_mbed 0:722cc5360dc3 748
bkc_mbed 0:722cc5360dc3 749 closedir(dp);
bkc_mbed 0:722cc5360dc3 750 return true;
bkc_mbed 0:722cc5360dc3 751 }
bkc_mbed 0:722cc5360dc3 752
bkc_mbed 0:722cc5360dc3 753 #define EXT_LIST ".lst"
bkc_mbed 0:722cc5360dc3 754 #define EXT_NLG ".nlg"
bkc_mbed 0:722cc5360dc3 755
bkc_mbed 0:722cc5360dc3 756 // get_fileentry
bkc_mbed 0:722cc5360dc3 757 // index : index of list , -1 = return number of entries
bkc_mbed 0:722cc5360dc3 758 // is_mode : 0 = normal mode
bkc_mbed 0:722cc5360dc3 759 // mode = MODE_GETDIR | MODE_GETLIST | MODE_FILE
bkc_mbed 0:722cc5360dc3 760 // return : int
bkc_mbed 0:722cc5360dc3 761 // -1 = not found or error
bkc_mbed 0:722cc5360dc3 762
bkc_mbed 0:722cc5360dc3 763 #define MODE_FILE 0
bkc_mbed 0:722cc5360dc3 764 #define MODE_GETDIR 1
bkc_mbed 0:722cc5360dc3 765 #define MODE_GETLIST 2
bkc_mbed 0:722cc5360dc3 766
bkc_mbed 0:722cc5360dc3 767 int get_fileentry(int index, int mode)
bkc_mbed 0:722cc5360dc3 768 {
bkc_mbed 0:722cc5360dc3 769 // return -1 if entry is zero.
bkc_mbed 0:722cc5360dc3 770 int count = 0;
bkc_mbed 0:722cc5360dc3 771 DIR *dp = opendir(g.cwd);
bkc_mbed 0:722cc5360dc3 772
bkc_mbed 0:722cc5360dc3 773 g.file[0] = 0;
bkc_mbed 0:722cc5360dc3 774
bkc_mbed 0:722cc5360dc3 775 if (!dp)
bkc_mbed 0:722cc5360dc3 776 return -1;
bkc_mbed 0:722cc5360dc3 777
bkc_mbed 0:722cc5360dc3 778 struct dirent *dent = NULL;
bkc_mbed 0:722cc5360dc3 779
bkc_mbed 0:722cc5360dc3 780 while(1)
bkc_mbed 0:722cc5360dc3 781 {
bkc_mbed 0:722cc5360dc3 782 // エントリの読み出し
bkc_mbed 0:722cc5360dc3 783 dent = readdir(dp);
bkc_mbed 0:722cc5360dc3 784
bkc_mbed 0:722cc5360dc3 785 // 失敗
bkc_mbed 0:722cc5360dc3 786 if (!dent)
bkc_mbed 0:722cc5360dc3 787 break;
bkc_mbed 0:722cc5360dc3 788
bkc_mbed 0:722cc5360dc3 789 // リソースか隠しファイル
bkc_mbed 0:722cc5360dc3 790 if (dent->d_name[0] == '.')
bkc_mbed 0:722cc5360dc3 791 continue;
bkc_mbed 0:722cc5360dc3 792
bkc_mbed 0:722cc5360dc3 793 // 拡張子の取得
bkc_mbed 0:722cc5360dc3 794 char *ext = strrchr(dent->d_name, '.');
bkc_mbed 0:722cc5360dc3 795
bkc_mbed 0:722cc5360dc3 796 switch(mode)
bkc_mbed 0:722cc5360dc3 797 {
bkc_mbed 0:722cc5360dc3 798 // ディレクトリモード
bkc_mbed 0:722cc5360dc3 799 case MODE_GETDIR:
bkc_mbed 0:722cc5360dc3 800 // ディレクトリでなければ継続
bkc_mbed 0:722cc5360dc3 801 if (!chk_isdir(g.cwd, dent->d_name))
bkc_mbed 0:722cc5360dc3 802 continue;
bkc_mbed 0:722cc5360dc3 803 break;
bkc_mbed 0:722cc5360dc3 804
bkc_mbed 0:722cc5360dc3 805 // プレイリストモード
bkc_mbed 0:722cc5360dc3 806 case MODE_GETLIST:
bkc_mbed 0:722cc5360dc3 807 // リストでなければ無視
bkc_mbed 0:722cc5360dc3 808 if (!ext || strcasecmp(ext, EXT_LIST) != 0)
bkc_mbed 0:722cc5360dc3 809 continue;
bkc_mbed 0:722cc5360dc3 810 break;
bkc_mbed 0:722cc5360dc3 811
bkc_mbed 0:722cc5360dc3 812 // ファイルモード
bkc_mbed 0:722cc5360dc3 813 case MODE_FILE:
bkc_mbed 0:722cc5360dc3 814 // NLGファイルでなければ継続
bkc_mbed 0:722cc5360dc3 815 if (!ext || strcasecmp(ext, EXT_NLG) != 0)
bkc_mbed 0:722cc5360dc3 816 continue;
bkc_mbed 0:722cc5360dc3 817 break;
bkc_mbed 0:722cc5360dc3 818 }
bkc_mbed 0:722cc5360dc3 819
bkc_mbed 0:722cc5360dc3 820 // カウントアップ
bkc_mbed 0:722cc5360dc3 821 count++;
bkc_mbed 0:722cc5360dc3 822
bkc_mbed 0:722cc5360dc3 823 // カウントモードかカウントがindex未満で継続
bkc_mbed 0:722cc5360dc3 824 if (index < 0 || count <= index)
bkc_mbed 0:722cc5360dc3 825 continue;
bkc_mbed 0:722cc5360dc3 826
bkc_mbed 0:722cc5360dc3 827 // ファイル名をコピーして終了
bkc_mbed 0:722cc5360dc3 828 strcpy(g.file, dent->d_name);
bkc_mbed 0:722cc5360dc3 829 break;
bkc_mbed 0:722cc5360dc3 830
bkc_mbed 0:722cc5360dc3 831 }
bkc_mbed 0:722cc5360dc3 832 closedir(dp);
bkc_mbed 0:722cc5360dc3 833 return count;
bkc_mbed 0:722cc5360dc3 834 }
bkc_mbed 0:722cc5360dc3 835
bkc_mbed 0:722cc5360dc3 836
bkc_mbed 0:722cc5360dc3 837 //
bkc_mbed 0:722cc5360dc3 838 // タイトル表示
bkc_mbed 0:722cc5360dc3 839 //
bkc_mbed 0:722cc5360dc3 840 int putTitle()
bkc_mbed 0:722cc5360dc3 841 {
bkc_mbed 0:722cc5360dc3 842 int count_ms = 0;
bkc_mbed 0:722cc5360dc3 843 int diff_us = 0;
bkc_mbed 0:722cc5360dc3 844 int us = 0;
bkc_mbed 0:722cc5360dc3 845 int key = get_key();
bkc_mbed 0:722cc5360dc3 846
bkc_mbed 0:722cc5360dc3 847 // キー入力時はキャンセル
bkc_mbed 0:722cc5360dc3 848 if (key)
bkc_mbed 0:722cc5360dc3 849 return key;
bkc_mbed 0:722cc5360dc3 850
bkc_mbed 0:722cc5360dc3 851 lcd.printStr2(PRG_NAME, PRG_VER);
bkc_mbed 0:722cc5360dc3 852 Timer t;
bkc_mbed 0:722cc5360dc3 853 t.start();
bkc_mbed 0:722cc5360dc3 854
bkc_mbed 0:722cc5360dc3 855 // 1500msまでループする
bkc_mbed 0:722cc5360dc3 856 while(count_ms < 1500)
bkc_mbed 0:722cc5360dc3 857 {
bkc_mbed 0:722cc5360dc3 858 while((us = t.read_us()) + diff_us < 1000);
bkc_mbed 0:722cc5360dc3 859 t.reset();
bkc_mbed 0:722cc5360dc3 860
bkc_mbed 0:722cc5360dc3 861 // キー入力があれば終了
bkc_mbed 0:722cc5360dc3 862 key = get_key();
bkc_mbed 0:722cc5360dc3 863 if (key)
bkc_mbed 0:722cc5360dc3 864 return key;
bkc_mbed 0:722cc5360dc3 865
bkc_mbed 0:722cc5360dc3 866 // 差分を現在の時間に足して次の差分を作る
bkc_mbed 0:722cc5360dc3 867 diff_us += us;
bkc_mbed 0:722cc5360dc3 868
bkc_mbed 0:722cc5360dc3 869 while(diff_us >= 1000)
bkc_mbed 0:722cc5360dc3 870 {
bkc_mbed 0:722cc5360dc3 871 count_ms++;
bkc_mbed 0:722cc5360dc3 872 diff_us -= 1000;
bkc_mbed 0:722cc5360dc3 873 }
bkc_mbed 0:722cc5360dc3 874 }
bkc_mbed 0:722cc5360dc3 875
bkc_mbed 0:722cc5360dc3 876 return 0;
bkc_mbed 0:722cc5360dc3 877 }
bkc_mbed 0:722cc5360dc3 878
bkc_mbed 0:722cc5360dc3 879 // 情報の表示
bkc_mbed 0:722cc5360dc3 880 void show_info(int files)
bkc_mbed 0:722cc5360dc3 881 {
bkc_mbed 0:722cc5360dc3 882 char buf[16];
bkc_mbed 0:722cc5360dc3 883
bkc_mbed 0:722cc5360dc3 884 Timer t;
bkc_mbed 0:722cc5360dc3 885 int result_us = 0;
bkc_mbed 0:722cc5360dc3 886 t.reset();
bkc_mbed 0:722cc5360dc3 887 t.start();
bkc_mbed 0:722cc5360dc3 888
bkc_mbed 0:722cc5360dc3 889 // 実際の書き込み時間を計測する
bkc_mbed 0:722cc5360dc3 890 regFMOut(0x20, 0x00);
bkc_mbed 0:722cc5360dc3 891 regFMOut(0x20, 0x00);
bkc_mbed 0:722cc5360dc3 892 regFMOut(0x20, 0x00);
bkc_mbed 0:722cc5360dc3 893 regFMOut(0x20, 0x00);
bkc_mbed 0:722cc5360dc3 894 regFMOut(0x20, 0x00);
bkc_mbed 0:722cc5360dc3 895
bkc_mbed 0:722cc5360dc3 896 // 経過時間を得る
bkc_mbed 0:722cc5360dc3 897 result_us = t.read_us();
bkc_mbed 0:722cc5360dc3 898 t.stop();
bkc_mbed 0:722cc5360dc3 899
bkc_mbed 0:722cc5360dc3 900 // 平均値
bkc_mbed 0:722cc5360dc3 901 result_us /= 5;
bkc_mbed 0:722cc5360dc3 902
bkc_mbed 0:722cc5360dc3 903 // 結果表示
bkc_mbed 0:722cc5360dc3 904 printf("result_us=%dus\n", result_us);
bkc_mbed 0:722cc5360dc3 905 sprintf(buf, "R:%dus", result_us);
bkc_mbed 0:722cc5360dc3 906 lcd.printStrY(1, buf);
bkc_mbed 0:722cc5360dc3 907 wait(3);
bkc_mbed 0:722cc5360dc3 908
bkc_mbed 0:722cc5360dc3 909 // コンパイル時の日付
bkc_mbed 0:722cc5360dc3 910 sprintf(buf, "%8s", __DATE__);
bkc_mbed 0:722cc5360dc3 911 lcd.printStrYscr(1, buf);
bkc_mbed 0:722cc5360dc3 912 wait(3);
bkc_mbed 0:722cc5360dc3 913
bkc_mbed 0:722cc5360dc3 914 if (files < 0)
bkc_mbed 0:722cc5360dc3 915 lcd.printStrY(1, "NO FILES");
bkc_mbed 0:722cc5360dc3 916 else
bkc_mbed 0:722cc5360dc3 917 {
bkc_mbed 0:722cc5360dc3 918 sprintf(buf, "%3dfiles", files);
bkc_mbed 0:722cc5360dc3 919 lcd.printStrY(1, buf);
bkc_mbed 0:722cc5360dc3 920 }
bkc_mbed 0:722cc5360dc3 921 wait(3);
bkc_mbed 0:722cc5360dc3 922 lcd.cls();
bkc_mbed 0:722cc5360dc3 923 }
bkc_mbed 0:722cc5360dc3 924
bkc_mbed 0:722cc5360dc3 925 // ビットテスト
bkc_mbed 0:722cc5360dc3 926
bkc_mbed 0:722cc5360dc3 927 void bit_test()
bkc_mbed 0:722cc5360dc3 928 {
bkc_mbed 0:722cc5360dc3 929 char buf[9];
bkc_mbed 0:722cc5360dc3 930 lcd.printStrY(0, "BIT_TEST");
bkc_mbed 0:722cc5360dc3 931
bkc_mbed 0:722cc5360dc3 932 wait_key_up();
bkc_mbed 0:722cc5360dc3 933
bkc_mbed 0:722cc5360dc3 934 int pin = 0;
bkc_mbed 0:722cc5360dc3 935 int mode = 0;
bkc_mbed 0:722cc5360dc3 936 char sig;
bkc_mbed 0:722cc5360dc3 937
bkc_mbed 0:722cc5360dc3 938 while(1)
bkc_mbed 0:722cc5360dc3 939 {
bkc_mbed 0:722cc5360dc3 940 // 表示
bkc_mbed 0:722cc5360dc3 941 if (mode & 1)
bkc_mbed 0:722cc5360dc3 942 sig = 'C'; // コントロール
bkc_mbed 0:722cc5360dc3 943 else
bkc_mbed 0:722cc5360dc3 944 sig = 'D'; // データ
bkc_mbed 0:722cc5360dc3 945
bkc_mbed 0:722cc5360dc3 946 if (mode & 2)
bkc_mbed 0:722cc5360dc3 947 strcpy(buf,"00");
bkc_mbed 0:722cc5360dc3 948 else
bkc_mbed 0:722cc5360dc3 949 sprintf(buf, "%c%d", sig, pin);
bkc_mbed 0:722cc5360dc3 950
bkc_mbed 0:722cc5360dc3 951 lcd.printStrY(1, buf);
bkc_mbed 0:722cc5360dc3 952
bkc_mbed 0:722cc5360dc3 953 // 出力
bkc_mbed 0:722cc5360dc3 954 if (mode & 2)
bkc_mbed 0:722cc5360dc3 955 {
bkc_mbed 0:722cc5360dc3 956 SHIFTOUT(0xff, 0x00);
bkc_mbed 0:722cc5360dc3 957 }
bkc_mbed 0:722cc5360dc3 958 else
bkc_mbed 0:722cc5360dc3 959 {
bkc_mbed 0:722cc5360dc3 960 int bit = (1 << pin);
bkc_mbed 0:722cc5360dc3 961 if (mode & 1)
bkc_mbed 0:722cc5360dc3 962 SHIFTOUT(0xff & ~(bit), 0); // コントロール
bkc_mbed 0:722cc5360dc3 963 else
bkc_mbed 0:722cc5360dc3 964 SHIFTOUT(0xff, bit); // データ
bkc_mbed 0:722cc5360dc3 965 }
bkc_mbed 0:722cc5360dc3 966
bkc_mbed 0:722cc5360dc3 967 // キー待ち
bkc_mbed 0:722cc5360dc3 968 int key = wait_anykey();
bkc_mbed 0:722cc5360dc3 969
bkc_mbed 0:722cc5360dc3 970 // 再生
bkc_mbed 0:722cc5360dc3 971 if (key & SW_PLAY)
bkc_mbed 0:722cc5360dc3 972 {
bkc_mbed 0:722cc5360dc3 973 mode ^= 2;
bkc_mbed 0:722cc5360dc3 974 continue;
bkc_mbed 0:722cc5360dc3 975 }
bkc_mbed 0:722cc5360dc3 976 // 次
bkc_mbed 0:722cc5360dc3 977 if (key & SW_NEXT)
bkc_mbed 0:722cc5360dc3 978 {
bkc_mbed 0:722cc5360dc3 979 pin++;
bkc_mbed 0:722cc5360dc3 980 if (pin > 7)
bkc_mbed 0:722cc5360dc3 981 {
bkc_mbed 0:722cc5360dc3 982 pin = 0;
bkc_mbed 0:722cc5360dc3 983 mode = (mode + 1) & 1;
bkc_mbed 0:722cc5360dc3 984 }
bkc_mbed 0:722cc5360dc3 985 }
bkc_mbed 0:722cc5360dc3 986 // 前
bkc_mbed 0:722cc5360dc3 987 if (key & SW_PREV)
bkc_mbed 0:722cc5360dc3 988 {
bkc_mbed 0:722cc5360dc3 989 pin--;
bkc_mbed 0:722cc5360dc3 990 if (pin < 0)
bkc_mbed 0:722cc5360dc3 991 {
bkc_mbed 0:722cc5360dc3 992 pin = 7;
bkc_mbed 0:722cc5360dc3 993 mode = (mode - 1) & 1;
bkc_mbed 0:722cc5360dc3 994 }
bkc_mbed 0:722cc5360dc3 995 }
bkc_mbed 0:722cc5360dc3 996 }
bkc_mbed 0:722cc5360dc3 997 }
bkc_mbed 0:722cc5360dc3 998
bkc_mbed 0:722cc5360dc3 999 //
bkc_mbed 0:722cc5360dc3 1000 // ファイル選択表示
bkc_mbed 0:722cc5360dc3 1001 void disp_filesel(int mode)
bkc_mbed 0:722cc5360dc3 1002 {
bkc_mbed 0:722cc5360dc3 1003 char buf[16];
bkc_mbed 0:722cc5360dc3 1004
bkc_mbed 0:722cc5360dc3 1005 char *mode_name;
bkc_mbed 0:722cc5360dc3 1006 switch(mode)
bkc_mbed 0:722cc5360dc3 1007 {
bkc_mbed 0:722cc5360dc3 1008 case MODE_GETLIST:
bkc_mbed 0:722cc5360dc3 1009 mode_name = "LIST SEL";
bkc_mbed 0:722cc5360dc3 1010 break;
bkc_mbed 0:722cc5360dc3 1011 case MODE_GETDIR:
bkc_mbed 0:722cc5360dc3 1012 mode_name = "DIR SEL";
bkc_mbed 0:722cc5360dc3 1013 break;
bkc_mbed 0:722cc5360dc3 1014 default:
bkc_mbed 0:722cc5360dc3 1015 mode_name = "FILE SEL";
bkc_mbed 0:722cc5360dc3 1016 }
bkc_mbed 0:722cc5360dc3 1017
bkc_mbed 0:722cc5360dc3 1018 strncpy(buf, g.file, 8);
bkc_mbed 0:722cc5360dc3 1019 buf[8] = 0;
bkc_mbed 0:722cc5360dc3 1020
bkc_mbed 0:722cc5360dc3 1021 // 表示
bkc_mbed 0:722cc5360dc3 1022 lcd.printStr2(buf, mode_name);
bkc_mbed 0:722cc5360dc3 1023 }
bkc_mbed 0:722cc5360dc3 1024
bkc_mbed 0:722cc5360dc3 1025 //
bkc_mbed 0:722cc5360dc3 1026 // ファイル/ディレクトリ選択
bkc_mbed 0:722cc5360dc3 1027 // mode = MODE_GETLIST | MODE_GETDIR | MODE_FILE
bkc_mbed 0:722cc5360dc3 1028 //
bkc_mbed 0:722cc5360dc3 1029 int file_select(int mode)
bkc_mbed 0:722cc5360dc3 1030 {
bkc_mbed 0:722cc5360dc3 1031 // ファイル数を得る
bkc_mbed 0:722cc5360dc3 1032 int files = get_fileentry(-1, mode);
bkc_mbed 0:722cc5360dc3 1033
bkc_mbed 0:722cc5360dc3 1034 // 最大エントリー
bkc_mbed 0:722cc5360dc3 1035 g.max_entries = files - 1;
bkc_mbed 0:722cc5360dc3 1036
bkc_mbed 0:722cc5360dc3 1037 // ファイル名の取得
bkc_mbed 0:722cc5360dc3 1038 get_fileentry(g.idx, mode);
bkc_mbed 0:722cc5360dc3 1039
bkc_mbed 0:722cc5360dc3 1040 // 表示
bkc_mbed 0:722cc5360dc3 1041 disp_filesel(mode);
bkc_mbed 0:722cc5360dc3 1042
bkc_mbed 0:722cc5360dc3 1043 // リリース待ち
bkc_mbed 0:722cc5360dc3 1044 wait_relkey();
bkc_mbed 0:722cc5360dc3 1045
bkc_mbed 0:722cc5360dc3 1046 while(1)
bkc_mbed 0:722cc5360dc3 1047 {
bkc_mbed 0:722cc5360dc3 1048 // ファイル名の取得
bkc_mbed 0:722cc5360dc3 1049 get_fileentry(g.idx, mode);
bkc_mbed 0:722cc5360dc3 1050
bkc_mbed 0:722cc5360dc3 1051 // 表示
bkc_mbed 0:722cc5360dc3 1052 disp_filesel(mode);
bkc_mbed 0:722cc5360dc3 1053
bkc_mbed 0:722cc5360dc3 1054 // キー待ち
bkc_mbed 0:722cc5360dc3 1055 int key = wait_anykey();
bkc_mbed 0:722cc5360dc3 1056
bkc_mbed 0:722cc5360dc3 1057 // 次のエントリ
bkc_mbed 0:722cc5360dc3 1058 if (key & SW_NEXT)
bkc_mbed 0:722cc5360dc3 1059 {
bkc_mbed 0:722cc5360dc3 1060 if (g.idx < g.max_entries)
bkc_mbed 0:722cc5360dc3 1061 g.idx++;
bkc_mbed 0:722cc5360dc3 1062 else
bkc_mbed 0:722cc5360dc3 1063 g.idx = 0;
bkc_mbed 0:722cc5360dc3 1064 }
bkc_mbed 0:722cc5360dc3 1065
bkc_mbed 0:722cc5360dc3 1066 // 前のエントリ
bkc_mbed 0:722cc5360dc3 1067 if (key & SW_PREV)
bkc_mbed 0:722cc5360dc3 1068 {
bkc_mbed 0:722cc5360dc3 1069 if (g.idx > 0)
bkc_mbed 0:722cc5360dc3 1070 g.idx--;
bkc_mbed 0:722cc5360dc3 1071 else
bkc_mbed 0:722cc5360dc3 1072 g.idx = g.max_entries;
bkc_mbed 0:722cc5360dc3 1073 }
bkc_mbed 0:722cc5360dc3 1074 // 再生ボタンを押した
bkc_mbed 0:722cc5360dc3 1075 if (key & SW_PLAY)
bkc_mbed 0:722cc5360dc3 1076 break;
bkc_mbed 0:722cc5360dc3 1077 }
bkc_mbed 0:722cc5360dc3 1078
bkc_mbed 0:722cc5360dc3 1079 return g.idx;
bkc_mbed 0:722cc5360dc3 1080 }
bkc_mbed 0:722cc5360dc3 1081
bkc_mbed 0:722cc5360dc3 1082 // get_playlist()
bkc_mbed 0:722cc5360dc3 1083 // index = リスト位置, -1でエントリ数を返す
bkc_mbed 0:722cc5360dc3 1084 int get_playlist(int index)
bkc_mbed 0:722cc5360dc3 1085 {
bkc_mbed 0:722cc5360dc3 1086 int count = 0;
bkc_mbed 0:722cc5360dc3 1087 FILE *fp = fopen(g.playlist, "r");
bkc_mbed 0:722cc5360dc3 1088
bkc_mbed 0:722cc5360dc3 1089 g.file[0] = 0;
bkc_mbed 0:722cc5360dc3 1090
bkc_mbed 0:722cc5360dc3 1091 // プレイリストが開けない
bkc_mbed 0:722cc5360dc3 1092 if (!fp)
bkc_mbed 0:722cc5360dc3 1093 return -1;
bkc_mbed 0:722cc5360dc3 1094
bkc_mbed 0:722cc5360dc3 1095 while(1)
bkc_mbed 0:722cc5360dc3 1096 {
bkc_mbed 0:722cc5360dc3 1097 // プレイリストから一行読み込む
bkc_mbed 0:722cc5360dc3 1098 char *p = fgets(g.file, MAX_FILENAME, fp);
bkc_mbed 0:722cc5360dc3 1099
bkc_mbed 0:722cc5360dc3 1100 // EOFなので終了
bkc_mbed 0:722cc5360dc3 1101 if (!p)
bkc_mbed 0:722cc5360dc3 1102 break;
bkc_mbed 0:722cc5360dc3 1103
bkc_mbed 0:722cc5360dc3 1104 // サイズ
bkc_mbed 0:722cc5360dc3 1105 int len = strlen(g.file);
bkc_mbed 0:722cc5360dc3 1106
bkc_mbed 0:722cc5360dc3 1107 // CR/LFをトリムする
bkc_mbed 0:722cc5360dc3 1108 while(len > 0 && (unsigned char)g.file[len - 1] < 0x20)
bkc_mbed 0:722cc5360dc3 1109 {
bkc_mbed 0:722cc5360dc3 1110 g.file[len - 1] = 0x00;
bkc_mbed 0:722cc5360dc3 1111 len--;
bkc_mbed 0:722cc5360dc3 1112 }
bkc_mbed 0:722cc5360dc3 1113
bkc_mbed 0:722cc5360dc3 1114 // 空行は飛ばす
bkc_mbed 0:722cc5360dc3 1115 if (!len)
bkc_mbed 0:722cc5360dc3 1116 continue;
bkc_mbed 0:722cc5360dc3 1117
bkc_mbed 0:722cc5360dc3 1118 count++;
bkc_mbed 0:722cc5360dc3 1119
bkc_mbed 0:722cc5360dc3 1120 // カウントモードかカウントがindex未満で継続
bkc_mbed 0:722cc5360dc3 1121 if (index < 0 || count <= index)
bkc_mbed 0:722cc5360dc3 1122 continue;
bkc_mbed 0:722cc5360dc3 1123 else
bkc_mbed 0:722cc5360dc3 1124 break;
bkc_mbed 0:722cc5360dc3 1125 }
bkc_mbed 0:722cc5360dc3 1126
bkc_mbed 0:722cc5360dc3 1127 // プレイリストを閉じる
bkc_mbed 0:722cc5360dc3 1128 fclose(fp);
bkc_mbed 0:722cc5360dc3 1129
bkc_mbed 0:722cc5360dc3 1130 #if defined(__MICROLIB) && defined(__ARMCC_VERSION)
bkc_mbed 0:722cc5360dc3 1131 free(fp);
bkc_mbed 0:722cc5360dc3 1132 #endif
bkc_mbed 0:722cc5360dc3 1133
bkc_mbed 0:722cc5360dc3 1134 return count;
bkc_mbed 0:722cc5360dc3 1135 }
bkc_mbed 0:722cc5360dc3 1136
bkc_mbed 0:722cc5360dc3 1137
bkc_mbed 0:722cc5360dc3 1138 // グローバル変数初期化
bkc_mbed 0:722cc5360dc3 1139 void init_globe(void)
bkc_mbed 0:722cc5360dc3 1140 {
bkc_mbed 0:722cc5360dc3 1141 memset(&g, 0, sizeof(g));
bkc_mbed 0:722cc5360dc3 1142 strcpy(g.cwd,"/sd");
bkc_mbed 0:722cc5360dc3 1143 }
bkc_mbed 0:722cc5360dc3 1144
bkc_mbed 0:722cc5360dc3 1145 // パスの作成
bkc_mbed 0:722cc5360dc3 1146 void make_path(char *path, const char *dir, const char *file)
bkc_mbed 0:722cc5360dc3 1147 {
bkc_mbed 0:722cc5360dc3 1148 sprintf(path, "%s/%s", dir, file);
bkc_mbed 0:722cc5360dc3 1149 }
bkc_mbed 0:722cc5360dc3 1150
bkc_mbed 0:722cc5360dc3 1151 // 再生モード
bkc_mbed 0:722cc5360dc3 1152 void play_mode(void)
bkc_mbed 0:722cc5360dc3 1153 {
bkc_mbed 0:722cc5360dc3 1154 int files = -1;
bkc_mbed 0:722cc5360dc3 1155
bkc_mbed 0:722cc5360dc3 1156 // プレイリストモードか否か
bkc_mbed 0:722cc5360dc3 1157 if (g.playlist[0])
bkc_mbed 0:722cc5360dc3 1158 files = get_playlist(-1);
bkc_mbed 0:722cc5360dc3 1159 else
bkc_mbed 0:722cc5360dc3 1160 files = get_fileentry(-1, MODE_FILE);
bkc_mbed 0:722cc5360dc3 1161
bkc_mbed 0:722cc5360dc3 1162 // エラー表示
bkc_mbed 0:722cc5360dc3 1163 if (files < 0)
bkc_mbed 0:722cc5360dc3 1164 error_sdcard();
bkc_mbed 0:722cc5360dc3 1165
bkc_mbed 0:722cc5360dc3 1166 g.max_entries = files - 1;
bkc_mbed 0:722cc5360dc3 1167
bkc_mbed 0:722cc5360dc3 1168 bool repeat_flag = false;
bkc_mbed 0:722cc5360dc3 1169
bkc_mbed 0:722cc5360dc3 1170 // ファイルが無い
bkc_mbed 0:722cc5360dc3 1171 if (files < 1)
bkc_mbed 0:722cc5360dc3 1172 {
bkc_mbed 0:722cc5360dc3 1173 lcd.cls();
bkc_mbed 0:722cc5360dc3 1174 lcd.printStrY(0, "NO FILES");
bkc_mbed 0:722cc5360dc3 1175 wait(1);
bkc_mbed 0:722cc5360dc3 1176 }
bkc_mbed 0:722cc5360dc3 1177
bkc_mbed 0:722cc5360dc3 1178 // 再生モードループ
bkc_mbed 0:722cc5360dc3 1179 while(1)
bkc_mbed 0:722cc5360dc3 1180 {
bkc_mbed 0:722cc5360dc3 1181 char path[MAX_PATH];
bkc_mbed 0:722cc5360dc3 1182 char buf[16];
bkc_mbed 0:722cc5360dc3 1183
bkc_mbed 0:722cc5360dc3 1184 // プレイリストかどうか?
bkc_mbed 0:722cc5360dc3 1185 if (g.playlist[0])
bkc_mbed 0:722cc5360dc3 1186 get_playlist(g.idx);
bkc_mbed 0:722cc5360dc3 1187 else
bkc_mbed 0:722cc5360dc3 1188 get_fileentry(g.idx, MODE_FILE);
bkc_mbed 0:722cc5360dc3 1189
bkc_mbed 0:722cc5360dc3 1190 // フルパスを作成
bkc_mbed 0:722cc5360dc3 1191 make_path(path, g.cwd, g.file);
bkc_mbed 0:722cc5360dc3 1192
bkc_mbed 0:722cc5360dc3 1193 // 曲番号
bkc_mbed 0:722cc5360dc3 1194 sprintf(buf, "%2d ", g.idx + 1);
bkc_mbed 0:722cc5360dc3 1195
bkc_mbed 0:722cc5360dc3 1196 // ファイル名名表示
bkc_mbed 0:722cc5360dc3 1197 lcd.cls();
bkc_mbed 0:722cc5360dc3 1198 lcd.printStrY(0, g.file);
bkc_mbed 0:722cc5360dc3 1199 lcd.printStrY(1, buf);
bkc_mbed 0:722cc5360dc3 1200
bkc_mbed 0:722cc5360dc3 1201 // 再生開始
bkc_mbed 0:722cc5360dc3 1202 play_file(path);
bkc_mbed 0:722cc5360dc3 1203
bkc_mbed 0:722cc5360dc3 1204 // ミュート
bkc_mbed 0:722cc5360dc3 1205 boardMute();
bkc_mbed 0:722cc5360dc3 1206
bkc_mbed 0:722cc5360dc3 1207 // キー開放待ち
bkc_mbed 0:722cc5360dc3 1208 wait_relkey();
bkc_mbed 0:722cc5360dc3 1209
bkc_mbed 0:722cc5360dc3 1210
bkc_mbed 0:722cc5360dc3 1211 // 再生ボタンが押された
bkc_mbed 0:722cc5360dc3 1212 if (g.stop)
bkc_mbed 0:722cc5360dc3 1213 {
bkc_mbed 0:722cc5360dc3 1214 // ストップ表示
bkc_mbed 0:722cc5360dc3 1215 lcd.printStrY(1, " STOP ");
bkc_mbed 0:722cc5360dc3 1216
bkc_mbed 0:722cc5360dc3 1217 g.stop = false;
bkc_mbed 0:722cc5360dc3 1218 g.prev = false;
bkc_mbed 0:722cc5360dc3 1219 g.total_sec = 0;
bkc_mbed 0:722cc5360dc3 1220
bkc_mbed 0:722cc5360dc3 1221 // ボード初期化
bkc_mbed 0:722cc5360dc3 1222 boardInit();
bkc_mbed 0:722cc5360dc3 1223
bkc_mbed 0:722cc5360dc3 1224 // ファイル選択
bkc_mbed 0:722cc5360dc3 1225 file_select(MODE_FILE);
bkc_mbed 0:722cc5360dc3 1226 continue;
bkc_mbed 0:722cc5360dc3 1227 }
bkc_mbed 0:722cc5360dc3 1228
bkc_mbed 0:722cc5360dc3 1229 // 前の曲を再生
bkc_mbed 0:722cc5360dc3 1230 if (g.prev)
bkc_mbed 0:722cc5360dc3 1231 {
bkc_mbed 0:722cc5360dc3 1232 g.prev = false;
bkc_mbed 0:722cc5360dc3 1233
bkc_mbed 0:722cc5360dc3 1234 // 同じ曲を再生
bkc_mbed 0:722cc5360dc3 1235 if (g.total_sec >= 2)
bkc_mbed 0:722cc5360dc3 1236 continue;
bkc_mbed 0:722cc5360dc3 1237
bkc_mbed 0:722cc5360dc3 1238 if (g.idx > 0)
bkc_mbed 0:722cc5360dc3 1239 g.idx--;
bkc_mbed 0:722cc5360dc3 1240 else
bkc_mbed 0:722cc5360dc3 1241 g.idx = g.max_entries;
bkc_mbed 0:722cc5360dc3 1242
bkc_mbed 0:722cc5360dc3 1243 continue;
bkc_mbed 0:722cc5360dc3 1244 }
bkc_mbed 0:722cc5360dc3 1245
bkc_mbed 0:722cc5360dc3 1246 // 繰り返しではない
bkc_mbed 0:722cc5360dc3 1247 if (!repeat_flag)
bkc_mbed 0:722cc5360dc3 1248 {
bkc_mbed 0:722cc5360dc3 1249 if (g.idx < g.max_entries)
bkc_mbed 0:722cc5360dc3 1250 g.idx++;
bkc_mbed 0:722cc5360dc3 1251 else
bkc_mbed 0:722cc5360dc3 1252 g.idx = 0;
bkc_mbed 0:722cc5360dc3 1253 }
bkc_mbed 0:722cc5360dc3 1254 repeat_flag = false;
bkc_mbed 0:722cc5360dc3 1255 }
bkc_mbed 0:722cc5360dc3 1256 }
bkc_mbed 0:722cc5360dc3 1257
bkc_mbed 0:722cc5360dc3 1258
bkc_mbed 0:722cc5360dc3 1259
bkc_mbed 0:722cc5360dc3 1260 //
bkc_mbed 0:722cc5360dc3 1261 // メニュー選択
bkc_mbed 0:722cc5360dc3 1262 //
bkc_mbed 0:722cc5360dc3 1263 #define MENU_FILE 0
bkc_mbed 0:722cc5360dc3 1264 #define MENU_DIR 1
bkc_mbed 0:722cc5360dc3 1265 #define MENU_LIST 2
bkc_mbed 0:722cc5360dc3 1266 #define MENU_INFO 3
bkc_mbed 0:722cc5360dc3 1267 #define MENU_COM 4
bkc_mbed 0:722cc5360dc3 1268 #define MENU_TEST 5
bkc_mbed 0:722cc5360dc3 1269 #define MENU_SMODE 6
bkc_mbed 0:722cc5360dc3 1270 #define MENU_MAX 6
bkc_mbed 0:722cc5360dc3 1271
bkc_mbed 0:722cc5360dc3 1272 // メニュー文字列
bkc_mbed 0:722cc5360dc3 1273 const char *menu_modes[] =
bkc_mbed 0:722cc5360dc3 1274 {
bkc_mbed 0:722cc5360dc3 1275 "FILE", // 0
bkc_mbed 0:722cc5360dc3 1276 "DIR", // 1
bkc_mbed 0:722cc5360dc3 1277 "LIST", // 2
bkc_mbed 0:722cc5360dc3 1278 "INFO", // 3
bkc_mbed 0:722cc5360dc3 1279 "COM", // 4
bkc_mbed 0:722cc5360dc3 1280 "TEST", // 5
bkc_mbed 0:722cc5360dc3 1281 "Sx16", // 6
bkc_mbed 0:722cc5360dc3 1282 };
bkc_mbed 0:722cc5360dc3 1283
bkc_mbed 0:722cc5360dc3 1284 // メニュー選択表示
bkc_mbed 0:722cc5360dc3 1285 void menu_disp(int sel)
bkc_mbed 0:722cc5360dc3 1286 {
bkc_mbed 0:722cc5360dc3 1287 char buf[16];
bkc_mbed 0:722cc5360dc3 1288
bkc_mbed 0:722cc5360dc3 1289 // 表示
bkc_mbed 0:722cc5360dc3 1290 lcd.printStrY(0, "MENU SEL");
bkc_mbed 0:722cc5360dc3 1291 sprintf(buf, "%02d %-4s", sel, menu_modes[sel]);
bkc_mbed 0:722cc5360dc3 1292 lcd.printStrY(1, buf);
bkc_mbed 0:722cc5360dc3 1293 }
bkc_mbed 0:722cc5360dc3 1294
bkc_mbed 0:722cc5360dc3 1295 // モード選択
bkc_mbed 0:722cc5360dc3 1296 int menu_select()
bkc_mbed 0:722cc5360dc3 1297 {
bkc_mbed 0:722cc5360dc3 1298 int count = 0;
bkc_mbed 0:722cc5360dc3 1299
bkc_mbed 0:722cc5360dc3 1300 // 初期表示
bkc_mbed 0:722cc5360dc3 1301 menu_disp(0);
bkc_mbed 0:722cc5360dc3 1302
bkc_mbed 0:722cc5360dc3 1303 // リリース待ち
bkc_mbed 0:722cc5360dc3 1304 wait_key_up();
bkc_mbed 0:722cc5360dc3 1305
bkc_mbed 0:722cc5360dc3 1306 while(1)
bkc_mbed 0:722cc5360dc3 1307 {
bkc_mbed 0:722cc5360dc3 1308 // キー待ち
bkc_mbed 0:722cc5360dc3 1309 int key = wait_anykey();
bkc_mbed 0:722cc5360dc3 1310
bkc_mbed 0:722cc5360dc3 1311 // 次
bkc_mbed 0:722cc5360dc3 1312 if (key & SW_NEXT)
bkc_mbed 0:722cc5360dc3 1313 {
bkc_mbed 0:722cc5360dc3 1314 if (count < MENU_MAX)
bkc_mbed 0:722cc5360dc3 1315 count++;
bkc_mbed 0:722cc5360dc3 1316 else
bkc_mbed 0:722cc5360dc3 1317 count = 0;
bkc_mbed 0:722cc5360dc3 1318 }
bkc_mbed 0:722cc5360dc3 1319 // 前
bkc_mbed 0:722cc5360dc3 1320 if (key & SW_PREV)
bkc_mbed 0:722cc5360dc3 1321 {
bkc_mbed 0:722cc5360dc3 1322 if (count > 0)
bkc_mbed 0:722cc5360dc3 1323 count--;
bkc_mbed 0:722cc5360dc3 1324 else
bkc_mbed 0:722cc5360dc3 1325 count = MENU_MAX;
bkc_mbed 0:722cc5360dc3 1326 }
bkc_mbed 0:722cc5360dc3 1327 // 再生
bkc_mbed 0:722cc5360dc3 1328 if (key & SW_PLAY)
bkc_mbed 0:722cc5360dc3 1329 break;
bkc_mbed 0:722cc5360dc3 1330
bkc_mbed 0:722cc5360dc3 1331 // 表示
bkc_mbed 0:722cc5360dc3 1332 menu_disp(count);
bkc_mbed 0:722cc5360dc3 1333 }
bkc_mbed 0:722cc5360dc3 1334
bkc_mbed 0:722cc5360dc3 1335 return count;
bkc_mbed 0:722cc5360dc3 1336 }
bkc_mbed 0:722cc5360dc3 1337
bkc_mbed 0:722cc5360dc3 1338 // メニューモード
bkc_mbed 0:722cc5360dc3 1339 void menu_mode(void)
bkc_mbed 0:722cc5360dc3 1340 {
bkc_mbed 0:722cc5360dc3 1341 int files = 0;
bkc_mbed 0:722cc5360dc3 1342 char path[MAX_PATH];
bkc_mbed 0:722cc5360dc3 1343
bkc_mbed 0:722cc5360dc3 1344 menu_start:
bkc_mbed 0:722cc5360dc3 1345
bkc_mbed 0:722cc5360dc3 1346 // ボードの初期化
bkc_mbed 0:722cc5360dc3 1347 boardInit();
bkc_mbed 0:722cc5360dc3 1348
bkc_mbed 0:722cc5360dc3 1349 int sw = menu_select();
bkc_mbed 0:722cc5360dc3 1350 switch(sw)
bkc_mbed 0:722cc5360dc3 1351 {
bkc_mbed 0:722cc5360dc3 1352 // ファイル選択
bkc_mbed 0:722cc5360dc3 1353 case MENU_FILE:
bkc_mbed 0:722cc5360dc3 1354 file_select(MODE_FILE);
bkc_mbed 0:722cc5360dc3 1355 break;
bkc_mbed 0:722cc5360dc3 1356 // ディレクトリ選択
bkc_mbed 0:722cc5360dc3 1357 case MENU_DIR:
bkc_mbed 0:722cc5360dc3 1358 file_select(MODE_GETDIR);
bkc_mbed 0:722cc5360dc3 1359 // パスを結合し、インデックスを初期化
bkc_mbed 0:722cc5360dc3 1360 make_path(path, g.cwd, g.file);
bkc_mbed 0:722cc5360dc3 1361 strcpy(g.cwd, path);
bkc_mbed 0:722cc5360dc3 1362 g.idx = 0;
bkc_mbed 0:722cc5360dc3 1363 break;
bkc_mbed 0:722cc5360dc3 1364 // プレイリスト選択
bkc_mbed 0:722cc5360dc3 1365 case MENU_LIST:
bkc_mbed 0:722cc5360dc3 1366 file_select(MODE_GETLIST);
bkc_mbed 0:722cc5360dc3 1367 break;
bkc_mbed 0:722cc5360dc3 1368 // 情報モード
bkc_mbed 0:722cc5360dc3 1369 case MENU_INFO:
bkc_mbed 0:722cc5360dc3 1370 files = get_fileentry(-1, MODE_FILE);
bkc_mbed 0:722cc5360dc3 1371 show_info(files);
bkc_mbed 0:722cc5360dc3 1372 goto menu_start;
bkc_mbed 0:722cc5360dc3 1373 // 通信モード
bkc_mbed 0:722cc5360dc3 1374 case MENU_COM:
bkc_mbed 0:722cc5360dc3 1375 loop_for_com();
bkc_mbed 0:722cc5360dc3 1376 break;
bkc_mbed 0:722cc5360dc3 1377 // テストモード
bkc_mbed 0:722cc5360dc3 1378 case MENU_TEST:
bkc_mbed 0:722cc5360dc3 1379 bit_test();
bkc_mbed 0:722cc5360dc3 1380 break;
bkc_mbed 0:722cc5360dc3 1381 // ストレートモード
bkc_mbed 0:722cc5360dc3 1382 case MENU_SMODE:
bkc_mbed 0:722cc5360dc3 1383 g.one_mode = true;
bkc_mbed 0:722cc5360dc3 1384 lcd.printStr2("","Sx16 ON");
bkc_mbed 0:722cc5360dc3 1385 wait(0.5);
bkc_mbed 0:722cc5360dc3 1386 goto menu_start;
bkc_mbed 0:722cc5360dc3 1387 }
bkc_mbed 0:722cc5360dc3 1388 }
bkc_mbed 0:722cc5360dc3 1389
bkc_mbed 0:722cc5360dc3 1390 //
bkc_mbed 0:722cc5360dc3 1391 // main
bkc_mbed 0:722cc5360dc3 1392 //
bkc_mbed 0:722cc5360dc3 1393 int main()
bkc_mbed 0:722cc5360dc3 1394 {
bkc_mbed 0:722cc5360dc3 1395 // 初期化
bkc_mbed 0:722cc5360dc3 1396 init_globe();
bkc_mbed 0:722cc5360dc3 1397
bkc_mbed 0:722cc5360dc3 1398 // I/O初期化
bkc_mbed 0:722cc5360dc3 1399 ioInit();
bkc_mbed 0:722cc5360dc3 1400
bkc_mbed 0:722cc5360dc3 1401 // 立ち上がり待ち
bkc_mbed 0:722cc5360dc3 1402 wait_ms(20);
bkc_mbed 0:722cc5360dc3 1403
bkc_mbed 0:722cc5360dc3 1404 // シフトレジスタの初期化
bkc_mbed 0:722cc5360dc3 1405 SHIFTOUT(0xFF, 0xFF);
bkc_mbed 0:722cc5360dc3 1406
bkc_mbed 0:722cc5360dc3 1407 // LCD初期化
bkc_mbed 0:722cc5360dc3 1408 lcd.init();
bkc_mbed 0:722cc5360dc3 1409
bkc_mbed 0:722cc5360dc3 1410 // タイトル表示
bkc_mbed 0:722cc5360dc3 1411 int key = putTitle();
bkc_mbed 0:722cc5360dc3 1412
bkc_mbed 0:722cc5360dc3 1413 // NEXTボタンでメニュー表示
bkc_mbed 0:722cc5360dc3 1414 if (key & SW_NEXT)
bkc_mbed 0:722cc5360dc3 1415 menu_mode();
bkc_mbed 0:722cc5360dc3 1416
bkc_mbed 0:722cc5360dc3 1417 // 再生モード
bkc_mbed 0:722cc5360dc3 1418 play_mode();
bkc_mbed 0:722cc5360dc3 1419 }