Add floppyio to unix port, test mfm decoding
This commit is contained in:
parent
7d2e46aa19
commit
1be36bd7cb
8 changed files with 109 additions and 7 deletions
|
|
@ -40,6 +40,7 @@ SRC_BITMAP := \
|
|||
shared-bindings/displayio/Bitmap.c \
|
||||
shared-bindings/displayio/ColorConverter.c \
|
||||
shared-bindings/displayio/Palette.c \
|
||||
shared-bindings/floppyio/__init__.c \
|
||||
shared-bindings/jpegio/__init__.c \
|
||||
shared-bindings/jpegio/JpegDecoder.c \
|
||||
shared-bindings/locale/__init__.c \
|
||||
|
|
@ -69,6 +70,7 @@ SRC_BITMAP := \
|
|||
shared-module/displayio/Bitmap.c \
|
||||
shared-module/displayio/ColorConverter.c \
|
||||
shared-module/displayio/Palette.c \
|
||||
shared-module/floppyio/__init__.c \
|
||||
shared-module/jpegio/__init__.c \
|
||||
shared-module/jpegio/JpegDecoder.c \
|
||||
shared-module/os/getenv.c \
|
||||
|
|
@ -94,6 +96,7 @@ CFLAGS += \
|
|||
-DCIRCUITPY_BITMAPTOOLS=1 \
|
||||
-DCIRCUITPY_CODEOP=1 \
|
||||
-DCIRCUITPY_DISPLAYIO_UNIX=1 \
|
||||
-DCIRCUITPY_FLOPPYIO=1 \
|
||||
-DCIRCUITPY_FUTURE=1 \
|
||||
-DCIRCUITPY_GIFIO=1 \
|
||||
-DCIRCUITPY_JPEGIO=1 \
|
||||
|
|
|
|||
|
|
@ -25,8 +25,12 @@
|
|||
*/
|
||||
|
||||
#include "shared-bindings/floppyio/__init__.h"
|
||||
#if CIRCUITPY_DIGITALIO
|
||||
#include "shared-bindings/digitalio/DigitalInOut.h"
|
||||
#include "common-hal/floppyio/__init__.h"
|
||||
#else
|
||||
#define FLOPPYIO_SAMPLERATE (24000000)
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
|
|
@ -53,6 +57,7 @@
|
|||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t floppyio_flux_readinto(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
#if CIRCUITPY_DIGITALIO
|
||||
enum { ARG_buffer, ARG_data, ARG_index, ARG_index_wait };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_buffer, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
|
|
@ -74,6 +79,9 @@ STATIC mp_obj_t floppyio_flux_readinto(size_t n_args, const mp_obj_t *pos_args,
|
|||
MICROPY_FLOAT_CONST(.220);
|
||||
|
||||
return MP_OBJ_NEW_SMALL_INT(common_hal_floppyio_flux_readinto(bufinfo.buf, bufinfo.len, data, index, index_wait_ms));
|
||||
#else
|
||||
mp_raise_NotImplementedError(NULL);
|
||||
#endif
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_KW(floppyio_flux_readinto_obj, 0, floppyio_flux_readinto);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,10 @@
|
|||
#pragma once
|
||||
|
||||
#include "py/obj.h"
|
||||
#include "common-hal/digitalio/DigitalInOut.h"
|
||||
|
||||
#if CIRCUITPY_DIGITALIO
|
||||
#include "common-hal/digitalio/DigitalInOut.h"
|
||||
int common_hal_floppyio_flux_readinto(void *buf, size_t len, digitalio_digitalinout_obj_t *data, digitalio_digitalinout_obj_t *index, mp_int_t index_wait_ms);
|
||||
#endif
|
||||
|
||||
int common_hal_floppyio_mfm_readinto(const mp_buffer_info_t *buf, const mp_buffer_info_t *flux_buf, uint8_t *validity, size_t t2_max, size_t t3_max);
|
||||
|
|
|
|||
|
|
@ -29,8 +29,10 @@
|
|||
|
||||
#include "shared-bindings/time/__init__.h"
|
||||
#include "shared-bindings/floppyio/__init__.h"
|
||||
#if CIRCUITPY_DIGITALIO
|
||||
#include "common-hal/floppyio/__init__.h"
|
||||
#include "shared-bindings/digitalio/DigitalInOut.h"
|
||||
#endif
|
||||
|
||||
#ifndef T2_5
|
||||
#define T2_5 (FLOPPYIO_SAMPLERATE * 5 / 2 / 1000000)
|
||||
|
|
@ -41,6 +43,7 @@
|
|||
|
||||
#include "lib/adafruit_floppy/src/mfm_impl.h"
|
||||
|
||||
#if CIRCUITPY_DIGITALIO
|
||||
MP_WEAK
|
||||
__attribute__((optimize("O3")))
|
||||
int common_hal_floppyio_flux_readinto(void *buf, size_t len, digitalio_digitalinout_obj_t *data, digitalio_digitalinout_obj_t *index, mp_int_t index_wait_ms) {
|
||||
|
|
@ -65,6 +68,7 @@ int common_hal_floppyio_flux_readinto(void *buf, size_t len, digitalio_digitalin
|
|||
// wait for index pulse low
|
||||
while (READ_INDEX()) { /* NOTHING */
|
||||
if (supervisor_ticks_ms32() > index_deadline_ms) {
|
||||
common_hal_mcu_enable_interrupts();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -100,6 +104,7 @@ int common_hal_floppyio_flux_readinto(void *buf, size_t len, digitalio_digitalin
|
|||
|
||||
return pulses_ptr - pulses;
|
||||
}
|
||||
#endif
|
||||
|
||||
int common_hal_floppyio_mfm_readinto(const mp_buffer_info_t *buf, const mp_buffer_info_t *flux_buf, uint8_t *validity, size_t t2_max, size_t t3_max) {
|
||||
mfm_io_t io = {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@
|
|||
#ifndef MICROPY_INCLUDED_LIB_TIMEUTILS_TIMEUTILS_H
|
||||
#define MICROPY_INCLUDED_LIB_TIMEUTILS_TIMEUTILS_H
|
||||
|
||||
#include "mpconfigport.h" // CIRCUITPY-CHANGE for MICROPY_EPOCH_IS_1970
|
||||
|
||||
// The number of seconds between 1970/1/1 and 2000/1/1 is calculated using:
|
||||
// time.mktime((2000,1,1,0,0,0,0,0,0)) - time.mktime((1970,1,1,0,0,0,0,0,0))
|
||||
#define TIMEUTILS_SECONDS_1970_TO_2000 (946684800ULL)
|
||||
|
|
|
|||
79
tests/circuitpython/mfm.py
Normal file
79
tests/circuitpython/mfm.py
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
import floppyio
|
||||
|
||||
mfm_content = (
|
||||
b'HHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHH'
|
||||
b'H00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH0'
|
||||
b'0HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00H'
|
||||
b'HHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHH'
|
||||
b'H00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH0'
|
||||
b'0HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00H'
|
||||
b'HHH00HHHH00HHHH00HHHH00HHHH00HHHH00H00000000000000000000000000'
|
||||
b'00000000000000000000000000000000000000000000000000000000000000'
|
||||
b'0000000H0H`H`0H`H`0H`H`00000H0HHH00HHHH00HHHH00HHHH00HHHH00HHH'
|
||||
b'H00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH0'
|
||||
b'0HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00H'
|
||||
b'HHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHH'
|
||||
b'H00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH0'
|
||||
b'0HHHH00HHHH00HHHH00H000000000000000000000000000000000000000000'
|
||||
b'00000000000000000000000000000000000000000000000000000H`H`H0`H`'
|
||||
b'H0`H`H0000000H0000000000000000000000HH0000H`0HH`HH0`000`HH00HH'
|
||||
b'HH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH'
|
||||
b'00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00HHHH00'
|
||||
b'H0000000000000000000000000000000000000000000000000000000000000'
|
||||
b'0000000000000000000000000000000000H`H`H0`H`H0`H`H00000`0`0H00H'
|
||||
b'`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0'
|
||||
b'HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HH'
|
||||
b'H0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0H'
|
||||
b'H0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0'
|
||||
b'H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H0'
|
||||
b'0H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H'
|
||||
b'`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0'
|
||||
b'HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH'
|
||||
b'0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0'
|
||||
b'H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0'
|
||||
b'H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H0'
|
||||
b'0H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H'
|
||||
b'`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0'
|
||||
b'HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HH'
|
||||
b'H0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0H'
|
||||
b'H0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0'
|
||||
b'H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H0'
|
||||
b'0H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H'
|
||||
b'`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0'
|
||||
b'HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH'
|
||||
b'0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0'
|
||||
b'H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0'
|
||||
b'H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H0'
|
||||
b'0H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H'
|
||||
b'`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0'
|
||||
b'HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HH'
|
||||
b'H0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0H'
|
||||
b'H0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0'
|
||||
b'H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H0'
|
||||
b'0H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H'
|
||||
b'`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0'
|
||||
b'HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH'
|
||||
b'0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0'
|
||||
b'H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0'
|
||||
b'H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H0'
|
||||
b'0H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H'
|
||||
b'`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0'
|
||||
b'HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HH'
|
||||
b'H0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0H'
|
||||
b'H0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0'
|
||||
b'H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H0'
|
||||
b'0H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H'
|
||||
b'`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0'
|
||||
b'HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH'
|
||||
b'0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0'
|
||||
b'H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0'
|
||||
b'H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H0'
|
||||
b'0H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H'
|
||||
b'`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0HH0HH0H00H`0HHH0H0H00H`0'
|
||||
b'HH0HH0H00H`0HHH0H0H00H`0HH0``HHHH0`0000hhhhhhhhhhhhhhhhhhhhhhh'
|
||||
)
|
||||
|
||||
b = bytearray(512)
|
||||
r = floppyio.mfm_readinto(b, mfm_content, 60, 84)
|
||||
print(r)
|
||||
print(b)
|
||||
2
tests/circuitpython/mfm.py.exp
Normal file
2
tests/circuitpython/mfm.py.exp
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
1
|
||||
bytearray(b'adafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadafadaf')
|
||||
|
|
@ -55,12 +55,12 @@ _thread aesio array audiocore
|
|||
audiomixer binascii bitmapfilter bitmaptools
|
||||
cexample cmath codeop collections
|
||||
cppexample displayio errno example_package
|
||||
gc hashlib heapq io
|
||||
jpegio json locale math
|
||||
os platform qrio rainbowio
|
||||
random re select struct
|
||||
synthio sys time traceback
|
||||
uctypes ulab zlib
|
||||
floppyio gc hashlib heapq
|
||||
io jpegio json locale
|
||||
math os platform qrio
|
||||
rainbowio random re select
|
||||
struct synthio sys time
|
||||
traceback uctypes ulab zlib
|
||||
me
|
||||
|
||||
rainbowio random
|
||||
|
|
|
|||
Loading…
Reference in a new issue