を指すアドレスから値を読み取る方法:が良く、これを書くためのより良い方法があれば、私は疑問に思ってアドレス
void readtcp_c(unsigned char c) { volatile char *a; volatile int *p; volatile int *q; a = (char *)APPLE_REG_A; // a = memory mapped address for REG A *a = c + 128; // store c + 128 in REG A p = (int *)APPLE_SUB; // p = address of 6502 sub *p = TCP_WRITE; // store TCP entry point in address p p = (int *)SOFTCARD; // p = address of softcard address q = (int *)*p; // q = softcard address *q = 0; // write 0 to softcard address }
IANS、私は特定のアドレスへの読み取り/書き込みする必要があります。 'a'は単にメモリマップレジスタへの書き込みである(6502)。次の2行は似ていますが、後で使用する6502エントリポイントのアドレスを書いています。最後の3行は、SOFTCARDに格納されているアドレスに0を書き込む必要がある場所です。このアドレスに書き込むと、前述のエントリポイントへの呼び出しがトリガーされます。
私はそれがもっと短くてもいいと思う最後の3行です。おそらくそうではありません。他のペアを1行として書くことができればそれも素晴らしいでしょう。コードはエラーや警告なしで動作し、コンパイル(sdcc)されます。
ありがとうございました。
アップデート:私は置き換えることができると思います:
p = (int *)SOFTCARD; // p = address of softcard address q = (int *)*p; // q = softcard address *q = 0; // write 0 to softcard address
で:
p = (int *)*(int *)SOFTCARD; *p = 0;
それは警告して実行せずにコンパイルされます。しかし、それは可読ですか?再度、感謝します。
Apple? 6502?登録A?ソフトカード?あなたの冗談を言ってください:-)誰かが実際にこれらのマシンを使用していますか? – paxdiablo