Tweak macros and adjust hoffset

pull/58/head
IanSB 2019-03-22 03:26:32 +00:00
rodzic a13ab93cb6
commit 70bdde2f2f
4 zmienionych plików z 33 dodań i 80 usunięć

Wyświetl plik

@ -35,22 +35,22 @@ capture_line_default_sixbits_4bpp:
push {r14}
loop:
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_0_BITS_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_0_BITS_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_1_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_2_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_3_BITS_WIDE_R7 // input in r8, result in r7, corrupts r9
CAPTURE_3_BITS_WIDE r7 // input in r8, result in r7, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_0_BITS_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_0_BITS_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_1_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_2_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_3_BITS_WIDE_R10 // input in r8, result in r10, corrupts r9
CAPTURE_3_BITS_WIDE r10 // input in r8, result in r10, corrupts r9
stmia r0, {r7, r10}
tst r3, #BIT_SCANLINES
@ -89,24 +89,24 @@ capture_line_default_sixbits_8bpp:
push {r14}
loop_8bpp:
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R5 // input in r8, result in r5, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r5 // input in r8, result in r5, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R12 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r12 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R6 // input in r8, result in r6, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r6 // input in r8, result in r6, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R7 // input in r8, result in r7, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r7 // input in r8, result in r7, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R12 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r12 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R10 // input in r8, result in r10, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r10 // input in r8, result in r10, corrupts r9
stmia r0, {r5, r6, r7, r10}
tst r3, #BIT_SCANLINES

Wyświetl plik

@ -35,22 +35,22 @@ capture_line_fast_sixbits_4bpp:
push {r14}
loop:
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_0_BITS_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_0_BITS_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_1_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_2_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_3_BITS_WIDE_R7 // input in r8, result in r7, corrupts r9
CAPTURE_3_BITS_WIDE r7 // input in r8, result in r7, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_0_BITS_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_0_BITS_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_1_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_2_BITS_WIDE // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_3_BITS_WIDE_R10 // input in r8, result in r10, corrupts r9
CAPTURE_3_BITS_WIDE r10 // input in r8, result in r10, corrupts r9
stmia r0!, {r7, r10}
subs r1, r1, #1
@ -81,24 +81,24 @@ capture_line_fast_sixbits_8bpp:
push {r14}
loop_8bpp:
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R5 // input in r8, result in r5, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r5 // input in r8, result in r5, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R12 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r12 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R6 // input in r8, result in r6, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r6 // input in r8, result in r6, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R11 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r11 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R7 // input in r8, result in r7, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r7 // input in r8, result in r7, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_LOW_BITS_8BPP_WIDE_R12 // input in r8, result in r10, corrupts r9
CAPTURE_LOW_BITS_8BPP_WIDE r12 // input in r8, result in r10, corrupts r9
WAIT_FOR_PSYNC_EDGE_FAST // expects GPLEV0 in r4, result in r8
CAPTURE_HIGH_BITS_8BPP_WIDE_R10 // input in r8, result in r10, corrupts r9
CAPTURE_HIGH_BITS_8BPP_WIDE r10 // input in r8, result in r10, corrupts r9
stmia r0!, {r5, r6, r7, r10}
subs r1, r1, #1

Wyświetl plik

@ -161,13 +161,13 @@ skip_psync_loop_no_h_scroll\@:
skip_psync_loop_no_h_scroll_exit\@:
.endm
.macro CAPTURE_0_BITS_WIDE_R11
.macro CAPTURE_0_BITS_WIDE reg
// Pixel 0 in GPIO 7.. 2 -> 7.. 4
// Pixel 1 in GPIO 13.. 8 -> 3.. 0
and r9, r8, #(0x0f << PIXEL_BASE)
and r14, r8, #(0x0f << (PIXEL_BASE + 6))
eor r10, r11, r9, lsl #(4 - PIXEL_BASE)
eor r10, \reg, r9, lsl #(4 - PIXEL_BASE)
eor r10, r10, r14, lsr #(6 + PIXEL_BASE)
.endm
@ -190,22 +190,13 @@ skip_psync_loop_no_h_scroll_exit\@:
eor r10, r10, r14, lsl #(10 - PIXEL_BASE)
.endm
.macro CAPTURE_3_BITS_WIDE_R7
.macro CAPTURE_3_BITS_WIDE reg
// Pixel 6 in GPIO 7.. 2 -> 31..28
// Pixel 7 in GPIO 13..8 -> 27..24
and r9, r8, #(0x0f << PIXEL_BASE)
and r14, r8, #(0x0f << (PIXEL_BASE + 6))
eor r10, r10, r9, lsl #(28 - PIXEL_BASE)
eor r7, r10, r14, lsl #(18 - PIXEL_BASE)
.endm
.macro CAPTURE_3_BITS_WIDE_R10
// Pixel 6 in GPIO 7.. 2 -> 31..28
// Pixel 7 in GPIO 13..8 -> 27..24
and r9, r8, #(0x0f << PIXEL_BASE)
and r14, r8, #(0x0f << (PIXEL_BASE + 6))
eor r10, r10, r9, lsl #(28 - PIXEL_BASE)
eor r10, r10, r14, lsl #(18 - PIXEL_BASE)
eor \reg, r10, r14, lsl #(18 - PIXEL_BASE)
.endm
.macro CAPTURE_LOW_BITS
@ -242,65 +233,27 @@ skip_psync_loop_no_h_scroll_exit\@:
orr r10, r10, r8, lsl #(15 - PIXEL_BASE)
.endm
.macro CAPTURE_LOW_BITS_8BPP_WIDE_R11
.macro CAPTURE_LOW_BITS_8BPP_WIDE reg
// Pixel 0 in GPIO 7.. 2 -> 7.. 0
// Pixel 1 in GPIO 13.. 8 -> 15.. 8
and r9, r8, #(0x3f << PIXEL_BASE)
and r14, r8, #(0x3f << (PIXEL_BASE + 6))
eor r10, r11, r9, lsr #(PIXEL_BASE)
eor r10, \reg, r9, lsr #(PIXEL_BASE)
eor r10, r10, r14, lsl #(8 - (PIXEL_BASE + 6))
.endm
.macro CAPTURE_LOW_BITS_8BPP_WIDE_R12
// Pixel 0 in GPIO 7.. 2 -> 7.. 0
// Pixel 1 in GPIO 13.. 8 -> 15.. 8
and r9, r8, #(0x3f << PIXEL_BASE)
and r14, r8, #(0x3f << (PIXEL_BASE + 6))
eor r10, r12, r9, lsr #(PIXEL_BASE)
eor r10, r10, r14, lsl #(8 - (PIXEL_BASE + 6))
.endm
.macro CAPTURE_HIGH_BITS_8BPP_WIDE_R10
.macro CAPTURE_HIGH_BITS_8BPP_WIDE reg
// Pixel 2 in GPIO 7.. 2 -> 23..16
// Pixel 3 in GPIO 13.. 8 -> 31..24
and r9, r8, #(0x3f << PIXEL_BASE)
and r14, r8, #(0x3f << (PIXEL_BASE + 6))
eor r10, r10, r9, lsl #(16 - PIXEL_BASE)
eor r10, r10, r14, lsl #(24 - (PIXEL_BASE + 6))
eor \reg, r10, r14, lsl #(24 - (PIXEL_BASE + 6))
.endm
.macro CAPTURE_HIGH_BITS_8BPP_WIDE_R5
// Pixel 2 in GPIO 7.. 2 -> 23..16
// Pixel 3 in GPIO 13.. 8 -> 31..24
and r9, r8, #(0x3f << PIXEL_BASE)
and r14, r8, #(0x3f << (PIXEL_BASE + 6))
eor r10, r10, r9, lsl #(16 - PIXEL_BASE)
eor r5, r10, r14, lsl #(24 - (PIXEL_BASE + 6))
.endm
.macro CAPTURE_HIGH_BITS_8BPP_WIDE_R6
// Pixel 2 in GPIO 7.. 2 -> 23..16
// Pixel 3 in GPIO 13.. 8 -> 31..24
and r9, r8, #(0x3f << PIXEL_BASE)
and r14, r8, #(0x3f << (PIXEL_BASE + 6))
eor r10, r10, r9, lsl #(16 - PIXEL_BASE)
eor r6, r10, r14, lsl #(24 - (PIXEL_BASE + 6))
.endm
.macro CAPTURE_HIGH_BITS_8BPP_WIDE_R7
// Pixel 2 in GPIO 7.. 2 -> 23..16
// Pixel 3 in GPIO 13.. 8 -> 31..24
and r9, r8, #(0x3f << PIXEL_BASE)
and r14, r8, #(0x3f << (PIXEL_BASE + 6))
eor r10, r10, r9, lsl #(16 - PIXEL_BASE)
eor r7, r10, r14, lsl #(24 - (PIXEL_BASE + 6))
.endm
.macro CAPTURE_BITS_8BPP
// Pixel 0 in GPIO 4.. 2 -> 7.. 0

Wyświetl plik

@ -151,7 +151,7 @@ skip_swap:
ldr r9, param_sample_width
ands r9, r9, #1
movne r8, r8, lsl #1
addne r8, r8, #2
str r8, param_h_offset
eor r7, r7, #1