20Fermer22
sebrmvLe 18/02/2010 à 19:30
ok, donc apparemment, tu bosses en 8 bits donc 8 plans

si ça te gave de lire mon baratin, voici du code qui doit marcher à peu près

a0 = adresse de base de l'écran
d0 = X
d1 = Y
d2 = numéro de couleur

je suppose que tu travailles en 320x200

alors allons-y

  mulu.w #320,d1
  lea (a0,d1.l), a0 ; on se place sur la bonne ligne
  move.w d0,d1
  and.w #$fff0,d0
  add.w d0,a0 ; on se place sur le début du bloc de 16 pixels qui correspond à x
  
  and.w #$f,d1
  moveq #15,d0
  sub.w d1,d0 ; on a le numéro du bit (big endian)
  moveq #1,d1
  lsl.w d0,d1 ; calcule le masque

  moveq #8-1,d0 ; 8 bits = 8 plans
.set_pixel:
  lsl.b #1,d2
  bcs.s .pixel_on
.pixel_off:
  not.w d1
  and.w d1,(a0)+
  not.w d1
  dbf d0,.set_pixel
  bra.s .done
.pixel_on:
  or.w d1,(a0)+
  dbf d0,.set_pixel
.done: