Onehdá jsem se tady ptal, jak se správně zapisuje ASM rutina v tomto vývojovém "AmiDevCPP" prostředí. A protože žádná odpověď nepřišla, tak jsem dávám ukázku, která mě funguje. Možná to někomu někdy pomůže
Code:
/*
* - output byte for SDI write - D0=byte out
*/
UBYTE SPI_byte_out_xDCS_asm2 (UBYTE byte_out)
{
asm volatile (
"lea 0xbfe101,%%a2\n"
"moveq #0x0F,%%d3\n"
"moveq #0x0E,%%d4\n"
"moveq #0x0D,%%d5\n"
"moveq #0x0C,%%d6\n"
"move.b %[byte],%%d0\n"
"moveq #0x07,%%d1\n" //prenos 8mi bitu
".ByteOut2: btst %%d1,%%d0\n" //jaky je bit na D1 v bajtu D0
"bne.b .ByteOut3\n" //je to 1
"move.b %%d5,(%%a2)\n" //MOSI=0
"move.b %%d6,(%%a2)\n"
"bra.b .ByteOut4\n"
".ByteOut3: move.b %%d3,(%%a2)\n" //MOSI=1
"move.b %%d4,(%%a2)\n"
".ByteOut4: subq #0x01,%%d1\n" //snizime pocitadlo bitu
"bcc.b .ByteOut2\n" //a jedem dalsi
:
: [byte] "d"(byte_out)
: "d0" , "d1"
);
}