AVR (atmega328p) based floppy emulator for PC

Overview

fddEMU

An AVR (atmega328p) based floppy drive emulator for PC

fddEMU on perfboard

fddEMU is a DIY floppy drive emulator. You can immediately begin testing fddEMU on serial terminal with an arduino nano, an SD adapter that converts 5 volts arduino power supply and signals to 3.3 volts suitable for SD card, an SD card, and some jumper cables. Standalone (using without usb serial connection) require SSD1306 i2c screen, buttons and a 5 volts power supply.

fddEMU on breadboard

Requirements

  • Arduino nano (UNO will do but button inputs require ADC7, use serial commands instead)
  • Micro SD card adapter (converts 5 volts arduino power supply and signals to 3.3 volts)
  • A micro SD card (formatted FAT16/32, floppy images in root directory)
  • Two 1kOhm resistors (for step and readdata pins - atmega's internal pullups are not sufficicient for parasitic capacitance of long floppy drive cable)
  • Male to female jumper wires (for connecting arduino nano pins to FDC ribbon cable)
  • Male to male jumper wires (for pullup on step and readdata pins)

Optional

  • 0.96" i2c OLED (SSD1306) screen (for output)
  • 4 or 5 1kOhm resistors (for making ADC buttons)
  • 1 100kOhm resistor (ADC7 has no pullup, so an external pullup required)
  • 4 or 5 push buttons (required for ADC input obviously)
  • 5 volts power supply (Computer PSU 5v pins or an external PSU can be used)
  • Female to female jumper wires (for connecting SD adapter to arduino nano)
  • Breadboard or perfboard (for placing pullups and ADC buttons)

Programming
Arduino bootloader could be used for uploading (see command below), simply replace /dev/ttyUSB0 with your usb port
avrdude -B 10 -p m328p -c arduino -P /dev/ttyUSB0 -U flash:w:fddEMU.hex

Pin mapping (single drive)

Pin Arduino Nano FDD Ribbon Cable
GND GND 1 (GND)
STEP D2 20 (Step pulse)
STEP_DIR D3 18 (Direction)
MOTOR_A D4 16 (Motor on B)
SELECT_A D5 12 (Drive Select B)
SIDE D6 32 (Select head)
INDEX D7 8 (Index pulse)
READDATA D8 22 (Write data)
WRITEDATA D9 30 (Read data)
WRITE_GATE A0 24 (Write enable)
TRACK_0 A1 26 (Track zero)
WRITE_PROTECT A2 28 (Write protect)
DISK_CHANGE A3 34 (Disk changed)



Pin mapping (dual drive)

Pin Arduino Nano FDD Ribbon Cable
GND GND 1 (GND)
STEP D2 20 (Step pulse)
STEP_DIR D3 18 (Direction)
SELECT_B D4 14 (Drive Select A)
SELECT_A D5 12 (Drive Select B)
SIDE D6 32 (Select head)
INDEX D7 8 (Index pulse)
READDATA D8 22 (Write data)
WRITEDATA D9 30 (Read data)
WRITE_GATE A0 24 (Write enable)
TRACK_0 A1 26 (Track zero)
WRITE_PROTECT A2 28 (Write protect)
DISK_CHANGE A3 34 (Disk changed)



Pin Arduino Nano Micro SD adapter
Slave Select D10 CS
MOSI D11 MOSI
MISO D12 MISO
SCK D13 SCK
VCC 5V VCC
GND GND GND



Pin Arduino Nano 0.96" OLED SSD1306
GND GND GND
VCC 5V VCC
SDA A4 SDA
SCL A5 SCL



Resistor ladder for ADC buttons
Resistor Ladder 1x5

Limitations

  • fddEMU is not an cycle exact floppy emulator , it is more of a hack (it's a bit slower than actual fdd) but it works because floppy controllers have sensible timeouts and we take advantage of that.
  • fddEMU uses MFM encoding (used by HD and DD disks) so there is no FM encoding (used by SD disks) support as of now. But it is possible to implement FM encoding.
  • fddEMU uses raw floppy images (images prepared with dd or rawread) does not require or use a MFM file. Converts raw image sectors to MFM on the fly using ArduinoFDC library.
  • fddEMU supports fixed sector size of 512 bytes, other sector sizes are not supported.
  • Requires a Floppy Drive Controller (FDC) on the PC side to communicate so it probably wont work with an Amiga.
  • If read data pin (D8) is disconnected or does not have sufficient external pullup fddEMU might hang up while reading data from host, which might cause a static image on screen. To protect the screen currently a watchdog timer of 8 seconds is set (which is the longest duration for watchdog timer). If mcu (arduino) can't access SD card after reset remove the sd card, wait a few seconds, reinsert the SD card then reset the arduino.

Acknowledgements

Releases

How to use

  • fddEMU looks for a boot record on "sector 0" of the image. If the boot record reports that the image is formatted as "FAT1?", sector size is 512, number of heads is 2 and number of tracks and number of sectors are less than 255 the image file is loaded with the settings provided by the boot record. To be able to read these custom FAT12 images host system should support provided number of tracks and sectors. If there is no boot record file size is compared to the standart floppy sizes (1.44M, 1.2M, 720K and 360K), if file size matches one of these sizes it is loaded as raw image.
  • Image file must be contiguous for fddEMU to be able to load, if the file is not contiguous an error message will be shown and loading will fail.
  • Contiguity check would take long for large files (> 2MB) during this check fddEMU can not be used.
  • For booting a host system, on startup fddEmu looks for "BOOT.IMG" on SD card. If there is a "BOOT.IMG" on the SD card fddEMU tries to load this file to drive A.
  • if image file has "read only" attribute set, fddEMU will report "Write Protected" to host system.
  • To protect OLED screen fddEMU will put screen to sleep after some idle time, press "S1" (SELECT) button or "S" key inside serial terminal to wake screen up.
  • When host is reading/writing one of the emulated drives, BUSY message will be shown on screen and serial, during this time fddEMU will not respond to input. Warning: fddEMU will not put the screen to sleep while drive is active. If there is a hardware or software problem causing an emulated drive to go continuously active, OLED screen might be damaged.

fddEMU button interface:

  • S1: Load Virtual Disk
  • S2: Next
  • S3: Previous
  • S4: Open file selection Menu / Load selected file
  • S5: Eject selected disk / Cancel loading file

On the main screen, drive 0 "A" and -if enabled- drive 1 "B" are displayed. To use any of the functions a drive must first be selected through "S2" or "S3" buttons.
After a drive is selected:
"S1" button: in main status screen, if virtual disk is enabled, loads the virtual disk to selected drive.
"S2" button: in main status screen selects drive down, in file selection menu selects file down.
"S3" button: in main status screen selects drive up, in file selection menu selects file up.
"S4" button: in main status screen opens file selection menu, in file selection menu loads the selected image file to the selected drive.
"S5" button: in main status screen ejects image file loaded to the selected drive, in file section menu cancels file selection and returns to main status screen.



How to use (Serial)
initial serial output

fddEMU serial interface is used through keys

  • S: Select
  • N: Next file
  • P: Previous file
  • L: Load selected file
  • E: Eject selected disk / Cancel loading file

To use any of the functions a drive must first be selected through "S" key then serial terminal will report "Sel drive: A" or if drive B is selected "Sel drive: B".
After a drive is selected:
"S" key: shows serial status information and selects next drive.
"N" key: selects next image file. If virtul disk is enabled and if the last file in the directory is reached selects virtual disk .
"P" key: selects the previous image file. If the first file is selected, this file is reselected.
"L" key: loads selected image file to the selected drive.
"E" key: ejects image file loaded to selected drive. If pressed during file selection, cancels file selection.



How to use through host system (Virtual Disk)
-if virtual disk is enabled and loaded- Virtual disk root directory contains a "DISKS" directory, a "DRVA.TXT" file and if DUAL drives enabled a "DRVB.TXT" file. If an SD card is inserted "DISKS" directory contains the file listing of inserted SD card's root directory otherwise it will be empty. "DRVA.TXT" would contain name of the image file loaded the "drive 0" and "DRVB.TXT" would contain name of the image file loaded to "drive 1". Writing the name of an image file to either "DRVA.TXT" or "DRVB.TXT" would result loading requested image file to respective emulated drive upon host releasing the drive. However disk write cache might interfere writing into these files and a cache flush might be required.



How to build (Makefile)
Current Makefile assumes avr-gcc and avr-binutils are installed and are in the path, avr specific includes are in "/usr/avr/include" and u8glib library is installed in "libs/u8glib" (either install through git or extract downloaded "u8glib.zip" to "libs/" directory).

make: builds binary with default options.
build options:

  • GUI: enables graphical user interface on OLED screen and ADC buttons (enabled default by Makefile).
  • SERIAL: enables serial user interface and serial commands.
  • VFFS: enables virtual disk.
  • DEBUG: enables debug output on serial.
  • FLIP: flips the image on OLED screen 180 degrees (enabled default by Makefile).
  • WDT: enables watchdog timer (enabled default by Makefile).

    These build options could either be switched on and off from Makefile or commandline (eg.: 'make DUAL=1 GUI=1 VFFS=1 SERIAL=0 DEBUG=0').
    Flashing the mcu could also be done by Makefile. "make flash" programs "fddEMU.hex" to default serial port "/dev/ttyUSB0". If you want to use another serial port assign it to PORT variable (eg.: "make flash PORT=/dev/ttyUSB2").

Note: Please report any errors on github issues for fddEMU. Suggestions for improvements and feedback could be posted on fddEMU blog page Although the blog page is in turkish, feel free to write comments either in turkish or english.

Comments
  • Portability thoughts? Build instructions?

    Portability thoughts? Build instructions?

    So, I was hoping to build this - I don't have a 328p handy, maybe a 2560 but was planning trying a 32u4 as that's what I had handy, or maybe a Teensy 4.1 - (onboard sd even) - 2560 would be the most similar to a 328p though

    In trying to build it with platformIO, it always complains about u8g.h - even though it's installed and recognized, for some odd reason. For example, when the lib isn't installed, the include for it is underlined squiggly; once it's installed and recognized, this goes away along with some errors but still comes back on build for some reason - I wonder if this is due to other errors.

    Anyhow, all the other errors come from specific registers that are used not being found. It looks like these are for UART communication. I haven't dug - is this needed to keep timing up?

    Other registers that are used are for pin change interrupts; is there also a reason for using these directly instead of something mroe portable like attachInterrupt?

    Again - I haven't dug, so I'm not saying your choices weren't needed; I've built an EEPROM emulator with a teensy before and I only barely hit my target for timing and USB UART broke that (although hardware UART with the arduino lib worked fine without any effects on timing), just curious as I'd like to make use of this project for a project of my own as getting 5.25" floppies isn't the easiest for me.

    opened by ForbiddenEra 26
  • Running on arduino.cc

    Running on arduino.cc

    Hi,

    I love this project and it's exactly what I was looking for several days!

    I'm a newbie in this kind of thing and I'm trying to compile using Arduino.cc application using these files but I can't.

    Can explain in more detail how do I can run it in windows? If is not possible to run on Arduino.cc, where do I can run?

    Thank you so much!

    opened by thiagofalencar 9
  • Confusion around write vs read pins

    Confusion around write vs read pins

    I am confused about the write vs read pin setup in this:

    https://github.com/acemielektron/fddEMU/blame/main/README.md#L50..L51 and https://github.com/acemielektron/fddEMU/blame/main/README.md#L69..L70

    both have read and write swapped between their left and right columns... and don't line up with the WRITE_GATE pin.

    Can you help me understand what is going on? I want to use this with a device that doesn't have a normal cable.

    opened by hachi 5
  • DSDD disks are MFM encoded

    DSDD disks are MFM encoded

    This note doesn't make a lot of sense: fddEMU is based on MFM encoding which is used by HD (High Density) disks so there is no DD (Double Density - FM encoding) support as of now.

    See this page: https://www.retrotechnology.com/herbs_stuff/drive.html DSDD disks can be MFM-encoded, so is it a different problem? Did you mean single density?

    opened by lysol 1
  • fix build tests failing during pull request

    fix build tests failing during pull request

    İf repository owner and actor are not same create release and upload release asset fails resulting build test to fail, which happens during pull requests. This patch (hopefully) fixes this behavior by skipping create release and upload release asset if actor and repository owner differs

    opened by skokcam 0
  • Writes to emulated image failing on SM609R (clone of Intel 8272A)

    Writes to emulated image failing on SM609R (clone of Intel 8272A)

    Hello, OK, with RPM on HD floppy is my mistake. Sorry. But when I increased waiting to /WRGATE to 45, program enter at least to "WRITE" function and freeze on reading data from system. I wait for new FW version. I maked log file with drive B:. When I run any program from drive B:, head position change and stay on last position - in LOG on track 13. After RESET of system I will command DIR B: and in log is visible read from last head position without return to track 0. I tested FDC (second working PCB with connectors for 5 1/4" FDD 360kB - I will add foto to Google gallery). In records from logical analyzer I found diference betwen real FDD and fddEMU - signal TRK00 still active without regardless of the state /DS0. When /DS1 actived, FDC read /TRK00=0 (track 0 is set) and do not move with head (reset internal track position/counter). In new log is small mistake - instead number sector 1 is write number sector 10. In cycle /WRGATE I thought info about individual called parts - generate sector head, read data from system, write data do SD... Attachments: EMU_BOOT - boot system with fddEMU, FDD_BOOT - boot systm with real FDDs Petr

    -------- Původní zpráva ------- Od: Acemi Elektronikci ***@***.***> Komu: acemielektron/fddEMU ***@***.***> Předmět: Re: [acemielektron/fddEMU] Update build-firmware.yml (PR #21) Datum: 08.05.2022 07:17

    |   | Hello @RaceSoft [https://github.com/RaceSoft], thank you for the fast response. |
    | | Hello, many thanks for update. Booting working correctly, system is OK. But writing data to image still not working When I experimented with Your source program, I magnified time to detect edge of signal /WRGATE to 45 instead 40, but 48 it would be even better. HD floppy have 360 RPM, high density data and waiting 20 cycles. DD floppy have 300 RPM, double density data (half of HD), and shoult therefore wait max 48 cycles ((360/300)_2_20). | |
    | Both 3.5" DD and 3.5" HD floppies are 300rpm. While DD data rate is 250 kbit/second, HD data rate is 500 kbit/second. https://www.cpcwiki.eu/index.php/IBM_System_34_double_density_format [https://www.cpcwiki.eu/index.php/IBM_System_34_double_density_format] explains floppy structure. Track marks and sector headers are written during formatting. When floppy controller needs to read a sector it first puts the head on correct track, it does this by checking track0 signal while moving head outwards. When track0 is triggered it knows it is on track0, then moves head to the required track. Here it starts checking sector headers Sector headers contain track/side/sector/size information. When it finds the correct sector it reads or writes into it. Because a disk can be formatted on one controller and written on a completely different controller, headers and data also contains gaps to protect from accidentally overwriting following data structures. And due to different controllers there can be slight differences in data rates so there is a pre-amble | before data structures (headers & data), usually 12 bytes of 0 where controller syncs to floppy data rate. While writing to disk after finding correct sector header, controller waits gap2(22 bytes of 0x4E) then starts writing 0s for sync, following, 3 sync bytes, data mark byte 0xFB | and finally data and crc. Previous code was waiting and checking if WRITE_GATE is asserted after sending the sector header. New code is checking whether WRITE_GATE is asserted during sending these 0s. If controller tries to write a sector it should wait for those 22 gap bytes after sector header, only if controller starts sending its sync 0s early, during these gap bytes fddEMU could miss the sector written, because without enough 0s reading fails (fddEMU expects at least 10 0s). I can either shorten the gap2 to 20 bytes (or even more) -which is easier- or add check for WRITE_GATE during gap2. I will be posting the compiled version shortly. |
    | | Have You added some debug information in /WRGATE cycle? | |
    | Yes now it also writes readable chars in addition to hex values. |
    | | Original problems with drive B: stil persist. This is because the last track used before the system reset remains set - head not move to track 0. But now I do not know, how solve it. | |
    | I don't think it is related to track position. Setting track position to 0 for every access is easy, but that is not how a real floppy drive behaves. As I have explained before it has track0 signal for this. A real floppy drive head would stay put where it is last placed, it's controller's job to place head in correct track. |
    | | I looking into record from logical analyzer and comparing with source code of BIOS CP/M system. BIOS checking whether connected the second floppy by service RECALIBRATE. But now i do not know, how it will show on signals from FDC.When I will understand, I suggest some solution. | |
    | BIOS source code would be helpful for understanding how long it waits after finding the correct sector. It is the floppy controller IC that finds the sector then signals the computer to read or write data. I will be waiting your suggestions. |
    | | Added name of used drive to log is super! Thanks for Your support. Have a nice day. | |
    | Thank you for testing fddEMU. With your help fddEMU would become a better emulator that could be used on more computers. |
    | | P.S.: Now is possible use fliped display ;-) . Many thanks. | |
    | You mean "FLIP=1" Ok, will do so. | —Reply to this email directly, view it on GitHub [https://github.com/acemielektron/fddEMU/pull/21#issuecomment-1120352342], or unsubscribe [https://github.com/notifications/unsubscribe-auth/AY5AEW5UCI4KPD6T7RNGLA3VI5FAFANCNFSM5UNF5XPQ].You are receiving this because you were mentioned.Message ID: <acemielektron/fddEMU/pull/21/c1120352342 | @github | .com> | |

    fddEMU (c) 2021 Acemi Elektronikci

    S: Select drive P: Previous N: Next L: Load E: Eject

    FS: ÍÓ>* s A: BOOT.IMG C40H2S9 B: No disk Selected Drive A s A: BOOT.IMG C40H2S9 B: No disk Selected Drive B l>Loading C2717-09.DCZ FS: ÍÓ>* C40H2S9 BUSY A:R0/0/1 A:R0/1/2 A:R0/1/3 A:R0/1/4 A:R0/1/5 A:R0/1/6 A:R0/1/7 A:R0/1/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 Drive idle BUSY A:R0/0/2 A:R0/0/2 A:R2/0/3 A:R5/0/4 A:R4/0/5 A:R2/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/1/2 A:R0/1/3 A:R0/1/4 A:R0/1/5 A:R0/1/6 A:R0/1/7 Drive idle BUSY A:R0/1/8 Drive idle BUSY A:R1/0/2 A:R1/0/2 A:R1/0/3 A:R1/0/4 A:R1/0/5 Drive idle BUSY A:R1/0/6 A:R1/0/2 A:R1/0/3 A:R1/0/4 A:R1/0/5 A:R1/0/6 A:R1/0/7 A:R1/0/8 A:R1/0/9 Drive idle BUSY A:R1/0/10 A:R1/0/2 A:R1/0/3 A:R1/0/4 Drive idle BUSY B:R1/0/5 Drive idle BUSY B:R1/0/2 B:R1/0/2 B:R1/0/3 B:R1/0/4 B:R1/0/5 Drive idle BUSY B:R1/0/6 B:R1/0/2 B:R1/0/3 B:R1/0/4 B:R1/0/5 B:R1/0/6 B:R1/0/7 B:R1/0/8 B:R1/0/9 Drive idle BUSY B:R1/0/10 B:R1/0/2 B:R1/0/3 B:R1/0/4 Drive idle BUSY B:R1/0/5 Drive idle BUSY B:R1/0/2 B:R9/1/2 Drive idle BUSY B:R9/1/3 B:R9/1/2 B:R9/1/3 B:R9/1/4 B:R9/1/5 B:R9/1/6 Drive idle BUSY B:R9/1/7 Drive idle BUSY B:R10/0/2 B:R10/0/2 B:R10/0/3 B:R10/0/4 B:R10/0/5 Drive idle BUSY B:R10/0/6 B:R10/0/2 B:R10/0/3 B:R10/0/4 B:R10/0/5 B:R10/0/6 B:R10/0/7 B:R10/0/8 B:R10/0/9 Drive idle BUSY B:R10/0/10 B:R10/0/2 B:R10/0/3 B:R10/0/4 Drive idle BUSY B:R10/0/5 B:R10/0/2 B:R10/0/3 B:R10/0/4 B:R10/0/5 B:R10/0/6 B:R10/0/7 B:R10/0/8 Drive idle BUSY B:R10/0/9 B:R10/0/2 B:R10/0/3 Drive idle BUSY B:R10/0/4 B:R10/0/2 B:R10/0/3 B:R10/0/4 B:R10/0/5 B:R10/0/6 B:R10/0/7 Drive idle BUSY B:R10/0/8 B:R10/0/2 Drive idle BUSY B:R10/0/3 B:R10/0/2 B:R10/0/3 B:R10/0/4 B:R10/0/5 B:R10/0/6 Drive idle BUSY B:R10/0/7 Drive idle BUSY B:R10/1/2 B:R10/1/2 B:R10/1/3 B:R10/1/4 B:R10/1/5 Drive idle BUSY B:R10/1/6 B:R10/1/2 B:R10/1/3 B:R10/1/4 B:R10/1/5 B:R10/1/6 B:R10/1/7 B:R10/1/8 B:R10/1/9 Drive idle BUSY B:R10/1/10 B:R10/1/2 B:R10/1/3 B:R10/1/4 Drive idle BUSY B:R10/1/5 B:R10/1/2 B:R10/1/3 B:R10/1/4 B:R10/1/5 B:R10/1/6 B:R10/1/7 B:R10/1/8 Drive idle BUSY B:R10/1/9 B:R10/1/2 B:R10/1/3 Drive idle BUSY B:R10/1/4 B:R10/1/2 B:R10/1/3 B:R10/1/4 B:R10/1/5 B:R10/1/6 B:R10/1/7 Drive idle BUSY B:R10/1/8 B:R10/1/2 Drive idle BUSY B:R10/1/3 B:R10/1/2 B:R10/1/3 B:R10/1/4 B:R10/1/5 B:R10/1/6 Drive idle BUSY B:R10/1/7 Drive idle BUSY B:R11/0/2 B:R11/0/2 B:R11/0/3 B:R11/0/4 B:R11/0/5 Drive idle BUSY B:R11/0/6 B:R11/0/2 B:R11/0/3 B:R11/0/4 B:R11/0/5 B:R11/0/6 B:R11/0/7 B:R11/0/8 B:R11/0/9 Drive idle BUSY B:R11/0/10 B:R11/0/2 B:R11/0/3 B:R11/0/4 Drive idle BUSY B:R11/0/5 B:R11/0/2 B:R11/0/3 B:R11/0/4 B:R11/0/5 B:R11/0/6 B:R11/0/7 B:R11/0/8 Drive idle BUSY B:R11/0/9 B:R11/0/2 B:R11/0/3 Drive idle BUSY B:R11/0/4 B:R11/0/2 B:R11/0/3 B:R11/0/4 B:R11/0/5 B:R11/0/6 B:R11/0/7 Drive idle BUSY B:R11/0/8 B:R11/0/2 Drive idle BUSY B:R11/0/3 B:R11/0/2 B:R11/0/3 B:R11/0/4 B:R11/0/5 B:R11/0/6 Drive idle BUSY B:R11/0/7 Drive idle BUSY B:R11/1/2 B:R11/1/2 B:R11/1/3 B:R11/1/4 B:R11/1/5 Drive idle BUSY B:R11/1/6 B:R11/1/2 B:R11/1/3 B:R11/1/4 B:R11/1/5 B:R11/1/6 B:R11/1/7 B:R11/1/8 B:R11/1/9 Drive idle BUSY B:R11/1/10 Drive idle BUSY B:R1/0/2 B:R11/1/2 B:R11/1/3 B:R11/1/4 Drive idle BUSY B:R11/1/5 B:R11/1/2 B:R11/1/3 B:R11/1/4 B:R11/1/5 B:R11/1/6 B:R11/1/7 B:R11/1/8 Drive idle BUSY B:R11/1/9 B:R11/1/2 B:R11/1/3 Drive idle BUSY B:R11/1/4 B:R11/1/2 B:R11/1/3 B:R11/1/4 B:R11/1/5 B:R11/1/6 B:R11/1/7 Drive idle BUSY B:R11/1/8 B:R11/1/2 Drive idle BUSY B:R11/1/3 B:R11/1/2 B:R11/1/3 B:R11/1/4 B:R11/1/5 B:R11/1/6 Drive idle BUSY B:R11/1/7 Drive idle BUSY B:R12/0/2 B:R12/0/2 B:R12/0/3 B:R12/0/4 B:R12/0/5 Drive idle BUSY B:R12/0/6 B:R12/0/2 B:R12/0/3 B:R12/0/4 B:R12/0/5 B:R12/0/6 B:R12/0/7 B:R12/0/8 B:R12/0/9 Drive idle BUSY B:R12/0/10 B:R12/0/2 B:R12/0/3 B:R12/0/4 Drive idle BUSY B:R12/0/5 B:R12/0/2 B:R12/0/3 B:R12/0/4 B:R12/0/5 B:R12/0/6 B:R12/0/7 B:R12/0/8 Drive idle BUSY B:R12/0/9 B:R12/0/2 B:R12/0/3 Drive idle BUSY B:R12/0/4 B:R12/0/2 B:R12/0/3 B:R12/0/4 B:R12/0/5 B:R12/0/6 B:R12/0/7 Drive idle BUSY B:R12/0/8 B:R12/0/2 Drive idle BUSY B:R12/0/3 B:R12/0/2 B:R12/0/3 B:R12/0/4 B:R12/0/5 B:R12/0/6 Drive idle BUSY B:R12/0/7 Drive idle BUSY B:R12/1/2 B:R12/1/2 B:R12/1/3 B:R12/1/4 B:R12/1/5 Drive idle BUSY B:R12/1/6 B:R12/1/2 B:R12/1/3 B:R12/1/4 B:R12/1/5 B:R12/1/6 B:R12/1/7 B:R12/1/8 B:R12/1/9 Drive idle BUSY B:R12/1/10 B:R12/1/2 B:R12/1/3 B:R12/1/4 Drive idle BUSY B:R12/1/5 B:R12/1/2 B:R12/1/3 B:R12/1/4 B:R12/1/5 B:R12/1/6 B:R12/1/7 B:R12/1/8 Drive idle BUSY B:R12/1/9 B:R12/1/2 B:R12/1/3 Drive idle BUSY B:R12/1/4 B:R12/1/2 B:R12/1/3 B:R12/1/4 B:R12/1/5 B:R12/1/6 B:R12/1/7 Drive idle BUSY B:R12/1/8 B:R12/1/2 Drive idle BUSY B:R12/1/3 B:R12/1/2 B:R12/1/3 B:R12/1/4 B:R12/1/5 B:R12/1/6 Drive idle --------------------SYSTEM RESET----------------------- BUSY A:R12/1/7 A:R0/0/2 A:R2/0/3 A:R4/0/4 A:R4/0/5 A:R2/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/0/2 A:R0/0/3 A:R0/0/4 A:R0/0/5 A:R0/0/6 A:R0/0/7 A:R0/0/8 A:R0/0/9 A:R0/0/10 A:R0/1/2 A:R0/1/3 A:R0/1/4 A:R0/1/5 A:R0/1/6 A:R0/1/7 Drive idle BUSY A:R0/1/8 Drive idle BUSY A:R1/0/2 A:R1/0/2 A:R1/0/3 A:R1/0/4 A:R1/0/5 Drive idle BUSY A:R1/0/6 A:R1/0/2 A:R1/0/3 A:R1/0/4 A:R1/0/5 A:R1/0/6 A:R1/0/7 A:R1/0/8 A:R1/0/9 Drive idle BUSY A:R1/0/10 A:R1/0/2 A:R1/0/3 A:R1/0/4 Drive idle BUSY B:R1/0/5 B:R13/0/2 B:R13/0/3 B:R13/0/4 B:R13/0/5 B:R13/0/6 B:R13/0/7 B:R13/0/8 B:R13/0/9 B:R13/0/10 B:R13/0/2 B:R13/0/3 B:R13/0/4 B:R13/0/5 B:R13/0/6 B:R13/0/7 B:R13/0/8 B:R13/0/9 B:R13/0/10 B:R13/0/2 B:R13/0/3 B:R13/0/4 B:R13/0/5 B:R13/0/6 B:R13/0/7 B:R13/0/8 B:R13/0/9 B:R13/0/10 B:R13/0/2 B:R13/0/3 B:R13/0/4 B:R13/0/5 B:R13/0/6 B:R13/0/7 B:R13/0/8 B:R13/0/9 B:R13/0/10 B:R13/0/2 B:R13/0/3 B:R13/0/4 B:R13/0/5 B:R13/0/6 B:R13/0/7 B:R13/0/8 B:R13/0/9 B:R13/0/10 B:R13/0/2 B:R13/0/3 B:R13/0/4 B:R13/0/5 B:R13/0/6 B:R13/0/7 B:R13/0/8 B:R13/0/9 B:R13/0/10 B:R13/0/2 B:R13/0/3 B:R13/0/4 B:R13/0/5 B:R13/0/6 B:R13/0/7 B:R13/0/8 B:R13/0/9 B:R13/0/10 Drive idle -------------------BDOS ERR B:----------------------

    Originally posted by @RaceSoft in https://github.com/acemielektron/fddEMU/issues/21#issuecomment-1120371812

    opened by acemielektron 0
  • Modification for 256 bytes sectors

    Modification for 256 bytes sectors

    Hi,

    Would it be possible to modify the code (primarily avrFlux I assume) to accommodate DD disk format with 40 or 80 tracks 2 sides and 16 sectors 256 bytes in length? More about the format here: https://sinclair.wiki.zxnet.co.uk/wiki/TRD_format

    TR-DOS uses 256 BPS and 16 SPT for disks, so a

    • 40 track 1 sided image length is 163840 byte (1×40×16×256)
    • 40 track 2 sided image length is 327680 byte
    • 80 track 1 sided image length is 327680 byte
    • 80 track 2 sided image length is 655360 byte

    Due to current code length (~23 out of 32k) this may require a separate branch?

    enhancement 
    opened by ikonko 23
Releases(8061342)
  • 8061342(May 11, 2022)

    This is an automated release triggered by commit 8061342 make driveControl flags volatile

    • occasionally FlopptDrive::run continues despite selected drive select line getting deasserted if it is caused by compiler optimizations defining drive status flags volatile might help
    Source code(tar.gz)
    Source code(zip)
    build-8061342.zip(148.62 KB)
  • a839e24(Apr 28, 2022)

Owner
Acemi Elektronikci
Acemi Elektronikci
A minimal implementation of a task-switching kernel in C for the ATmega328P chip

Multi-tasking Kernel for ATmega328P This repo includes a simple multi-tasking kernel, allowing the registration and execution of multiple tasks. In de

Francis Stokes 4 Dec 23, 2021
AVR-based frequency counter module with I2C interface.

AVR-based Frequency Counter The AVR-based frequency counter is partly based on the project developed by Herbert Dingfelder with some extensions and mo

DoWiD 1 Feb 26, 2022
Multiple payloads for the digispark digistump AVR boards.

Multiple payloads for the digispark digistump AVR boards. Some are translated from RubberDucky and some are original..

null 6 Dec 14, 2022
Little project on ATtiny13 (AVR microcontroller)

Night-light Hello everyone.This is not a big project,created specifically for the "AVR ATtiny13" microcontroller. It embodies the concept of a night l

null 1 Jan 7, 2022
Networked based Atari 2600 emulator.

Cloudtari This is an Atari 2600 emulator that can stream the video over a network, currently using VNC or alternately as a stream of GIFs to a web bro

Michael Kohn 16 Jan 19, 2022
A portable full system emulator of Z280 based boards

z280emu A portable full system emulator of Z280 based boards Motivation There is no working Z280 emulator that I'm aware of so I decided to write one.

Michal Tomek 16 Dec 17, 2022
Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework, based on QEMU.

Unicorn Engine Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework, based on QEMU. Unicorn offers some unparalleled fe

lazymio 1 Nov 7, 2021
A web based N64 Emulator

N64 Wasm Thanks for checking out N64 Wasm! An N64 emulator that runs in the browser. It is a port of the excellent RetroArch ParaLLEl Core to WebAssem

Neil Barkhina 482 Dec 24, 2022
x86 emulator on Raspberry Pi Pico

picox86 x86 emulator on Raspberry Pi Pico https://user-images.githubusercontent.com/10139098/110543817-13299080-812b-11eb-9c88-674cdae919fc.mp4 PCB fr

null 39 Nov 9, 2022
I2C hardware test terminal/master mode emulator.

I2C Master Mode Emulator The I2C master mode emulator allows communication with I2C devices by sending or receiving data to/from the I2C bus. To issue

Dilshan R Jayakody 19 Nov 5, 2022
a little hobby raspberry pi pico emulator

PICO-EMU a little raspberry pi pico emulator note: we use the provided bootrom from raspberry pi at the repo: https://github.com/raspberrypi/pico-boot

supercyp 26 Nov 5, 2022
Emulator for EvE Online Crucible expansion

EVEmu - An EVE Online Emulator Introduction EVEmu is a work-in-progress server emulator for the space MMO EVE Online. This is an educational project.

EvEmu Project 111 Dec 5, 2022
a Blue Pill Neopixel Emulator

NeoPill a Blue Pill Neopixel Emulator, firmware for STM32F103C8T6. To build with STM32CubeMX (6.1.1), open bluepill_neoemu_clk.ioc, generate code in a

null 21 Aug 30, 2022
BK0010/BK0011 Emulator for Linux

<html><head> <meta http-equiv="content-type" content="text/html;charset=koi8-r"> </head> <body><pre> Этот эмулятор БК-0010 (пока только БК-0010, у мен

Yaroslav Salnikov 8 Oct 9, 2022
A VERY simple Chip8 emulator

Chip8-Emu A VERY simple Chip8 emulator

null 4 Nov 7, 2021
EMUCHIP8, a CHIP-8 emulator.

EMUCHIP8 Chip-8 Demo Video This is a fun retro emulator project of mine. You can download the source code and build with MAKE, then insert your chip-8

Levent Kaya 12 Jan 1, 2023
OpenTibiaBR - Canary Project is a free and open-source MMORPG server emulator written in C++.

OpenTibiaBR - Canary Project is a free and open-source MMORPG server emulator written in C++. It is a fork of the OTServBR-Global project. To connect to the server and to take a stable experience, you can use our own client or tibia client and if you want to edit something, check our customized tools.

OpenTibiaBR 104 Dec 28, 2022
font rendering, Zep vim emulator, microui integration

LabFont This project is an exploration of getting text into a rendeing pipeline based on @floooh's sokol. Frameworks such as Dear ImGui solve text ren

Nick Porcino 14 Sep 11, 2022
zx spectrum 128 emulator on single esp32

spectrum128_esp32_usb_host_pal_tv zx spectrum 128 emulator on single esp32 Single esp32 lolin32mini spectrum 128 emulator with direct gpio 2 HID LS us

Samsonov Dima 37 Dec 14, 2022