sramtest: new test
[megadrive.git] / sramtest / asmtools.s
1 # Assemble with gas
2 #   --register-prefix-optional --bitwise-or
3
4 .macro ldarg  arg, stacksz, reg
5     move.l (4 + \arg * 4 + \stacksz)(%sp), \reg
6 .endm
7
8 # write with instructions that have bit0 clear
9 .global write_rreg_i0 /* u8 val */
10 write_rreg_i0:
11     ldarg       0, 0, d0
12     movea.l     #0xa130f1, a0
13     move.b      d0, d0
14     move.b      d0, d0
15     move.b      d0, (a0)
16     move.b      d0, d0
17     move.b      d0, d0
18     move.b      d0, d0
19     move.b      d0, d0
20     rts
21
22
23 .global write_rreg_i1 /* u8 val */
24 write_rreg_i1:
25     ldarg       0, 0, d1
26     movea.l     #0xa130f1, a0
27     move.b      d1, d1
28     move.b      d1, d1
29     move.b      d1, (a0)
30     move.b      d1, d1
31     move.b      d1, d1
32     move.b      d1, d1
33     move.b      d1, d1
34     rts
35
36
37 .global fillpx16 /* u8 *d, unsigned int blocks, u8 val */
38 fillpx16:
39     ldarg       0, 0, a0
40     ldarg       2, 0, d0
41     move.b      d0, d1
42     lsl.w       #8, d1
43     or.w        d1, d0
44     move.w      d0, d1
45     swap        d0
46     move.w      d1, d0
47     ldarg       1, 0, d1
48     subq.l      #1, d1
49     movem.l     d2, -(sp)
50     move.l      #32, d2
51 0:
52     movep.l     d0, 0(a0)
53     movep.l     d0, 8(a0)
54     movep.l     d0, 16(a0)
55     movep.l     d0, 24(a0)
56     add.l       d2, a0
57     dbra        d1, 0b
58
59     movem.l     (sp)+, d2
60     rts
61
62
63 .global checkpx4 /* u8 *d, unsigned int blocks, u8 val */
64 checkpx4:
65     ldarg       0, 0, a0
66     ldarg       2, 0, d0
67     move.b      d0, d1
68     lsl.w       #8, d1
69     or.w        d1, d0
70     move.w      d0, d1
71     swap        d0
72     move.w      d1, d0
73     ldarg       1, 0, d1
74     subq.l      #1, d1
75     movem.l     d2-d4, -(sp)
76     move.w      d1, d3
77     move.w      d1, d4
78     swap        d3
79 0:
80     move.w      d4, d1
81 1:
82     movep.l     0(a0), d2
83     addq.l      #8, a0
84     cmp.l       d0, d2
85     dbne        d1, 1b
86     dbne        d3, 0b
87
88     movem.l     (sp)+, d2-d4
89     move.l      d1, d0
90     cmp.w       #-1, d1
91     beq         0f
92     moveq.l     #0, d0
93 0:
94     rts
95
96
97 # vim:filetype=asmM68k:ts=4:sw=4:expandtab