機械語なら俺に質問しろ!その2

■ このスレッドは過去ログ倉庫に格納されています
2012/12/29(土) 08:00:24.36
漏れは今までにC、C++、Pascal、HSP、JS、VBなど
数々の言語を極めてきたがやはり一番手にしっくりくる言語は機械語だ。

だから、機械語のことなら何でも質問しろ!
ただプログラムのコードなんかは長くなるがな。 あ、ASMの話でもいいよ。
14695
垢版 |
2013/02/24(日) 06:43:46.88
打診が来てから3ヶ月、未だに仕様のカケラも来ません。仕方なく石のマニュアルから
お試しコードと、過去の情報からアプリの下書きを書いてます。こういうのがあると
仕様が来だしたときちょっとした手直しで目的のコードにできるから。
ソフト会社だと仕様が来てから動くしかないから、こんな時点では動けないし、
仕様が来たときには納期が破綻してるというケースばかりでした。

>>137 通信以外には何も無い、内蔵ROMライターみたいなアプリでした。
ROMに書いてレディを待つ貼りつきの間、割り込みが使えないのでそこでポーリング。
2013/02/24(日) 13:18:11.85
それってまだお金もらってないってことだよね。
そんなんで先行投資しちゃっていいの?
こっちが心配することじゃないけどさ。
14895
垢版 |
2013/02/25(月) 04:38:45.31
お金はいずれ貰えます。ハード屋さんは私に発注することを上司に承認取った上で
少し高い石を選びました。 ハードが一段落したらソフト要求仕様を書き上げそこで
一般のソフト会社に投げるネタになります。そこから見積もり依頼→見積もり→承認。

出来レースにしないために相見積もりしてもらうのもかまいません。partの合間なので
フルタイムなら1人月分ぐらいの先行かな。生活のためではなく面白いからやってるだけ
で、自分が今のソフト屋と比べて仕事がのろいのは自覚してるから、本決まりになって
から間に合うように、先回りできる分野は先に片づけるようにしてます。
本格start以降の期間には、ダンピングの非難が出ない程度のお金は貰います。

>>130-135 辺りの問題は、石の設計思想にその解決手法が用意されているようです。
内蔵ROMの空間が2とおり用意されていて、小さい方の空間で実行している時もう一方
の大きい空間のイレーズや書き込みを実行すればアクセス違反が出ないとの事らしい。
マニュアルの自然言語の表現で、ある文脈のROMがどちらを指すのかあいまいなので
そこを再確認待ちです。 私はRAM空間用にLINKしたコードを小さい空間に焼いて、
起動時RAMにコピーしてそこへ分岐、という手法を試していましたが、これでラッキー。
14995
垢版 |
2013/02/27(水) 05:17:44.08
>>148 の再確認はOK貰えました。 以前はROMがbyte書込だったので問題ない事が
今回はword書込で問題になることが見つかりました。

S30AFF7FC080EF773B1D0E6B                最後C084 に ライト、
S315FF7FC0885645523F00000000A4C57FFF522000009F   C088からライト
S314FF7FD26023F3601158117125FF405102660102BA  D260〜D26Eにライト、
S315FF7FD26F7F957F957F957F957F957F967F957F958A    D26Fからライト
1行目の末尾 C084の0Eは、0EFFにして書き込まなければならない。
3行目の末尾 D26Eの02は、02FFを書いてはならない。その次の行の
D26Fの7Fが来た時点で初めてD26Eに027Fを書いてよい。

どのように実装しようか考え中です。
2013/02/27(水) 08:20:03.51
なんつーんだっけ? Sファイル?
そいつを運用で奇数バイトから始まるものは受け付けないってできないの?
そういう折衝する可能性も考えずに言われたままにほいほい実装するの?
つーか、そもそもそ半端なワード(2バイト領域)はROMから読み出してから
書き戻せばいいんじゃないの? クリア済みが保障されているならクリア値で
埋めればいいんじゃないの?
土方は何も考えない分気楽でいいなぁ。
2013/02/27(水) 11:16:30.75
Motrola S Formatかな。
15295
垢版 |
2013/02/27(水) 13:36:10.63
そう。モトローラのSフォーマットファイル。ふつうのリンカが出力したファイルですよ。
それを運用で焼いてあげませんって処理系に言われたらヤでしょ。

クリア値で埋めるのも、パソコンなら1MB用意してもいいでしょうが、
ROM16KB/RAM16KB ぐらいの空間で動くように実装するんです。
したがって流れの中で解決する必要があります。イレーズは全部いっぺん、
ライトはアドレス・データであちこちに書けますが、2度書きはできない (しない) のが
原則ですね。 ROMの性質上、xxFFのワードにxxyyを上書きするのは可能だろうと
思いますが、マニュアルで保証されてはいません。

半端なバイトを取っておくようなアルゴリズムを書いてみたのですが、いまいちすっきり
しません。ROMから読み出すアルゴリズムのほうがスマートなのは確かなので、
xxFF→xxyy FFvv→xxyy の重ね焼きが可能か、メーカーに質問投げてみますね。
15395
垢版 |
2013/02/28(木) 05:38:10.44
>>103 へうでのリンカスクリプトの使い方がやっと判って、スタックの割り付けも臨む
場所にできました。ビルド−ツールチェイン−最適化リンカタブの中の、セクション
カテゴリーを開くと、アドレスとセクション名の対応が表になっていて、それを編集
するのですね。-start=B_1,R_1,B_2,R_2,B,R/06000,SI/07D00,PResetPRG/0FF7FC000,
C_1,C_2,C,C$*,D_1,D_2,D,P,PIntPRG,W*,L/0FF7FC080,FIXEDVECT/0FFFFFFD0
自分でこういう制御文をコマンドラインに書くのに慣れていたので、どこにそういうの書く
のだろう??と。

へう推奨のセクション割り付けパターンが、アライメント1,2,4の順なのですね。
これがまた違和感。従来はアライメント4,2,1でした。勿論自分でそういう指定に
直すことはできるのですが、この推奨パターンにはどんな意味があるのでしょう?

あと、コード部配置順も、resetprgが先頭、以下定数、実行コード、割り込みコード、
ラベル、文字リテラル という推奨順なのですが、何で定数の間にコードを挟むのか
理解しずらいんですよ。
2013/02/28(木) 06:48:58.12
×臨む
○望む

×理解しずらい
△理解しづらい
○理解しにくい
15595
垢版 |
2013/02/28(木) 07:02:06.19
校正どうもです。 のぞむなんてどこで書いたか忘れて探してしまった(w
15695
垢版 |
2013/03/03(日) 06:11:12.39
打診のときは移植みたいな話だったのに、機器がみなネットワーク対応になってるから
ネットワークプロトコル実装しなくちゃいけないっぽい・・・アプリ本体よりそっちのが余程
でかいじゃん。
2013/03/03(日) 12:16:48.80
高度な車輪は再発明できてもすぐ壊れちゃう
15895
垢版 |
2013/03/08(金) 06:45:05.62
>>135 で、ポーリングは使えないと書いたんですが、RXRDYのステータスをポーリング
あうるのではなく、受信割り込みがあったことをポーリングすればその手法自体は書ける
ことに気が付きました。 「入力が入り次第すぐそれを使う」 という点で一貫してるので、
単純なプログラムを書くには適した手法でした。わざわざその手法で書き直す必然性は
ないので後戻りはしませんけど。

RXシリーズは、石の設計思想にコンパイラやOSの存在が組み込まれていますね。
SIとSU(割り込みスタックとユーザースタック)が別 とか、特権命令があって、PSWの
スーパーバーザーモードとユーザーモードを区別するbitにより例外を発生させるとか。
でもMAX50MHzでWinみたいなマルチタスクを実現するわけでもないし、OS無しで
単純ループで書いてるだけだとこの設計思想のありがたみは感じないなあ・・・

電源でなぜいつも苦労するのかは、どなたか判りますか?
2013/03/08(金) 23:06:24.23
安定してると思うなと?
16095
垢版 |
2013/03/10(日) 17:37:13.01
LAN通信機能は不要だそうです。serialのみ。 これならなんとかなるかな。
16195
垢版 |
2013/03/17(日) 03:19:03.37
飛び込みで8085の仕事が来た・・・CPU以外にも 8251 8253 8255 どうやって石調達
してるんだろ? 結局ここで推敲してもらったstpcpy( )は使わなくなってしまいました。
2013/03/17(日) 04:04:32.20
>8251 8253 8255 どうやって石調達してるんだろ?

量産でなければ普通に手に入る。秋葉原の店頭でもまだ見掛けるし。
2013/03/17(日) 18:55:26.90
汎用チップの需要って案外ワンオフとかであったりするんで
ロット納品とかでなければ普通に売ってるよ。
16495
垢版 |
2013/03/18(月) 05:07:22.32
チップバラで買ってハンダ付け名人のおばちゃんが組み立てるのか〜・・・
手作りはお互い様ですね。今朝HEXを送信しました。 256のROMまだあるのかな?
16595
垢版 |
2013/03/25(月) 17:31:14.10
その後4回手直ししてHEXを送付しました。全部パツイチで動きました。
ふつうのソフト会社なら30分の仕事にする所、暇なので16hもかけてしまって\3マソ(w
明日から本業のRXに戻れるかな
16695
垢版 |
2013/03/26(火) 06:21:07.57
uartに割り込み来ない・・・と思ったら、PMR,PDRより前に
マルチファンクションピンコントローラのレジスタ設定が必要だったorz
しかもこっちの章が後なのに設定は先とか・・・もうね、意地悪!
2013/03/26(火) 08:50:12.72
また何を基本中の基本を……
16895
垢版 |
2013/03/27(水) 04:49:55.10
まだ割り込み来ない・・・やったこと:hwsetupで、マルチファンクションピンコントローラの
P20〜P33PFSでTXD/RXD端子に設定、PORT3.PMRとPORT2.PMRでTXD/RXD使用、
ICU.IPR[218]と[226]=優先度2、IER[27]と[28]=0Fと3C(SCI1,6のERI,RXI,TXI,TEI許可)
リセット直後でINTBに可変ベクタテーブルの先頭設定、hwsetup( )から戻った所で
set_psw( )でPSWのIbitをオン。SCI1と6のSMR,BRR設定してSCRに50h(REとRIE)書いた。
これでシリアルにデータ入れても割り込み来ない。uartのレジスタの辺りダンプすると
みんな00になってる。BRRやSCRやRDRは非ゼロが見えるはずなのに・・・
何かまだ設定忘れてる??
16995
垢版 |
2013/04/02(火) 05:58:57.63
SCIxには保護レジスタなんてありませんよね?
17095
垢版 |
2013/04/02(火) 16:28:54.68
と、思ったら、モジュールストップレジスタというのがあって、ユニット毎に動作を開始
しなきゃいけないようになてましたね〜 >>167さん、基本中の基本をご存じなら
>>166あたりで指摘してほしかったですね〜 結果はもうじき来ます。
2013/04/02(火) 18:19:21.45
基本中の基本って言われたら
基本を調べるよなふつう
2013/04/02(火) 19:32:31.71
つーか、私だって全てのCPUのレジスタ構成を把握しているわけじゃないもん。
自分が使うCPUならレジスタ構成を把握するのが基本だろって話だよ。
17395
垢版 |
2013/04/03(水) 02:45:11.79
自分が使うユニットの章しか読まないでコードしてもなんとか動いたんですよ、H8Sとか。
概要の章に、何章までは全部読んで理解しないと使えないよ的な前置きが欲しかったな。
1600ページもあるの、全部なんか読んでられないわ。
17495
垢版 |
2013/04/03(水) 03:06:31.08
モジュールストップ解除したら動きました。やれやれ・・・
タイマ割り込みが来ないのもこれのせいでした。この石は省電力が売りなので、
使わないユニットにはクロックを送らないことで省電力を実現してるんでしょうね。
これでやっと本来のアプリのデバックに入れます。
17595
垢版 |
2013/04/06(土) 16:59:58.74
評価セット借りてきて、自分のパソコンにつなぎました。
ドライバのインスコで神経すり減らしたけど、動いたら快適。
DATAflashの書き込みと読み出しがうまく行きました\(^o^)/
同じ手法で内蔵fROMの書き込みもしてるので、この先Sレコードの書き込みも
うまく行きそうです。デバック用にWDTリフレッシュ殺して動かしてますが、
うまく通信できてます。
2013/04/06(土) 19:21:41.28
で、忘れた頃にWDT入れたら、真っ青になるとw

# 茶化してるだけねw
17795
垢版 |
2013/04/07(日) 16:41:00.54
FFFFFFFC番地に入っているアドレスに飛ばすc文はどう書けばいいですか?
  ( (void*)(0xFFFFFFFC) )( ); ってやると、FFFFFFFC番地に飛ぶ命令が出ちゃう。
2013/04/07(日) 17:16:27.39
>>177
ポインタサイズが32bitと仮定すると

unsigned long pl;
void (*func)(void);

pl = *((unsigned long *)(0xFFFFFFFC));
func = (void *)pl;
2013/04/07(日) 17:42:33.19
普通にこうすりゃいいだろ

((void (*)(void))0xFFFFFFFC)();

分かり辛いなら

void (*func)(void) = (void (*)(void))0xFFFFFFFC;
func();
2013/04/07(日) 17:43:40.18
>>179
分かってないなあ
2013/04/07(日) 17:45:37.68
(*((void(*)(void))(*(unsigned long *)0xFFFFFFFC)))();

こうかな…?手元に環境が無いのでちょっと自信ない
2013/04/07(日) 17:53:07.22
>>180
斜め読みしてたすまん
こうだな

(*(void (**)(void))0xFFFFFFFC)()
2013/04/07(日) 23:31:03.66
機械語スレでCごとき高級言語とか

# デスクトップでも__asm は試作で重宝してる
2013/04/08(月) 01:19:14.00
asmすらこのスレにはふさわしくないんだよなあ
emitしないと
18595
垢版 |
2013/04/08(月) 01:26:33.40
>>182さんので通りました。 ありがとうございます。
  MOV.L   #0FFFFFFFCH,R4
  MOV.L   [R4],R5
  JMP    R5

このcはasmの行を挟み込む機能は無くて、asmのインライン関数を吐かせるんです。
判らなかったら、#pragma inline_asm func
void func(void) { } の中に上の3行を挟んで書こうと思っていました。
「ポインタのポインタ」 で理解するより3行のasmのほうが私には理解し易いですね。
2013/04/08(月) 01:34:29.20
分かり辛いなら

typedef void (*funcptr_t)(void);
funcptr_t* p_func = (funcptr_t*)0xFFFFFFFC;

(*p_func)();

とか
2013/04/08(月) 04:11:03.22
>>185
ポインタのポインタが解りにくいというより
C言語の関数ポインタの書式が分かりにくくしてる原因だと思う
18895
垢版 |
2013/04/08(月) 09:40:33.18
そうですね。asmでの理解ならすんなりいくのに。

ユーザーブート領域のプログラムをデバックしようと思って、その空間でLINKした
コードをダウンロードして、リセットベクタをそこを指すようにして実行してみると、
対象領域がみんなFFになってる。未実装として読まれてるみたいです。

端子2つと特定番地の内容でブートモードになる、とマニュアルに書かれていたけど、
なるほどこういうことだったのか。リセットベクタを含む固定ベクタはアプリにだけLINK
するものですね。起動時にそういう端子入力ができるようにハードを直してもらいます。
2013/04/08(月) 11:30:36.97
機械語オーライなら、もちろん、call convention は気にするよな?
組み込みのCの処理系がどうとなってるか詳しくないが、

typedef int (__cdecl* myfuncptr_t)(int, int);

とかって書くようにしてるぞ。
2013/04/09(火) 00:12:48.20
__cdecl がデフォルトだったと思うので
__stdcall しか書かないな
19195
垢版 |
2013/04/09(火) 14:34:43.07
SCIの受信とDMACを連携して動作させられるじゃないですか。あれってバイト数は
DMACに設定するんだから、何バイト来るか判っている場合にしか使えませんよね?
2013/04/09(火) 21:12:38.25
DMACは基本的に固定長のデータ転送に使うものだから
不定長のデータには使えない。
19395
垢版 |
2013/04/13(土) 05:28:44.66
watms(int ms) 関数が素通りしてるっぽい・・・  RX210
void waitms(int ms) {            hwsetup( ) で MSTP_CMT1 = 0; はやってる。
//  入力:ミリ秒単位の数値(50mSまで)。誤差の少ないwait関数。
  CMT3.CMCOR = PCLK/128/1000*ms;    // 1KHz(1mS)の分周値*mS
  CMT3.CMCR.WORD = 0x00C2;      // Φ/128 セレクト,CMIE3許可
  CMT.CMSTR1.BIT.STR3 = 1;      // カウントUP start
//  do { } while( CMT3.CMCNT );     // 一致を待つ
//  ↑CPUマニュアル 25.2.4には、一致するとCMCNTは0になると書かれているが
//  0である128clkの間、別の割込で他の箇所を実行しているかもしれない。
//  そこで下記の割り込みを待つようにする。
  do { } while( CMT3.CMCR.WORD & 0x40 ); // 割り込みを待つ
}
#pragma interrupt(Excep_CMTU1_CMT3(vect=VECT_CMT3_CMI3))
void Excep_CMTU1_CMT3(void) {      // 1mSタイマ割込み処理    13.02.28
  CMT3.CMCR.WORD = 0x0082;      // Φ/32 セレクト,CMIE3禁止
  CMT.CMSTR1.BIT.STR3 = 0;      // カウントUP stop
} これで1msのn倍waitできると思ったんだけど、すぐリターンしてくるみたいなの
2013/04/13(土) 18:42:50.64
volatile?

機械語じゃなくね?w
保守してくれてるとおもって気にしてないが
2013/04/13(土) 19:13:06.56
素通りしてるとか言う前に吐かれたマシンコードを見るのが
先じゃないのかな。
2013/04/13(土) 19:14:54.81
ああ、「マシンコード」か。見慣れない字面だから空目してびっくりしたわ。
2013/04/13(土) 22:25:12.84
マ○ンコード
19895
垢版 |
2013/04/14(日) 04:11:24.79
マシンコードは見たんですよ〜 すぐ気が付くようなミスは無かったと思う。
  CMT3.CMCOR = PCLK/128/1000*ms;    // 1KHz(1mS)の分周値*mS
    MOV.L    #00088000H,R4
    MUL     #90H,R1
    MOV.W    R1,1CH[R4]
  CMT3.CMCR.WORD = 0x00C2;      // Φ/128 セレクト,CMIE3許可
    MOV.W    #00C2H,18H[R4]
  CMT.CMSTR1.BIT.STR3 = 1;      // カウントUP start
    MOVU.W   0H[R4],R5
    BSET    01H,R5
    MOV.W    R5,10H[R4]
  do { } while( CMT3.CMCR.WORD & 0x40 ); // 割り込みを待つ
L26:  MOVU.W   18H[R4],R5
    BTST     #06H,R5
    BNE     L26
    RTS
19995
垢版 |
2013/04/14(日) 04:15:42.22
void Excep_CMTU1_CMT3(void) {      // 1mSタイマ割込み処理
    PUSHM R4-R5
  CMT3.CMCR.WORD = 0x0082;      // Φ/32 セレクト,CMIE3禁止
    MOV.L    #00088000H,R4
    MOV.W    #0082H,18H[R4]
  CMT.CMSTR1.BIT.STR3 = 0;      // カウントUP stop
    MOVU.W   10H[R4],R5
    BCLR     #01H,R5
    MOV.W    R5,10H[R4]
    POPM     R4-R5
    RTE
2013/04/14(日) 04:19:11.36
do whileの脱出条件が間違っているようにしか見えない。
そもそもなぜdoなのか。通常のwhileではできない理由があるのか。
そこらへんが理解できないな。
あとコンパイラによってはdo { }が空文だと最適化でコードにしない
ものがあったりするので(昔のMS-Cとかね)最適化オプションは
全てオフにしてから確認するといいかもね。
20195
垢版 |
2013/04/14(日) 04:23:35.44
>>198 で、18h[R4]にC2hを入れてから、L26:の所でそこのbit6が1の間ループ。
>>199 の割り込み処理で 18h[R4]を 82h にしてます。
20295
垢版 |
2013/04/14(日) 04:29:21.93
あ、書いてる途中でレスが・・・ while { } だと前判定、do { } whileだと後判定になるから。
今のケースの場合は一緒ですけどね。前判定だとBZ で脱出、その後ろに B 続行
ってなるのがイヤだから、ってのもあります。
20395
垢版 |
2013/04/14(日) 05:31:48.69
見つけた〜!とおもう。hwsetup( )で MSTP_CMT1 = 0; // CMT unit1のクロックON
とコメントに書いてあるけど、これがウソで MSTP_CMT2 に0を書くべきでした。
SCIで体験した事だと、ユニットにクロックを与えないとレジスタにイネーブルを
書けなかったから、コンペアマッチタイマもそうだとおもう。

今基板帰してるから、また借りたら確認しますね。
20495
垢版 |
2013/04/19(金) 13:52:08.55
基板につける原クロックって水晶ですよね。CPU内蔵のクロック発振器ってどんな
原理なんでしょう?
2013/04/19(金) 16:33:29.13
XTALがないならRCだろ。
20695
垢版 |
2013/04/19(金) 17:19:02.90
RC 発振器 でぐぐったらwikiが先頭に来たけど、余計解らない語句ばかり出てきた(w
何となくだけど、どの原理もLSI内部に納めるほど微小化できるのかな?とは思った。

基板は、ユーザーブート領域に焼く方法の所で引っかかってるみたいです。
2013/04/20(土) 14:27:11.58
>>204
CPU内蔵ならクリスタルじゃなくてPLLじゃないの。
たぶんクリスタルよりPLLのほうが正確だし。
2013/04/20(土) 14:28:13.61
あ、なんかPLLも基準周波数にクリスタルがいるらしい。
勘違いだったかも。
20995
垢版 |
2013/04/20(土) 17:29:42.08
CPU内蔵のPLLは、基準周波数を分周または逓倍するために使いますね。
204の話は、CPUみたいなLSIの内部に焼き付けられる原クロック回路は、
クリスタルみたいなデカいものじゃなさそうに思えるけど、どんなものなのかなあ・・・
21095
垢版 |
2013/04/21(日) 04:36:51.93
ユーザーブート領域のコードが動いたらしいです。私が確認に行けるのは木曜ですが
211片山博文MZパンク ◆0lBZNi.Q7evd
垢版 |
2013/04/23(火) 00:05:14.14
x86-64の64ビットモードで動かない32ビットx86の命令ってどんなものがありますか?
2013/04/23(火) 02:29:22.23
DAAとかなくなったんでなかったっけ?
あとLAHFとか。
21395
垢版 |
2013/04/25(木) 15:45:36.94
ユーザーブート領域のコードが動いたのは誤報でした。FF7FC000〜の空間には
コードが焼けない/読めない状態のままです。困ったなあ・・・
2013/08/12(月) NY:AN:NY.AN
RX210 規制の間に本番用の基板でデバックが進みました。
デバック用の基板ではユーザ空間しか焼けませんでした。
ユーザーブート領域に焼いても、そこで実行したコードでROMアクセス違反は
発生します。ROMを焼くコードだけRAMにコピーしてそこを呼ぶ手法を採りました。
欲しい機能の実装はだいたい確認。引き合い時2人月だったお金も、3.5人月
もらえました。36度の書斎でのデバックは2,3日で済みました。やれやれ・・・
2013/08/12(月) NY:AN:NY.AN
汗が基盤に垂れなかったのだろうか

いや、液状のほうの汗なw
21695
垢版 |
2013/08/13(火) NY:AN:NY.AN
書斎が32度以上のときは、アイスノンを頭に巻いて
30分ごとにリビングに避難しながらやってました。メインは未明の頃。
217デフォルトの名無しさん
垢版 |
2013/11/25(月) 01:54:29.88
8085ではメモリマップトI/O(ex:F000番地が8251のTXD/RXD)しか
やったことがないのですが、8085にもIN/OUT命令はありますよね。
オペランドは8bitのアドレス。
このIN/OUT命令を使うときはハードをどのように組むのですか?
2013/11/25(月) 01:59:39.44
IO/~M信号を使用します。
219217
垢版 |
2013/11/26(火) 05:42:00.02
もうちょっとくやしくお願い。名前からすると「メモリじゃないよ」という信号みたい
ですね。 IN 04h と書くと、メモリではない04番地からリードですね。
そのとき8251を04番地に配線?すると上と同じ機能が得られるのですか?
私が出会ったのは217のようなシステムばかりでしたが、それは偶々?
8251側ではRD/WR信号とアドレスのLSBでI/Oレジスタを区別していましたが
IN/OUTを使おうと思うとその辺はどうなるのでしょう?
LDA/STAは3バイトだけど、IN/OUTは2バイトだからこっちのほうが小さいけど
そういう理由ではハードは決めないのですか?
2013/11/26(火) 09:55:01.25
>>219
あんたの知っているシステムでは、8251自体はアドレスバス上位4ビットがONで下位ビットOFFのときに
チップセレクトされるようにつながっているのだろう。
8251のチップセレクトをするに当たって、メモリ空間を使いたくない場合は、IO/Mをデコードして
OFF(M)のときにチップセレクトされるようにすればいい。
私の知っているシステムでは、メモリ空間を広く取るためなどの理由でそうしていた。
命令長が理由でどっちを選択するか検討するという話は余り聞かないな。
2013/11/26(火) 17:00:31.10
壊れた動画ファイルをバイナリエディタで開いて、そこから一コマでも画像ファイルにして抽出することってできますか?
拡張子は3gpで昔携帯で撮ったものです
少し調べてみてmdatって文字列は確認できたんですが、ヘッダ周辺はだいぶ壊れて上書きされているみたいです
バイナリ全くわからないんだけど、規則的に色の情報が配置されてるって単純な構造でもないのかしら…
2013/11/26(火) 17:04:51.07
誤爆乙?組み込み?
223217
垢版 |
2013/11/26(火) 17:58:32.82
>>220 なるほど。聞いてみてよかったです。ハードの設計者の意向でそのような
切り分けがなされるのでしょうね。私の知っているシステムではアドレス上位4bit
でチップセレクトされる先を決めるICが入っていました。220のやりかたのほうが
使う石が少なくできるような気がするのですが、私の顧客の伝統なのか拡張性?
のためなのか、私の付き合った現場ではメモリマップトI/Oばかりでした。
224デフォルトの名無しさん
垢版 |
2014/03/12(水) 16:05:23.04ID:56D9u4UN
8085+8259のシステムで、IRRレジスタを読む必要があります。
コマンドレジスタのアドレス0側を読むとIRRまたはISRが読め、その選択は
リードに先立つOCW3でコマンドレジスタのアドレス0側に書きます。
似たコマンドでOCW2というのもあり、これもアドレス0側に書くのですが、
OCW2とOCW3の違いは、書き込み内容のbit4,bit3が01か00かで区別される
と理解してよいでしょうか?
225デフォルトの名無しさん
垢版 |
2014/03/21(金) 13:34:21.98ID:rl5pYZY9
SAUTO:

; store 16-bit automatic variable

;    VAR = HL

    XTHL

    MOV    E,M

    INX    H

    MOV    D,M

    INX    H

    XTHL
226つづき
垢版 |
2014/03/21(金) 13:35:36.74ID:rl5pYZY9
SAUTOX:
  あれ?なんで2行改行になるんだろ?
    XCHG
    DAD    SP

    MOV    M,E

    INX    H

    MOV    M,D

    XCHG

    RET
スタックにHLをストアするルーチンらしいのですが、前半が何をやってるのか
よくわかりません。SAUTO2:: の入口は LXI D,4 してSAUTOXへジャンプする
ので判り易いのですが・・・ 8080のASMです。
2014/03/21(金) 14:12:22.77ID:27SL9jQg
>>226
スタックトップに積まれたアドレスからEとDに2バイト読み込んだ後、スタックトップに積まれたアドレスを+2更新してる
228226
垢版 |
2014/03/21(金) 16:37:17.55ID:rl5pYZY9
スタックトップというのはSPが指している場所ですよね。そこにあるのはアドレス
ですか?+2更新されるのはSPではありませんか? SAUTOXに来た時、他の
SAUTO02/04/06・・・からはDE=4/6/8・・・なのに>>225から来たときはDEには
(SP)の内容が入ってますよね。226でやってることはストアすべきアドレスをHL
に計算して、入ってきたときのHLの内容をストアするのですが、225からくると
DEにあるデータはオフセットではなく不定のメモリ内容な気がして、そこが不安
なんですよ。
2014/03/23(日) 22:06:00.08ID:qJRZbThw
その前後で、スタックをどう使ってるかだよ、意味論的に
2014/03/23(日) 22:12:05.00ID:ruxpB9t5
>>225
http://maben.homeip.net/static/S100/software/C/ASCII/code/01.1/CRUN.MAC
2014/03/23(日) 22:37:35.41ID:ruxpB9t5
SAUTO
HLに16bitの値を格納し

CALL SAUTO
DW オフセット値

の形式で呼び出すとスタック上に確保されたローカル変数の領域(SP+オフセット値)にHLの値を格納する
SAUTOからの復帰はオフセット値を格納した次のアドレスから継続する

SAUTOX
DEにオフセット値
HLに16bitの値
を入れてCALLするとスタック上に確保されたローカル変数の領域(SP+オフセット値)にHLの値を格納する
232226
垢版 |
2014/03/24(月) 03:25:17.76ID:9W6ZJyQo
あ、いろいろレスが・・・ありがとです。そうか、CALLの後ろに DW オフセット
この呼び出し形式が解らなかったんです。pushされたリターンアドレスを
使わないと DW オフセットを取り出せないから225みたいなコードになってる
んですね。やっと解りました。
233デフォルトの名無しさん
垢版 |
2014/03/30(日) 17:06:33.96ID:h6LaJ3mN
どなたか >>224 わかりませんか?
2014/03/30(日) 20:10:21.73ID:gN3GGTNV
>>233
はい、わかります。

>>224
よいです。
235224
垢版 |
2014/03/31(月) 03:02:51.17ID:BXTiIPPO
ありがとうございます。
236デフォルトの名無しさん
垢版 |
2014/07/23(水) 16:13:08.87ID:hbLsGTB+
8085のデータブック読むと、機械語の説明のところにクロック数とステート数という
欄があります。クロック数はΦクロック(またはその半分)が単位でしょう。
ステート数というのが、クロック数のだいたい1/3ぐらいの数値なのですが、
これが何のことか、ブック中では説明なしに使われています。
このステート数というのはどういうものなのでしょう?
2014/07/23(水) 16:29:00.09ID:0dHAtBbf
>>236
http://www.inf.pucrs.br/~calazans/undergrad/orgcomp_EC/mat_microproc/intel-8085_datasheet.pdf
238236
垢版 |
2014/07/24(木) 02:53:13.32ID:8xeGZJ4L
どうもです。私が読んだのは沖電気の日本語版で、そのソースがインテルのこれ
なのでしょうね。全部読み下すほど英語力無いのですが、Table 3 Table 4 を
参照して各命令ごとに合計をとったものが日本語の資料に追記されたと
思えばいいでしょうか? M1,M2,M3がステート数に相当するものですね?
2015/03/07(土) 01:43:39.68ID:G+snOoOp
>>768
生まれた頃は暖かい家庭だったんじゃね、今からは想像できないだろうけど
2015/03/07(土) 01:44:34.65ID:G+snOoOp
誤爆った
2015/07/18(土) 21:42:32.75ID:U8NrmB25
検索してもx86命令とx64命令しか見つからないんですけどリアルモードってx86命令でいいんですか?
2015/07/20(月) 03:18:09.77ID:8dMvvLjx
リアルモードはほぼ16bit推奨環境
プリフィックス付かどうかで動作変わる命令は操作対象が16bitであると解釈される
例) INC AX → 40、INC EAX → 66 40
付く分動作が遅くなる、つまり、リアルモードで32bit操作は期待するほど速度でない

プロテクトモードは32bit環境
例)INC AX → 66 40、INC EAX → 40
操作対象が16bit幅な命令も使えるけどリアルモードより遅い

x64もレガシーモードで動作させればリアルモードを使えるけど、使える命令はx86命令に限定される、ハズ
なのでいいんですか?と聞かれたら概ねいいですと答えていいんじゃないですかね
243241
垢版 |
2015/07/20(月) 17:50:21.12ID:sEKWUTaF
>>242
ありがとうございます。

起動時のCPUはリアルモードで動作するという事で、
OSのブートプログラム書くのにリアルモードでのオペコードが必要なのに、
リアルモード用のオペコード一覧が見当たらないなと悩んでました。
244デフォルトの名無しさん
垢版 |
2015/11/09(月) 15:12:25.74ID:53+wftUK
機械学習に関してもここでいいでしょうか?

現在、Cで深層学習のお勉強プログラムを書いています。
Caffeなどそのもののライブラリを使わずに実装したいと思っているのですが、
自動微分がどうしても必要になりますが、これを高速にすることが可能なライブラリはありませんか?
2015/11/09(月) 15:20:26.46ID:jDVf3Lh4
スレ違い
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況