kopia lustrzana https://github.com/hoglet67/RGBtoHDMI
Tweak macros and adjust hoffset
rodzic
a13ab93cb6
commit
70bdde2f2f
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
63
src/macros.S
63
src/macros.S
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue