firmware of NBCTRLV1 / AYC01

Dependencies:   SDFileSystemEx mbed

Committer:
bkc_mbed
Date:
Mon Apr 18 00:36:37 2016 +0000
Revision:
1:29f0e76a9999
Parent:
0:722cc5360dc3
v1.30

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bkc_mbed 0:722cc5360dc3 1
bkc_mbed 0:722cc5360dc3 2 //
bkc_mbed 0:722cc5360dc3 3 // nlg_mini.cpp
bkc_mbed 0:722cc5360dc3 4 //
bkc_mbed 0:722cc5360dc3 5
bkc_mbed 0:722cc5360dc3 6 #include <stdio.h>
bkc_mbed 0:722cc5360dc3 7 #include <stdlib.h>
bkc_mbed 0:722cc5360dc3 8 #include <string.h>
bkc_mbed 0:722cc5360dc3 9
bkc_mbed 0:722cc5360dc3 10 #include "nlg_mini.h"
bkc_mbed 0:722cc5360dc3 11
bkc_mbed 0:722cc5360dc3 12 /* 単位を扱いやすいように */
bkc_mbed 0:722cc5360dc3 13 typedef unsigned char byte;
bkc_mbed 0:722cc5360dc3 14 typedef unsigned short word;
bkc_mbed 0:722cc5360dc3 15 typedef unsigned long dword;
bkc_mbed 0:722cc5360dc3 16
bkc_mbed 0:722cc5360dc3 17 // 変数読み出し(WORD)
bkc_mbed 0:722cc5360dc3 18 word ReadWORD(byte *p)
bkc_mbed 0:722cc5360dc3 19 {
bkc_mbed 0:722cc5360dc3 20 return
bkc_mbed 0:722cc5360dc3 21 ((word)p[0]) |
bkc_mbed 0:722cc5360dc3 22 ((word)p[1])<<8;
bkc_mbed 0:722cc5360dc3 23 }
bkc_mbed 0:722cc5360dc3 24
bkc_mbed 0:722cc5360dc3 25 // 変数読み出し(DWORD)
bkc_mbed 0:722cc5360dc3 26 dword ReadDWORD(byte *p)
bkc_mbed 0:722cc5360dc3 27 {
bkc_mbed 0:722cc5360dc3 28 return
bkc_mbed 0:722cc5360dc3 29 ((dword)p[0]) |
bkc_mbed 0:722cc5360dc3 30 ((dword)p[1])<<8 |
bkc_mbed 0:722cc5360dc3 31 ((dword)p[2])<<16 |
bkc_mbed 0:722cc5360dc3 32 ((dword)p[3])<<24;
bkc_mbed 0:722cc5360dc3 33 }
bkc_mbed 0:722cc5360dc3 34
bkc_mbed 0:722cc5360dc3 35 // NLGファイルを開く
bkc_mbed 0:722cc5360dc3 36 int OpenNLG(NLG_CTX *np, const char *filename)
bkc_mbed 0:722cc5360dc3 37 {
bkc_mbed 0:722cc5360dc3 38 byte hdr[0x60];
bkc_mbed 0:722cc5360dc3 39
bkc_mbed 0:722cc5360dc3 40 np->fp = fopen(filename, "rb");
bkc_mbed 0:722cc5360dc3 41
bkc_mbed 0:722cc5360dc3 42 // ファイルが開けない
bkc_mbed 0:722cc5360dc3 43 if (!np->fp)
bkc_mbed 0:722cc5360dc3 44 return NLG_FILEERR;
bkc_mbed 0:722cc5360dc3 45
bkc_mbed 0:722cc5360dc3 46 // ヘッダ部分の読み込み
bkc_mbed 0:722cc5360dc3 47 fread(hdr, 0x60, 1, np->fp);
bkc_mbed 0:722cc5360dc3 48
bkc_mbed 0:722cc5360dc3 49 // IDの確認
bkc_mbed 0:722cc5360dc3 50 if (memcmp(hdr, "NLG1", 4) != 0)
bkc_mbed 0:722cc5360dc3 51 {
bkc_mbed 0:722cc5360dc3 52 CloseNLG(np);
bkc_mbed 0:722cc5360dc3 53 return NLG_UNK_FORMAT;
bkc_mbed 0:722cc5360dc3 54 }
bkc_mbed 0:722cc5360dc3 55
bkc_mbed 0:722cc5360dc3 56 // バージョン
bkc_mbed 0:722cc5360dc3 57 np->version = ReadWORD(hdr + 4);
bkc_mbed 0:722cc5360dc3 58
bkc_mbed 0:722cc5360dc3 59 // クロック
bkc_mbed 0:722cc5360dc3 60 np->baseclk = ReadDWORD(hdr + 72);
bkc_mbed 0:722cc5360dc3 61
bkc_mbed 0:722cc5360dc3 62 // ティック
bkc_mbed 0:722cc5360dc3 63 np->tick = ReadDWORD(hdr + 76);
bkc_mbed 0:722cc5360dc3 64 np->tick_us = np->tick / 4;
bkc_mbed 0:722cc5360dc3 65
bkc_mbed 0:722cc5360dc3 66 // 長さ
bkc_mbed 0:722cc5360dc3 67 np->length = ReadDWORD(hdr + 88);
bkc_mbed 0:722cc5360dc3 68
bkc_mbed 0:722cc5360dc3 69 // 位置
bkc_mbed 0:722cc5360dc3 70 fseek(np->fp, 0x60, SEEK_SET);
bkc_mbed 0:722cc5360dc3 71
bkc_mbed 0:722cc5360dc3 72 // CTC初期化
bkc_mbed 0:722cc5360dc3 73 np->ctc0 = np->ctc3 = 0;
bkc_mbed 0:722cc5360dc3 74
bkc_mbed 0:722cc5360dc3 75 return NLG_OK;
bkc_mbed 0:722cc5360dc3 76 }
bkc_mbed 0:722cc5360dc3 77
bkc_mbed 0:722cc5360dc3 78 // ファイルを閉じる
bkc_mbed 0:722cc5360dc3 79 void CloseNLG(NLG_CTX *np)
bkc_mbed 0:722cc5360dc3 80 {
bkc_mbed 0:722cc5360dc3 81 if (!np->fp)
bkc_mbed 0:722cc5360dc3 82 return;
bkc_mbed 0:722cc5360dc3 83
bkc_mbed 0:722cc5360dc3 84 fclose(np->fp);
bkc_mbed 0:722cc5360dc3 85
bkc_mbed 0:722cc5360dc3 86 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
bkc_mbed 0:722cc5360dc3 87 free(np->fp);
bkc_mbed 0:722cc5360dc3 88 #endif
bkc_mbed 0:722cc5360dc3 89
bkc_mbed 0:722cc5360dc3 90 np->fp = NULL;
bkc_mbed 0:722cc5360dc3 91 }
bkc_mbed 0:722cc5360dc3 92
bkc_mbed 0:722cc5360dc3 93 // データの読み出し
bkc_mbed 0:722cc5360dc3 94 int ReadNLG(NLG_CTX *np)
bkc_mbed 0:722cc5360dc3 95 {
bkc_mbed 0:722cc5360dc3 96 return fgetc(np->fp);
bkc_mbed 0:722cc5360dc3 97 }
bkc_mbed 0:722cc5360dc3 98
bkc_mbed 0:722cc5360dc3 99 // ファイルポインタの位置を取得
bkc_mbed 0:722cc5360dc3 100 long TellNLG(NLG_CTX *np)
bkc_mbed 0:722cc5360dc3 101 {
bkc_mbed 0:722cc5360dc3 102 return ftell(np->fp);
bkc_mbed 0:722cc5360dc3 103 }
bkc_mbed 0:722cc5360dc3 104
bkc_mbed 0:722cc5360dc3 105 // ファイルポインタの位置を設定
bkc_mbed 0:722cc5360dc3 106 void SeekNLG(NLG_CTX *np, long pos)
bkc_mbed 0:722cc5360dc3 107 {
bkc_mbed 0:722cc5360dc3 108 fseek(np->fp, pos, SEEK_SET);
bkc_mbed 0:722cc5360dc3 109 }
bkc_mbed 0:722cc5360dc3 110
bkc_mbed 0:722cc5360dc3 111 // ティック(us)の取得
bkc_mbed 0:722cc5360dc3 112 int GetTickUsNLG(NLG_CTX *np)
bkc_mbed 0:722cc5360dc3 113 {
bkc_mbed 0:722cc5360dc3 114 return np->tick_us;
bkc_mbed 0:722cc5360dc3 115 }
bkc_mbed 0:722cc5360dc3 116
bkc_mbed 0:722cc5360dc3 117 // Set Tick
bkc_mbed 0:722cc5360dc3 118 // (CTC0 * 64us) * CTC3
bkc_mbed 0:722cc5360dc3 119 static inline void SetTickNLG(NLG_CTX *np)
bkc_mbed 0:722cc5360dc3 120 {
bkc_mbed 0:722cc5360dc3 121 np->tick = ((np->ctc0 * 256) * np->ctc3);
bkc_mbed 0:722cc5360dc3 122 np->tick_us = np->tick / 4;
bkc_mbed 0:722cc5360dc3 123 }
bkc_mbed 0:722cc5360dc3 124
bkc_mbed 0:722cc5360dc3 125 // CTC0値の設定
bkc_mbed 0:722cc5360dc3 126 void SetCTC0_NLG(NLG_CTX *np, int value)
bkc_mbed 0:722cc5360dc3 127 {
bkc_mbed 0:722cc5360dc3 128 np->ctc0 = value;
bkc_mbed 0:722cc5360dc3 129 SetTickNLG(np);
bkc_mbed 0:722cc5360dc3 130 }
bkc_mbed 0:722cc5360dc3 131
bkc_mbed 0:722cc5360dc3 132 // CTC3値の設定
bkc_mbed 0:722cc5360dc3 133 void SetCTC3_NLG(NLG_CTX *np, int value)
bkc_mbed 0:722cc5360dc3 134 {
bkc_mbed 0:722cc5360dc3 135 np->ctc3 = value;
bkc_mbed 0:722cc5360dc3 136 SetTickNLG(np);
bkc_mbed 0:722cc5360dc3 137 }
bkc_mbed 0:722cc5360dc3 138
bkc_mbed 0:722cc5360dc3 139 // 曲の長さを得る
bkc_mbed 0:722cc5360dc3 140 int GetLengthNLG(NLG_CTX *np)
bkc_mbed 0:722cc5360dc3 141 {
bkc_mbed 0:722cc5360dc3 142 return np->length;
bkc_mbed 0:722cc5360dc3 143 }
bkc_mbed 0:722cc5360dc3 144
bkc_mbed 0:722cc5360dc3 145 // ベースクロックを得る
bkc_mbed 0:722cc5360dc3 146 int GetBaseClkNLG(NLG_CTX *np)
bkc_mbed 0:722cc5360dc3 147 {
bkc_mbed 0:722cc5360dc3 148 return np->baseclk;
bkc_mbed 0:722cc5360dc3 149 }