У меня нет никакого желания общаться с господами, засравшими мою тему по игрушке для БК своими обширными простынями с облизываниями IAR, уже не говоря про то, что облизывать IAR было бы несколько более уместно в более тематических разделах. Как можно доказать что-то людям, которые не понимают разницу между мёртвым закрытым и живым открытым компилятором? "Поместите Minix в свободный доступ, и одна из моих главных претензий к ней отпадёт" (c) Линус Торвальдс
И уже не говоря про то, что разрабатывать драйвер FAT для Z80 на Си это уродство. Моё мнение в этом не поменяется. Драйвер - критичная часть системы, он должен быть максимально компактным и работать максимально быстро. Идёте по шаткому пути била гейца, господа.
- - - Добавлено - - -
У меня практический вопрос к кодерам БК. Я разработал процедуры горизонтального циклического скроллинга прямоугольного окна влево на 4 и 8 пикселей. Теперь нужно сделать на 1 пиксель, надо юзать два битовых сдвига. Подскажите, плз, как это сделать наиболее оптимально? Может есть готовые какие-то подпрограммы?
Код:void _Laser2_XYtoScr (int dummy, int r2, int r3,
int x, int y, int len, int hgt)
{ /* R0 - screen address */
asm("\
MOV %4, R0 // y \n\
MOV R0, R1 \n\
ASL R0 \n\
ASL R0 \n\
ADD R1, R0 \n\
SWAB R0 // * 640 \n\
ROR R0 \n\
ADD $041000, R0 \n\
ADD %3, R0 \n\
ADD %3, R0 // + 2*x \n\
MOVB %5, R2 // len \n\
MOVB %6, R3 // hgt \n"
::"g"(dummy), "g"(r2), "g"(r3),
"g"(x), "g"(y), "g"(len), "g"(hgt)
);
} // _Laser2_XYtoScr
void Laser2_WL4V (int x, int y, int len, int hgt)
{
asm("\
JSR PC, __Laser2_XYtoScr \n\
ASL R2 // 2*x \n\
MOV R4, -(SP) \n\
MOV R5, -(SP) \n\
OUTLN4: MOV R0, R1 \n\
MOV R2, R4 \n\
MOVB @R1, R5 \n\
OUTWR4: MOVB 1(R1), (R1)+ \n\
SOB R4, OUTWR4 \n\
MOVB R5, @R1 \n\
ADD $0100, R0 \n\
SOB R3, OUTLN4 \n\
MOV (SP)+, R5 \n\
MOV (SP)+, R4 \n"
:::"r2", "r3"
);
} // Laser2_WL4V
void Laser2_WL8V (int x, int y, int len, int hgt)
{
asm("\
JSR PC, __Laser2_XYtoScr \n\
MOV R4, -(SP) \n\
MOV R5, -(SP) \n\
OUTLN5: MOV R0, R1 \n\
MOV R2, R4 \n\
MOV @R1, R5 \n\
OUTWR5: MOV 2(R1), (R1)+ \n\
SOB R4, OUTWR5 \n\
MOV R5, @R1 \n\
ADD $0100, R0 \n\
SOB R3, OUTLN5 \n\
MOV (SP)+, R5 \n\
MOV (SP)+, R4 \n"
:::"r2", "r3"
);
} // Laser2_WL8V

