C - offset položky ve struktuře
Moderátor: Moderátoři
Mě se ten projekt moc líbí. Mysím že smysl má - minimálně edukativní. Časem z toho může být i praktická záležitost - jsou lidé a celé komunity kde se staví repliky starých počítačů s různými vylepšeními.
Viz např http://www.8bity.cz/
Bohužel myslím, že offset ve struktuře v symbolické proměnné asi nezískáš a budeš muset nahardkódit.
Máš někde stránky projektu?
Viz např http://www.8bity.cz/
Bohužel myslím, že offset ve struktuře v symbolické proměnné asi nezískáš a budeš muset nahardkódit.
Máš někde stránky projektu?
Ještě koukám jak to řeší v tom FUZIXu a tam to mají přes rutiny v s souborech
https://github.com/EtchedPixels/FUZIX/b ... evel-z80.s
Parametry si pak předávájí nějak takto
http://fivedots.coe.psu.ac.th/~cj/masd/ ... oc-21.html
https://github.com/EtchedPixels/FUZIX/b ... evel-z80.s
Parametry si pak předávájí nějak takto
http://fivedots.coe.psu.ac.th/~cj/masd/ ... oc-21.html
Jestli je to jako inline nebo v samostatným souboru je celkem jedno, prochází to nakonec stejným assemblerem. V inline se dá aspoň použít ten #define ..., oddělený soubor ho nevidí. Stejně tam nikde nevidím, že by dokázali do toho assembleru dostat offset položky ve struktuře z C, ale po pravdě se v tom moc nevyznám.
Jinak to předávání parametrů v uvedeném odkazu je pro 8051, pro Z80 se parametry předávají přes zásobník. Pouze pokud se funkce, mající jen jeden parametr, označí __z88dk_fastcall, předá se parametr v registrech (DEH)L stejně jako se předává návratová hodnota. Ale nefunguje to vždy, mají v tom SDCC bug, pokud má funkce lokální proměnné, tak si ten předávaný parametr v HL přepíšou při vytváření rámce v zásobníku. Pro funkce celé napsané v assembleru to ale použít jde a používám to, funkci to docela zkrátí a zrychlí. Nicméně to neřeší problém z úvodu tohoto vlákna.
Jinak to předávání parametrů v uvedeném odkazu je pro 8051, pro Z80 se parametry předávají přes zásobník. Pouze pokud se funkce, mající jen jeden parametr, označí __z88dk_fastcall, předá se parametr v registrech (DEH)L stejně jako se předává návratová hodnota. Ale nefunguje to vždy, mají v tom SDCC bug, pokud má funkce lokální proměnné, tak si ten předávaný parametr v HL přepíšou při vytváření rámce v zásobníku. Pro funkce celé napsané v assembleru to ale použít jde a používám to, funkci to docela zkrátí a zrychlí. Nicméně to neřeší problém z úvodu tohoto vlákna.
Tohle je sice pro gcc, ale možná by se tím dalo inspirovat
http://www.avrbeginners.net/new/wp-cont ... _1.0.1.pdf
http://www.avrbeginners.net/new/wp-cont ... _1.0.1.pdf
Dík, ale to
v SDCC prostě nedám, SDCC neumí inline assembler s parametrama a bez toho celá ta finta nefunguje.
Kód: Vybrat vše
#define _ASMDEFINE(sym, val) asm volatile \
("\n-> " #sym " %0 \n" : : "i" (val))