View difference between Paste ID: ANdt62rS and
SHOW: | | - or go back to the newest paste.
1-
1+
lcd_grey_data:
2
    lea.l   (-2*4, %sp), %sp
3
    movem.l  %a2-%a3, (%sp)
4
    movem.l (2*4+4, %sp), %a0-%a2  /* values, phases, length */
5
    add.l   %a2, %a2
6
    lea.l   (%a1, %a2.l*4), %a2    /* end address */
7
    lea.l   LCD_BASE_ADDRESS+2, %a3 /* LCD data port address */
8
.ph_loop:
9
    clr.l   %d1
10
    move.l  (%a1), %d0          /* fetch 4 pixel phases */
11
    bclr.l  #31, %d0            /* Z = !(p0 & 0x80); p0 &= ~0x80; */
12
    seq.b   %d1                 /* %d1 = ........................00000000 */
13
    lsl.l   #1, %d1             /* %d1 = .......................00000000. */
14
    bclr.l  #23, %d0            /* Z = !(p1 & 0x80); p1 &= ~0x80; */
15
    seq.b   %d1                 /* %d1 = .......................011111111 */
16
    lsl.l   #1, %d1             /* %d1 = ......................011111111. */
17
    bclr.l  #15, %d0            /* Z = !(p2 & 0x80); p2 &= ~0x80; */
18
    seq.b   %d1                 /* %d1 = ......................0122222222 */
19
    lsl.l   #1, %d1             /* %d1 = .....................0122222222. */
20
    bclr.l  #7, %d0             /* Z = !(p3 & 0x80); p3 &= ~0x80; */
21
    seq.b   %d1                 /* %d1 = .....................01233333333 */
22
    lsl.l   #1, %d1             /* %d1 = ....................01233333333. */
23
    add.l   (%a0)+, %d0         /* add 4 pixel values to the phases */
24
    move.l  %d0, (%a1)+         /* store new phases, advance pointer */
25
26
    clr.l   %d1
27
    move.l  (%a1), %d0          /* fetch 4 pixel phases */
28
    bclr.l  #31, %d0            /* Z = !(p0 & 0x80); p0 &= ~0x80; */
29
    seq.b   %d1                 /* %d1 = ....................012344444444 */
30
    lsl.l   #1, %d1             /* %d1 = ...................012344444444. */
31
    bclr.l  #23, %d0            /* Z = !(p1 & 0x80); p1 &= ~0x80; */
32
    seq.b   %d1                 /* %d1 = ...................0123455555555 */
33
    lsl.l   #1, %d1             /* %d1 = ..................0123455555555. */
34
    bclr.l  #15, %d0            /* Z = !(p2 & 0x80); p2 &= ~0x80; */
35
    seq.b   %d1                 /* %d1 = ..................01234566666666 */
36
    lsl.l   #1, %d1             /* %d1 = .................01234566666666. */
37
    bclr.l  #7, %d0             /* Z = !(p3 & 0x80); p3 &= ~0x80; */
38
    seq.b   %d1                 /* %d1 = .................012345677777777 */
39
    lsr.l   #7, %d1             /* %d1 = ........................01234567 */
40
    add.l   (%a0)+, %d0         /* add 4 pixel values to the phases */
41
    move.l  %d0, (%a1)+         /* store new phases, advance pointer */
42
43
    move.w  %d1, (%a3)          /* transfer to lcd */
44
    move.w  %d1, (%a3)          /* transfer to lcd */
45
46
    cmp.l   %a2, %a1
47
    bls    .ph_loop
48
49
    movem.l (%sp), %a2-%a3
50
    lea.l   (2*4, %sp), %sp
51
    rts