• Please review our updated Terms and Rules here

Guide to using a Gotek floppy emulator with an RQDX3

silver2k

Member
Joined
Feb 12, 2023
Messages
22
Hi,

I recently was able to make the Gotek USB floppy emulator work with my microPDP-11 using an RQDX3 controller and thought I would share how I did (and the issues I ran into) it so that others could use it as well.

I used the Gotek model with an OLED screen, rotary knob and AT32F435 chipset.

Using a USB A-A cable, I updated the firmwawe using the following instructions:
https://github.com/keirf/flashfloppy/wiki/Firmware-Programming

I could not get a USB A-C cable to work, I had to use a USB A-A cable

I picked up a 32gb USB flash drive to use as storage. The flash drive needs to be formatted in FAT32 to read properly. If you are using windows and fat32 does not show as an option, you can use the FAT32 format tool to format: http://ridgecrop.co.uk/index.htm?guiformat.htm

I then copied the FF.CFG file from the examples folder onto the usb:
https://github.com/keirf/flashfloppy/wiki/Downloads

In the FF.CFG I changed the following settings to get it to work. This is using an RQDX3 controller plugged into the BA23 standard breakout board. I use a non-twisted ribbon cable and picked up a 4 pin molex to 4 pin floppy power adapter. For the ribbon cable, on the Gotek, red line went towards the side of the lower pin #'s printed on the PCB.

interface = ibmpc
host = dec
indexed-prefix = ""

Interface shugart did not work for me.
Changing indexed-prefix to blank quotations is very important because that is what it uses to determine what files are displayed to choose from. I had issues initially without this because I was using .img files and it was saying there are no files on the usb.
 
## FF.CFG: Example FlashFloppy Configuration File
# Place in the root folder or FF/ subfolder of your USB drive.
# NOTE: If FF/ exists, IMG.CFG must reside there, not the root folder.
# Uncommented lines below are the default settings.
# Uncommented options cannot be overridden by settings in other config files.
##
## DRIVE EMULATION
# Floppy-drive interface mode
# shugart: P2=DSKCHG, P34=RDY
# ibmpc: P2=unused, P34=DSKCHG
# ibmpc-hdout: P2=HD_OUT, P34=DSKCHG (not generally needed: prefer 'ibmpc')
# akai-s950: P2=HD_OUT, P34=RDY (Akai S950)
# amiga: P2=DSKCHG, P34=DRIVE_ID (not generally needed: prefer 'shugart')
# jc: JC closed: ibmpc, JC open: shugart
interface = ibmpc
# Host platform: Improves image-format detection for generic types such as IMG
# acorn: Acorn ADFS
# akai: Akai (S01, S20, S950), Korg, SC Prophet 3000
# casio: Casio (FZ-1)
# dec: DEC (RX33, RX50)
# ensoniq: Ensoniq (ASR, TS, etc)
# fluke: Fluke 9100
# gem: General Music (S2, S3)
# ibm-3174: IBM 3174 Establishment Controller
# kaypro: Kaypro
# memotech: Memotech
# msx: MSX
# nascom: Nascom
# pc98: NEC PC-98
# pc-dos: PC DOS Format (geometry determined from Bios Parameter Block)
# tandy-coco: Tandy Color Computer (CoCo)
# ti99: TI-99/4A
# uknc: UKNC / DVK Soviet PDP-11
# unspecified: Common default geometries (including IBM PC)
host = dec
# Pins 2 & 34 output (drive->host) manual configuration
# auto: Auto-configure from interface= setting
# nc: Unused/No Connection [eg. if pin is an input (host->drive) on your host]
# low: Always 0 volts (0v)
# high: Always 5 volts (5v)
# rdy: Drive ready (Ready = 0v)
# nrdy: Logical complement of above
# dens: Density mode (High Density = 0v)
# ndens: Logical complement of above
# chg: Disk changed (Changed = 0v)
# nchg: Logical complement of above
# Values: auto, nc, low, high, rdy, nrdy, dens, ndens, chg, nchg
pin02 = auto
pin34 = auto
# Forcibly write-protect images, or respect the FAT read-only attribute?
# Values: yes | no
write-protect = no
# Filter glitches in the SIDE-select signal shorter than N microseconds
# Values: 0 <= N <= 255
side-select-glitch-filter = 0
# Rotational offset of disk after a track change
# instant: No rotation during track change
# realtime: Emulate rotation of disk while track is changing
# Values: instant | realtime
track-change = instant
# Rotational offset of disk after draining a write to Flash
# instant: No rotation
# realtime: Disk rotates in real time during drain
# eot: Disk rotates to (near) end of track
# Values: instant | realtime | eot
write-drain = instant
# Index pulses suppressed when RDATA and WDATA inactive?
# Values: yes | no
index-suppression = yes
# Milliseconds from head-step start to RDATA active.
# Values: 0 <= N <= 255
head-settle-ms = 12
# Milliseconds delay from motor-on to drive ready.
# On a standard unmodified Gotek the motor signal is not connected and a
# non-default value here will have no effect. Most systems and software do
# not care about correct motor behaviour, and default (ignore) works fine.
# Values: ignore | 0 <= N <= 1000
motor-delay = ignore
# What causes the disk-change (chg) signal to reset after disk insertion?
# step: Step command received
# pa14: CHGRST (pin 1 on old Sony drives), connected to PA14 (JTCK/SWCLK)
# delay-N: Automatically after N*0.5sec (0 <= N <= 15)
chgrst = step
##
## STARTUP / INITIALISATION
# Disk image loaded or ejected at startup?
# Values: yes | no
ejected-on-startup = no
# Which image (or folder) is selected at startup?
# last: Last-selected item at power-off (recorded in IMAGE_A.CFG)
# static: Static path specified in INIT_A.CFG
# init: First item in root folder
# Values: last | static | init
image-on-startup = init
# Time in milliseconds to attempt to probe attached display.
# You may set this to 0 if you have a 2-digit LED display attached.
# Values: 0 <= N <= 65535
display-probe-ms = 3000
##
## IMAGE NAVIGATION
# Auto-select the current file after N seconds
# N=0: disable auto-select
# Values: 0 <= N <= 255
autoselect-file-secs = 2
# Auto-select the current folder after N seconds
# N=0: disable auto-select
# Values: 0 <= N <= 255
autoselect-folder-secs = 2
# Sorting of folder entries in native navigation mode.
# always: Always sort folder entries. Large folders may be truncated.
# never: Never sort folder entries, instead presenting them in FAT order.
# small: Only sort folders which are small enough to sort in full.
# Values: always | never | small
folder-sort = always
# Priority of files vs subfolders when sorting folder entries:
# folders: Folders listed before files
# files: Files listed before folders
# none: Files and folders are not differentiated
# Values: folders | files | none
sort-priority = folders
# Navigation mode for selecting images/slots
# native: Navigate through all valid images/dirs
# indexed: Navigate through DSKA0000, DSKA0001, ...
# default: native unless overridden by HxC-compat-mode config
nav-mode = native
# When navigating slots or folder, loop at min/max?
# Values: yes | no
nav-loop = yes
# Actions of first two buttons.
# B1 | B2 | Both
# zero: Prev | Next | Slot 0
# eject: Prev | Next | Eject/Insert
# rotary: Up-dir | Select/Eject/Insert | -
# rotary-fast: Prev | Next | Up-dir [Prev/Next are accelerated]
# reverse: Reverse sense of B1 and B2
# Multiple values can be separated by commas, eg twobutton-action=eject,reverse
twobutton-action = zero
# Input sensor type at the rotary-encoder inputs (pins PC10 and PC11):
# [full | half | quarter]:
# Rotary encoder, identified by fraction of a Gray-code cycle performed
# per detent/click. If default value ('full') requires multiple
# clicks/detents to move position then change to 'half' (if 2 clicks
# per move) or 'quarter' (if 4 clicks).
# [trackball]:
# Blackberry-style trackball (eg. using Hall-effect sensors).
# [buttons]:
# Push-to-ground Prev/Next buttons.
# [reverse]:
# If the input is working in reverse, use this option to swap directions.
# Multiple values can be separated by commas, eg rotary=quarter,reverse
# Values: none | quarter | half | full | trackball | buttons | reverse
rotary = full
# Prefix for image names in indexed navigation mode. String can be empty ("").
indexed-prefix = ""
##
## DISPLAY
# Display Type: <type>[-rotate][-narrow]
# auto: Auto-detect (7-seg LED, LCD, OLED)
# lcd-CCxRR: CCxRR backlit LCD with I2C backpack (16<=CC<=40, 02<=RR<=04)
# oled-128xNN: 128xNN I2C OLED (NN = 32 | 64)
# -rotate: OLED view is rotated 180 degrees
# -narrow[er]: OLED view is restricted to Gotek display cutout
# (-narrow: 18 chars; -narrower: 16 chars)
# -ztech: ZHONGJY_TECH 2.23" 128x32 SSD1305 OLED display
# Values: auto | lcd-CCxRR | oled-128xNN[-rotate][-narrow[er]][-ztech]
display-type = auto
# OLED Font. Narrow and wide options.
# Narrower 6x13 font permits:
# - More characters per row
# - Use of Gotek display cutout (eg. "display-type=oled-128x32-narrow")
# Values: 6x13 | 8x16
oled-font = 6x13
# OLED contrast/brightness.
# Values: 0 <= N <= 255
oled-contrast = 143
# Text height and arrangement on LCD/OLED
# 'default', or a comma-separated list (one entry per LCD/OLED row, top down).
# Each list item is a digit plus optional height specifier: <content-row>[d]
# content-row: '0-3' = specified content row, '7' = blank
# 0: Current image name
# 1: Status
# 2: Image/Volume info
# 3: Current subfolder name
# height specifier: 'd' = double height (32px, OLED only; ignored for LCD)
# 'default' depends on display, eg.: oled-128x32='0,1' ; oled-128x64='3,0d,1'
# Values: [0-7][d] | default
display-order = default
# Turn an LCD or OLED display off after N seconds of inactivity
# N=0: always off; N=255: always on
# Values: 0 <= N <= 255
display-off-secs = 255
# Switch on LCD/OLED display when there is drive activity?
# yes: Trigger on track changes and disk writes
# sel: Trigger on drive select
# no: No automatic trigger
# Values: yes | sel | no
display-on-activity = yes
# LCD/OLED long filename scroll rate in milliseconds per update
# Values: 100 <= N <= 65535
display-scroll-rate = 200
# LCD/OLED pause time at start/end of scroll, in milliseconds
# Zero means endless scroll
# Values: 0 <= N <= 65535
display-scroll-pause = 2000
# LCD/OLED long filename scroll rate during navigation (ms per update)
# Values: 0 <= N <= 65535
nav-scroll-rate = 80
# LCD/OLED long filename pause before scroll, during navigation (milliseconds)
# Values: 0 <= N <= 65535
nav-scroll-pause = 300
##
## MISCELLANEOUS
# Speaker volume for head STEP
# Values: 0 <= N <= 20
step-volume = 10
# Report the specified version number to host software
# Values: <quoted-string> ("" means report real version)
# eg. da-report-version = "v3.0.0.0"
da-report-version = ""
# Automatically extend certain types of truncated image file (SSD,DSD,TRD)?
# Values: yes | no
extend-image = yes
 
To make a blank RX33 disk in RT-11:
-On the USB I copied disk0011.img and renamed it blankrx33.img
-I booted into RT-11 on the PDP-11 and using the rotary knob on the gotek selected the blankrx33.img
[Assuming your floppy drive is assigned to DU1]
FORMAT DU1:
YES
INIT DU1:
YES

Then to confirm it did indeed work:
DIR DU1:

should return a blank directory structure that you can interact with as if it were a real floppy


I hope this is helpful. Let me know if you have any questions.
 
I’ve been using this a bit I’ve the last few weeks. One of the things I noticed is that the rqdx3 does not seem to perform a true blanking format in RT-11 When using the format command.

I am having some trouble with some legacy software that backs up its logs to a floppy, verifies the backup, then empties the log file. If the verification doesn’t pass, it doesn’t empty the log file. The log file in RT-11 appears to be an LD mounted DAT file of a rx02 size floppy(that was later upgraded to an rx33 drive) with binary data.

i kept getting verification errors when trying to copy. After formatting images and looking at them in notepad++ you can see there is still tons of old data in them.

I did find that PUTR can generate a true blank fresh image file Using the format command with /rx33. It generated a 1200 byte file that just had nulls in it.

For anyone stuck, PUTR is 32bit only and would not run on a modern OS. I had to use a virtualbox with a windows xp image.
 
I’m trying to get a Gotek (FlashFloppy) going in a PDP-11/23+ BA-23 case to replace an RX-50. Would appreciate info on how your jumpers are set.
I can see the images on the Gotek but get “Disk Not Ready” error.
 
Back
Top