diff --git a/lib/adafruit_floppy b/lib/adafruit_floppy index 94e3802157..e36a6127b9 160000 --- a/lib/adafruit_floppy +++ b/lib/adafruit_floppy @@ -1 +1 @@ -Subproject commit 94e38021574e3e2c25bd1b8af01ad404e31f5409 +Subproject commit e36a6127b957ab2f602e031ba3583de9c571582e diff --git a/ports/raspberrypi/common-hal/floppyio/__init__.h b/ports/raspberrypi/common-hal/floppyio/__init__.h new file mode 100644 index 0000000000..7dbf8a7af7 --- /dev/null +++ b/ports/raspberrypi/common-hal/floppyio/__init__.h @@ -0,0 +1,37 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2022 Jeff Epler for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +// empirical-ish from RP2040 @ 125MHz for floppy_flux_readinto +#define FLOPPYIO_SAMPLERATE (24000000) +// empirical-ish from RP2040 @ 125MHz for floppy_mfm_readinto +// my guess is these are slower because the more complex routine falls out of cache, but it's just +// speculation because the loops are very similar. When looking at raw bins with a modified +// version of adafruit_floppy, it can be seen that there are _two_ peaks for T2 and T3, rather +// than a single one, around 36 (mostly) and 43 (rarer), compared to a single peak around 48. +#define T2_5 (54) +#define T3_5 (75) diff --git a/ports/raspberrypi/mpconfigport.mk b/ports/raspberrypi/mpconfigport.mk index 1dfb345f5d..80938c47b0 100644 --- a/ports/raspberrypi/mpconfigport.mk +++ b/ports/raspberrypi/mpconfigport.mk @@ -5,6 +5,7 @@ CIRCUITPY_ALARM ?= 1 CIRCUITPY_RP2PIO ?= 1 CIRCUITPY_NEOPIXEL_WRITE ?= $(CIRCUITPY_RP2PIO) +CIRCUITPY_FLOPPYIO ?= 1 CIRCUITPY_FRAMEBUFFERIO ?= $(CIRCUITPY_DISPLAYIO) CIRCUITPY_FULL_BUILD ?= 1 CIRCUITPY_AUDIOMP3 ?= 1 diff --git a/shared-module/floppyio/__init__.c b/shared-module/floppyio/__init__.c index a9cae48c19..6700c48078 100644 --- a/shared-module/floppyio/__init__.c +++ b/shared-module/floppyio/__init__.c @@ -24,8 +24,6 @@ * THE SOFTWARE. */ -#include "hal_gpio.h" - #include "py/runtime.h" #include "shared-bindings/time/__init__.h" @@ -33,8 +31,12 @@ #include "common-hal/floppyio/__init__.h" #include "shared-bindings/digitalio/DigitalInOut.h" +#ifndef T2_5 #define T2_5 (FLOPPYIO_SAMPLERATE * 5 / 2 / 1000000) +#endif +#ifndef T3_5 #define T3_5 (FLOPPYIO_SAMPLERATE * 7 / 2 / 1000000) +#endif #define MFM_IO_MMIO (1) #include "lib/adafruit_floppy/src/mfm_impl.h"