Skip to content

Commit 16e44cc

Browse files
committed
joybus: Fix first bit being skipped when console is being turned on
1 parent 75912bc commit 16e44cc

2 files changed

Lines changed: 33 additions & 26 deletions

File tree

include/joybus.pio.h

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,48 +13,54 @@
1313
// ------ //
1414

1515
#define joybus_wrap_target 0
16-
#define joybus_wrap 22
16+
#define joybus_wrap 23
17+
#define joybus_pio_version 1
1718

1819
#define joybus_T1 10
1920
#define joybus_T2 20
2021
#define joybus_T3 10
2122

2223
#define joybus_offset_read 0u
23-
#define joybus_offset_write 5u
24+
#define joybus_offset_write 6u
2425

2526
static const uint16_t joybus_program_instructions[] = {
2627
// .wrap_target
27-
0xe080, // 0: set pindirs, 0
28-
0x3320, // 1: wait 0 pin, 0 [19]
29-
0x4001, // 2: in pins, 1
30-
0x20a0, // 3: wait 1 pin, 0
31-
0x0001, // 4: jmp 1
32-
0xe081, // 5: set pindirs, 1
33-
0xe001, // 6: set pins, 1
34-
0x80e0, // 7: pull ifempty block
35-
0x6021, // 8: out x, 1
36-
0x00ee, // 9: jmp !osre, 14
37-
0x00b3, // 10: jmp x != y, 19
38-
0x80e0, // 11: pull ifempty block
39-
0x6021, // 12: out x, 1
40-
0x000f, // 13: jmp 15
41-
0xa342, // 14: nop [3]
42-
0xa142, // 15: nop [1]
43-
0xe900, // 16: set pins, 0 [9]
44-
0xb201, // 17: mov pins, x [18]
45-
0x0006, // 18: jmp 6
46-
0xa442, // 19: nop [4]
47-
0xe900, // 20: set pins, 0 [9]
48-
0xf201, // 21: set pins, 1 [18]
49-
0x0000, // 22: jmp 0
28+
0xe080, // 0: set pindirs, 0
29+
0x20a0, // 1: wait 1 pin, 0
30+
0x3320, // 2: wait 0 pin, 0 [19]
31+
0x4001, // 3: in pins, 1
32+
0x20a0, // 4: wait 1 pin, 0
33+
0x0002, // 5: jmp 2
34+
0xe081, // 6: set pindirs, 1
35+
0xe001, // 7: set pins, 1
36+
0x80e0, // 8: pull ifempty block
37+
0x6021, // 9: out x, 1
38+
0x00ef, // 10: jmp !osre, 15
39+
0x00b4, // 11: jmp x != y, 20
40+
0x80e0, // 12: pull ifempty block
41+
0x6021, // 13: out x, 1
42+
0x0010, // 14: jmp 16
43+
0xa342, // 15: nop [3]
44+
0xa142, // 16: nop [1]
45+
0xe900, // 17: set pins, 0 [9]
46+
0xb201, // 18: mov pins, x [18]
47+
0x0007, // 19: jmp 7
48+
0xa442, // 20: nop [4]
49+
0xe900, // 21: set pins, 0 [9]
50+
0xf201, // 22: set pins, 1 [18]
51+
0x0000, // 23: jmp 0
5052
// .wrap
5153
};
5254

5355
#if !PICO_NO_HARDWARE
5456
static const struct pio_program joybus_program = {
5557
.instructions = joybus_program_instructions,
56-
.length = 23,
58+
.length = 24,
5759
.origin = -1,
60+
.pio_version = joybus_pio_version,
61+
#if PICO_PIO_VERSION > 0
62+
.used_gpio_ranges = 0x0
63+
#endif
5864
};
5965

6066
static inline pio_sm_config joybus_program_get_default_config(uint offset) {

src/joybus.pio

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
; Autopush with 8 bit ISR threshold
99
public read:
1010
set pindirs 0 ; Set pin to input
11+
wait 1 pin 0 ; Make sure the line is high before entering the loop
1112
read_loop:
1213
wait 0 pin 0 [T1 + T2 / 2 - 1] ; Wait for falling edge, then wait until halfway through the 2uS which represents the bit value
1314
in pins, 1 ; Read bit value

0 commit comments

Comments
 (0)