some tests
[megadrive.git] / testsram / asmtools.s
diff --git a/testsram/asmtools.s b/testsram/asmtools.s
new file mode 100644 (file)
index 0000000..dd4beb5
--- /dev/null
@@ -0,0 +1,97 @@
+# Assemble with gas
+#   --register-prefix-optional --bitwise-or
+
+.macro ldarg  arg, stacksz, reg
+    move.l (4 + \arg * 4 + \stacksz)(%sp), \reg
+.endm
+
+# write with instructions that have bit0 clear
+.global write_rreg_i0 /* u8 val */
+write_rreg_i0:
+    ldarg       0, 0, d0
+    movea.l     #0xa130f1, a0
+    move.b      d0, d0
+    move.b      d0, d0
+    move.b      d0, (a0)
+    move.b      d0, d0
+    move.b      d0, d0
+    move.b      d0, d0
+    move.b      d0, d0
+    rts
+
+
+.global write_rreg_i1 /* u8 val */
+write_rreg_i1:
+    ldarg       0, 0, d1
+    movea.l     #0xa130f1, a0
+    move.b      d1, d1
+    move.b      d1, d1
+    move.b      d1, (a0)
+    move.b      d1, d1
+    move.b      d1, d1
+    move.b      d1, d1
+    move.b      d1, d1
+    rts
+
+
+.global fillpx16 /* u8 *d, unsigned int blocks, u8 val */
+fillpx16:
+    ldarg       0, 0, a0
+    ldarg       2, 0, d0
+    move.b      d0, d1
+    lsl.w       #8, d1
+    or.w        d1, d0
+    move.w      d0, d1
+    swap        d0
+    move.w      d1, d0
+    ldarg       1, 0, d1
+    subq.l      #1, d1
+    movem.l     d2, -(sp)
+    move.l      #32, d2
+0:
+    movep.l     d0, 0(a0)
+    movep.l     d0, 8(a0)
+    movep.l     d0, 16(a0)
+    movep.l     d0, 24(a0)
+    add.l       d2, a0
+    dbra        d1, 0b
+
+    movem.l     (sp)+, d2
+    rts
+
+
+.global checkpx4 /* u8 *d, unsigned int blocks, u8 val */
+checkpx4:
+    ldarg       0, 0, a0
+    ldarg       2, 0, d0
+    move.b      d0, d1
+    lsl.w       #8, d1
+    or.w        d1, d0
+    move.w      d0, d1
+    swap        d0
+    move.w      d1, d0
+    ldarg       1, 0, d1
+    subq.l      #1, d1
+    movem.l     d2-d4, -(sp)
+    move.w      d1, d3
+    move.w      d1, d4
+    swap        d3
+0:
+    move.w      d4, d1
+1:
+    movep.l     0(a0), d2
+    addq.l      #8, a0
+    cmp.l       d0, d2
+    dbne        d1, 1b
+    dbne        d3, 0b
+
+    movem.l     (sp)+, d2-d4
+    move.l      d1, d0
+    cmp.w       #-1, d1
+    beq         0f
+    moveq.l     #0, d0
+0:
+    rts
+
+
+# vim:filetype=asmM68k:ts=4:sw=4:expandtab