これを書くためのより良い方法があるかどうか疑問に思っています:
void readtcp_c(unsigned char c) {{ 揮発性文字*a; volatile int * p; volatile int * q; a =(char *)APPLE_REG_A; // a =REGAのメモリマップドアドレス * a = c + 128; // c+128をREGAに保存します p =(int *)APPLE_SUB; // p=6502サブのアドレス * p = TCP_WRITE; //TCPエントリポイントをアドレスpに格納します p =(int *)SOFTCARD; //p=ソフトカードアドレスのアドレス q =(int *)* p; //q=ソフトカードアドレス * q = 0; //ソフトカードアドレスに0を書き込みます }
IANS、特定のアドレスに対して読み取り/書き込みを行う必要があります。「a」は単にメモリマップドレジスタ(6502)への書き込みです。次の2行は、後で使用する6502エントリポイントのアドレスを書き込んでいることを除いて、同様です。最後の3行は、SOFTCARDに格納されているアドレスに0を書き込む必要がある場所です。このアドレスに書き込むと、前述のエントリポイントへの呼び出しがトリガーされます。
短くできると思うのは最後の3行です。おそらくそうではありません。他のペアを1行で書くことができれば、それも素晴らしいことです。コードは機能し、エラーや警告なしにコンパイル(sdcc)します。
ありがとう。
更新:私は置き換えることができると思います:
p =(int *)SOFTCARD; //p=ソフトカードアドレスのアドレス q =(int *)* p; //q=ソフトカードアドレス * q = 0; //ソフトカードアドレスに0を書き込みます
と:
p =(int *)*(int *)SOFTCARD; * p = 0;
警告なしにコンパイルして実行します。しかし、それは読みやすいですか?再度、感謝します。