CPC Rulez
https://cpcrulez.fr/forum/

Asm inline dans sdcc ?!? (docs?astuces?!?,pffff)
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4843
Page 1 sur 1

Auteur :  exolon [ 11 Avr 2012, 18:40 ]
Sujet du message :  Asm inline dans sdcc ?!? (docs?astuces?!?,pffff)

Salut,

Je commence à m'amuser avec sdcc et le kit de dev C pour le cpc6128 que j'ai trouvé sur cpcmania ;)

Je me suis dis, tiens ce sera drôle d'adapter un tunnel 2d en c++ sous windows sur des couleurs en 32bits , dans un cpc a 64k de ram (si si).

Donc voilà , premier problème , la gestion de la vidéo par le cpc est pas des plus évidentes et semble très gourmande en temps cpu, surtout quand on adresse des pixels isolés...

Bon, je vous cache pas que ma première version d'un bête remplissage écran, n'a rien à envier a la commande fill du cpc (quoique si, elle est presque plus lente..)

Bref , j'ai trouvé sur cpcwiki une routine asm qui semble plus rapide que mon implémentation en c..
Mais bon, là je galère sur la syntaxe de sdcc pour l'asm inline, notamment le passage de paramètre..

ca c'est le code asm pour tracer un point :

FPLOT LD A, L ;A = Lowbyte Y
AND %00000111 ;isolate Bit 0..2
LD H, A ;= y MOD 8 to H
XOR L ;A = Bit 3..7 of Y
LD L, A ;= (Y\8)*8 to L
LD C, A ;store in C
LD B, &60 ;B = &C0\2 = Highbyte Screenstart\2

ADD HL, HL ;HL * 2
ADD HL, HL ;HL * 4
ADD HL, BC ;+ BC = Startaddress
ADD HL, HL ;of the raster line

SRL E ;calculate X\2, because 2 pixel per byte, Carry is X MOD 2

LD C, %10101010 ;Bitmask for MODE 0
JR NC, NSHIFT ;-> = 0, no shift
SHIFT LD C, %01010101 ;other bitmask for right pixel

NSHIFT ADD HL, DE ;+ HL = Screenaddress
LD A, (CMASK) ;get color mask
XOR (HL) ;XOR screenbyte
AND C ;AND bitmask
XOR (HL) ;XOR screenbyte
LD (HL), A ;new screenbyte
__endasm;

sdcc me jette quand il compile l'asm , je crois qu'il n'aime pas les labels en plus :(

Si quelqu'un à des infos complèmentaires ..

J'ai finalement trouvé la doc complète de sdcc qui explique comment le faire ;)

Page 1 sur 1 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/