Semi-Virtual Diskette (SVD)

 SVD Information 

Home & Intro


Supported Hardware


 How To Use
The SVD 

Overview &
Getting Started

Building an SVD

PC Software

Machine Specific


(Frequently Asked


 Ordering & Links 

Order the SVD

Guestbook &


For Info:

PC Software  -  PC Software Source   -  Building Manual   -  Firmware   -  Schematic & PCB   -  Parts list

Download PC Software

Version 2.3 of the Helper Tools


This is a partial update of the Version 2.2 distribution that adds Apple formats to the "Save Image" dialog within the Control Program. This update is only necessary for those of you who want to save Apple images in NIB, DO, or PO formats.

THIS IS NOT A COMPLETE VERSION OF THE SVD INTERFACE! Please download Version 2.2 before installing this update.

To use this update, download the file into the target directory that you originally extracted Version 2.2 and extract the files. It will replace the two helper programs tosvd and fstool.

Version 2.2 (latest and greatest)

This version includes Apple ][ support and supports Firmware v2.3. See here for information on this release.

Version 2.0 (previous release)

This was a major release of the SVD Control Program that included the ability to support writing to the virtual disk. See here for information on this release.

SVD CP GUI Software Source Code

The SVD CP is written in TCL/TK and includes the use of the IWidgets library. Further, the ActiveState TCL Development Kit was used to develope the application and package it up in an easy-to-use fashion. It is a nice product.

Note, however, that it is a LICENSED product and I am unable to distribute it here. For that reason, I didn't include the Makefile that generates the distributable file.

However, you should be easily able to simply type "wish SVD-Control.tcl" to get the thing running. For this to work, the following needs to be available:

  • All of the tcl files need to be in the same folder/directory
  • The helper applications "fstool" and "tosvd" need to be available.
  • The OS files need to be available (this includes the machine bitmaps)

The easiest way to make sure that all of these things are available is to first download one of the existing versions of the SVD CP, and install this source in that same directory. Then just run "wish SVD-Contrl.tcl" instead of just "SVD".

SVD CP Helper Application Software Source Code

There is a LOT of work represented by this source code, and I haven't yet taken the time to document it fully. If some kind soul out there wants to being helping with the creation of SVD utilities, I'd be happy to start documenting it. Until that time, I'm probably going to blissfully ignore the fact that it should be documented.

Having said that...

This is the source code to the helper applications fstool, tosvd, and fquery. The first two are the most important. These three are written in C, and have been compiled under Linux and Cygwin under windows.

Downloading SVD Building Instructions

When you order the SVD in "kit" form, it comes with an assembly manual.

You can also download the manual in a few forms:

Standard US Letter Size - SVD-Instructions.pdf   (4,163 kB)
"Booklet" on US Letter Size - SVD-Booklet-Front.pdf   (589 kB)
SVD-Booklet-Back.pdf   (3,424 kB)

Special note for the "Booklet" format - there are two files for this format: "front" and "back". These were produced for an inkjet printer, so the order of the pages are set to making printing on an inkjet easy. The order of the pages for the "front" file is: page 1, 2 , 3, 4, 5. The order of the pages for the "back" file is: 5, 4, 3, 2, 1. So when using an inkjet, print the front, then just take the pages from the output tray and put them back in the input tray.

The Microsoft Word format is available too. But it is so big (22 MB) we don't post it here normally because it takes up so darn much disk space. If you would like a copy of the Word document, please contact us.

Firmware Download

The SVD is implemented using a PIC 16C65B. You can download the firmware here: PIC v2.3 firmware   (70 kB).

Firmware Files

There are 5 types of files in the firmware zip file as follows:
vd.mcpThe MicroChip IDE project file. You need to download the IDE to work with this file, though it isn't completely necessary if you have a compatible assembler. Note, however, that one include file "" (in vd.h) isn't included in this distribution as it is part of the MicroChip IDE.
linker.lkrDefinitions of the sections and code pages when assembling the code for the PIC. Pretty standard stuff. Originally a copy of one of the PIC linker files.
*.asmall files ending with .asm - These are the main code files for the SVD firmware. Note, however, that much of the code doesn't reside in these files. Instead, many include .mac or "macro" files. Normally macro files are used when macros are used repeatedly throughout the code.
*.hall files ending with .h - These files define basic parameters (like memory locations) and also define functions that will be called from other files.
*.macall files ending with .mac - These files have normal "code" but are defined as macros which are included throughout the .asm files. Often these macros are used repeatedly throughout the code. Though in some cases the macro was defined in preparation for repeated use, but may only be used once.

Firmware Notes

OverviewThe firmware has two basic jobs: communication with the PC over the serial port, and pretending to be a floppy drive to the vintage computer. PC communication is accomplished through the PIC serial communication hardware, and is interrupt driven. Floppy emulation operations are not interrupt driven.

Floppy emulation is sector driven. Each sector has a leading byte that dispatches to a routine that generates data in the format indicated for that sector. The one exception to this rule is the Apple NIB format which generates an entire track depending upon the format indicated for the first sector.

Code CommentsYou will notice that within critical sections of the code the comments at the end of the line of code often has a number (positive or negative) within parenthesis after the semi-colon but before the actual comment. This number is a reminder of the instruction cycle count remaining (or until) the next pulse is scheduled to be generated. In most cases, the pulse/data cells are separated by 20 instruction cycles (4 us per cell). You should be able to see that "0" is reached when a pulse is generated.
MacrosMacros are liberally used throughout the code. Some of the more interesting and heavily used are:
Raise/LowerWhen this project started, I didn't know what polarity the signals would end-up being - positive or negative logic. In portdef.h you will see that the signals can be easily defined with either positive or negative logic and that Raise and Lower cause the signal to go high or low in concert with the type of logic used. You will also notice that each signal ended up with negative logic...making this set of macros superfluous.
WaitXXWhere "XX" is one or two numerical digits. This macro is used EVERYWHERE, and causes a "wait" for the given number of instruction cycles. However, the wait will execute a HeadCheck (see below) as many times as possible while waiting. Note that different wait's are called depending upon which code page we are operating in.
HeadCheckChecks to see if a head move is being requested by the driving vintage computer. The head move line is sampled, and if a head move is being requested, the code dispatches to the movement routine. When head movement occurs, all bets are off regarding the timing for the pulses...which is OK. As with WaitXX different HeadChecks are called depending upon the code page.
Code PagesThe code uses 2 pages of instruction memory on the PIC. It is split fairly evenly between the two, and great care is taken to make sure that the right calls are done in the right pages. Things do flip back and forth in the code as necessary.
Memory InterfaceAs you can see in the schematic, the lower 8 bits of memory are driven by a counter as opposed to the PIC. The PIC simply pulses the memory increment line to bump the lower 8 bits of the address. The upper bits of the address are separated into a hi-block and low-block address. Critical sections of the code assume that the low-block address can simply be incremented - the address will not roll-over requiring the hi-block address to be incremented. This behavior is ensured by picking the appropriate starting addresses for the blocks as well as accounting for appropriate increments and decrements when moving from track to track.
Serial ProtocolThe serial.asm code implements a serial protocol for communicating with the PC. Details on this protocol can be found here.
Sector SizeNote that the code plans for different sector sizes. No sizes other than 256 are implemented currently.

PCB Source Files

Eagle Source Files

Version 2.0 - Schematic File   (212 kB)
Version 2.0 - PCB (board)   (91 kB)

Version 2.0 - Printable Schematic   (813 kB)
Version 2.0 - PCB Parts Layout   (281 kB)

PCB Manufacturing Files (Gerbers)

Version 2.0 - Zip of all Gerbers   (57 kB)

Parts List

For more information on the parts, including placement and pretty pictures, please see the assembly instructions.
IC1 & IC2  TC551001CP  128k x 8 static RAM  or any compatible SRAM
IC3  MAX232  RS232 serial interface  
IC4  74LS33  Quad OC NOR  
IC5  74LS393  Dual 4-bit counter  
IC6  7805  5-volt voltage regulator  
IC7  75452  OC Line driver  mistakenly labeled as 75453 in schematic
IC8  PIC16C65b  MicroChip PIC processor  can use the 16C74b as well
IC9  74LS00  Quad 2-input nand  
R1-R2, R9  10k ohm resistor  pull-ups  
R3-R7  470 ohm resistor  LED drivers  
R8,R10,R11  1k ohm resistor  drive-select pull-ups  
C1-C4  10 uF electrolytic cap  MAX232 caps  
C5-C6  47 uF electrolytic cap  power supply caps  
C7  1 uF cap  noise filter cap  
LEDs (x5)  Minature LEDs    I used 3 green and 2 yellow
QG1  20 MHz Oscillator    
SV1  34-pin box header    
X1  9-pin sub-D  female RS232 connector  
JP3 & JP2  2-circuit pin header    
- (2)  2-circuit connector    
-  SPST Toggle  power switch  
-  SPST Momentary Pushbutton  reset switch  
-  Power Jack  2.5mm  
case  Serpac 151    can use the 251 also