Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
1 2 3 4 5 6 7 8 9 10 11 12
次のページ(過去)
返信[7]
親投稿
myu314 myu314
ARYOP #AOPDIV,B%,A%,-&H8000 '&H8000以上を-1,それ以外を0 ARYOP #AOPMAD,C%,B%,-&H10000,A% '&H8000以上を負数に ARYOP #AOPMUL,D%,C%,1<<16 '16bitシフト 1命令減りました。あとは頭いい人に御願いしたい:)
0そうだね
プレイ済み
返信[6]
親投稿
myu314 myu314
A%<<16。もっといい方法あるような気がもりもりするけど浮かばないっす。 ARYOP #AOPCLP,B%,A%,&H7FFF,&H8000 ARYOP #AOPSUB,B%,B%,&H7FFF '&H8000以上を1,それ以外を0 ARYOP #AOPMAD,C%,B%,-&H10000,A% '&H8000以上を負数に ARYOP #AOPMUL,D%,C%,1<<16 '16bitシフト 整数のオーバーフローつらい
0そうだね
プレイ済み
返信[5]
親投稿
myu314 myu314
多分負の値になる時おかしくなるので、右シフトだとこんな感じかな。 ARYOP #AOPDIV,B%,A%,1<<16 '16bitシフト ARYOP #AOPCLP,C%,A%,-1,0 '負の値のみ-1,それ以外0 ARYOP #AOPMAD,D%,C%,-65535,B% 'B%のうち負の値のみ65535足して補正 左シフトも似たようなことが必要かと。32bit目まで到達する場合は一旦負にしてから掛け算でシフト。 もっといい方法ありそうな気もするので、すえさんのコード見てみたい:)
0そうだね
プレイ済み
返信[7]
親投稿
myu314 myu314
MMLの音長(Ln)ってn分音符と同じなんだけど、n分音符は(4/4拍子の長さの)1小節をn分割した長さって意味なんで、MMLでの音長に変換するのは「1小節分のTicks/音符のticks」。もちろん割り切れない長さがでてくるので、&なり_なりで繋ぐしかないです。さっきのプログラムは付点も含めて、MMLが最小になるような組み合わせを探すものです。 ちなみにMIDIでのresolutionって1小節じゃなくて4分音符1つ分のticks(TPQN=TicksPerQuaterNote)だったりするので注意が必要です。どういう単位になってるかはライブラリのマニュアルを見てください。多分変換せずにTPQNのままだと思うけど……。
1そうだね
プレイ済み
返信[6]
親投稿
myu314 myu314
余りってもしかしてMML変換部分のことかなぁ…。 ゲート(tick)からMMLでの音長に変換するのはこんな感じ。所謂コイン問題なのでメモ化してぐるぐると。 ticks=156 を 16&2. って文字列で返すような仕様なんでそのままでは使えませんが。実際はもっと違うデータ構造で数小節分テーブル化しておいて、それ組み合わせて使う形になるんじゃないかなぁ。PCでやるならその場で計算してもメモリ/速度ともに足りそうだけど:)
1そうだね
プレイ済み
返信[5]
親投稿
myu314 myu314
相対/絶対時間を出したのは、SMF(MIDIデータを保存するファイルの形式)がMIDIイベントに前のイベントからの時間(デルタタイム)を足して並べただけ(+α)のファイルだからです。外部ライブラリ使ってるようなのでそのへんはよしなに。 というか前の書き込みでベースタイムとかかいてるけどタイムベースの打ち間違いです、恥ずかしい。
1そうだね
プレイ済み
返信[4]
親投稿
myu314 myu314
余り?余りを使うことは無いと思うんだけど…。タイムベースの変換は TimeもGateも「プチコンのTPQN/MIDIデータ側のTPQN」倍するだけなので。例えば4分音符でCDEって並んだMIDIデータ(TPQN=480)を元にすると Time Note Gate 0:000 C 480 0:480 D 480 0:960 E 480 が、48/480=1/10倍 されて 0:000 C 48 0:048 D 48 0:096 E 48 ってなるだけなんで。この時割り切れない数値が出る時はあるけど、誤差が問題になるのは蓄積した時だから、Timeが先頭からの時間であればノート毎にしか出ないんで問題ないです。そのまま整数型に突っ込んで平気。
1そうだね
プレイ済み
返信[7]
親投稿
myu314 myu314
BACKTRACEはDIRECTモードじゃ無くても動くけど、RUNした瞬間に前の記録消えるからDIRECTモード中に読むしか無いっていう。エラー情報含めて前のプログラム終了時点の情報残しておいてプログラムから取れるようにして欲しい……。 あとスマイルツールから起動すると、プロジェクトがスマイルツール側に変わってしまう当たりが面倒ポイントですかね。セーブロードやらないなら問題になりませんが。なんか環境変数的なものが欲しいなと今思っている所です。利便性考えるとファンクションキーに埋め込みかなぁ。 れいさん作ってるんですか!?楽しみです。 環境的なものにするんでしたっけ、仕様とか色々気になります。
1そうだね
プレイ済み
返信[1]
親投稿
myu314 myu314
休符の扱いに悩む理由がわからないかなぁ。単純に無音が鳴っているって考えればC4がR4になるだけなんだけど…。C8R8とQ4C4どっちにするかって話?(これは何を綺麗なMMLとするかっていう正解が無い話なので、好きな方で良いと思う。最初はQ8固定で変換したほうが楽) 画面写真からの予想だと、MIDIから変換した割には随分素直に見えるのでSMFの解析時に色々情報削っているのかなと。具体的には次のイベント(or終端)が来るまでを1音としてるような。それだとしたら一回ちゃんとノートの絶対位置とゲートタイムを出してから変換するだけだと思います。ベースタイム変換も絶対位置求めてから変換すれば割り切れないのは問題ないし。
1そうだね
プレイ済み
返信[6]
親投稿
myu314 myu314
説明はこんな感じです。 当初はUSEでプログラムだけ読み込んでおいて、エラーで止まったらGOTO "3:@PICODEV"とかやってビューア起動…って設計だったけど、ほぼ完成してからダイレクトモード扱いでDISPLAYコマンドが使えない(2画面できない)のをエラーメッセージで知り、クリップボード経由でデバッグ情報を渡す仕様となりました;) なるべくメモリを喰わないようその場でちまちまスロットから読み込んでるのはその最初の設計のためなのですが、そのせいで行数にしたがって上方向へのスクロールが遅くなります。PRGEDITって旧3DSで1万行あたりだと150msくらいかかる……毎回先頭からサーチしてるのかなぁ?
0そうだね
プレイ済み
返信[5]
親投稿
myu314 myu314
■説明5: _DEVMENU.PRG サンプルを実行するとSLOT2に読み込まれ、F2で実行できます。これは個人的に使っている(これから使う)開発中用のメニュープログラムです。スーパーハカーっぽい見た目を目指してます;) 「デバッグルーチンをコメントアウト・アンコメント」など、製作時にだけ使うツール(それもプロジェクト毎に変わるようなやつ)を関数にしてしたため手軽に実行するために使います。 以前公開したルーチンの使用例として…またはメッセージの消え方が気に入ったので入れました:) あと画面写真に使ってるフォントはこれで設定できます。
0そうだね
プレイ済み
返信[4]
親投稿
myu314 myu314
■説明3: キーボード 下画面左下のキーボードは関数/ラベルリスト用のフィルタ設定、行番号ジャンプに使用します。タッチ専用です。キーボードの上の「InExJp」でモード選択、その横の「ON」もしくは「GO」ボタンで有効無効切り替え・行番号ジャンプできます。 In..INclude / キーワードを含むものを表示します。 Ex..EXclude / キーワードを含むものを除外します。 Jp..JumP / 入力した行数へジャンプします。 大文字小文字は区別されるので、デバッグ用関数は頭にdをつけるなど工夫すると候補を絞りやすくなるかも。 ■説明4: 履歴 下画面右下は履歴です。最近ジャンプした項目が新しいものから表示されます。デフォルトで50件くらい保存されます。関数間を行ったり来たりする時に使います。
0そうだね
プレイ済み
返信[3]
親投稿
myu314 myu314
■説明1: 関数/ラベルリスト 下画面左上の一番大きな窓、表示中のスロットの関数・ラベルの一覧です。Aボタンを押すと選んでいる項目の位置へジャンプできます。上のチェックボックスなどをタッチすると表示する種類とソート方法を変更できます。FUNCが関数、LABELがラベル、LOCALが関数内のラベル、123が行番号順、ABCが名前順です。 表示方法・スロットはBボタンのメニューでも変更できます。 ■説明2: バックトレース 下画面右上の縦長の窓、BACKTRACEの結果を表示します……が、手動でクリップボードにデバッグ情報を設定する必要があります。書式は必要な情報をカンマ区切りで並べただけです。 DBG:エラー番号,エラースロット,エラー行,[バックトレースのスロット,行数]*N という書式になっています。詳しくは TEST.PRG の SET_DEBUGINFO を見てください。
0そうだね
プレイ済み
返信[2]
親投稿
myu314 myu314
■想定している使い方 プロジェクト内のTEST.PRGが使い方サンプルです。 スロット0に読み込んで実行するとスロット2に_DEVMENU.PRG、スロット3に PICODEV.PRG を読み込み、エラーを出して終了します。F1を押してエラー情報を取り込み、F5でビューアを起動してください。エラー箇所が表示されていると思います。下画面右上のBTraceの項目を選択することで、エラーまでの流れを辿ることができます。 こんな感じでTEST.PRGの最初にあるようなルーチン(SET_DEBUGINFO)を使って、エラー情報をクリップボードに保存してビューアを起動、エラーをたどってデバッグというのが想定している使用イメージです。
0そうだね
プレイ済み
返信[1]
親投稿
myu314 myu314
■操作方法 [スライドパッド] プログラムスクロール。L/Rで高速移動。LR同時だと端まで移動 [↑↓] カーソル移動。L/Rで高速移動。 [←→] 項目変更。L/Rでスロット切り替え。 [A] 決定・ジャンプ [B] メニュー [Y] キーボードのバックスペース。L/R 押しながらで全消去 [X] 終了 オプション画面は、十字キー上下左右で項目変更・値変更、ABXYいずれかのボタンか枠の外をタッチで終了。エラー画面はAボタンかOKボタンをタッチで閉じます。 また画面の上端をタッチすることでメニューを開くことができます。
0そうだね
プレイ済み
プレイ日記
myu314 myu314
シンタックスハイライト付きのソースコードビューアです。BACKTRACEの結果をプログラム見ながら辿りたくて作りました。 P/CodeViewer v1.00 【 LDEYW3N4 】 以下長い説明
20そうだね
プレイ済み
返信[6]
親投稿
myu314 myu314
楽になるかは解りませんが、GSPOITのあとビット演算で16bitに変換してるのであれば、GSAVEで1ピクセルだけ配列に読み込むのもありかも。 ↓こんな感じだとしたら P=GSPOIT(0,0) X=((P>>8)AND &HF800)OR((P>>5)AND &H7C0)OR((P>>2)AND &H3E)OR(P<0) ↓速さは変わらないし(むしろほんのちょっと速い)コードは短めです:) GSAVE 0,0,1,1,A,1:X=A[0]
1そうだね
プレイ済み
返信[1]
親投稿
myu314 myu314
すごい!正規表現も使えて本家以上の高性能エディタですね。コードも読みやすいですし、キーボードの改造も簡単そう。 テキストのパレットも変更可能だといいのになぁ…。
1そうだね
プレイ済み
返信[5]
親投稿
myu314 myu314
関数とラベル宣言抽出のみに限定。SLOT1にプログラム読み込んで、SLOT3に読み込んだ情報書き込みます。 【QDF55EN3】 旧3DSでTH_GEDが1.7秒ぐらい。これなら1万行2秒切るっぽいので、なんとか許容範囲か。New3DSだと4倍位速くなる。コロンやスペース省略してるようなコードだと上手く読めないけど、それは書くほうが悪いということで;)
1そうだね
プレイ済み
返信[4]
親投稿
myu314 myu314
エディタ面白そうなんだけど、今は他に作りたいのがあるので優先度が…だれか作って!>< あと普段PCでほとんど書いてるのでエディタではそこまで困って無いんだよね。それよりデバッグとかテスト周りをもうちょっと便利にしたいなーと今はそのへん整備中です。とりあえずコード見ながらBACKTRACE追いかけたい…。
0そうだね
プレイ済み