Мне интересно, есть ли лучший способ написать это:
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).Следующие две строки похожи, за исключением того, что я пишу адрес точки входа 6502, которая будет использоваться позже.Последние 3 строки, где я должен написать 0 по адресу, хранящемуся в SOFTCARD.Запись по этому адресу инициирует вызов к вышеупомянутой точке входа.
Это последние 3 строки, которые, я думаю, могут быть короче.Возможно нет.Если бы другие пары можно было записать одной строкой, это тоже было бы здорово.Код работает и компилируется (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;
Компилируется без предупреждения и запускается.Но читается ли это?Еще раз спасибо.