ice40: hardcode ora_ptr

The previous approach of attempting to derive it didn't work.

It turns out that the ora_ptr is 16 * the current offset.

Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
Sean Cross 2019-02-26 15:12:45 +08:00
parent 9506159380
commit 798a0f167e

16
ice40.c
View File

@ -5,7 +5,9 @@
#define MAX(x, y) (x) > (y) ? (x) : (y) #define MAX(x, y) (x) > (y) ? (x) : (y)
#define ARRAY_SIZE(x) ((sizeof(x) / sizeof(*x))) #define ARRAY_SIZE(x) ((sizeof(x) / sizeof(*x)))
#define DEBUG_PRINT(...) printf(__VA_ARGS__) #define DEBUG_PRINT(...)
// #define DEBUG_PRINT(...) printf(__VA_ARGS__)
// #define SCAN_DEBUG
// Make this a macro so line numbers work correctly // Make this a macro so line numbers work correctly
#define assert_words_equal(check_word, old_word) \ #define assert_words_equal(check_word, old_word) \
@ -37,10 +39,6 @@
#define SCAN_DEBUG_PRINT(...) #define SCAN_DEBUG_PRINT(...)
#endif #endif
// The number of words forward and backward to look for matches.
// Should be at least 16.
#define DIFF_FUZZ 32
struct Ice40Bitstream struct Ice40Bitstream
{ {
uint32_t offset; uint32_t offset;
@ -319,6 +317,7 @@ int ice40_patch(struct irw_file *f, struct irw_file *rom,
(bs.current_width * bs.current_height) / 8); (bs.current_width * bs.current_height) / 8);
bs.bram_width = MAX(bs.bram_width, bs.current_width); bs.bram_width = MAX(bs.bram_width, bs.current_width);
bs.bram_height = MAX(bs.bram_height, bs.current_height); bs.bram_height = MAX(bs.bram_height, bs.current_height);
ora_ptr = 16 * bs.current_offset;
// Step 1: Find a mapping by scanning through the first 128 words looking for patterns. // Step 1: Find a mapping by scanning through the first 128 words looking for patterns.
uint16_t scan_buffer[128]; uint16_t scan_buffer[128];
@ -448,13 +447,6 @@ int ice40_patch(struct irw_file *f, struct irw_file *rom,
assert_words_equal(check_word, old_word); assert_words_equal(check_word, old_word);
} }
// Stash ora_ptr for the next bank iteration
if (word_stride != -1) {
int offset = (i / word_stride) * 16;
int mapping = word_mappings[i % word_stride].random;
ora_ptr = offset + mapping;
}
last0 = irw_readb(f); last0 = irw_readb(f);
last1 = irw_readb(f); last1 = irw_readb(f);
if (last0 || last1) if (last0 || last1)