Compare commits

...

86 Commits

Author SHA1 Message Date
David Kuder
8012d85d23 CHS Settings 2023-05-29 19:51:19 -04:00
David Kuder
a09d5dbf13 Update scsibus.ino 2023-05-13 03:01:20 -04:00
David Kuder
d420244da9 RAW disk support and LittleFS support 2023-05-13 02:49:13 -04:00
David Kuder
c5c4c51667
preAllocate fail
preAllocate has angered the TrackZero and must be punished, out with preAllocate, in with writing zeros 512 bytes at a time.
2022-10-14 22:40:33 -04:00
David Kuder
bc114096ac
Update README.md 2022-09-16 12:43:09 -04:00
David Kuder
41455971d4 Update GreenSCSI Manual.pdf 2022-06-12 01:44:36 -04:00
David Kuder
1205f4ad6e Schematic for MVP 2022-06-11 23:29:39 -04:00
David Kuder
382052a5a0 MVP Edition Hardware
Minimum Viable Product schematic, PCB layout & Gerbers.
2022-06-11 23:09:38 -04:00
David Kuder
1714acb3a2 Merge branch 'main' of https://github.com/dkgrizzly/GreenSCSI 2022-06-11 23:06:51 -04:00
David Kuder
8d84bc8ece 3D Printed Case 2022-06-11 23:06:47 -04:00
David Kuder
0abf96bd82
Update README.md 2022-06-11 15:32:06 -04:00
David Kuder
4ab58d0fff
Reference Manual First Draft 2022-06-11 15:31:30 -04:00
David Kuder
3429bab34b Send Diagnostic, Prefetch and Sync Cache stubs 2022-06-11 11:13:45 -04:00
David Kuder
7d1227a193 Rigid Geometry & Format Parameters
Updates from upstream
2022-06-11 11:12:43 -04:00
David Kuder
b8bdb3fe37 Verify10 command 2022-06-11 11:10:50 -04:00
David Kuder
7c51723a2b Import checkBlockCommand from upstream 2022-06-11 11:10:16 -04:00
David Kuder
4f4a9b1a33 Flexible Disk support 2022-06-11 11:09:01 -04:00
David Kuder
b8580bd4e6 Verify Data Phase
Verify stub
2022-06-11 11:07:37 -04:00
David Kuder
cb123509d2 Tape Fixes
Fixing various tape commands
2022-06-11 11:06:20 -04:00
David Kuder
2f14c0fed2 Constant consistency
Cleaning up "Magic Values" and replacing them with defined constants.
misc fixes.
2022-06-11 11:05:47 -04:00
David Kuder
968f3336af Control channel framework
Building the framework for communicating with the GreenSCSI command line over the SCSI bus.
2022-06-11 10:59:23 -04:00
David Kuder
5aeb32e928 File allocation fix
mkimg would create files 1/1048576 in size compared to the request.
2022-06-11 10:56:21 -04:00
David Kuder
cf468bcbde Debug Logging Toggle
Debug Logging disabled by default, On/Off toggle with setvar debug 1/0
2022-06-11 10:54:54 -04:00
David Kuder
0c04852ad8 Command shell updates and quirks modes 2021-12-11 16:59:32 -05:00
David Kuder
178cffa658 Speed improvements 2021-11-30 00:12:32 -05:00
David Kuder
494a803890 Configuration CLI, performance tweaks, stability improvements, tested on GreenSCSI v1.0 Minimum Viable Product (MVP) PCB 2021-11-29 22:43:26 -05:00
David Kuder
c2bac1a9d0 This commit is seemingly stable with transfer speeds around 1.5MB/s - 1.6MB/s, equal to speeds obtained
from TinySCSIEmu with the NCR5380 PHY. Successfully booted OpenVMS and Digital UNIX on an DEC Alpha 3000/300.

+ Interrupt-driven SCSI Data bus for Read & Write block routines
+ Low-Level Hardware register access for GPIO manipulation
+ Initial Optical Drive Emulation ported from TinySCSIEmu
+ Additional Mode Sense / Mode Select work to enable booting OpenVMS and Digital UNIX from CD or HD
+ Per-ID Inquiry Response editing via [CH]Dxx_xxx.cfg files instead of SCSI_CONFIG.TXT (same format)
+ Images should now be named CDxx_xxx.img or HDxx_xxx.img instead of HDxx_xxx.hda
2021-11-22 17:33:52 -05:00
David Kuder
f4bb40a094
Update README.md 2021-11-19 03:41:57 -05:00
David Kuder
f980aa6f91
Add files via upload 2021-11-19 02:39:23 -06:00
David Kuder
e880015516
Update LICENSE 2021-11-19 03:38:46 -05:00
David Kuder
7ec0ad2a66
Update and rename README.adoc to README.md 2021-11-19 03:38:04 -05:00
David Kuder
8f44ace571
Update and rename BlueSCSI.cpp to GreenSCSI.ino
LUN Enhancement, Teensy 3.5 changes.
2021-11-19 03:37:27 -05:00
David Kuder
42f7375caf
Delete platformio.ini 2021-11-19 02:55:33 -05:00
David Kuder
ed3ad3c281
Delete .gitignore 2021-11-19 02:55:16 -05:00
David Kuder
92c17b12ca
Delete lib directory 2021-11-19 02:55:08 -05:00
David Kuder
178cc1561c
Delete test directory 2021-11-19 02:54:59 -05:00
David Kuder
a17a216c43
Delete include directory 2021-11-19 02:54:53 -05:00
David Kuder
89b619efb0
Delete .vscode directory 2021-11-19 02:54:41 -05:00
David Kuder
3a2f8ec660
Delete .github directory 2021-11-19 02:54:34 -05:00
David Kuder
b4d1654b32
Delete 3D-Files directory 2021-11-19 02:54:12 -05:00
David Kuder
d5a6ac0b9c
Delete docs directory 2021-11-19 02:54:01 -05:00
David Kuder
12743b6fb8
Delete ArdSCSinoV2.png 2021-11-19 02:53:34 -05:00
David Kuder
809421e2f2
Delete hw directory 2021-11-19 02:52:34 -05:00
David Kuder
b3a250bb8a
Update README.adoc 2021-11-19 02:49:46 -05:00
David Kuder
1b0fff73e9
Update README.adoc 2021-11-19 02:49:10 -05:00
Eric Helgeson
979448853d
Merge pull request #51 from TomRBarber/patch-1
Update assembly.md
2021-10-08 20:04:42 -05:00
TomRBarber
302c98a267
Update assembly.md
fided typo
2021-10-08 20:51:46 -04:00
Eric Helgeson
b54ecdee72 Quick fix for handling default ids 2021-08-13 10:53:05 -05:00
Eric Helgeson
c52cc33bb4 Fix whitespace 2021-07-08 21:47:55 -05:00
Eric Helgeson
c709fa35d9 Allow for easier use of files - Just define what you know.
HD == hard drive - min file name req.
* Defaults to SCSI ID 0, LUN 0, 512 block size.
HD1 == SCSI ID 1, LUN 0, 512
HD11 == SCSI ID 1, LUN 1, 512
HD11_1024 == SCSI ID 1, LUN 1, 1024
HD System 7.0.1 Apps.dsk == ID 0, LUN 0, 512
* suffix no longer required
2021-07-08 21:45:11 -05:00
Eric Helgeson
09a79fccae Truncate log file on open 2021-07-08 10:03:07 -05:00
Eric Helgeson
698f73c88b Allow for debug on USB serial or log file 2021-07-08 09:59:50 -05:00
Troy
8b30041f41 Fixed some quotes I screwed up 2021-07-08 09:46:55 -05:00
Troy
dd06c9f214 Sd card info is display in log now 2021-07-08 09:43:29 -05:00
androda
fe77bd5a2f PA0 is External LED
Always set both, no performance decrease in my testing
2021-07-08 09:37:48 -05:00
Eric Helgeson
6652cba50a Set version to snapshot 2021-07-08 09:36:47 -05:00
Eric Helgeson
dbcd23f985
Update assembly.md 2021-06-23 13:26:25 -05:00
Eric Helgeson
45f58fa9ae bluescsi-1.0-c-FINAL.zip 2021-06-22 12:14:31 -05:00
Eric Helgeson
4759218ae8 update text 2021-06-22 12:14:20 -05:00
Eric Helgeson
349161b13f Put reference to licesne under gerber dir too 2021-06-15 16:22:19 -05:00
Eric Helgeson
f59fedd682 Move old revs to old folder 2021-06-15 16:20:28 -05:00
Eric Helgeson
054637bd6a Revert "Use gpio_read to toggle led state, saves 24 bytes of flash."
This reverts commit 83f040dc40.
2021-06-14 18:25:34 -05:00
Eric Helgeson
3b83116368 Clarify in root file that hw folder is licensed separately 2021-06-14 14:41:37 -05:00
Eric Helgeson
bb3e26bd23 Move usage to wiki 2021-06-13 10:14:42 -05:00
Eric Helgeson
8711299b8f Move troubleshooting to wiki 2021-06-13 09:59:09 -05:00
Eric Helgeson
4c4d0146c5 Move perf to wiki 2021-06-13 09:58:49 -05:00
Eric Helgeson
2cdbd10dcf
Merge pull request #22 from xunker/optimize-led-blink-on-error
Use `gpio_read` to toggle led state, saves 24 bytes of flash.
2021-06-01 11:52:04 -05:00
Eric Helgeson
17558b5260 Added more tested models and performance comparison 2021-05-14 08:02:07 -05:00
Eric Helgeson
ba78e9b06c Move troubleshooting to readme 2021-05-14 07:54:24 -05:00
Eric Helgeson
c0b323cbea Just ignore id as it's not important 2021-05-14 07:54:24 -05:00
Eric Helgeson
5a5716decc
Merge pull request #27 from xunker/use-github-actions-to-check-code
Add Github Action workflow that ensures the project compiles
2021-05-06 21:03:19 -05:00
Matthew Nielsen
43f5b9b704 Add basic Action workflow that builds the project for all devices listed in platformio.ini 2021-05-06 19:22:54 -06:00
Eric Helgeson
660ca705d2
Add a note on adding headers for users to consider 2021-05-06 15:38:10 -05:00
Eric Helgeson
15f941e0aa Fix var name when *_SPEED_OPTIMIZE is off 2021-05-06 11:50:32 -05:00
Matthew Nielsen
83f040dc40 Use gpio_read to toggle led state, saves 24 bytes of flash. 2021-05-03 17:09:57 -06:00
Eric Helgeson
65cc6244a3
Remove link to taylor as it was confusing for new users. 2021-05-03 13:30:06 -05:00
Eric Helgeson
a8fe1b31af
Fix link 2021-04-29 10:31:28 -05:00
Eric Helgeson
f024ba79a9
Update link 2021-04-22 22:07:58 -05:00
Eric Helgeson
671590dd95 Add non-editable mouser project 2021-04-20 10:54:50 -05:00
Eric Helgeson
e2522d0506 Remove mouser carts for now as it appears anyone can edit them. 2021-04-18 09:34:29 -05:00
Eric Helgeson
7c4a1b3c9f Fix setting syncperiod 2021-04-16 11:08:47 -05:00
Eric Helgeson
ec22ecd777
Add videos for assembly 2021-04-11 16:09:44 -05:00
Eric Helgeson
0e691b76d0 docs/build-your-own.adoc 2021-04-11 12:14:13 -05:00
Eric Helgeson
e093dc8c9c Adding gitignore for kicad (thanks moof!)
via https://github.com/github/gitignore/blob/master/KiCad.gitignore
2021-04-11 11:52:49 -05:00
Eric Helgeson
f7aa848a62 Remove folders, keep zips 2021-04-11 11:46:42 -05:00
Stephen Arsenault
44a4d89add Adding video tutorial for STLink programming 2021-04-11 11:43:22 -05:00
97 changed files with 17327 additions and 38505 deletions

3
.gitignore vendored
View File

@ -1,3 +0,0 @@
.pio
.DS_Store
.vscode/

View File

@ -1,7 +0,0 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

Binary file not shown.

View File

@ -1,12 +0,0 @@
# Mounts
## `BlueSCSI-1.0-b_V2.stl` - Current
* Added more support on the side holes
* Adjusted so 50pin headers dont hit standoff
## `BlueSCSI-1.0-b.stl`
An internal mount for the BlueSCSI 1.0-b. Provides side and bottom mounts.
BlueSCSI 3D files © 2021 by Eric Helgeson is licensed under Attribution-NonCommercial 4.0 International

Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 KiB

BIN
GreenSCSI Manual.pdf Normal file

Binary file not shown.

BIN
GreenSCSI-DeadBug.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

View File

@ -39,4 +39,4 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.

View File

@ -1,199 +0,0 @@
# BlueSCSI
:toc: macro
BlueSCSI & ArdSCSino are hardware that reproduces SCSI devices (hard disks) with an Arduino STM32F103C (aka Blue Pill.)
`BlueSCSI` created by https://github.com/erichelgeson[erichelgeson] is a fork of `ArdSCSino-stm32` which adds:
* Usability Improvements
* Mac specific functionality
* Enable/Disable Passive SCSI termination
* An alternative power source if not able to be powered by the SCSI bus
* Documentation
* Open Hardware (KiCad & Grebers)
`ArdSCSino-stm32` created by https://github.com/ztto/ArdSCSino-stm32[ztto] is the STM32 version of `ArdSCSino`
`ArdSCSino` created by https://twitter.com/h_koma2[Tambo (TNB Seisakusho)]
image::docs/buynow.png[link=https://gum.co/bluescsi-1b, 150]
image::docs/discordbanner.png[https://discord.gg/GKcvtgU7P9, 150]
Join us in #bluescsi on https://discord.gg/GKcvtgU7P9[Discord] or open an issue on this repo.
toc::[]
## Compatibility
If your computer is not listed below - it may be compatible but there is no guarantee it will work. This device is designed and tested to work with pre-PowerPC Macs.
### Compatible
#### Tested by Me
SE, SE/30, Classic, Classic II, Mac II's, Color Classic, LC I/II/III, LC 475, LC 575
#### Partially Compatible
Mac Plus (1.0-c and above) - Only System 7 currenty works.
PowerPC - Some have had luck booting but is not recommended.
#### Reported by others
https://68kmla.org/forums/topic/61045-arduino-scsi-device-work-in-progress/?do=findComment&comment=663077[IIcx], https://68kmla.org/forums/topic/61045-arduino-scsi-device-work-in-progress/?do=findComment&comment=664446[PowerBook 100 (with custom adapter)]
## Performance
Tested on a Color Classic with https://macintoshgarden.org/apps/scsi-director-pro-40[SCSI Director Pro 4]
```
1024KB/Sec Write
900KB/Sec Read
1.01ms Seek
```
## Assembly
++++
See <a href="docs/assembly.md">docs/assembly.md</a>
++++
## Usage
Hard Disk image files are placed in the root directory of a `ExFat` or `FAT32` formatted SD card. https://twitter.com/theory_retro/status/1376571371694723076[`ExFat` may be much faster]. Use a premade or blank disk below. These images are compatible with the RaSCSI device and Basilisk II emulator.
The naming convention is as follows (file name max 32 characters). Note you may mount multiple drives at a time to different SCSI ID's.
`HDxy_512.hda`
```
HD - Hard Disk
x - SCSI ID to attach to. 0-7 (though 7 on a Macintosh is the System)
y - LUN id usually 0.
512 - Sector size. Usually 512. 256, 512, & 1024 supported.
```
### Examples
`HD10_512.hda` - Hard Disk at SCSI ID 1, LUN 0, sector size of 512.
`HD51_512 System 6.0.8L LC.hda` - Hard Disk at SCSI ID 5, LUN 1, sector size of 512. Text between block size and .hda is ignored.
#### Bad
`HD99_712 foo bar fizz buzz bang.hda` Over 32 chars and invalid SCSI/LUN/Block size
If no image files are found PC13 will pulse on and off. Check the LOG.txt on the root of the SD card for any errors.
### Premade Images
Premade images are handy to just drop onto your SD card and go. You can use an emulator such as https://www.emaculation.com/doku.php/basiliskii_osx_setup[Basilisk II] on your modern machine to get software from places like the https://macintoshgarden.com[Macintosh Garden] to your vintage mac.
* Premade from savagetaylor.com (Use images from the "Drive" section) - https://www.savagetaylor.com/downloads/downloads-macintosh/
* Premade from RaSCSI work as well - http://macintoshgarden.org/apps/rascsi-68kmla-edition
### Blanks
These are blank, formatted drives. If you want to install an OS or software on an empty drive, use one of these.
* Preformatted HFS blank images in various sizes - https://github.com/erichelgeson/BlueSCSI/tree/main/docs/MacHD.zip
### Custom Disk Images (Advanced)
This technique is useful when you would like a disk image larger than the pre-built images in the previous section.
The following instructions demonstrates the process using https://ss64.com/osx/dd.html[dd] on a modern Mac:
1. Open terminal.
2. The following command will create a blank disk image. You can modify the command to suit your use.
* `dd if=/dev/zero of=example.hda bs=1m count=500`
* The `count` field defines the number of megabytes (`bs=1m`) the total disk image should be.
* The output file from the command is "example.hda". This can be changed in the `of=example.hda` field.
3. Place the new blank disk image in the root directory of your SD card.
4. If you do not already have a tool to format SCSI drives, https://macintoshgarden.org/apps/lido-756[download LIDO]. You can use an emulator such as https://www.emaculation.com/doku.php/basiliskii_osx_setup[Basilisk II] to move files to the image to prepare your installation.
5. After booting into your target machine with the working Mac OS disk image on your BlueSCSI from step 3, format the blank disk.
### Termination
To enable termination place the two jumpers on the TERM block. Termination should be enabled if it is the last device in the SCSI chain, otherwise remove the jumpers if it is not.
## Troubleshooting
### Check Log Files
If your device is not working - check the `LOG.txt` in the root of the SD card.
### Performance is slower than expected
Use ExFat instead of FAT32
Try a different SD card. Cheap/old SD cards can affect performance.
### Version Specific
<<docs/troubleshooting-1.0-b.adoc,Version 1.0-b>>
<<docs/troubleshooting-1.0-c.adoc,Version 1.0-c>>
## Hardware Versions
### 1.1-a (in testing)
* Other SCSI connection types
* More silk screen art
### 1.0-c (Latest)
* Fixed issue with diode footprint being too small
* Fixed issue with external power and `TERMPOWER`
### 1.0-b
First release
## Development (Advanced)
Below is for users who wish to edit or develop on the BluePill - normal users should not need to worry about this.
### Setup PlatformIO IDE
Open the project in https://platformio.org/platformio-ide[PlatformIO IDE] and everything is pre-configured.
## Flashing
When flashing you have two options:
Flash by setting up the IDE and re-compiling and programming. If you are a developer and plan to contribute this method is what you should use.
You may also flash the `.bin` file directly from https://www.st.com/en/development-tools/stm32cubeprog.html[STM32CubeProgrammer]. Use this method if you are not a developer and just wish to get the code to the BluePill.
### Using STLink v2 (prefered)
1. Remove SD Card
2. Make sure the STLink is up to date - https://www.st.com/en/development-tools/stsw-link007.html[Latest Firmware]
3. Connect pins `SWDIO`(2), `GND`(4), `SWCLK`(6), and `3.3v`(8) from the programmer to the Blue Pill. NOTE: These are not the same as Serial ports.
4. Run the https://docs.platformio.org/en/latest/integration/ide/vscode.html#project-tasks[PlatformIO: Upload] task.
5. You should see the LED `PC_13` flashing indicating no SD Card detected.
6. Insert SD Card, boot on your favorite Mac!
#### Trouble Shooting
If the device is not detected you may need to hold reset, click program, once it is detected release reset.
If you are unable to get the device in DFU mode for programming you may need to use https://www.st.com/en/development-tools/stm32cubeprog.html[STM32CubeProgrammer] to erase the chip.
### Alterantive upload methods
See the https://docs.platformio.org/en/latest/boards/ststm32/bluepill_f103c8.html#uploading[uploading] documentation on PlatformIO for alterantives.
### Using USB HID
Note: I have not been able to get this method to work. Please contribute to this document if you do.
## Notes
### Making Gerbers for JLCPCB
https://support.jlcpcb.com/article/44-how-to-export-kicad-pcb-to-gerber-files
BlueSCSI(TM) - Eric Helgeson - All rights reserved.

16
README.md Normal file
View File

@ -0,0 +1,16 @@
# GreenSCSI
![DeadBug assembly of a Teensy 3.5 directly on a 50 pin SCSI header!](/GreenSCSI-DeadBug.jpg "GreenSCSI Teensy 3.5 Dead Bug")
GreenSCSI, BlueSCSI & ArdSCSino are hardware that reproduce SCSI devices (hard disks) with Arduino like devices.
`GreenSCSI` created by https://github.com/dkgrizzly [dkgrizzly] is a fork of `BlueSCSI` which adds:
* Teensy 3.5 (Kinetis K64...) support
* Better LUN handling
`BlueSCSI` created by https://github.com/erichelgeson [erichelgeson] is a fork of `ArdSCSino-stm32`
`ArdSCSino-stm32` created by https://github.com/ztto/ArdSCSino-stm32 [ztto] is the STM32 version of `ArdSCSino`
`ArdSCSino` created by https://twitter.com/h_koma2 [Tambo (TNB Seisakusho)]

4202
case/GreenSCSI-bottom.stl Normal file

File diff suppressed because it is too large Load Diff

1402
case/GreenSCSI-top.stl Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
# BlueSCSI 1.0-b to 1.0-c
:toc: macro
## Introduction
1.0-c was a small change to fix an issue with machines that provide low or no `TERMPOWER` over the SCSI bus. If you recived a Fully Assembled BlueSCSI after April 1st, 2021 then this was done for you. If you have a kit labled 1.0-b you can make these modifications to become a 1.0-c.
## Steps
### Disconnect `TERMPOWER` from 220 Pull Up Jupmer
Use a cutting tool to cut the small trace between the `TERMPOWR` and 220 Pull Up Jumper pictured below.
Make sure continiutiy from `TERMPOWER` to the diode still flows correctly but is disconnected from the jumper.
image::images/1.0-b-bodge-1.jpg[]
### Connect 5V to 220 Pull Up Jupmer
Now we will provide pull up from the 5v provided by the BluePill.
image::images/1.0-b-bodge-2.png[]
### Complete!
Thats it! 5v to the Pull Up resistors will now work when powered externally.

Binary file not shown.

View File

@ -1 +0,0 @@
BlueSCSI Documentation © 2021 by Eric Helgeson is licensed under Attribution-NonCommercial 4.0 International

View File

@ -1,54 +0,0 @@
# Assembly
## Before you start
Read through all instructions before starting.
## Building
1. Solder on the surface mount SD Card holder. Use the [Drag Solder](https://youtu.be/Z_KL4fWOMug) technique.
- Once on, check continuity of all connections. Fixing this after the BluePill is on will be difficult.
- Ensure the SD card fits and you dont have too much solder on the sides or contacts
2. Solder the dioeds to the **bottom** of the board. Be sure they are flush as possible to the bottom.
![Diode Orientation](images/diodes.png)
3. Solder the header pins on to the BluePill. Then BluePill pill to the BlueSCSI PCB.
- Correct orientation is having the USB connector of the BluePill should be over the SD Card holder.
4. Solder on the resistor nets. Pin one is marked on the board and the resistors.
- 220 RNETS (`RN1` & `RN3`) are closest to the BluePill
- Note PIN one on each - they are opposite of eachtoher. See photo.
- 330 RNETS (`RN2` & `RN4`) are furthest from the BluePill
- Note PIN one on each - they are opposite of eachtoher. See photo.
![Orientation RNETs and BluePill](images/orientation.png)
5. Solder on the Termination Jumpers & place the jumpers on to enable Termiation
6. Solder the 50 Pin headers on.
1. Note Pin 1 and Box header on the silk screen.
7. Optional - Solder on the berg connector. Only needed if your machine does not supply enough power via the SCSI bus.
8. Optional - Solder on the debug headers near the SD card. Only nessissarry if re-programming.
### Fully Assembled
![Fully Assembled](images/assembled.png)
### Version 1.0-b BOM
STM32F103C8T6 (U1) aka BluePill board. Beware of fake/scams. Look for reviews. Amazon, ebay, etc.
Mouser Cart https://www.mouser.com/ProjectManager/ProjectDetail.aspx?State=EDIT&ProjectGUID=db967d46-a51a-4a0e-a350-8f503b2f02cf
* 2x 330 (RN2, RN4) Resistor nets https://www.mouser.com/ProductDetail/652-4610X-1LF-330
* 2x 220 (RN1, RN3) Resistor nets https://www.mouser.com/ProductDetail/652-4610X-1LF-220
* 2x Diodes https://www.mouser.com/ProductDetail/583-1N5818-T
* SD Card Holder (J1) https://www.mouser.com/ProductDetail/538-104031-0811
* Headers https://www.mouser.com/ProductDetail/872-920-0011-01
* 50 PIN SCSI header https://www.mouser.com/ProductDetail/517-30350-6002/
- May substitute with 2 rows of headers from above.
- **Note on Right angle connectors** - it appears Right angle headers are notched differently then the pin out. Be sure to note PIN 1/red stripe on the cable match up.
### Optional
Floppy/Berg Power header https://www.mouser.com/ProductDetail/571-1718254
- Required if your machine does not supply power via TERM POWER. For example a Mac Plus or Mac with a Analog/PSU board that has not been recapped.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 743 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 KiB

View File

@ -1,26 +0,0 @@
# Troubleshooting 1.0-b
:toc: macro
NOTE: If your BlueSCSI was shipped after April 3rd, 2021 please refer to the 1.0-c troubleshooting guide.
## Green LED Flashes on and off
This indicates BlueSCSI could not find any files on the SD card or communicate with the SD card.
Ensure your files are named properly (case sensitive) following the naming convetion in the readme.
If you recived a kit - verify all connections and that the outside of the SD holder is grounded.
## LOG.txt is empty
This indicates the BlueSCSI could communicate with the SD Card but found no files. Check your naming convention.
## Slow performance
Ensure you are using a good SD card. SD card quality can vary widely.
Format your card as ExFat - users have seen quite a jump in performance.
## (Kit Only) Verify you are not using a fake
https://github.com/keirf/Greaseweazle/wiki/STM32-Fakes[How to tell if your STM32 is fake]

View File

@ -1,24 +0,0 @@
# Troubleshooting 1.0-c
:toc: macro
## Review the LOG.txt
There should logs that indicate what BlueSCSI did at startup.
## Green LED Flashes on and off 3x
This indicates BlueSCSI could not find any files on the SD card or communicate with the SD card.
Ensure your files are named properly (case sensitive) following the naming convetion in the readme.
If you recived a kit - verify all connections and that the outside of the SD holder is grounded.
## Slow performance
Ensure you are using a good SD card. SD card quality can vary widely.
Format your card as ExFat - users have seen quite a jump in performance.
## (Kit Only) Verify you are not using a fake
https://github.com/keirf/Greaseweazle/wiki/STM32-Fakes[How to tell if your STM32 is fake]

View File

@ -0,0 +1,220 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Connector_Generic_Conn_01x02
#
DEF Connector_Generic_Conn_01x02 J 0 40 Y N 1 F N
F0 "J" 0 100 50 H V C CNN
F1 "Connector_Generic_Conn_01x02" 0 -200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 50 50 -150 1 1 10 f
X Pin_1 1 -200 0 150 R 50 50 1 1 P
X Pin_2 2 -200 -100 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_01x04
#
DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N
F0 "J" 0 200 50 H V C CNN
F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 150 50 -250 1 1 10 f
X Pin_1 1 -200 100 150 R 50 50 1 1 P
X Pin_2 2 -200 0 150 R 50 50 1 1 P
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
X Pin_4 4 -200 -200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_01x22
#
DEF Connector_Generic_Conn_01x22 J 0 40 Y N 1 F N
F0 "J" 0 1100 50 H V C CNN
F1 "Connector_Generic_Conn_01x22" 0 -1200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -1095 0 -1105 1 1 6 N
S -50 -995 0 -1005 1 1 6 N
S -50 -895 0 -905 1 1 6 N
S -50 -795 0 -805 1 1 6 N
S -50 -695 0 -705 1 1 6 N
S -50 -595 0 -605 1 1 6 N
S -50 -495 0 -505 1 1 6 N
S -50 -395 0 -405 1 1 6 N
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 305 0 295 1 1 6 N
S -50 405 0 395 1 1 6 N
S -50 505 0 495 1 1 6 N
S -50 605 0 595 1 1 6 N
S -50 705 0 695 1 1 6 N
S -50 805 0 795 1 1 6 N
S -50 905 0 895 1 1 6 N
S -50 1005 0 995 1 1 6 N
S -50 1050 50 -1150 1 1 10 f
X Pin_1 1 -200 1000 150 R 50 50 1 1 P
X Pin_10 10 -200 100 150 R 50 50 1 1 P
X Pin_11 11 -200 0 150 R 50 50 1 1 P
X Pin_12 12 -200 -100 150 R 50 50 1 1 P
X Pin_13 13 -200 -200 150 R 50 50 1 1 P
X Pin_14 14 -200 -300 150 R 50 50 1 1 P
X Pin_15 15 -200 -400 150 R 50 50 1 1 P
X Pin_16 16 -200 -500 150 R 50 50 1 1 P
X Pin_17 17 -200 -600 150 R 50 50 1 1 P
X Pin_18 18 -200 -700 150 R 50 50 1 1 P
X Pin_19 19 -200 -800 150 R 50 50 1 1 P
X Pin_2 2 -200 900 150 R 50 50 1 1 P
X Pin_20 20 -200 -900 150 R 50 50 1 1 P
X Pin_21 21 -200 -1000 150 R 50 50 1 1 P
X Pin_22 22 -200 -1100 150 R 50 50 1 1 P
X Pin_3 3 -200 800 150 R 50 50 1 1 P
X Pin_4 4 -200 700 150 R 50 50 1 1 P
X Pin_5 5 -200 600 150 R 50 50 1 1 P
X Pin_6 6 -200 500 150 R 50 50 1 1 P
X Pin_7 7 -200 400 150 R 50 50 1 1 P
X Pin_8 8 -200 300 150 R 50 50 1 1 P
X Pin_9 9 -200 200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_02x25_Odd_Even
#
DEF Connector_Generic_Conn_02x25_Odd_Even J 0 40 Y N 1 F N
F0 "J" 50 1300 50 H V C CNN
F1 "Connector_Generic_Conn_02x25_Odd_Even" 50 -1300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_2x??_*
$ENDFPLIST
DRAW
S -50 -1195 0 -1205 1 1 6 N
S -50 -1095 0 -1105 1 1 6 N
S -50 -995 0 -1005 1 1 6 N
S -50 -895 0 -905 1 1 6 N
S -50 -795 0 -805 1 1 6 N
S -50 -695 0 -705 1 1 6 N
S -50 -595 0 -605 1 1 6 N
S -50 -495 0 -505 1 1 6 N
S -50 -395 0 -405 1 1 6 N
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 305 0 295 1 1 6 N
S -50 405 0 395 1 1 6 N
S -50 505 0 495 1 1 6 N
S -50 605 0 595 1 1 6 N
S -50 705 0 695 1 1 6 N
S -50 805 0 795 1 1 6 N
S -50 905 0 895 1 1 6 N
S -50 1005 0 995 1 1 6 N
S -50 1105 0 1095 1 1 6 N
S -50 1205 0 1195 1 1 6 N
S -50 1250 150 -1250 1 1 10 f
S 150 -1195 100 -1205 1 1 6 N
S 150 -1095 100 -1105 1 1 6 N
S 150 -995 100 -1005 1 1 6 N
S 150 -895 100 -905 1 1 6 N
S 150 -795 100 -805 1 1 6 N
S 150 -695 100 -705 1 1 6 N
S 150 -595 100 -605 1 1 6 N
S 150 -495 100 -505 1 1 6 N
S 150 -395 100 -405 1 1 6 N
S 150 -295 100 -305 1 1 6 N
S 150 -195 100 -205 1 1 6 N
S 150 -95 100 -105 1 1 6 N
S 150 5 100 -5 1 1 6 N
S 150 105 100 95 1 1 6 N
S 150 205 100 195 1 1 6 N
S 150 305 100 295 1 1 6 N
S 150 405 100 395 1 1 6 N
S 150 505 100 495 1 1 6 N
S 150 605 100 595 1 1 6 N
S 150 705 100 695 1 1 6 N
S 150 805 100 795 1 1 6 N
S 150 905 100 895 1 1 6 N
S 150 1005 100 995 1 1 6 N
S 150 1105 100 1095 1 1 6 N
S 150 1205 100 1195 1 1 6 N
X Pin_1 1 -200 1200 150 R 50 50 1 1 P
X Pin_10 10 300 800 150 L 50 50 1 1 P
X Pin_11 11 -200 700 150 R 50 50 1 1 P
X Pin_12 12 300 700 150 L 50 50 1 1 P
X Pin_13 13 -200 600 150 R 50 50 1 1 P
X Pin_14 14 300 600 150 L 50 50 1 1 P
X Pin_15 15 -200 500 150 R 50 50 1 1 P
X Pin_16 16 300 500 150 L 50 50 1 1 P
X Pin_17 17 -200 400 150 R 50 50 1 1 P
X Pin_18 18 300 400 150 L 50 50 1 1 P
X Pin_19 19 -200 300 150 R 50 50 1 1 P
X Pin_2 2 300 1200 150 L 50 50 1 1 P
X Pin_20 20 300 300 150 L 50 50 1 1 P
X Pin_21 21 -200 200 150 R 50 50 1 1 P
X Pin_22 22 300 200 150 L 50 50 1 1 P
X Pin_23 23 -200 100 150 R 50 50 1 1 P
X Pin_24 24 300 100 150 L 50 50 1 1 P
X Pin_25 25 -200 0 150 R 50 50 1 1 P
X Pin_26 26 300 0 150 L 50 50 1 1 P
X Pin_27 27 -200 -100 150 R 50 50 1 1 P
X Pin_28 28 300 -100 150 L 50 50 1 1 P
X Pin_29 29 -200 -200 150 R 50 50 1 1 P
X Pin_3 3 -200 1100 150 R 50 50 1 1 P
X Pin_30 30 300 -200 150 L 50 50 1 1 P
X Pin_31 31 -200 -300 150 R 50 50 1 1 P
X Pin_32 32 300 -300 150 L 50 50 1 1 P
X Pin_33 33 -200 -400 150 R 50 50 1 1 P
X Pin_34 34 300 -400 150 L 50 50 1 1 P
X Pin_35 35 -200 -500 150 R 50 50 1 1 P
X Pin_36 36 300 -500 150 L 50 50 1 1 P
X Pin_37 37 -200 -600 150 R 50 50 1 1 P
X Pin_38 38 300 -600 150 L 50 50 1 1 P
X Pin_39 39 -200 -700 150 R 50 50 1 1 P
X Pin_4 4 300 1100 150 L 50 50 1 1 P
X Pin_40 40 300 -700 150 L 50 50 1 1 P
X Pin_41 41 -200 -800 150 R 50 50 1 1 P
X Pin_42 42 300 -800 150 L 50 50 1 1 P
X Pin_43 43 -200 -900 150 R 50 50 1 1 P
X Pin_44 44 300 -900 150 L 50 50 1 1 P
X Pin_45 45 -200 -1000 150 R 50 50 1 1 P
X Pin_46 46 300 -1000 150 L 50 50 1 1 P
X Pin_47 47 -200 -1100 150 R 50 50 1 1 P
X Pin_48 48 300 -1100 150 L 50 50 1 1 P
X Pin_49 49 -200 -1200 150 R 50 50 1 1 P
X Pin_5 5 -200 1000 150 R 50 50 1 1 P
X Pin_50 50 300 -1200 150 L 50 50 1 1 P
X Pin_6 6 300 1000 150 L 50 50 1 1 P
X Pin_7 7 -200 900 150 R 50 50 1 1 P
X Pin_8 8 300 900 150 L 50 50 1 1 P
X Pin_9 9 -200 800 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
#End Library

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,33 @@
update=22/05/2015 07:44:53
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[pcbnew]
version=1
LastNetListRead=
UseCmpFile=1
PadDrill=0.600000000000
PadDrillOvalY=0.600000000000
PadSizeH=1.500000000000
PadSizeV=1.500000000000
PcbTextSizeV=1.500000000000
PcbTextSizeH=1.500000000000
PcbTextThickness=0.300000000000
ModuleTextSizeV=1.000000000000
ModuleTextSizeH=1.000000000000
ModuleTextSizeThickness=0.150000000000
SolderMaskClearance=0.000000000000
SolderMaskMinWidth=0.000000000000
DrawSegmentWidth=0.200000000000
BoardOutlineThickness=0.100000000000
ModuleOutlineThickness=0.150000000000
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]

374
hardware/mvp/GreenSCSI.sch Normal file
View File

@ -0,0 +1,374 @@
EESchema Schematic File Version 4
EELAYER 30 0
EELAYER END
$Descr A4 11693 8268
encoding utf-8
Sheet 1 1
Title ""
Date ""
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
$Comp
L Connector_Generic:Conn_02x25_Odd_Even P4
U 1 1 61981AC2
P 2900 4150
F 0 "P4" H 2950 5567 50 0000 C CNN
F 1 "SCSI" H 2950 5476 50 0000 C CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_2x25_P2.54mm_Horizontal" H 2900 4150 50 0001 C CNN
F 3 "~" H 2900 4150 50 0001 C CNN
1 2900 4150
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x04 P3
U 1 1 6198359E
P 7950 4800
F 0 "P3" H 7950 5050 50 0000 C CNN
F 1 "Teensy" H 7950 4450 50 0000 C CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 7950 4800 50 0001 C CNN
F 3 "~" H 7950 4800 50 0001 C CNN
1 7950 4800
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x22 P1
U 1 1 61983D48
P 6700 4100
F 0 "P1" H 6700 5250 50 0000 C CNN
F 1 "Teensy" H 6700 2850 50 0000 C CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x22_P2.54mm_Vertical" H 6700 4100 50 0001 C CNN
F 3 "~" H 6700 4100 50 0001 C CNN
1 6700 4100
1 0 0 -1
$EndComp
$Comp
L Connector_Generic:Conn_01x22 P2
U 1 1 61984761
P 8250 4100
F 0 "P2" H 8250 5250 50 0000 C CNN
F 1 "Teensy" H 8250 2850 50 0000 C CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x22_P2.54mm_Vertical" H 8250 4100 50 0001 C CNN
F 3 "~" H 8250 4100 50 0001 C CNN
1 8250 4100
-1 0 0 -1
$EndComp
Wire Wire Line
2700 2950 2450 2950
Wire Wire Line
2450 2950 2450 3050
Wire Wire Line
2450 4050 2700 4050
Wire Wire Line
2700 4250 2450 4250
Wire Wire Line
2450 4250 2450 4350
Wire Wire Line
2450 5350 2700 5350
Wire Wire Line
2700 5250 2450 5250
Connection ~ 2450 5250
Wire Wire Line
2450 5250 2450 5350
Wire Wire Line
2700 5150 2450 5150
Connection ~ 2450 5150
Wire Wire Line
2450 5150 2450 5250
Wire Wire Line
2700 5050 2450 5050
Connection ~ 2450 5050
Wire Wire Line
2450 5050 2450 5150
Wire Wire Line
2700 4950 2450 4950
Connection ~ 2450 4950
Wire Wire Line
2450 4950 2450 5050
Wire Wire Line
2700 4850 2450 4850
Connection ~ 2450 4850
Wire Wire Line
2450 4850 2450 4950
Wire Wire Line
2700 4750 2450 4750
Connection ~ 2450 4750
Wire Wire Line
2450 4750 2450 4850
Wire Wire Line
2700 4650 2450 4650
Connection ~ 2450 4650
Wire Wire Line
2450 4650 2450 4750
Wire Wire Line
2700 4550 2450 4550
Connection ~ 2450 4550
Wire Wire Line
2450 4550 2450 4650
Wire Wire Line
2700 4450 2450 4450
Connection ~ 2450 4450
Wire Wire Line
2450 4450 2450 4550
Wire Wire Line
2700 4350 2450 4350
Connection ~ 2450 4350
Wire Wire Line
2450 4350 2450 4450
Wire Wire Line
2700 3050 2450 3050
Connection ~ 2450 3050
Wire Wire Line
2450 3050 2450 3150
Wire Wire Line
2700 3150 2450 3150
Connection ~ 2450 3150
Wire Wire Line
2450 3150 2450 3250
Wire Wire Line
2700 3250 2450 3250
Connection ~ 2450 3250
Wire Wire Line
2450 3250 2450 3350
Wire Wire Line
2700 3350 2450 3350
Connection ~ 2450 3350
Wire Wire Line
2450 3350 2450 3450
Wire Wire Line
2700 3450 2450 3450
Connection ~ 2450 3450
Wire Wire Line
2450 3450 2450 3550
Wire Wire Line
2700 3550 2450 3550
Connection ~ 2450 3550
Wire Wire Line
2450 3550 2450 3650
Wire Wire Line
2700 3650 2450 3650
Connection ~ 2450 3650
Wire Wire Line
2450 3650 2450 3750
Wire Wire Line
2700 3750 2450 3750
Connection ~ 2450 3750
Wire Wire Line
2450 3750 2450 3850
Wire Wire Line
2700 3850 2450 3850
Connection ~ 2450 3850
Wire Wire Line
2450 3850 2450 3950
Wire Wire Line
2700 3950 2450 3950
Connection ~ 2450 3950
Wire Wire Line
2450 3950 2450 4050
Wire Wire Line
2150 4150 2700 4150
Wire Wire Line
3200 2950 3750 2950
Wire Wire Line
3200 3050 3750 3050
Wire Wire Line
3200 3150 3750 3150
Wire Wire Line
3200 3250 3750 3250
Wire Wire Line
3200 3350 3750 3350
Wire Wire Line
3200 3450 3750 3450
Wire Wire Line
3200 3550 3750 3550
Wire Wire Line
3200 3650 3750 3650
Wire Wire Line
3200 3750 3750 3750
Wire Wire Line
3200 5350 3750 5350
Wire Wire Line
3200 5250 3750 5250
Wire Wire Line
3200 5150 3750 5150
Wire Wire Line
3200 5050 3750 5050
Wire Wire Line
3200 4950 3750 4950
Wire Wire Line
3200 4850 3750 4850
Wire Wire Line
3200 4750 3750 4750
Wire Wire Line
3200 4650 3750 4650
Wire Wire Line
3200 4450 3750 4450
Wire Wire Line
3450 4350 3200 4350
Wire Wire Line
3450 3850 3200 3850
Wire Wire Line
3450 3950 3200 3950
Wire Wire Line
3450 4050 3200 4050
Wire Wire Line
3450 4250 3200 4250
Wire Wire Line
3450 4350 3450 4250
Wire Wire Line
3450 4250 3450 4050
Connection ~ 3450 4250
Wire Wire Line
3450 4050 3450 3950
Connection ~ 3450 4050
Wire Wire Line
3450 3950 3450 3850
Connection ~ 3450 3950
Text Label 2500 4050 0 50 ~ 0
GND
Text Label 2500 5350 0 50 ~ 0
GND
Text Label 3250 4050 0 50 ~ 0
GND
Text Label 2150 4150 0 50 ~ 0
TERMPWR
Text Label 3750 2950 2 50 ~ 0
~DB0
Text Label 3750 3050 2 50 ~ 0
~DB1
Text Label 3750 3150 2 50 ~ 0
~DB2
Text Label 3750 3250 2 50 ~ 0
~DB3
Text Label 3750 3350 2 50 ~ 0
~DB4
Text Label 3750 3450 2 50 ~ 0
~DB5
Text Label 3750 3550 2 50 ~ 0
~DB6
Text Label 3750 3650 2 50 ~ 0
~DB7
Text Label 3750 3750 2 50 ~ 0
~DBP
Text Label 3750 4450 2 50 ~ 0
~ATN
Text Label 3750 4650 2 50 ~ 0
~BSY
Text Label 3750 4750 2 50 ~ 0
~ACK
Text Label 3750 4850 2 50 ~ 0
~RST
Text Label 3750 4950 2 50 ~ 0
~MSG
Text Label 3750 5050 2 50 ~ 0
~SEL
Text Label 3750 5150 2 50 ~ 0
~C~\D
Text Label 3750 5250 2 50 ~ 0
~REQ
Text Label 3750 5350 2 50 ~ 0
~I~\O
Wire Wire Line
6500 3500 5950 3500
Wire Wire Line
6500 3600 5950 3600
Wire Wire Line
6500 3700 5950 3700
Wire Wire Line
6500 3800 5950 3800
Wire Wire Line
6500 3900 5950 3900
Wire Wire Line
6500 4000 5950 4000
Wire Wire Line
6500 4100 5950 4100
Wire Wire Line
6500 4200 5950 4200
Wire Wire Line
6500 4400 5950 4400
Text Label 5950 4400 0 50 ~ 0
~ATN
Text Label 5950 4200 0 50 ~ 0
~BSY
Text Label 5950 4100 0 50 ~ 0
~ACK
Text Label 5950 4000 0 50 ~ 0
~RST
Text Label 5950 3900 0 50 ~ 0
~MSG
Text Label 5950 3800 0 50 ~ 0
~SEL
Text Label 5950 3700 0 50 ~ 0
~C~\D
Text Label 5950 3600 0 50 ~ 0
~REQ
Text Label 5950 3500 0 50 ~ 0
~I~\O
Wire Wire Line
6500 3100 5950 3100
Text Label 5950 3100 0 50 ~ 0
GND
Wire Wire Line
6500 3200 5950 3200
Wire Wire Line
6500 3300 5950 3300
Text Label 5950 3200 0 50 ~ 0
~DB0
Text Label 5950 3300 0 50 ~ 0
~DB1
Wire Wire Line
6500 4900 5950 4900
Wire Wire Line
6500 5000 5950 5000
Text Label 5950 4900 0 50 ~ 0
~DB2
Text Label 5950 5000 0 50 ~ 0
~DB3
Wire Wire Line
6500 5200 5950 5200
Text Label 5950 5200 0 50 ~ 0
~DBP
Wire Wire Line
7750 4700 7200 4700
Wire Wire Line
7750 5000 7200 5000
Wire Wire Line
7750 4800 7200 4800
Wire Wire Line
7750 4900 7200 4900
Text Label 7200 4700 0 50 ~ 0
~DB4
Text Label 7200 5000 0 50 ~ 0
~DB5
Text Label 7200 4800 0 50 ~ 0
~DB6
Text Label 7200 4900 0 50 ~ 0
~DB7
$Comp
L Connector_Generic:Conn_01x02 J1
U 1 1 619D027D
P 6700 2150
F 0 "J1" H 6780 2142 50 0000 L CNN
F 1 "Conn_01x02" H 6780 2051 50 0000 L CNN
F 2 "Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical" H 6700 2150 50 0001 C CNN
F 3 "~" H 6700 2150 50 0001 C CNN
1 6700 2150
1 0 0 -1
$EndComp
Wire Wire Line
5950 2150 6500 2150
Text Label 5950 2150 0 50 ~ 0
TERMPWR
Wire Wire Line
5950 2250 6500 2250
Text Label 5950 2250 0 50 ~ 0
+5V
Wire Wire Line
9000 3100 8450 3100
Text Label 9000 3100 2 50 ~ 0
+5V
$EndSCHEMATC

Binary file not shown.

BIN
hardware/mvp/Schematic.pdf Normal file

Binary file not shown.

1947
hardware/mvp/fp-info-cache Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,55 +0,0 @@
(module BluePill_STM32F103C (layer F.Cu) (tedit 59B4EF3F)
(descr "STM32F103C8 BluePill board")
(fp_text reference U (at 7.1628 49.6062 180) (layer F.SilkS)
(effects (font (size 0.889 0.889) (thickness 0.3048)))
)
(fp_text value BluePill_STM32F103C (at 7.9756 23.7998 90) (layer F.SilkS)
(effects (font (size 0.889 0.889) (thickness 0.22225)))
)
(fp_line (start 19.12 -2.59) (end 19.12 50.81) (layer F.SilkS) (width 0.3048))
(fp_line (start 19.12 50.81) (end -3.88 50.81) (layer F.SilkS) (width 0.3048))
(fp_line (start -3.88 50.81) (end -3.88 -2.59) (layer F.SilkS) (width 0.3048))
(fp_line (start -3.88 -2.59) (end 19.12 -2.59) (layer F.SilkS) (width 0.3048))
(pad 1 thru_hole rect (at 0 -0.0508 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 2 thru_hole oval (at 0 2.4892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 3 thru_hole oval (at 0 5.0292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 4 thru_hole oval (at 0 7.5692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 5 thru_hole oval (at 0 10.1092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 6 thru_hole oval (at 0 12.6492 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 7 thru_hole oval (at 0 15.1892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 8 thru_hole oval (at 0 17.7292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 9 thru_hole oval (at 0 20.2692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 10 thru_hole oval (at 0 22.8092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 11 thru_hole oval (at 0 25.3492 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 12 thru_hole oval (at 0 27.8892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 13 thru_hole oval (at 0 30.4292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 14 thru_hole oval (at 0 32.9692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 15 thru_hole oval (at 0 35.5092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 16 thru_hole oval (at 0 38.0492 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 17 thru_hole oval (at 0 40.5892 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 18 thru_hole oval (at 0 43.1292 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 19 thru_hole oval (at 0 45.6692 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 20 thru_hole oval (at 0 48.2092 270) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 21 thru_hole oval (at 15.24 48.2092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 22 thru_hole oval (at 15.24 45.6692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 23 thru_hole oval (at 15.24 43.1292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 24 thru_hole oval (at 15.24 40.5892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 25 thru_hole oval (at 15.24 38.0492 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 26 thru_hole oval (at 15.24 35.5092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 27 thru_hole oval (at 15.24 32.9692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 28 thru_hole oval (at 15.24 30.4292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 29 thru_hole oval (at 15.24 27.8892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 30 thru_hole oval (at 15.24 25.3492 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 31 thru_hole oval (at 15.24 22.8092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 32 thru_hole oval (at 15.24 20.2692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 33 thru_hole oval (at 15.24 17.7292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 34 thru_hole oval (at 15.24 15.1892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 35 thru_hole oval (at 15.24 12.6492 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 36 thru_hole oval (at 15.24 10.1092 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 37 thru_hole oval (at 15.24 7.5692 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 38 thru_hole oval (at 15.24 5.0292 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 39 thru_hole oval (at 15.24 2.4892 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 40 thru_hole oval (at 15.24 -0.1016 90) (size 1.7272 2.25) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 41 thru_hole oval (at 8.9 3.7592 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
(pad 42 thru_hole oval (at 6.36 3.7592 90) (size 1.7272 1.7272) (drill 1.016) (layers *.Cu *.Mask F.SilkS))
)

View File

@ -1 +0,0 @@
BlueSCSI Hardware © 2021 by Eric Helgeson is licensed under Attribution-NonCommercial 4.0 International

View File

@ -1,3 +0,0 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View File

@ -1,119 +0,0 @@
EESchema-LIBRARY Version 2.3
#encoding utf-8
#
# BluePill_STM32F103C
#
DEF BluePill_STM32F103C U 0 40 Y Y 1 F N
F0 "U" -450 -1350 50 H V C CNN
F1 "BluePill_STM32F103C" 50 850 50 H V C CNN
F2 "BluePill_breakouts:BluePill_STM32F103C" 50 -1600 50 H I C CNN
F3 "www.rogerclark.net" 0 -1500 50 H I C CNN
DRAW
S -550 -1400 600 1600 1 0 0 N
S -250 -1400 250 -1200 0 1 0 N
X VBAT 1 -850 700 300 R 50 50 1 1 W
X PC13_LED 2 -850 600 300 R 50 50 1 1 B
X PC14 3 -850 500 300 R 50 50 1 1 B
X PC15 4 -850 400 300 R 50 50 1 1 B
X PA0 5 -850 300 300 R 50 50 1 1 B
X PA1 6 -850 200 300 R 50 50 1 1 B
X PA2_TX2 7 -850 100 300 R 50 50 1 1 B
X PA3_RX2 8 -850 0 300 R 50 50 1 1 B
X PA4 9 -850 -100 300 R 50 50 1 1 B
X PA5_SCK1 10 -850 -200 300 R 50 50 1 1 B
X GND 20 -850 -1200 300 R 50 50 1 1 W
X PA15 30 900 -300 300 L 50 50 1 1 B
X VCC3V3 40 900 700 300 L 50 50 1 1 B
X PA6_MISO1 11 -850 -300 300 R 50 50 1 1 B
X PB12 21 900 -1200 300 L 50 50 1 1 B
X PB3 31 900 -200 300 L 50 50 1 1 B
X PA14_SWCLK 41 -50 1900 300 D 50 50 1 1 B
X PA7_MOSI1 12 -850 -400 300 R 50 50 1 1 B
X PB13_SCK2 22 900 -1100 300 L 50 50 1 1 B
X PB4 32 900 -100 300 L 50 50 1 1 B
X PA13_SWDIO 42 50 1900 300 D 50 50 1 1 B
X PB0 13 -850 -500 300 R 50 50 1 1 B
X PB14_MISO2 23 900 -1000 300 L 50 50 1 1 B
X PB5 33 900 0 300 L 50 50 1 1 B
X PB1 14 -850 -600 300 R 50 50 1 1 B
X PB15_MOSI2 24 900 -900 300 L 50 50 1 1 B
X PB6_SCL1 34 900 100 300 L 50 50 1 1 B
X PB10_SCL2 15 -850 -700 300 R 50 50 1 1 B
X PA8 25 900 -800 300 L 50 50 1 1 B
X PB7_SDA1 35 900 200 300 L 50 50 1 1 B
X PB11_SDA2 16 -850 -800 300 R 50 50 1 1 B
X PA9_TX1 26 900 -700 300 L 50 50 1 1 B
X PB8 36 900 300 300 L 50 50 1 1 B
X NRST 17 -850 -900 300 R 50 50 1 1 I
X PA10_RX1 27 900 -600 300 L 50 50 1 1 B
X PB9 37 900 400 300 L 50 50 1 1 B
X VCC3V3 18 -850 -1000 300 R 50 50 1 1 B
X PA11_USB_D- 28 900 -500 300 L 50 50 1 1 B
X 5V_USB 38 900 500 300 L 50 50 1 1 B
X GND 19 -850 -1100 300 R 50 50 1 1 W
X PA12_USBD+ 29 900 -400 300 L 50 50 1 1 B
X GND 39 900 600 300 L 50 50 1 1 W
ENDDRAW
ENDDEF
#
# ILI9341_SPI_Touch_SD
#
DEF ILI9341_SPI_Touch_SD U 0 40 Y Y 1 F N
F0 "U" 0 -750 50 H V C CNN
F1 "ILI9341_SPI_Touch_SD" 0 800 50 H V C CNN
F2 "BluePill_breakoutst:TJCTM24024-SPI" 50 -1000 50 H I C CNN
F3 "www.rogerclark.net" 50 -900 50 H I C CNN
DRAW
S -450 -850 450 850 1 0 0 N
X VCC 1 -750 650 300 R 50 50 1 1 W
X GND 2 -750 550 300 R 50 50 1 1 W
X CS 3 -750 450 300 R 50 50 1 1 I
X RESET 4 -750 350 300 R 50 50 1 1 I
X D/C 5 -750 250 300 R 50 50 1 1 I
X MOSI 6 -750 150 300 R 50 50 1 1 I
X SCK 7 -750 50 300 R 50 50 1 1 I
X LED 8 -750 -50 300 R 50 50 1 1 I
X MISO 9 -750 -150 300 R 50 50 1 1 O
X T_CLK 10 -750 -250 300 R 50 50 1 1 I
X T_CS 11 -750 -350 300 R 50 50 1 1 I
X T_DIN 12 -750 -450 300 R 50 50 1 1 I
X T_DO 13 -750 -550 300 R 50 50 1 1 O
X T_IRQ 14 -750 -650 300 R 50 50 1 1 O
X SD_SCK 15 750 -150 300 L 50 50 1 1 I
X SD_MISO 16 750 -50 300 L 50 50 1 1 O
X SD_MOSI 17 750 50 300 L 50 50 1 1 I
X SD_CS 18 750 150 300 L 50 50 1 1 I
ENDDRAW
ENDDEF
#
# OV7670_unbuffered_module
#
DEF OV7670_unbuffered_module U 0 40 Y Y 1 F N
F0 "U" 0 -550 50 H V C CNN
F1 "OV7670_unbuffered_module" 0 650 50 H V C CNN
F2 "BluePill_breakoutst:OV7670_unbuffered_module" 0 -750 50 H I C CNN
F3 "www.rogerclark.net" 0 -650 50 H I C CNN
DRAW
S -450 -600 450 600 1 0 0 N
X Vcc 1 -750 400 300 R 50 50 1 1 W
X Gnd 2 750 400 300 L 50 50 1 1 W
X SCL 3 -750 300 300 R 50 50 1 1 I
X SDA 4 750 300 300 L 50 50 1 1 B
X VSYNC 5 -750 200 300 R 50 50 1 1 O
X HREF 6 750 200 300 L 50 50 1 1 O
X PCLK 7 -750 100 300 R 50 50 1 1 O
X XCLK 8 750 100 300 L 50 50 1 1 I
X D7 9 -750 0 300 R 50 50 1 1 O
X D6 10 750 0 300 L 50 50 1 1 O
X D5 11 -750 -100 300 R 50 50 1 1 O
X D4 12 750 -100 300 L 50 50 1 1 O
X D3 13 -750 -200 300 R 50 50 1 1 O
X D2 14 750 -200 300 L 50 50 1 1 O
X D1 15 -750 -300 300 R 50 50 1 1 O
X D0 16 750 -300 300 L 50 50 1 1 O
X RESET 17 -750 -400 300 R 50 50 1 1 I
X PWDN 18 750 -400 300 L 50 50 1 1 I
ENDDRAW
ENDDEF
#
#End Library

View File

@ -1,427 +0,0 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Connector_Generic_Conn_01x04
#
DEF Connector_Generic_Conn_01x04 J 0 40 Y N 1 F N
F0 "J" 0 200 50 H V C CNN
F1 "Connector_Generic_Conn_01x04" 0 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_1x??_*
$ENDFPLIST
DRAW
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 150 50 -250 1 1 10 f
X Pin_1 1 -200 100 150 R 50 50 1 1 P
X Pin_2 2 -200 0 150 R 50 50 1 1 P
X Pin_3 3 -200 -100 150 R 50 50 1 1 P
X Pin_4 4 -200 -200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_02x25_Odd_Even
#
DEF Connector_Generic_Conn_02x25_Odd_Even J 0 40 Y N 1 F N
F0 "J" 50 1300 50 H V C CNN
F1 "Connector_Generic_Conn_02x25_Odd_Even" 50 -1300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_2x??_*
$ENDFPLIST
DRAW
S -50 -1195 0 -1205 1 1 6 N
S -50 -1095 0 -1105 1 1 6 N
S -50 -995 0 -1005 1 1 6 N
S -50 -895 0 -905 1 1 6 N
S -50 -795 0 -805 1 1 6 N
S -50 -695 0 -705 1 1 6 N
S -50 -595 0 -605 1 1 6 N
S -50 -495 0 -505 1 1 6 N
S -50 -395 0 -405 1 1 6 N
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 305 0 295 1 1 6 N
S -50 405 0 395 1 1 6 N
S -50 505 0 495 1 1 6 N
S -50 605 0 595 1 1 6 N
S -50 705 0 695 1 1 6 N
S -50 805 0 795 1 1 6 N
S -50 905 0 895 1 1 6 N
S -50 1005 0 995 1 1 6 N
S -50 1105 0 1095 1 1 6 N
S -50 1205 0 1195 1 1 6 N
S -50 1250 150 -1250 1 1 10 f
S 150 -1195 100 -1205 1 1 6 N
S 150 -1095 100 -1105 1 1 6 N
S 150 -995 100 -1005 1 1 6 N
S 150 -895 100 -905 1 1 6 N
S 150 -795 100 -805 1 1 6 N
S 150 -695 100 -705 1 1 6 N
S 150 -595 100 -605 1 1 6 N
S 150 -495 100 -505 1 1 6 N
S 150 -395 100 -405 1 1 6 N
S 150 -295 100 -305 1 1 6 N
S 150 -195 100 -205 1 1 6 N
S 150 -95 100 -105 1 1 6 N
S 150 5 100 -5 1 1 6 N
S 150 105 100 95 1 1 6 N
S 150 205 100 195 1 1 6 N
S 150 305 100 295 1 1 6 N
S 150 405 100 395 1 1 6 N
S 150 505 100 495 1 1 6 N
S 150 605 100 595 1 1 6 N
S 150 705 100 695 1 1 6 N
S 150 805 100 795 1 1 6 N
S 150 905 100 895 1 1 6 N
S 150 1005 100 995 1 1 6 N
S 150 1105 100 1095 1 1 6 N
S 150 1205 100 1195 1 1 6 N
X Pin_1 1 -200 1200 150 R 50 50 1 1 P
X Pin_10 10 300 800 150 L 50 50 1 1 P
X Pin_11 11 -200 700 150 R 50 50 1 1 P
X Pin_12 12 300 700 150 L 50 50 1 1 P
X Pin_13 13 -200 600 150 R 50 50 1 1 P
X Pin_14 14 300 600 150 L 50 50 1 1 P
X Pin_15 15 -200 500 150 R 50 50 1 1 P
X Pin_16 16 300 500 150 L 50 50 1 1 P
X Pin_17 17 -200 400 150 R 50 50 1 1 P
X Pin_18 18 300 400 150 L 50 50 1 1 P
X Pin_19 19 -200 300 150 R 50 50 1 1 P
X Pin_2 2 300 1200 150 L 50 50 1 1 P
X Pin_20 20 300 300 150 L 50 50 1 1 P
X Pin_21 21 -200 200 150 R 50 50 1 1 P
X Pin_22 22 300 200 150 L 50 50 1 1 P
X Pin_23 23 -200 100 150 R 50 50 1 1 P
X Pin_24 24 300 100 150 L 50 50 1 1 P
X Pin_25 25 -200 0 150 R 50 50 1 1 P
X Pin_26 26 300 0 150 L 50 50 1 1 P
X Pin_27 27 -200 -100 150 R 50 50 1 1 P
X Pin_28 28 300 -100 150 L 50 50 1 1 P
X Pin_29 29 -200 -200 150 R 50 50 1 1 P
X Pin_3 3 -200 1100 150 R 50 50 1 1 P
X Pin_30 30 300 -200 150 L 50 50 1 1 P
X Pin_31 31 -200 -300 150 R 50 50 1 1 P
X Pin_32 32 300 -300 150 L 50 50 1 1 P
X Pin_33 33 -200 -400 150 R 50 50 1 1 P
X Pin_34 34 300 -400 150 L 50 50 1 1 P
X Pin_35 35 -200 -500 150 R 50 50 1 1 P
X Pin_36 36 300 -500 150 L 50 50 1 1 P
X Pin_37 37 -200 -600 150 R 50 50 1 1 P
X Pin_38 38 300 -600 150 L 50 50 1 1 P
X Pin_39 39 -200 -700 150 R 50 50 1 1 P
X Pin_4 4 300 1100 150 L 50 50 1 1 P
X Pin_40 40 300 -700 150 L 50 50 1 1 P
X Pin_41 41 -200 -800 150 R 50 50 1 1 P
X Pin_42 42 300 -800 150 L 50 50 1 1 P
X Pin_43 43 -200 -900 150 R 50 50 1 1 P
X Pin_44 44 300 -900 150 L 50 50 1 1 P
X Pin_45 45 -200 -1000 150 R 50 50 1 1 P
X Pin_46 46 300 -1000 150 L 50 50 1 1 P
X Pin_47 47 -200 -1100 150 R 50 50 1 1 P
X Pin_48 48 300 -1100 150 L 50 50 1 1 P
X Pin_49 49 -200 -1200 150 R 50 50 1 1 P
X Pin_5 5 -200 1000 150 R 50 50 1 1 P
X Pin_50 50 300 -1200 150 L 50 50 1 1 P
X Pin_6 6 300 1000 150 L 50 50 1 1 P
X Pin_7 7 -200 900 150 R 50 50 1 1 P
X Pin_8 8 300 900 150 L 50 50 1 1 P
X Pin_9 9 -200 800 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Micro_SD_Card
#
DEF Connector_Micro_SD_Card J 0 40 Y Y 1 F N
F0 "J" -650 600 50 H V C CNN
F1 "Connector_Micro_SD_Card" 650 600 50 H V R CNN
F2 "" 1150 300 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
microSD*
$ENDFPLIST
DRAW
S -300 -375 -200 -425 0 1 0 F
S -300 -275 -200 -325 0 1 0 F
S -300 -175 -200 -225 0 1 0 F
S -300 -75 -200 -125 0 1 0 F
S -300 25 -200 -25 0 1 0 F
S -300 125 -200 75 0 1 0 F
S -300 225 -200 175 0 1 0 F
S -300 325 -200 275 0 1 0 F
P 6 0 1 10 650 500 650 550 -750 550 -750 -650 650 -650 650 -450 N
P 11 0 1 10 -350 -450 -350 350 -50 350 100 500 150 500 150 450 250 450 300 500 800 500 800 -450 -350 -450 f
X DAT2 1 -900 300 150 R 50 50 1 1 B
X DAT3/CD 2 -900 200 150 R 50 50 1 1 B
X CMD 3 -900 100 150 R 50 50 1 1 I
X VDD 4 -900 0 150 R 50 50 1 1 W
X CLK 5 -900 -100 150 R 50 50 1 1 I
X VSS 6 -900 -200 150 R 50 50 1 1 W
X DAT0 7 -900 -300 150 R 50 50 1 1 B
X DAT1 8 -900 -400 150 R 50 50 1 1 B
X SHIELD 9 800 -600 150 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_D_Schottky
#
DEF Device_D_Schottky D 0 40 N N 1 F N
F0 "D" 0 100 50 H V C CNN
F1 "Device_D_Schottky" 0 -100 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
TO-???*
*_Diode_*
*SingleDiode*
D_*
$ENDFPLIST
DRAW
P 2 0 1 0 50 0 -50 0 N
P 4 0 1 10 50 50 50 -50 -50 0 50 50 N
P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N
X K 1 -150 0 100 R 50 50 1 1 P
X A 2 150 0 100 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_Jumper
#
DEF Device_Jumper JP 0 30 Y N 1 F N
F0 "JP" 0 150 50 H V C CNN
F1 "Device_Jumper" 0 -80 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
SolderJumper*
Jumper*
TestPoint*2Pads*
TestPoint*Bridge*
$ENDFPLIST
DRAW
A 0 -26 125 1426 373 0 1 0 N -98 50 99 50
C -100 0 35 0 1 0 N
C 100 0 35 0 1 0 N
X 1 1 -300 0 165 R 50 50 0 1 P
X 2 2 300 0 165 L 50 50 0 1 P
ENDDRAW
ENDDEF
#
# Device_R_Network09
#
DEF Device_R_Network09 RN 0 0 Y N 1 F N
F0 "RN" -500 0 50 V V C CNN
F1 "Device_R_Network09" 500 0 50 V V C CNN
F2 "Resistor_THT:R_Array_SIP10" 575 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
R?Array?SIP*
$ENDFPLIST
DRAW
C -400 90 10 0 1 0 F
C -300 90 10 0 1 0 F
C -200 90 10 0 1 0 F
C -100 90 10 0 1 0 F
C 0 90 10 0 1 0 F
C 100 90 10 0 1 0 F
C 200 90 10 0 1 0 F
C 300 90 10 0 1 0 F
S -450 -125 450 125 0 1 10 f
S -430 60 -370 -100 0 1 10 N
S -330 60 -270 -100 0 1 10 N
S -230 60 -170 -100 0 1 10 N
S -130 60 -70 -100 0 1 10 N
S -30 60 30 -100 0 1 10 N
S 70 60 130 -100 0 1 10 N
S 170 60 230 -100 0 1 10 N
S 270 60 330 -100 0 1 10 N
S 370 60 430 -100 0 1 10 N
P 2 0 1 0 -400 -100 -400 -150 N
P 2 0 1 0 -300 -100 -300 -150 N
P 2 0 1 0 -200 -100 -200 -150 N
P 2 0 1 0 -100 -100 -100 -150 N
P 2 0 1 0 0 -100 0 -150 N
P 2 0 1 0 100 -100 100 -150 N
P 2 0 1 0 200 -100 200 -150 N
P 2 0 1 0 300 -100 300 -150 N
P 2 0 1 0 400 -100 400 -150 N
P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N
P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N
P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N
P 4 0 1 0 -100 60 -100 90 0 90 0 60 N
P 4 0 1 0 0 60 0 90 100 90 100 60 N
P 4 0 1 0 100 60 100 90 200 90 200 60 N
P 4 0 1 0 200 60 200 90 300 90 300 60 N
P 4 0 1 0 300 60 300 90 400 90 400 60 N
X common 1 -400 200 100 D 50 50 1 1 P
X R9 10 400 -200 50 U 50 50 1 1 P
X R1 2 -400 -200 50 U 50 50 1 1 P
X R2 3 -300 -200 50 U 50 50 1 1 P
X R3 4 -200 -200 50 U 50 50 1 1 P
X R4 5 -100 -200 50 U 50 50 1 1 P
X R5 6 0 -200 50 U 50 50 1 1 P
X R6 7 100 -200 50 U 50 50 1 1 P
X R7 8 200 -200 50 U 50 50 1 1 P
X R8 9 300 -200 50 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Mechanical_MountingHole_Pad
#
DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N
F0 "H" 0 250 50 H V C CNN
F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
MountingHole*Pad*
$ENDFPLIST
DRAW
C 0 50 50 0 1 50 N
X 1 1 0 -100 100 U 50 50 1 1 I
ENDDRAW
ENDDEF
#
# bluepill_scsi-rescue_171825-4-171825-4
#
DEF bluepill_scsi-rescue_171825-4-171825-4 J 0 40 Y Y 1 L N
F0 "J" -220 300 50 H V L BNN
F1 "bluepill_scsi-rescue_171825-4-171825-4" -200 -300 50 H V L BNN
F2 "TE_171825-4" 0 0 50 H I L BNN
F3 "171825-4" 0 0 50 H I L BNN
DRAW
P 2 0 0 10 -200 -200 -200 300 N
P 2 0 0 10 -200 300 200 300 N
P 2 0 0 10 200 -200 -200 -200 N
P 2 0 0 10 200 300 200 -200 N
X 1 1 -400 200 200 R 40 40 0 0 P
X 2 2 -400 100 200 R 40 40 0 0 P
X 3 3 -400 0 200 R 40 40 0 0 P
X 4 4 -400 -100 200 R 40 40 0 0 P
ENDDRAW
ENDDEF
#
# bluepill_scsi-rescue_BluePill_STM32F103C-bluepill
#
DEF bluepill_scsi-rescue_BluePill_STM32F103C-bluepill U 0 40 Y Y 1 F N
F0 "U" -450 -1350 50 H V C CNN
F1 "bluepill_scsi-rescue_BluePill_STM32F103C-bluepill" 50 850 50 H V C CNN
F2 "BluePill_breakouts:BluePill_STM32F103C" 50 -1600 50 H I C CNN
F3 "www.rogerclark.net" 0 -1500 50 H I C CNN
DRAW
S -550 -1400 600 1600 1 0 0 N
S -250 -1400 250 -1200 0 1 0 N
X VBAT 1 -850 700 300 R 50 50 1 1 W
X PA5_SCK1 10 -850 -200 300 R 50 50 1 1 B
X PA6_MISO1 11 -850 -300 300 R 50 50 1 1 B
X PA7_MOSI1 12 -850 -400 300 R 50 50 1 1 B
X PB0 13 -850 -500 300 R 50 50 1 1 B
X PB1 14 -850 -600 300 R 50 50 1 1 B
X PB10_SCL2 15 -850 -700 300 R 50 50 1 1 B
X PB11_SDA2 16 -850 -800 300 R 50 50 1 1 B
X NRST 17 -850 -900 300 R 50 50 1 1 I
X VCC3V3 18 -850 -1000 300 R 50 50 1 1 B
X GND 19 -850 -1100 300 R 50 50 1 1 W
X PC13_LED 2 -850 600 300 R 50 50 1 1 B
X GND 20 -850 -1200 300 R 50 50 1 1 W
X PB12 21 900 -1200 300 L 50 50 1 1 B
X PB13_SCK2 22 900 -1100 300 L 50 50 1 1 B
X PB14_MISO2 23 900 -1000 300 L 50 50 1 1 B
X PB15_MOSI2 24 900 -900 300 L 50 50 1 1 B
X PA8 25 900 -800 300 L 50 50 1 1 B
X PA9_TX1 26 900 -700 300 L 50 50 1 1 B
X PA10_RX1 27 900 -600 300 L 50 50 1 1 B
X PA11_USB_D- 28 900 -500 300 L 50 50 1 1 B
X PA12_USBD+ 29 900 -400 300 L 50 50 1 1 B
X PC14 3 -850 500 300 R 50 50 1 1 B
X PA15 30 900 -300 300 L 50 50 1 1 B
X PB3 31 900 -200 300 L 50 50 1 1 B
X PB4 32 900 -100 300 L 50 50 1 1 B
X PB5 33 900 0 300 L 50 50 1 1 B
X PB6_SCL1 34 900 100 300 L 50 50 1 1 B
X PB7_SDA1 35 900 200 300 L 50 50 1 1 B
X PB8 36 900 300 300 L 50 50 1 1 B
X PB9 37 900 400 300 L 50 50 1 1 B
X 5V_USB 38 900 500 300 L 50 50 1 1 B
X GND 39 900 600 300 L 50 50 1 1 W
X PC15 4 -850 400 300 R 50 50 1 1 B
X VCC3V3 40 900 700 300 L 50 50 1 1 B
X PA14_SWCLK 41 -50 1900 300 D 50 50 1 1 B
X PA13_SWDIO 42 50 1900 300 D 50 50 1 1 B
X PA0 5 -850 300 300 R 50 50 1 1 B
X PA1 6 -850 200 300 R 50 50 1 1 B
X PA2_TX2 7 -850 100 300 R 50 50 1 1 B
X PA3_RX2 8 -850 0 300 R 50 50 1 1 B
X PA4 9 -850 -100 300 R 50 50 1 1 B
ENDDRAW
ENDDEF
#
# power_+3.3V
#
DEF power_+3.3V #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+3.3V" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
ALIAS +3.3V
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +3V3 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_+5V
#
DEF power_+5V #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+5V" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +5V 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_GND
#
DEF power_GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN
F1 "power_GND" 0 -150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
X GND 1 0 0 0 D 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_VCC
#
DEF power_VCC #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_VCC" 0 150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X VCC 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
#End Library

View File

@ -1,3 +0,0 @@
EESchema-DOCLIB Version 2.0
#
#End Doc Library

View File

@ -1,78 +0,0 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# 171825-4-171825-4
#
DEF 171825-4-171825-4 J 0 40 Y Y 1 L N
F0 "J" -220 300 50 H V L BNN
F1 "171825-4-171825-4" -200 -300 50 H V L BNN
F2 "TE_171825-4" 0 0 50 H I L BNN
F3 "171825-4" 0 0 50 H I L BNN
DRAW
P 2 0 0 10 -200 -200 -200 300 N
P 2 0 0 10 -200 300 200 300 N
P 2 0 0 10 200 -200 -200 -200 N
P 2 0 0 10 200 300 200 -200 N
X 1 1 -400 200 200 R 40 40 0 0 P
X 2 2 -400 100 200 R 40 40 0 0 P
X 3 3 -400 0 200 R 40 40 0 0 P
X 4 4 -400 -100 200 R 40 40 0 0 P
ENDDRAW
ENDDEF
#
# BluePill_STM32F103C-bluepill
#
DEF BluePill_STM32F103C-bluepill U 0 40 Y Y 1 F N
F0 "U" -450 -1350 50 H V C CNN
F1 "BluePill_STM32F103C-bluepill" 50 850 50 H V C CNN
F2 "BluePill_breakouts:BluePill_STM32F103C" 50 -1600 50 H I C CNN
F3 "www.rogerclark.net" 0 -1500 50 H I C CNN
DRAW
S -550 -1400 600 1600 1 0 0 N
S -250 -1400 250 -1200 0 1 0 N
X VBAT 1 -850 700 300 R 50 50 1 1 W
X PA5_SCK1 10 -850 -200 300 R 50 50 1 1 B
X PA6_MISO1 11 -850 -300 300 R 50 50 1 1 B
X PA7_MOSI1 12 -850 -400 300 R 50 50 1 1 B
X PB0 13 -850 -500 300 R 50 50 1 1 B
X PB1 14 -850 -600 300 R 50 50 1 1 B
X PB10_SCL2 15 -850 -700 300 R 50 50 1 1 B
X PB11_SDA2 16 -850 -800 300 R 50 50 1 1 B
X NRST 17 -850 -900 300 R 50 50 1 1 I
X VCC3V3 18 -850 -1000 300 R 50 50 1 1 B
X GND 19 -850 -1100 300 R 50 50 1 1 W
X PC13_LED 2 -850 600 300 R 50 50 1 1 B
X GND 20 -850 -1200 300 R 50 50 1 1 W
X PB12 21 900 -1200 300 L 50 50 1 1 B
X PB13_SCK2 22 900 -1100 300 L 50 50 1 1 B
X PB14_MISO2 23 900 -1000 300 L 50 50 1 1 B
X PB15_MOSI2 24 900 -900 300 L 50 50 1 1 B
X PA8 25 900 -800 300 L 50 50 1 1 B
X PA9_TX1 26 900 -700 300 L 50 50 1 1 B
X PA10_RX1 27 900 -600 300 L 50 50 1 1 B
X PA11_USB_D- 28 900 -500 300 L 50 50 1 1 B
X PA12_USBD+ 29 900 -400 300 L 50 50 1 1 B
X PC14 3 -850 500 300 R 50 50 1 1 B
X PA15 30 900 -300 300 L 50 50 1 1 B
X PB3 31 900 -200 300 L 50 50 1 1 B
X PB4 32 900 -100 300 L 50 50 1 1 B
X PB5 33 900 0 300 L 50 50 1 1 B
X PB6_SCL1 34 900 100 300 L 50 50 1 1 B
X PB7_SDA1 35 900 200 300 L 50 50 1 1 B
X PB8 36 900 300 300 L 50 50 1 1 B
X PB9 37 900 400 300 L 50 50 1 1 B
X 5V_USB 38 900 500 300 L 50 50 1 1 B
X GND 39 900 600 300 L 50 50 1 1 W
X PC15 4 -850 400 300 R 50 50 1 1 B
X VCC3V3 40 900 700 300 L 50 50 1 1 B
X PA14_SWCLK 41 -50 1900 300 D 50 50 1 1 B
X PA13_SWDIO 42 50 1900 300 D 50 50 1 1 B
X PA0 5 -850 300 300 R 50 50 1 1 B
X PA1 6 -850 200 300 R 50 50 1 1 B
X PA2_TX2 7 -850 100 300 R 50 50 1 1 B
X PA3_RX2 8 -850 0 300 R 50 50 1 1 B
X PA4 9 -850 -100 300 R 50 50 1 1 B
ENDDRAW
ENDDEF
#
#End Library

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,562 +0,0 @@
(export (version D)
(design
(source /Users/erichelgeson/source/BlueSCSI/hw/bluepill_scsi.sch)
(date "Monday, March 29, 2021 at 05:37:12 PM")
(tool "Eeschema (5.1.6-0-10_14)")
(sheet (number 1) (name /) (tstamps /)
(title_block
(title)
(company)
(rev)
(date)
(source bluepill_scsi.sch)
(comment (number 1) (value ""))
(comment (number 2) (value ""))
(comment (number 3) (value ""))
(comment (number 4) (value "")))))
(components
(comp (ref J2)
(value Conn_02x25_Odd_Even)
(footprint Connector_IDC:IDC-Header_2x25_P2.54mm_Vertical)
(datasheet ~)
(fields
(field (name LCSC) https://lcsc.com/product-detail/IDC-Connectors_BOOMELE-Boom-Precision-Elec-C30006_C30006.html))
(libsource (lib Connector_Generic) (part Conn_02x25_Odd_Even) (description "Generic connector, double row, 02x25, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5F0261A7))
(comp (ref U1)
(value BluePill_STM32F103C)
(footprint blue:BluePill_STM32F103C)
(datasheet www.rogerclark.net)
(libsource (lib bluepill_scsi-rescue) (part BluePill_STM32F103C-bluepill) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 5F01A526))
(comp (ref J1)
(value Micro_SD_Card)
(footprint Connector_Card:microSD_HC_Molex_104031-0811)
(datasheet https://www.mouser.com/datasheet/2/276/1/1040310811_MEMORY_CARD_SOCKET-153593.pdf)
(fields
(field (name Mouser) https://www.mouser.com/ProductDetail/538-104031-0811))
(libsource (lib Connector) (part Micro_SD_Card) (description "Micro SD Card Socket"))
(sheetpath (names /) (tstamps /))
(tstamp 5F0BA382))
(comp (ref JP1)
(value TERM_ENABLE_GND)
(footprint Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical)
(datasheet ~)
(fields
(field (name Mouser) https://www.mouser.com/ProductDetail/872-920-0011-01)
(field (name Mouser_1) https://www.mouser.com/ProductDetail/151-8001-E))
(libsource (lib Device) (part Jumper) (description "Jumper, normally closed"))
(sheetpath (names /) (tstamps /))
(tstamp 5F9B37AA))
(comp (ref JP2)
(value TERM_ENABLE_5V)
(footprint Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_Vertical)
(datasheet ~)
(fields
(field (name Mouser) https://www.mouser.com/ProductDetail/872-920-0011-01)
(field (name Mouser_1) https://www.mouser.com/ProductDetail/151-8001-E))
(libsource (lib Device) (part Jumper) (description "Jumper, normally closed"))
(sheetpath (names /) (tstamps /))
(tstamp 5F9B5280))
(comp (ref H1)
(value MountingHole_Pad)
(footprint MountingHole:MountingHole_2.7mm_M2.5)
(datasheet ~)
(libsource (lib Mechanical) (part MountingHole_Pad) (description "Mounting Hole with connection"))
(sheetpath (names /) (tstamps /))
(tstamp 5F24DEAF))
(comp (ref RN1)
(value 220)
(footprint Resistor_THT:R_Array_SIP10)
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
(fields
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-220))
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
(sheetpath (names /) (tstamps /))
(tstamp 5FA4D960))
(comp (ref RN3)
(value 220)
(footprint Resistor_THT:R_Array_SIP10)
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
(fields
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-220))
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
(sheetpath (names /) (tstamps /))
(tstamp 5FA502AD))
(comp (ref RN2)
(value 330)
(footprint Resistor_THT:R_Array_SIP10)
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
(fields
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-330))
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
(sheetpath (names /) (tstamps /))
(tstamp 5FA52D01))
(comp (ref RN4)
(value 330)
(footprint Resistor_THT:R_Array_SIP10)
(datasheet http://www.vishay.com/docs/31509/csc.pdf)
(fields
(field (name Mouser) https://www.mouser.com/ProductDetail/652-4610X-1LF-330))
(libsource (lib Device) (part R_Network09) (description "9 resistor network, star topology, bussed resistors, small symbol"))
(sheetpath (names /) (tstamps /))
(tstamp 5FA54CA6))
(comp (ref J3)
(value "Programming Pins")
(footprint Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical)
(datasheet ~)
(libsource (lib Connector_Generic) (part Conn_01x04) (description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)"))
(sheetpath (names /) (tstamps /))
(tstamp 5F8E1558))
(comp (ref J4)
(value "Berg Power Connector")
(footprint 171825-4:TE_171825-4)
(datasheet 171825-4)
(libsource (lib bluepill_scsi-rescue) (part 171825-4-171825-4) (description ""))
(sheetpath (names /) (tstamps /))
(tstamp 5FA7AEFD))
(comp (ref D4)
(value Diode)
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal)
(datasheet ~)
(libsource (lib Device) (part D_Schottky) (description "Schottky diode"))
(sheetpath (names /) (tstamps /))
(tstamp 5FB96EB2))
(comp (ref D5)
(value Diode)
(footprint Diode_THT:D_A-405_P7.62mm_Horizontal)
(datasheet ~)
(libsource (lib Device) (part D_Schottky) (description "Schottky diode"))
(sheetpath (names /) (tstamps /))
(tstamp 5FB97E4B)))
(libparts
(libpart (lib Connector) (part Micro_SD_Card)
(description "Micro SD Card Socket")
(docs http://katalog.we-online.de/em/datasheet/693072010801.pdf)
(footprints
(fp microSD*))
(fields
(field (name Reference) J)
(field (name Value) Micro_SD_Card))
(pins
(pin (num 1) (name DAT2) (type BiDi))
(pin (num 2) (name DAT3/CD) (type BiDi))
(pin (num 3) (name CMD) (type input))
(pin (num 4) (name VDD) (type power_in))
(pin (num 5) (name CLK) (type input))
(pin (num 6) (name VSS) (type power_in))
(pin (num 7) (name DAT0) (type BiDi))
(pin (num 8) (name DAT1) (type BiDi))
(pin (num 9) (name SHIELD) (type passive))))
(libpart (lib Connector_Generic) (part Conn_01x04)
(description "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_1x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_01x04))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))))
(libpart (lib Connector_Generic) (part Conn_02x25_Odd_Even)
(description "Generic connector, double row, 02x25, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)")
(docs ~)
(footprints
(fp Connector*:*_2x??_*))
(fields
(field (name Reference) J)
(field (name Value) Conn_02x25_Odd_Even))
(pins
(pin (num 1) (name Pin_1) (type passive))
(pin (num 2) (name Pin_2) (type passive))
(pin (num 3) (name Pin_3) (type passive))
(pin (num 4) (name Pin_4) (type passive))
(pin (num 5) (name Pin_5) (type passive))
(pin (num 6) (name Pin_6) (type passive))
(pin (num 7) (name Pin_7) (type passive))
(pin (num 8) (name Pin_8) (type passive))
(pin (num 9) (name Pin_9) (type passive))
(pin (num 10) (name Pin_10) (type passive))
(pin (num 11) (name Pin_11) (type passive))
(pin (num 12) (name Pin_12) (type passive))
(pin (num 13) (name Pin_13) (type passive))
(pin (num 14) (name Pin_14) (type passive))
(pin (num 15) (name Pin_15) (type passive))
(pin (num 16) (name Pin_16) (type passive))
(pin (num 17) (name Pin_17) (type passive))
(pin (num 18) (name Pin_18) (type passive))
(pin (num 19) (name Pin_19) (type passive))
(pin (num 20) (name Pin_20) (type passive))
(pin (num 21) (name Pin_21) (type passive))
(pin (num 22) (name Pin_22) (type passive))
(pin (num 23) (name Pin_23) (type passive))
(pin (num 24) (name Pin_24) (type passive))
(pin (num 25) (name Pin_25) (type passive))
(pin (num 26) (name Pin_26) (type passive))
(pin (num 27) (name Pin_27) (type passive))
(pin (num 28) (name Pin_28) (type passive))
(pin (num 29) (name Pin_29) (type passive))
(pin (num 30) (name Pin_30) (type passive))
(pin (num 31) (name Pin_31) (type passive))
(pin (num 32) (name Pin_32) (type passive))
(pin (num 33) (name Pin_33) (type passive))
(pin (num 34) (name Pin_34) (type passive))
(pin (num 35) (name Pin_35) (type passive))
(pin (num 36) (name Pin_36) (type passive))
(pin (num 37) (name Pin_37) (type passive))
(pin (num 38) (name Pin_38) (type passive))
(pin (num 39) (name Pin_39) (type passive))
(pin (num 40) (name Pin_40) (type passive))
(pin (num 41) (name Pin_41) (type passive))
(pin (num 42) (name Pin_42) (type passive))
(pin (num 43) (name Pin_43) (type passive))
(pin (num 44) (name Pin_44) (type passive))
(pin (num 45) (name Pin_45) (type passive))
(pin (num 46) (name Pin_46) (type passive))
(pin (num 47) (name Pin_47) (type passive))
(pin (num 48) (name Pin_48) (type passive))
(pin (num 49) (name Pin_49) (type passive))
(pin (num 50) (name Pin_50) (type passive))))
(libpart (lib Device) (part D_Schottky)
(description "Schottky diode")
(docs ~)
(footprints
(fp TO-???*)
(fp *_Diode_*)
(fp *SingleDiode*)
(fp D_*))
(fields
(field (name Reference) D)
(field (name Value) D_Schottky))
(pins
(pin (num 1) (name K) (type passive))
(pin (num 2) (name A) (type passive))))
(libpart (lib Device) (part Jumper)
(description "Jumper, normally closed")
(docs ~)
(footprints
(fp SolderJumper*)
(fp Jumper*)
(fp TestPoint*2Pads*)
(fp TestPoint*Bridge*))
(fields
(field (name Reference) JP)
(field (name Value) Jumper))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive))))
(libpart (lib Device) (part R_Network09)
(description "9 resistor network, star topology, bussed resistors, small symbol")
(docs http://www.vishay.com/docs/31509/csc.pdf)
(footprints
(fp R?Array?SIP*))
(fields
(field (name Reference) RN)
(field (name Value) R_Network09)
(field (name Footprint) Resistor_THT:R_Array_SIP10))
(pins
(pin (num 1) (name common) (type passive))
(pin (num 2) (name R1) (type passive))
(pin (num 3) (name R2) (type passive))
(pin (num 4) (name R3) (type passive))
(pin (num 5) (name R4) (type passive))
(pin (num 6) (name R5) (type passive))
(pin (num 7) (name R6) (type passive))
(pin (num 8) (name R7) (type passive))
(pin (num 9) (name R8) (type passive))
(pin (num 10) (name R9) (type passive))))
(libpart (lib Mechanical) (part MountingHole_Pad)
(description "Mounting Hole with connection")
(docs ~)
(footprints
(fp MountingHole*Pad*))
(fields
(field (name Reference) H)
(field (name Value) MountingHole_Pad))
(pins
(pin (num 1) (name 1) (type input))))
(libpart (lib bluepill_scsi-rescue) (part 171825-4-171825-4)
(fields
(field (name Reference) J)
(field (name Value) 171825-4-171825-4)
(field (name Footprint) TE_171825-4)
(field (name Datasheet) 171825-4))
(pins
(pin (num 1) (name 1) (type passive))
(pin (num 2) (name 2) (type passive))
(pin (num 3) (name 3) (type passive))
(pin (num 4) (name 4) (type passive))))
(libpart (lib bluepill_scsi-rescue) (part BluePill_STM32F103C-bluepill)
(fields
(field (name Reference) U)
(field (name Value) BluePill_STM32F103C-bluepill)
(field (name Footprint) BluePill_breakouts:BluePill_STM32F103C)
(field (name Datasheet) www.rogerclark.net))
(pins
(pin (num 1) (name VBAT) (type power_in))
(pin (num 2) (name PC13_LED) (type BiDi))
(pin (num 3) (name PC14) (type BiDi))
(pin (num 4) (name PC15) (type BiDi))
(pin (num 5) (name PA0) (type BiDi))
(pin (num 6) (name PA1) (type BiDi))
(pin (num 7) (name PA2_TX2) (type BiDi))
(pin (num 8) (name PA3_RX2) (type BiDi))
(pin (num 9) (name PA4) (type BiDi))
(pin (num 10) (name PA5_SCK1) (type BiDi))
(pin (num 11) (name PA6_MISO1) (type BiDi))
(pin (num 12) (name PA7_MOSI1) (type BiDi))
(pin (num 13) (name PB0) (type BiDi))
(pin (num 14) (name PB1) (type BiDi))
(pin (num 15) (name PB10_SCL2) (type BiDi))
(pin (num 16) (name PB11_SDA2) (type BiDi))
(pin (num 17) (name NRST) (type input))
(pin (num 18) (name VCC3V3) (type BiDi))
(pin (num 19) (name GND) (type power_in))
(pin (num 20) (name GND) (type power_in))
(pin (num 21) (name PB12) (type BiDi))
(pin (num 22) (name PB13_SCK2) (type BiDi))
(pin (num 23) (name PB14_MISO2) (type BiDi))
(pin (num 24) (name PB15_MOSI2) (type BiDi))
(pin (num 25) (name PA8) (type BiDi))
(pin (num 26) (name PA9_TX1) (type BiDi))
(pin (num 27) (name PA10_RX1) (type BiDi))
(pin (num 28) (name PA11_USB_D-) (type BiDi))
(pin (num 29) (name PA12_USBD+) (type BiDi))
(pin (num 30) (name PA15) (type BiDi))
(pin (num 31) (name PB3) (type BiDi))
(pin (num 32) (name PB4) (type BiDi))
(pin (num 33) (name PB5) (type BiDi))
(pin (num 34) (name PB6_SCL1) (type BiDi))
(pin (num 35) (name PB7_SDA1) (type BiDi))
(pin (num 36) (name PB8) (type BiDi))
(pin (num 37) (name PB9) (type BiDi))
(pin (num 38) (name 5V_USB) (type BiDi))
(pin (num 39) (name GND) (type power_in))
(pin (num 40) (name VCC3V3) (type BiDi))
(pin (num 41) (name PA14_SWCLK) (type BiDi))
(pin (num 42) (name PA13_SWDIO) (type BiDi)))))
(libraries
(library (logical Connector)
(uri "/Library/Application Support/kicad/library/Connector.lib"))
(library (logical Connector_Generic)
(uri "/Library/Application Support/kicad/library/Connector_Generic.lib"))
(library (logical Device)
(uri "/Library/Application Support/kicad/library/Device.lib"))
(library (logical Mechanical)
(uri "/Library/Application Support/kicad/library/Mechanical.lib"))
(library (logical bluepill_scsi-rescue)
(uri /Users/erichelgeson/source/BlueSCSI/hw/bluepill_scsi-rescue.lib)))
(nets
(net (code 1) (name "Net-(J2-Pad25)")
(node (ref J2) (pin 25)))
(net (code 2) (name "Net-(J2-Pad34)")
(node (ref J2) (pin 34)))
(net (code 3) (name /SCSI_DAT0)
(node (ref RN3) (pin 3))
(node (ref J2) (pin 2))
(node (ref RN4) (pin 3))
(node (ref U1) (pin 36)))
(net (code 4) (name /SCSI_DAT1)
(node (ref RN3) (pin 4))
(node (ref RN4) (pin 4))
(node (ref J2) (pin 4))
(node (ref U1) (pin 37)))
(net (code 5) (name /SCSI_DAT2)
(node (ref U1) (pin 15))
(node (ref RN4) (pin 5))
(node (ref J2) (pin 6))
(node (ref RN3) (pin 5)))
(net (code 6) (name /SCSI_DAT3)
(node (ref U1) (pin 16))
(node (ref RN3) (pin 6))
(node (ref J2) (pin 8))
(node (ref RN4) (pin 6)))
(net (code 7) (name /SCSI_DAT4)
(node (ref RN4) (pin 7))
(node (ref U1) (pin 21))
(node (ref RN3) (pin 7))
(node (ref J2) (pin 10)))
(net (code 8) (name /SCSI_DAT5)
(node (ref RN4) (pin 8))
(node (ref RN3) (pin 8))
(node (ref U1) (pin 22))
(node (ref J2) (pin 12)))
(net (code 9) (name /SCSI_DAT6)
(node (ref J2) (pin 14))
(node (ref RN4) (pin 9))
(node (ref U1) (pin 23))
(node (ref RN3) (pin 9)))
(net (code 10) (name /SCSI_DAT7)
(node (ref RN3) (pin 10))
(node (ref U1) (pin 24))
(node (ref RN4) (pin 10))
(node (ref J2) (pin 16)))
(net (code 11) (name /SCSI_DBP)
(node (ref U1) (pin 13))
(node (ref RN4) (pin 2))
(node (ref J2) (pin 18))
(node (ref RN3) (pin 2)))
(net (code 12) (name /SCSI_BSY)
(node (ref J3) (pin 3))
(node (ref RN2) (pin 6))
(node (ref J2) (pin 36))
(node (ref U1) (pin 26))
(node (ref RN1) (pin 6)))
(net (code 13) (name /SCSI_ACK)
(node (ref J3) (pin 4))
(node (ref RN2) (pin 9))
(node (ref J2) (pin 38))
(node (ref U1) (pin 27))
(node (ref RN1) (pin 9)))
(net (code 14) (name /SCSI_RST)
(node (ref RN2) (pin 8))
(node (ref J2) (pin 40))
(node (ref U1) (pin 30))
(node (ref RN1) (pin 8)))
(net (code 15) (name /SCSI_SEL)
(node (ref RN2) (pin 7))
(node (ref U1) (pin 32))
(node (ref RN1) (pin 7))
(node (ref J2) (pin 44)))
(net (code 16) (name /SCSI_CD)
(node (ref RN1) (pin 4))
(node (ref J2) (pin 46))
(node (ref U1) (pin 33))
(node (ref RN2) (pin 4)))
(net (code 17) (name /SCSI_REQ)
(node (ref RN1) (pin 3))
(node (ref J2) (pin 48))
(node (ref RN2) (pin 3))
(node (ref U1) (pin 34)))
(net (code 18) (name /SCSI_IO)
(node (ref U1) (pin 35))
(node (ref RN2) (pin 2))
(node (ref RN1) (pin 2))
(node (ref J2) (pin 50)))
(net (code 19) (name /SCSI_ATN)
(node (ref U1) (pin 25))
(node (ref RN1) (pin 10))
(node (ref J2) (pin 32))
(node (ref RN2) (pin 10)))
(net (code 20) (name /SCSI_MSG)
(node (ref RN1) (pin 5))
(node (ref U1) (pin 31))
(node (ref J2) (pin 42))
(node (ref RN2) (pin 5)))
(net (code 21) (name GND)
(node (ref J2) (pin 39))
(node (ref J2) (pin 41))
(node (ref J2) (pin 43))
(node (ref J2) (pin 37))
(node (ref J4) (pin 2))
(node (ref J2) (pin 45))
(node (ref J2) (pin 47))
(node (ref J2) (pin 49))
(node (ref J2) (pin 5))
(node (ref J2) (pin 7))
(node (ref J2) (pin 9))
(node (ref JP1) (pin 2))
(node (ref J2) (pin 1))
(node (ref J2) (pin 11))
(node (ref J2) (pin 35))
(node (ref J2) (pin 13))
(node (ref J2) (pin 15))
(node (ref J1) (pin 9))
(node (ref J2) (pin 17))
(node (ref J1) (pin 6))
(node (ref J2) (pin 33))
(node (ref J2) (pin 31))
(node (ref J2) (pin 19))
(node (ref J3) (pin 2))
(node (ref J2) (pin 30))
(node (ref J2) (pin 20))
(node (ref J2) (pin 21))
(node (ref J2) (pin 22))
(node (ref J2) (pin 23))
(node (ref J2) (pin 3))
(node (ref J2) (pin 24))
(node (ref U1) (pin 39))
(node (ref J2) (pin 27))
(node (ref J2) (pin 29))
(node (ref J2) (pin 28))
(node (ref U1) (pin 20))
(node (ref U1) (pin 19)))
(net (code 22) (name +3V3)
(node (ref J1) (pin 4))
(node (ref J3) (pin 1))
(node (ref U1) (pin 40))
(node (ref U1) (pin 18)))
(net (code 23) (name /SD_CS)
(node (ref J1) (pin 2))
(node (ref U1) (pin 9)))
(net (code 24) (name /SD_CLK)
(node (ref U1) (pin 10))
(node (ref J1) (pin 5)))
(net (code 25) (name /SD_MISO)
(node (ref U1) (pin 11))
(node (ref J1) (pin 7)))
(net (code 26) (name /SD_MOSI)
(node (ref U1) (pin 12))
(node (ref J1) (pin 3)))
(net (code 27) (name "Net-(U1-Pad1)")
(node (ref U1) (pin 1)))
(net (code 28) (name "Net-(U1-Pad14)")
(node (ref U1) (pin 14)))
(net (code 29) (name "Net-(U1-Pad17)")
(node (ref U1) (pin 17)))
(net (code 30) (name /LED)
(node (ref U1) (pin 2)))
(net (code 31) (name "Net-(U1-Pad28)")
(node (ref U1) (pin 28)))
(net (code 32) (name "Net-(U1-Pad29)")
(node (ref U1) (pin 29)))
(net (code 33) (name "Net-(U1-Pad3)")
(node (ref U1) (pin 3)))
(net (code 34) (name "Net-(U1-Pad4)")
(node (ref U1) (pin 4)))
(net (code 35) (name "Net-(U1-Pad41)")
(node (ref U1) (pin 41)))
(net (code 36) (name "Net-(U1-Pad42)")
(node (ref U1) (pin 42)))
(net (code 37) (name "Net-(U1-Pad5)")
(node (ref U1) (pin 5)))
(net (code 38) (name "Net-(U1-Pad6)")
(node (ref U1) (pin 6)))
(net (code 39) (name "Net-(U1-Pad7)")
(node (ref U1) (pin 7)))
(net (code 40) (name "Net-(U1-Pad8)")
(node (ref U1) (pin 8)))
(net (code 41) (name "Net-(J1-Pad1)")
(node (ref J1) (pin 1)))
(net (code 42) (name "Net-(J1-Pad8)")
(node (ref J1) (pin 8)))
(net (code 43) (name /TERM_PWR)
(node (ref D5) (pin 2))
(node (ref J2) (pin 26)))
(net (code 44) (name "Net-(H1-Pad1)")
(node (ref H1) (pin 1)))
(net (code 45) (name "Net-(JP2-Pad1)")
(node (ref RN1) (pin 1))
(node (ref JP2) (pin 1))
(node (ref RN3) (pin 1)))
(net (code 46) (name "Net-(JP1-Pad1)")
(node (ref JP1) (pin 1))
(node (ref RN4) (pin 1))
(node (ref RN2) (pin 1)))
(net (code 47) (name "Net-(J4-Pad3)")
(node (ref J4) (pin 3)))
(net (code 48) (name "Net-(J4-Pad4)")
(node (ref J4) (pin 4)))
(net (code 49) (name VCC)
(node (ref JP2) (pin 2))
(node (ref U1) (pin 38))
(node (ref D4) (pin 1))
(node (ref D5) (pin 1)))
(net (code 50) (name +5V)
(node (ref J4) (pin 1))
(node (ref D4) (pin 2)))))

View File

@ -1,249 +0,0 @@
update=10/17/2020 9:08:29 PM
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1
[pcbnew]
version=1
PageLayoutDescrFile=
LastNetListRead=bluepill_scsi.net
CopperLayerCount=2
BoardThickness=1.6
AllowMicroVias=0
AllowBlindVias=0
RequireCourtyardDefinitions=0
ProhibitOverlappingCourtyards=1
MinTrackWidth=0.2
MinViaDiameter=0.4
MinViaDrill=0.3
MinMicroViaDiameter=0.2
MinMicroViaDrill=0.09999999999999999
MinHoleToHole=0.25
TrackWidth1=0.25
TrackWidth2=0.4
ViaDiameter1=0.8
ViaDrill1=0.4
dPairWidth1=0.2
dPairGap1=0.25
dPairViaGap1=0.25
SilkLineWidth=0.12
SilkTextSizeV=1
SilkTextSizeH=1
SilkTextSizeThickness=0.15
SilkTextItalic=0
SilkTextUpright=1
CopperLineWidth=0.2
CopperTextSizeV=1.5
CopperTextSizeH=1.5
CopperTextThickness=0.3
CopperTextItalic=0
CopperTextUpright=1
EdgeCutLineWidth=0.05
CourtyardLineWidth=0.05
OthersLineWidth=0.15
OthersTextSizeV=1
OthersTextSizeH=1
OthersTextSizeThickness=0.15
OthersTextItalic=0
OthersTextUpright=1
SolderMaskClearance=0.05
SolderMaskMinWidth=0
SolderPasteClearance=0
SolderPasteRatio=-0
[pcbnew/Layer.F.Cu]
Name=F.Cu
Type=0
Enabled=1
[pcbnew/Layer.In1.Cu]
Name=In1.Cu
Type=0
Enabled=0
[pcbnew/Layer.In2.Cu]
Name=In2.Cu
Type=0
Enabled=0
[pcbnew/Layer.In3.Cu]
Name=In3.Cu
Type=0
Enabled=0
[pcbnew/Layer.In4.Cu]
Name=In4.Cu
Type=0
Enabled=0
[pcbnew/Layer.In5.Cu]
Name=In5.Cu
Type=0
Enabled=0
[pcbnew/Layer.In6.Cu]
Name=In6.Cu
Type=0
Enabled=0
[pcbnew/Layer.In7.Cu]
Name=In7.Cu
Type=0
Enabled=0
[pcbnew/Layer.In8.Cu]
Name=In8.Cu
Type=0
Enabled=0
[pcbnew/Layer.In9.Cu]
Name=In9.Cu
Type=0
Enabled=0
[pcbnew/Layer.In10.Cu]
Name=In10.Cu
Type=0
Enabled=0
[pcbnew/Layer.In11.Cu]
Name=In11.Cu
Type=0
Enabled=0
[pcbnew/Layer.In12.Cu]
Name=In12.Cu
Type=0
Enabled=0
[pcbnew/Layer.In13.Cu]
Name=In13.Cu
Type=0
Enabled=0
[pcbnew/Layer.In14.Cu]
Name=In14.Cu
Type=0
Enabled=0
[pcbnew/Layer.In15.Cu]
Name=In15.Cu
Type=0
Enabled=0
[pcbnew/Layer.In16.Cu]
Name=In16.Cu
Type=0
Enabled=0
[pcbnew/Layer.In17.Cu]
Name=In17.Cu
Type=0
Enabled=0
[pcbnew/Layer.In18.Cu]
Name=In18.Cu
Type=0
Enabled=0
[pcbnew/Layer.In19.Cu]
Name=In19.Cu
Type=0
Enabled=0
[pcbnew/Layer.In20.Cu]
Name=In20.Cu
Type=0
Enabled=0
[pcbnew/Layer.In21.Cu]
Name=In21.Cu
Type=0
Enabled=0
[pcbnew/Layer.In22.Cu]
Name=In22.Cu
Type=0
Enabled=0
[pcbnew/Layer.In23.Cu]
Name=In23.Cu
Type=0
Enabled=0
[pcbnew/Layer.In24.Cu]
Name=In24.Cu
Type=0
Enabled=0
[pcbnew/Layer.In25.Cu]
Name=In25.Cu
Type=0
Enabled=0
[pcbnew/Layer.In26.Cu]
Name=In26.Cu
Type=0
Enabled=0
[pcbnew/Layer.In27.Cu]
Name=In27.Cu
Type=0
Enabled=0
[pcbnew/Layer.In28.Cu]
Name=In28.Cu
Type=0
Enabled=0
[pcbnew/Layer.In29.Cu]
Name=In29.Cu
Type=0
Enabled=0
[pcbnew/Layer.In30.Cu]
Name=In30.Cu
Type=0
Enabled=0
[pcbnew/Layer.B.Cu]
Name=B.Cu
Type=0
Enabled=1
[pcbnew/Layer.B.Adhes]
Enabled=1
[pcbnew/Layer.F.Adhes]
Enabled=1
[pcbnew/Layer.B.Paste]
Enabled=1
[pcbnew/Layer.F.Paste]
Enabled=1
[pcbnew/Layer.B.SilkS]
Enabled=1
[pcbnew/Layer.F.SilkS]
Enabled=1
[pcbnew/Layer.B.Mask]
Enabled=1
[pcbnew/Layer.F.Mask]
Enabled=1
[pcbnew/Layer.Dwgs.User]
Enabled=1
[pcbnew/Layer.Cmts.User]
Enabled=1
[pcbnew/Layer.Eco1.User]
Enabled=1
[pcbnew/Layer.Eco2.User]
Enabled=1
[pcbnew/Layer.Edge.Cuts]
Enabled=1
[pcbnew/Layer.Margin]
Enabled=1
[pcbnew/Layer.B.CrtYd]
Enabled=1
[pcbnew/Layer.F.CrtYd]
Enabled=1
[pcbnew/Layer.B.Fab]
Enabled=1
[pcbnew/Layer.F.Fab]
Enabled=1
[pcbnew/Layer.Rescue]
Enabled=0
[pcbnew/Netclasses]
[pcbnew/Netclasses/Default]
Name=Default
Clearance=0.2
TrackWidth=0.25
ViaDiameter=0.8
ViaDrill=0.4
uViaDiameter=0.3
uViaDrill=0.1
dPairWidth=0.2
dPairGap=0.25
dPairViaGap=0.25

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,715 +0,0 @@
162127692462820
Diode_THT
D_5KPW_P7.62mm_Vertical_AnodeUp
Diode, 5KPW series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9*8mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5KPW series Axial Vertical pin pitch 7.62mm length 9mm diameter 8mm
0
2
2
Diode_THT
D_5KPW_P7.62mm_Vertical_KathodeUp
Diode, 5KPW series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9*8mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5KPW series Axial Vertical pin pitch 7.62mm length 9mm diameter 8mm
0
2
2
Diode_THT
D_5KPW_P12.70mm_Horizontal
Diode, 5KPW series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9*8mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5KPW series Axial Horizontal pin pitch 12.7mm length 9mm diameter 8mm
0
2
2
Diode_THT
D_5KP_P7.62mm_Vertical_AnodeUp
Diode, 5KP series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5KP series Axial Vertical pin pitch 7.62mm length 7.62mm diameter 9.53mm
0
2
2
Diode_THT
D_5KP_P7.62mm_Vertical_KathodeUp
Diode, 5KP series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5KP series Axial Vertical pin pitch 7.62mm length 7.62mm diameter 9.53mm
0
2
2
Diode_THT
D_5KP_P10.16mm_Horizontal
Diode, 5KP series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5KP series Axial Horizontal pin pitch 10.16mm length 7.62mm diameter 9.53mm
0
2
2
Diode_THT
D_5KP_P12.70mm_Horizontal
Diode, 5KP series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=7.62*9.53mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5KP series Axial Horizontal pin pitch 12.7mm length 7.62mm diameter 9.53mm
0
2
2
Diode_THT
D_5W_P5.08mm_Vertical_AnodeUp
Diode, 5W series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5W series Axial Vertical pin pitch 5.08mm length 8.9mm diameter 3.7mm
0
2
2
Diode_THT
D_5W_P5.08mm_Vertical_KathodeUp
Diode, 5W series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5W series Axial Vertical pin pitch 5.08mm length 8.9mm diameter 3.7mm
0
2
2
Diode_THT
D_5W_P10.16mm_Horizontal
Diode, 5W series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5W series Axial Horizontal pin pitch 10.16mm length 8.9mm diameter 3.7mm
0
2
2
Diode_THT
D_5W_P12.70mm_Horizontal
Diode, 5W series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=8.9*3.7mm^2, , http://www.diodes.com/_files/packages/8686949.gif
Diode 5W series Axial Horizontal pin pitch 12.7mm length 8.9mm diameter 3.7mm
0
2
2
Diode_THT
D_A-405_P2.54mm_Vertical_AnodeUp
Diode, A-405 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
Diode A-405 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_A-405_P2.54mm_Vertical_KathodeUp
Diode, A-405 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
Diode A-405 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_A-405_P5.08mm_Vertical_AnodeUp
Diode, A-405 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
Diode A-405 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_A-405_P5.08mm_Vertical_KathodeUp
Diode, A-405 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
Diode A-405 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_A-405_P7.62mm_Horizontal
Diode, A-405 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
Diode A-405 series Axial Horizontal pin pitch 7.62mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_A-405_P10.16mm_Horizontal
Diode, A-405 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
Diode A-405 series Axial Horizontal pin pitch 10.16mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_A-405_P12.70mm_Horizontal
Diode, A-405 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/A-405.pdf
Diode A-405 series Axial Horizontal pin pitch 12.7mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-15_P2.54mm_Vertical_AnodeUp
Diode, DO-15 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Vertical pin pitch 2.54mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P2.54mm_Vertical_KathodeUp
Diode, DO-15 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Vertical pin pitch 2.54mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P3.81mm_Vertical_AnodeUp
Diode, DO-15 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Vertical pin pitch 3.81mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P3.81mm_Vertical_KathodeUp
Diode, DO-15 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Vertical pin pitch 3.81mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P5.08mm_Vertical_AnodeUp
Diode, DO-15 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Vertical pin pitch 5.08mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P5.08mm_Vertical_KathodeUp
Diode, DO-15 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Vertical pin pitch 5.08mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P10.16mm_Horizontal
Diode, DO-15 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Horizontal pin pitch 10.16mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P12.70mm_Horizontal
Diode, DO-15 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Horizontal pin pitch 12.7mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-15_P15.24mm_Horizontal
Diode, DO-15 series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=7.6*3.6mm^2, , http://www.diodes.com/_files/packages/DO-15.pdf
Diode DO-15 series Axial Horizontal pin pitch 15.24mm length 7.6mm diameter 3.6mm
0
2
2
Diode_THT
D_DO-27_P5.08mm_Vertical_AnodeUp
Diode, DO-27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
Diode DO-27 series Axial Vertical pin pitch 5.08mm length 9.52mm diameter 5.33mm
0
2
2
Diode_THT
D_DO-27_P5.08mm_Vertical_KathodeUp
Diode, DO-27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
Diode DO-27 series Axial Vertical pin pitch 5.08mm length 9.52mm diameter 5.33mm
0
2
2
Diode_THT
D_DO-27_P12.70mm_Horizontal
Diode, DO-27 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
Diode DO-27 series Axial Horizontal pin pitch 12.7mm length 9.52mm diameter 5.33mm
0
2
2
Diode_THT
D_DO-27_P15.24mm_Horizontal
Diode, DO-27 series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.52*5.33mm^2, , http://www.slottechforum.com/slotinfo/Techstuff/CD2%20Diodes%20and%20Transistors/Cases/Diode%20DO-27.jpg
Diode DO-27 series Axial Horizontal pin pitch 15.24mm length 9.52mm diameter 5.33mm
0
2
2
Diode_THT
D_DO-34_SOD68_P2.54mm_Vertical_AnodeUp
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
Diode DO-34_SOD68 series Axial Vertical pin pitch 2.54mm length 3.04mm diameter 1.6mm
0
2
2
Diode_THT
D_DO-34_SOD68_P2.54mm_Vertical_KathodeUp
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
Diode DO-34_SOD68 series Axial Vertical pin pitch 2.54mm length 3.04mm diameter 1.6mm
0
2
2
Diode_THT
D_DO-34_SOD68_P5.08mm_Vertical_AnodeUp
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
Diode DO-34_SOD68 series Axial Vertical pin pitch 5.08mm length 3.04mm diameter 1.6mm
0
2
2
Diode_THT
D_DO-34_SOD68_P5.08mm_Vertical_KathodeUp
Diode, DO-34_SOD68 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
Diode DO-34_SOD68 series Axial Vertical pin pitch 5.08mm length 3.04mm diameter 1.6mm
0
2
2
Diode_THT
D_DO-34_SOD68_P7.62mm_Horizontal
Diode, DO-34_SOD68 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
Diode DO-34_SOD68 series Axial Horizontal pin pitch 7.62mm length 3.04mm diameter 1.6mm
0
2
2
Diode_THT
D_DO-34_SOD68_P10.16mm_Horizontal
Diode, DO-34_SOD68 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
Diode DO-34_SOD68 series Axial Horizontal pin pitch 10.16mm length 3.04mm diameter 1.6mm
0
2
2
Diode_THT
D_DO-34_SOD68_P12.70mm_Horizontal
Diode, DO-34_SOD68 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=3.04*1.6mm^2, , https://www.nxp.com/docs/en/data-sheet/KTY83_SER.pdf
Diode DO-34_SOD68 series Axial Horizontal pin pitch 12.7mm length 3.04mm diameter 1.6mm
0
2
2
Diode_THT
D_DO-35_SOD27_P2.54mm_Vertical_AnodeUp
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Vertical pin pitch 2.54mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P2.54mm_Vertical_KathodeUp
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Vertical pin pitch 2.54mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P3.81mm_Vertical_AnodeUp
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Vertical pin pitch 3.81mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P3.81mm_Vertical_KathodeUp
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Vertical pin pitch 3.81mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P5.08mm_Vertical_AnodeUp
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Vertical pin pitch 5.08mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P5.08mm_Vertical_KathodeUp
Diode, DO-35_SOD27 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Vertical pin pitch 5.08mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P7.62mm_Horizontal
Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P10.16mm_Horizontal
Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Horizontal pin pitch 10.16mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-35_SOD27_P12.70mm_Horizontal
Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf
Diode DO-35_SOD27 series Axial Horizontal pin pitch 12.7mm length 4mm diameter 2mm
0
2
2
Diode_THT
D_DO-41_SOD81_P2.54mm_Vertical_AnodeUp
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
Diode DO-41_SOD81 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P2.54mm_Vertical_KathodeUp
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
Diode DO-41_SOD81 series Axial Vertical pin pitch 2.54mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P3.81mm_Vertical_AnodeUp
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=5.2*2.7mm^2, , https://www.diodes.com/assets/Package-Files/DO-41-Plastic.pdf
Diode DO-41_SOD81 series Axial Vertical pin pitch 3.81mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P3.81mm_Vertical_KathodeUp
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=5.2*2.7mm^2, , https://www.diodes.com/assets/Package-Files/DO-41-Plastic.pdf
Diode DO-41_SOD81 series Axial Vertical pin pitch 3.81mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P5.08mm_Vertical_AnodeUp
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
Diode DO-41_SOD81 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P5.08mm_Vertical_KathodeUp
Diode, DO-41_SOD81 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
Diode DO-41_SOD81 series Axial Vertical pin pitch 5.08mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P7.62mm_Horizontal
Diode, DO-41_SOD81 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
Diode DO-41_SOD81 series Axial Horizontal pin pitch 7.62mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P10.16mm_Horizontal
Diode, DO-41_SOD81 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
Diode DO-41_SOD81 series Axial Horizontal pin pitch 10.16mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-41_SOD81_P12.70mm_Horizontal
Diode, DO-41_SOD81 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=5.2*2.7mm^2, , http://www.diodes.com/_files/packages/DO-41%20(Plastic).pdf
Diode DO-41_SOD81 series Axial Horizontal pin pitch 12.7mm length 5.2mm diameter 2.7mm
0
2
2
Diode_THT
D_DO-201AD_P3.81mm_Vertical_AnodeUp
Diode, DO-201AD series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
Diode DO-201AD series Axial Vertical pin pitch 3.81mm length 9.5mm diameter 5.2mm
0
2
2
Diode_THT
D_DO-201AD_P3.81mm_Vertical_KathodeUp
Diode, DO-201AD series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
Diode DO-201AD series Axial Vertical pin pitch 3.81mm length 9.5mm diameter 5.2mm
0
2
2
Diode_THT
D_DO-201AD_P5.08mm_Vertical_AnodeUp
Diode, DO-201AD series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
Diode DO-201AD series Axial Vertical pin pitch 5.08mm length 9.5mm diameter 5.2mm
0
2
2
Diode_THT
D_DO-201AD_P5.08mm_Vertical_KathodeUp
Diode, DO-201AD series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
Diode DO-201AD series Axial Vertical pin pitch 5.08mm length 9.5mm diameter 5.2mm
0
2
2
Diode_THT
D_DO-201AD_P12.70mm_Horizontal
Diode, DO-201AD series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
Diode DO-201AD series Axial Horizontal pin pitch 12.7mm length 9.5mm diameter 5.2mm
0
2
2
Diode_THT
D_DO-201AD_P15.24mm_Horizontal
Diode, DO-201AD series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf
Diode DO-201AD series Axial Horizontal pin pitch 15.24mm length 9.5mm diameter 5.2mm
0
2
2
Diode_THT
D_DO-201AE_P3.81mm_Vertical_AnodeUp
Diode, DO-201AE series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
Diode DO-201AE series Axial Vertical pin pitch 3.81mm length 9mm diameter 5.3mm
0
2
2
Diode_THT
D_DO-201AE_P3.81mm_Vertical_KathodeUp
Diode, DO-201AE series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
Diode DO-201AE series Axial Vertical pin pitch 3.81mm length 9mm diameter 5.3mm
0
2
2
Diode_THT
D_DO-201AE_P5.08mm_Vertical_AnodeUp
Diode, DO-201AE series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
Diode DO-201AE series Axial Vertical pin pitch 5.08mm length 9mm diameter 5.3mm
0
2
2
Diode_THT
D_DO-201AE_P5.08mm_Vertical_KathodeUp
Diode, DO-201AE series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
Diode DO-201AE series Axial Vertical pin pitch 5.08mm length 9mm diameter 5.3mm
0
2
2
Diode_THT
D_DO-201AE_P12.70mm_Horizontal
Diode, DO-201AE series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
Diode DO-201AE series Axial Horizontal pin pitch 12.7mm length 9mm diameter 5.3mm
0
2
2
Diode_THT
D_DO-201AE_P15.24mm_Horizontal
Diode, DO-201AE series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9*5.3mm^2, , http://www.farnell.com/datasheets/529758.pdf
Diode DO-201AE series Axial Horizontal pin pitch 15.24mm length 9mm diameter 5.3mm
0
2
2
Diode_THT
D_DO-201_P3.81mm_Vertical_AnodeUp
Diode, DO-201 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
Diode DO-201 series Axial Vertical pin pitch 3.81mm length 9.53mm diameter 5.21mm
0
2
2
Diode_THT
D_DO-201_P3.81mm_Vertical_KathodeUp
Diode, DO-201 series, Axial, Vertical, pin pitch=3.81mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
Diode DO-201 series Axial Vertical pin pitch 3.81mm length 9.53mm diameter 5.21mm
0
2
2
Diode_THT
D_DO-201_P5.08mm_Vertical_AnodeUp
Diode, DO-201 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
Diode DO-201 series Axial Vertical pin pitch 5.08mm length 9.53mm diameter 5.21mm
0
2
2
Diode_THT
D_DO-201_P5.08mm_Vertical_KathodeUp
Diode, DO-201 series, Axial, Vertical, pin pitch=5.08mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
Diode DO-201 series Axial Vertical pin pitch 5.08mm length 9.53mm diameter 5.21mm
0
2
2
Diode_THT
D_DO-201_P12.70mm_Horizontal
Diode, DO-201 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
Diode DO-201 series Axial Horizontal pin pitch 12.7mm length 9.53mm diameter 5.21mm
0
2
2
Diode_THT
D_DO-201_P15.24mm_Horizontal
Diode, DO-201 series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.53*5.21mm^2, , http://www.diodes.com/_files/packages/DO-201.pdf
Diode DO-201 series Axial Horizontal pin pitch 15.24mm length 9.53mm diameter 5.21mm
0
2
2
Diode_THT
D_P600_R-6_P7.62mm_Vertical_AnodeUp
Diode, P600_R-6 series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
Diode P600_R-6 series Axial Vertical pin pitch 7.62mm length 9.1mm diameter 9.1mm
0
2
2
Diode_THT
D_P600_R-6_P7.62mm_Vertical_KathodeUp
Diode, P600_R-6 series, Axial, Vertical, pin pitch=7.62mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
Diode P600_R-6 series Axial Vertical pin pitch 7.62mm length 9.1mm diameter 9.1mm
0
2
2
Diode_THT
D_P600_R-6_P12.70mm_Horizontal
Diode, P600_R-6 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
Diode P600_R-6 series Axial Horizontal pin pitch 12.7mm length 9.1mm diameter 9.1mm
0
2
2
Diode_THT
D_P600_R-6_P20.00mm_Horizontal
Diode, P600_R-6 series, Axial, Horizontal, pin pitch=20mm, , length*diameter=9.1*9.1mm^2, , http://www.vishay.com/docs/88692/p600a.pdf, http://www.diodes.com/_files/packages/R-6.pdf
Diode P600_R-6 series Axial Horizontal pin pitch 20mm length 9.1mm diameter 9.1mm
0
2
2
Diode_THT
D_T-1_P2.54mm_Vertical_AnodeUp
Diode, T-1 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
Diode T-1 series Axial Vertical pin pitch 2.54mm length 3.2mm diameter 2.6mm
0
2
2
Diode_THT
D_T-1_P2.54mm_Vertical_KathodeUp
Diode, T-1 series, Axial, Vertical, pin pitch=2.54mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
Diode T-1 series Axial Vertical pin pitch 2.54mm length 3.2mm diameter 2.6mm
0
2
2
Diode_THT
D_T-1_P5.08mm_Horizontal
Diode, T-1 series, Axial, Horizontal, pin pitch=5.08mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
Diode T-1 series Axial Horizontal pin pitch 5.08mm length 3.2mm diameter 2.6mm
0
2
2
Diode_THT
D_T-1_P10.16mm_Horizontal
Diode, T-1 series, Axial, Horizontal, pin pitch=10.16mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
Diode T-1 series Axial Horizontal pin pitch 10.16mm length 3.2mm diameter 2.6mm
0
2
2
Diode_THT
D_T-1_P12.70mm_Horizontal
Diode, T-1 series, Axial, Horizontal, pin pitch=12.7mm, , length*diameter=3.2*2.6mm^2, , http://www.diodes.com/_files/packages/T-1.pdf
Diode T-1 series Axial Horizontal pin pitch 12.7mm length 3.2mm diameter 2.6mm
0
2
2
Diode_THT
Diode_Bridge_15.1x15.1x6.3mm_P10.9mm
Single phase bridge rectifier case 15.1x15.1mm, pitch 10.9mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/pb1000.pdf
Diode Bridge PB10xxS
0
4
4
Diode_THT
Diode_Bridge_15.2x15.2x6.3mm_P10.9mm
Single phase bridge rectifier case 15.2x15.2mm, pitch 10.9mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/kbpc600.pdf
Diode Bridge KBPC6xx
0
4
4
Diode_THT
Diode_Bridge_15.7x15.7x6.3mm_P10.8mm
Single phase bridge rectifier case 15.7x15.7
Diode Bridge
0
4
4
Diode_THT
Diode_Bridge_16.7x16.7x6.3mm_P10.8mm
Single phase bridge rectifier case 16.7x16.7
Diode Bridge
0
4
4
Diode_THT
Diode_Bridge_19.0x3.5x10.0mm_P5.0mm
Vishay GBU rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88606/g3sba20.pdf
Vishay GBU rectifier diode bridge
0
4
4
Diode_THT
Diode_Bridge_19.0x19.0x6.8mm_P12.7mm
Single phase bridge rectifier case 19x19mm, pitch 12.7mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/pb1000.pdf
Diode Bridge PB10xx
0
4
4
Diode_THT
Diode_Bridge_28.6x28.6x7.3mm_P18.0mm_P11.6mm
Single phase bridge rectifier case 28.6x28.6mm, pitch 18.0mm & 11.6mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/kbpc1500fw.pdf
Diode Bridge KBPCxxxxWP
0
4
4
Diode_THT
Diode_Bridge_32.0x5.6x17.0mm_P10.0mm_P7.5mm
Diotec 32x5.6x17mm rectifier package, 7.5mm/10mm pitch, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/b40c3700.pdf
Diotec rectifier diode bridge
0
4
4
Diode_THT
Diode_Bridge_DIP-4_W5.08mm_P2.54mm
4-lead dip package for diode bridges, row spacing 5.08mm, pin-spacing 2.54mm, see http://www.vishay.com/docs/88898/b2m.pdf
DIL DIP PDIP 5.08mm 2.54
0
4
4
Diode_THT
Diode_Bridge_DIP-4_W7.62mm_P5.08mm
4-lead dip package for diode bridges, row spacing 7.62 mm (300 mils), see http://cdn-reichelt.de/documents/datenblatt/A400/HDBL101G_20SERIES-TSC.pdf
DIL DIP PDIP 5.08mm 7.62mm 300mil
0
4
4
Diode_THT
Diode_Bridge_Round_D8.9mm
4-lead round diode bridge package, diameter 8.9mm, pin pitch 5.08mm, see http://cdn-reichelt.de/documents/datenblatt/A400/W005M-W10M_SEP.PDF
diode bridge 8.9mm 8.85mm WOB pitch 5.08mm
0
4
4
Diode_THT
Diode_Bridge_Round_D9.0mm
4-lead round diode bridge package, diameter 9.0mm, pin pitch 5.0mm, see https://diotec.com/tl_files/diotec/files/pdf/datasheets/b40r.pdf
diode bridge 9.0mm 8.85mm WOB pitch 5.0mm
0
4
4
Diode_THT
Diode_Bridge_Round_D9.8mm
4-lead round diode bridge package, diameter 9.8mm, pin pitch 5.08mm, see http://www.vishay.com/docs/88769/woo5g.pdf
diode bridge 9.8mm WOG pitch 5.08mm
0
4
4
Diode_THT
Diode_Bridge_Vishay_GBL
Vishay GBL rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88609/gbl005.pdf
Vishay GBL rectifier diode bridge
0
4
4
Diode_THT
Diode_Bridge_Vishay_GBU
Vishay GBU rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88606/g3sba20.pdf
Vishay GBU rectifier diode bridge
0
4
4
Diode_THT
Diode_Bridge_Vishay_KBL
Vishay KBL rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88655/kbl005.pdf
Vishay KBL rectifier diode bridge
0
4
4
Diode_THT
Diode_Bridge_Vishay_KBPC1
Single phase bridge rectifier case KBPC1, see http://www.vishay.com/docs/93585/vs-kbpc1series.pdf
Diode Bridge
0
4
4
Diode_THT
Diode_Bridge_Vishay_KBPC6
Single phase bridge rectifier case KBPC6, see http://www.vishay.com/docs/93585/vs-kbpc1series.pdf
Diode Bridge
0
4
4
Diode_THT
Diode_Bridge_Vishay_KBU
Vishay KBU rectifier package, 5.08mm pitch, see http://www.vishay.com/docs/88656/kbu4.pdf
Vishay KBU rectifier diode bridge
0
4
4

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,262 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11O,2.350000X1.827200*%
%ADD12R,2.350000X1.827200*%
%ADD13C,2.800000*%
%ADD14C,1.800000*%
%ADD15R,1.800000X1.800000*%
%ADD16O,1.800000X1.800000*%
%ADD17R,1.700000X1.700000*%
%ADD18O,1.700000X1.700000*%
%ADD19R,1.350000X1.350000*%
%ADD20C,1.350000*%
%ADD21R,1.900000X1.900000*%
%ADD22O,1.900000X1.900000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,U1*%
X90805000Y-83083400D03*
X90805000Y-85674200D03*
X90805000Y-88214200D03*
X90805000Y-90754200D03*
X90805000Y-93294200D03*
X90805000Y-95834200D03*
X90805000Y-98374200D03*
X90805000Y-100914200D03*
X90805000Y-103454200D03*
X90805000Y-105994200D03*
X90805000Y-108534200D03*
X90805000Y-111074200D03*
X90805000Y-113614200D03*
X90805000Y-116154200D03*
X90805000Y-118694200D03*
X90805000Y-121234200D03*
X90805000Y-123774200D03*
X90805000Y-126314200D03*
X90805000Y-128854200D03*
X90805000Y-131394200D03*
X75565000Y-131394200D03*
X75565000Y-128854200D03*
X75565000Y-126314200D03*
X75565000Y-123774200D03*
X75565000Y-121234200D03*
X75565000Y-118694200D03*
X75565000Y-116154200D03*
X75565000Y-113614200D03*
X75565000Y-111074200D03*
X75565000Y-108534200D03*
X75565000Y-105994200D03*
X75565000Y-103454200D03*
X75565000Y-100914200D03*
X75565000Y-98374200D03*
X75565000Y-95834200D03*
X75565000Y-93294200D03*
X75565000Y-90754200D03*
X75565000Y-88214200D03*
X75565000Y-85674200D03*
D12*
X75565000Y-83134200D03*
%TD*%
D13*
%TO.C,H1*%
X75057000Y-78867000D03*
%TD*%
D14*
%TO.C,J2*%
X107315000Y-81915000D03*
X107315000Y-84455000D03*
X107315000Y-86995000D03*
X107315000Y-89535000D03*
X107315000Y-92075000D03*
X107315000Y-94615000D03*
X107315000Y-97155000D03*
X107315000Y-99695000D03*
X107315000Y-102235000D03*
X107315000Y-104775000D03*
X107315000Y-107315000D03*
X107315000Y-109855000D03*
X107315000Y-112395000D03*
X107315000Y-114935000D03*
X107315000Y-117475000D03*
X107315000Y-120015000D03*
X107315000Y-122555000D03*
X107315000Y-125095000D03*
X107315000Y-127635000D03*
X107315000Y-130175000D03*
X107315000Y-132715000D03*
X107315000Y-135255000D03*
X107315000Y-137795000D03*
X107315000Y-140335000D03*
X107315000Y-142875000D03*
X109855000Y-81915000D03*
X109855000Y-84455000D03*
X109855000Y-86995000D03*
X109855000Y-89535000D03*
X109855000Y-92075000D03*
X109855000Y-94615000D03*
X109855000Y-97155000D03*
X109855000Y-99695000D03*
X109855000Y-102235000D03*
X109855000Y-104775000D03*
X109855000Y-107315000D03*
X109855000Y-109855000D03*
X109855000Y-112395000D03*
X109855000Y-114935000D03*
X109855000Y-117475000D03*
X109855000Y-120015000D03*
X109855000Y-122555000D03*
X109855000Y-125095000D03*
X109855000Y-127635000D03*
X109855000Y-130175000D03*
X109855000Y-132715000D03*
X109855000Y-135255000D03*
X109855000Y-137795000D03*
X109855000Y-140335000D03*
G36*
G01*
X110755000Y-142239705D02*
X110755000Y-143510295D01*
G75*
G02*
X110490295Y-143775000I-264705J0D01*
G01*
X109219705Y-143775000D01*
G75*
G02*
X108955000Y-143510295I0J264705D01*
G01*
X108955000Y-142239705D01*
G75*
G02*
X109219705Y-141975000I264705J0D01*
G01*
X110490295Y-141975000D01*
G75*
G02*
X110755000Y-142239705I0J-264705D01*
G01*
G37*
%TD*%
D15*
%TO.C,JP1*%
X100965000Y-81915000D03*
D16*
X100965000Y-79375000D03*
%TD*%
%TO.C,JP2*%
X97155000Y-79375000D03*
D15*
X97155000Y-81915000D03*
%TD*%
D17*
%TO.C,RN1*%
X97155000Y-86995000D03*
D18*
X97155000Y-89535000D03*
X97155000Y-92075000D03*
X97155000Y-94615000D03*
X97155000Y-97155000D03*
X97155000Y-99695000D03*
X97155000Y-102235000D03*
X97155000Y-104775000D03*
X97155000Y-107315000D03*
X97155000Y-109855000D03*
%TD*%
D17*
%TO.C,RN2*%
X100965000Y-86995000D03*
D18*
X100965000Y-89535000D03*
X100965000Y-92075000D03*
X100965000Y-94615000D03*
X100965000Y-97155000D03*
X100965000Y-99695000D03*
X100965000Y-102235000D03*
X100965000Y-104775000D03*
X100965000Y-107315000D03*
X100965000Y-109855000D03*
%TD*%
%TO.C,RN3*%
X97155000Y-113665000D03*
X97155000Y-116205000D03*
X97155000Y-118745000D03*
X97155000Y-121285000D03*
X97155000Y-123825000D03*
X97155000Y-126365000D03*
X97155000Y-128905000D03*
X97155000Y-131445000D03*
X97155000Y-133985000D03*
D17*
X97155000Y-136525000D03*
%TD*%
D18*
%TO.C,RN4*%
X100965000Y-113665000D03*
X100965000Y-116205000D03*
X100965000Y-118745000D03*
X100965000Y-121285000D03*
X100965000Y-123825000D03*
X100965000Y-126365000D03*
X100965000Y-128905000D03*
X100965000Y-131445000D03*
X100965000Y-133985000D03*
D17*
X100965000Y-136525000D03*
%TD*%
D15*
%TO.C,J3*%
X73025000Y-146685000D03*
D16*
X73025000Y-144145000D03*
X73025000Y-141605000D03*
X73025000Y-139065000D03*
%TD*%
D19*
%TO.C,J4*%
X93345000Y-144145000D03*
D20*
X95845000Y-144145000D03*
X98345000Y-144145000D03*
X100845000Y-144145000D03*
%TD*%
D21*
%TO.C,D4*%
X79375000Y-77851000D03*
D22*
X86995000Y-77851000D03*
%TD*%
%TO.C,D5*%
X86995000Y-81407000D03*
D21*
X79375000Y-81407000D03*
%TD*%
M02*

View File

@ -1,33 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
M02*

View File

@ -1,126 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11C,0.120000*%
%ADD12C,0.150000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,D4*%
X80465000Y-78991000D02*
X80465000Y-79321000D01*
X80465000Y-79321000D02*
X85905000Y-79321000D01*
X85905000Y-79321000D02*
X85905000Y-78991000D01*
X80465000Y-76711000D02*
X80465000Y-76381000D01*
X80465000Y-76381000D02*
X85905000Y-76381000D01*
X85905000Y-76381000D02*
X85905000Y-76711000D01*
X81365000Y-79321000D02*
X81365000Y-76381000D01*
X81485000Y-79321000D02*
X81485000Y-76381000D01*
X81245000Y-79321000D02*
X81245000Y-76381000D01*
%TO.C,D5*%
X81245000Y-82877000D02*
X81245000Y-79937000D01*
X81485000Y-82877000D02*
X81485000Y-79937000D01*
X81365000Y-82877000D02*
X81365000Y-79937000D01*
X85905000Y-79937000D02*
X85905000Y-80267000D01*
X80465000Y-79937000D02*
X85905000Y-79937000D01*
X80465000Y-80267000D02*
X80465000Y-79937000D01*
X85905000Y-82877000D02*
X85905000Y-82547000D01*
X80465000Y-82877000D02*
X85905000Y-82877000D01*
X80465000Y-82547000D02*
X80465000Y-82877000D01*
%TD*%
%TO.C,D4*%
D12*
X90273095Y-77287380D02*
X90273095Y-76287380D01*
X90035000Y-76287380D01*
X89892142Y-76335000D01*
X89796904Y-76430238D01*
X89749285Y-76525476D01*
X89701666Y-76715952D01*
X89701666Y-76858809D01*
X89749285Y-77049285D01*
X89796904Y-77144523D01*
X89892142Y-77239761D01*
X90035000Y-77287380D01*
X90273095Y-77287380D01*
X88844523Y-76620714D02*
X88844523Y-77287380D01*
X89082619Y-76239761D02*
X89320714Y-76954047D01*
X88701666Y-76954047D01*
%TO.C,D5*%
X90273095Y-81097380D02*
X90273095Y-80097380D01*
X90035000Y-80097380D01*
X89892142Y-80145000D01*
X89796904Y-80240238D01*
X89749285Y-80335476D01*
X89701666Y-80525952D01*
X89701666Y-80668809D01*
X89749285Y-80859285D01*
X89796904Y-80954523D01*
X89892142Y-81049761D01*
X90035000Y-81097380D01*
X90273095Y-81097380D01*
X88796904Y-80097380D02*
X89273095Y-80097380D01*
X89320714Y-80573571D01*
X89273095Y-80525952D01*
X89177857Y-80478333D01*
X88939761Y-80478333D01*
X88844523Y-80525952D01*
X88796904Y-80573571D01*
X88749285Y-80668809D01*
X88749285Y-80906904D01*
X88796904Y-81002142D01*
X88844523Y-81049761D01*
X88939761Y-81097380D01*
X89177857Y-81097380D01*
X89273095Y-81049761D01*
X89320714Y-81002142D01*
%TD*%
M02*

View File

@ -1,32 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
M02*

File diff suppressed because it is too large Load Diff

View File

@ -1,291 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11O,2.350000X1.827200*%
%ADD12R,2.350000X1.827200*%
%ADD13C,2.800000*%
%ADD14C,1.800000*%
%ADD15R,2.000000X1.450000*%
%ADD16R,1.300000X1.100000*%
%ADD17R,1.650000X1.450000*%
%ADD18R,1.270000X1.900000*%
%ADD19R,0.950000X1.200000*%
%ADD20R,0.850000X1.200000*%
%ADD21R,1.800000X1.800000*%
%ADD22O,1.800000X1.800000*%
%ADD23R,1.700000X1.700000*%
%ADD24O,1.700000X1.700000*%
%ADD25R,1.350000X1.350000*%
%ADD26C,1.350000*%
%ADD27R,1.900000X1.900000*%
%ADD28O,1.900000X1.900000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,U1*%
X90805000Y-83083400D03*
X90805000Y-85674200D03*
X90805000Y-88214200D03*
X90805000Y-90754200D03*
X90805000Y-93294200D03*
X90805000Y-95834200D03*
X90805000Y-98374200D03*
X90805000Y-100914200D03*
X90805000Y-103454200D03*
X90805000Y-105994200D03*
X90805000Y-108534200D03*
X90805000Y-111074200D03*
X90805000Y-113614200D03*
X90805000Y-116154200D03*
X90805000Y-118694200D03*
X90805000Y-121234200D03*
X90805000Y-123774200D03*
X90805000Y-126314200D03*
X90805000Y-128854200D03*
X90805000Y-131394200D03*
X75565000Y-131394200D03*
X75565000Y-128854200D03*
X75565000Y-126314200D03*
X75565000Y-123774200D03*
X75565000Y-121234200D03*
X75565000Y-118694200D03*
X75565000Y-116154200D03*
X75565000Y-113614200D03*
X75565000Y-111074200D03*
X75565000Y-108534200D03*
X75565000Y-105994200D03*
X75565000Y-103454200D03*
X75565000Y-100914200D03*
X75565000Y-98374200D03*
X75565000Y-95834200D03*
X75565000Y-93294200D03*
X75565000Y-90754200D03*
X75565000Y-88214200D03*
X75565000Y-85674200D03*
D12*
X75565000Y-83134200D03*
%TD*%
D13*
%TO.C,H1*%
X75057000Y-78867000D03*
%TD*%
D14*
%TO.C,J2*%
X107315000Y-81915000D03*
X107315000Y-84455000D03*
X107315000Y-86995000D03*
X107315000Y-89535000D03*
X107315000Y-92075000D03*
X107315000Y-94615000D03*
X107315000Y-97155000D03*
X107315000Y-99695000D03*
X107315000Y-102235000D03*
X107315000Y-104775000D03*
X107315000Y-107315000D03*
X107315000Y-109855000D03*
X107315000Y-112395000D03*
X107315000Y-114935000D03*
X107315000Y-117475000D03*
X107315000Y-120015000D03*
X107315000Y-122555000D03*
X107315000Y-125095000D03*
X107315000Y-127635000D03*
X107315000Y-130175000D03*
X107315000Y-132715000D03*
X107315000Y-135255000D03*
X107315000Y-137795000D03*
X107315000Y-140335000D03*
X107315000Y-142875000D03*
X109855000Y-81915000D03*
X109855000Y-84455000D03*
X109855000Y-86995000D03*
X109855000Y-89535000D03*
X109855000Y-92075000D03*
X109855000Y-94615000D03*
X109855000Y-97155000D03*
X109855000Y-99695000D03*
X109855000Y-102235000D03*
X109855000Y-104775000D03*
X109855000Y-107315000D03*
X109855000Y-109855000D03*
X109855000Y-112395000D03*
X109855000Y-114935000D03*
X109855000Y-117475000D03*
X109855000Y-120015000D03*
X109855000Y-122555000D03*
X109855000Y-125095000D03*
X109855000Y-127635000D03*
X109855000Y-130175000D03*
X109855000Y-132715000D03*
X109855000Y-135255000D03*
X109855000Y-137795000D03*
X109855000Y-140335000D03*
G36*
G01*
X110755000Y-142239705D02*
X110755000Y-143510295D01*
G75*
G02*
X110490295Y-143775000I-264705J0D01*
G01*
X109219705Y-143775000D01*
G75*
G02*
X108955000Y-143510295I0J264705D01*
G01*
X108955000Y-142239705D01*
G75*
G02*
X109219705Y-141975000I264705J0D01*
G01*
X110490295Y-141975000D01*
G75*
G02*
X110755000Y-142239705I0J-264705D01*
G01*
G37*
%TD*%
D15*
%TO.C,J1*%
X79455000Y-134960000D03*
X85425000Y-134960000D03*
D16*
X88925000Y-139635000D03*
X88925000Y-135935000D03*
D17*
X88750000Y-145660000D03*
D18*
X77430000Y-145435000D03*
D19*
X79690000Y-145785000D03*
X80790000Y-145785000D03*
X81890000Y-145785000D03*
X82990000Y-145785000D03*
X84090000Y-145785000D03*
X85190000Y-145785000D03*
D20*
X78640000Y-145785000D03*
D19*
X86290000Y-145785000D03*
%TD*%
D21*
%TO.C,JP1*%
X100965000Y-81915000D03*
D22*
X100965000Y-79375000D03*
%TD*%
%TO.C,JP2*%
X97155000Y-79375000D03*
D21*
X97155000Y-81915000D03*
%TD*%
D23*
%TO.C,RN1*%
X97155000Y-86995000D03*
D24*
X97155000Y-89535000D03*
X97155000Y-92075000D03*
X97155000Y-94615000D03*
X97155000Y-97155000D03*
X97155000Y-99695000D03*
X97155000Y-102235000D03*
X97155000Y-104775000D03*
X97155000Y-107315000D03*
X97155000Y-109855000D03*
%TD*%
D23*
%TO.C,RN2*%
X100965000Y-86995000D03*
D24*
X100965000Y-89535000D03*
X100965000Y-92075000D03*
X100965000Y-94615000D03*
X100965000Y-97155000D03*
X100965000Y-99695000D03*
X100965000Y-102235000D03*
X100965000Y-104775000D03*
X100965000Y-107315000D03*
X100965000Y-109855000D03*
%TD*%
%TO.C,RN3*%
X97155000Y-113665000D03*
X97155000Y-116205000D03*
X97155000Y-118745000D03*
X97155000Y-121285000D03*
X97155000Y-123825000D03*
X97155000Y-126365000D03*
X97155000Y-128905000D03*
X97155000Y-131445000D03*
X97155000Y-133985000D03*
D23*
X97155000Y-136525000D03*
%TD*%
D24*
%TO.C,RN4*%
X100965000Y-113665000D03*
X100965000Y-116205000D03*
X100965000Y-118745000D03*
X100965000Y-121285000D03*
X100965000Y-123825000D03*
X100965000Y-126365000D03*
X100965000Y-128905000D03*
X100965000Y-131445000D03*
X100965000Y-133985000D03*
D23*
X100965000Y-136525000D03*
%TD*%
D21*
%TO.C,J3*%
X73025000Y-146685000D03*
D22*
X73025000Y-144145000D03*
X73025000Y-141605000D03*
X73025000Y-139065000D03*
%TD*%
D25*
%TO.C,J4*%
X93345000Y-144145000D03*
D26*
X95845000Y-144145000D03*
X98345000Y-144145000D03*
X100845000Y-144145000D03*
%TD*%
D27*
%TO.C,D4*%
X79375000Y-77851000D03*
D28*
X86995000Y-77851000D03*
%TD*%
%TO.C,D5*%
X86995000Y-81407000D03*
D27*
X79375000Y-81407000D03*
%TD*%
M02*

View File

@ -1,62 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11R,1.900000X1.350000*%
%ADD12R,1.200000X1.000000*%
%ADD13R,1.550000X1.350000*%
%ADD14R,1.170000X1.800000*%
%ADD15R,0.850000X1.100000*%
%ADD16R,0.750000X1.100000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,J1*%
X79455000Y-134960000D03*
X85425000Y-134960000D03*
D12*
X88925000Y-139635000D03*
X88925000Y-135935000D03*
D13*
X88750000Y-145660000D03*
D14*
X77430000Y-145435000D03*
D15*
X79690000Y-145785000D03*
X80790000Y-145785000D03*
X81890000Y-145785000D03*
X82990000Y-145785000D03*
X84090000Y-145785000D03*
X85190000Y-145785000D03*
D16*
X78640000Y-145785000D03*
D15*
X86290000Y-145785000D03*
%TD*%
M02*

View File

@ -1,731 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:56:54-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:56:54*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11C,0.150000*%
%ADD12C,0.300000*%
%ADD13C,0.120000*%
%ADD14C,0.127000*%
%ADD15C,0.200000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
D11*
X75126904Y-147408333D02*
X75126904Y-146913095D01*
X75431666Y-147179761D01*
X75431666Y-147065476D01*
X75469761Y-146989285D01*
X75507857Y-146951190D01*
X75584047Y-146913095D01*
X75774523Y-146913095D01*
X75850714Y-146951190D01*
X75888809Y-146989285D01*
X75926904Y-147065476D01*
X75926904Y-147294047D01*
X75888809Y-147370238D01*
X75850714Y-147408333D01*
X75850714Y-146570238D02*
X75888809Y-146532142D01*
X75926904Y-146570238D01*
X75888809Y-146608333D01*
X75850714Y-146570238D01*
X75926904Y-146570238D01*
X75126904Y-146265476D02*
X75126904Y-145770238D01*
X75431666Y-146036904D01*
X75431666Y-145922619D01*
X75469761Y-145846428D01*
X75507857Y-145808333D01*
X75584047Y-145770238D01*
X75774523Y-145770238D01*
X75850714Y-145808333D01*
X75888809Y-145846428D01*
X75926904Y-145922619D01*
X75926904Y-146151190D01*
X75888809Y-146227380D01*
X75850714Y-146265476D01*
X75165000Y-143789285D02*
X75126904Y-143865476D01*
X75126904Y-143979761D01*
X75165000Y-144094047D01*
X75241190Y-144170238D01*
X75317380Y-144208333D01*
X75469761Y-144246428D01*
X75584047Y-144246428D01*
X75736428Y-144208333D01*
X75812619Y-144170238D01*
X75888809Y-144094047D01*
X75926904Y-143979761D01*
X75926904Y-143903571D01*
X75888809Y-143789285D01*
X75850714Y-143751190D01*
X75584047Y-143751190D01*
X75584047Y-143903571D01*
X75126904Y-142303571D02*
X75126904Y-141846428D01*
X75926904Y-142075000D02*
X75126904Y-142075000D01*
X75126904Y-141655952D02*
X75926904Y-141122619D01*
X75126904Y-141122619D02*
X75926904Y-141655952D01*
X75926904Y-139141666D02*
X75545952Y-139408333D01*
X75926904Y-139598809D02*
X75126904Y-139598809D01*
X75126904Y-139294047D01*
X75165000Y-139217857D01*
X75203095Y-139179761D01*
X75279285Y-139141666D01*
X75393571Y-139141666D01*
X75469761Y-139179761D01*
X75507857Y-139217857D01*
X75545952Y-139294047D01*
X75545952Y-139598809D01*
X75126904Y-138875000D02*
X75926904Y-138341666D01*
X75126904Y-138341666D02*
X75926904Y-138875000D01*
X99679285Y-139787380D02*
X100298333Y-139787380D01*
X99965000Y-140168333D01*
X100107857Y-140168333D01*
X100203095Y-140215952D01*
X100250714Y-140263571D01*
X100298333Y-140358809D01*
X100298333Y-140596904D01*
X100250714Y-140692142D01*
X100203095Y-140739761D01*
X100107857Y-140787380D01*
X99822142Y-140787380D01*
X99726904Y-140739761D01*
X99679285Y-140692142D01*
X100631666Y-139787380D02*
X101250714Y-139787380D01*
X100917380Y-140168333D01*
X101060238Y-140168333D01*
X101155476Y-140215952D01*
X101203095Y-140263571D01*
X101250714Y-140358809D01*
X101250714Y-140596904D01*
X101203095Y-140692142D01*
X101155476Y-140739761D01*
X101060238Y-140787380D01*
X100774523Y-140787380D01*
X100679285Y-140739761D01*
X100631666Y-140692142D01*
X101869761Y-139787380D02*
X101965000Y-139787380D01*
X102060238Y-139835000D01*
X102107857Y-139882619D01*
X102155476Y-139977857D01*
X102203095Y-140168333D01*
X102203095Y-140406428D01*
X102155476Y-140596904D01*
X102107857Y-140692142D01*
X102060238Y-140739761D01*
X101965000Y-140787380D01*
X101869761Y-140787380D01*
X101774523Y-140739761D01*
X101726904Y-140692142D01*
X101679285Y-140596904D01*
X101631666Y-140406428D01*
X101631666Y-140168333D01*
X101679285Y-139977857D01*
X101726904Y-139882619D01*
X101774523Y-139835000D01*
X101869761Y-139787380D01*
X95916904Y-139882619D02*
X95964523Y-139835000D01*
X96059761Y-139787380D01*
X96297857Y-139787380D01*
X96393095Y-139835000D01*
X96440714Y-139882619D01*
X96488333Y-139977857D01*
X96488333Y-140073095D01*
X96440714Y-140215952D01*
X95869285Y-140787380D01*
X96488333Y-140787380D01*
X96869285Y-139882619D02*
X96916904Y-139835000D01*
X97012142Y-139787380D01*
X97250238Y-139787380D01*
X97345476Y-139835000D01*
X97393095Y-139882619D01*
X97440714Y-139977857D01*
X97440714Y-140073095D01*
X97393095Y-140215952D01*
X96821666Y-140787380D01*
X97440714Y-140787380D01*
X98059761Y-139787380D02*
X98155000Y-139787380D01*
X98250238Y-139835000D01*
X98297857Y-139882619D01*
X98345476Y-139977857D01*
X98393095Y-140168333D01*
X98393095Y-140406428D01*
X98345476Y-140596904D01*
X98297857Y-140692142D01*
X98250238Y-140739761D01*
X98155000Y-140787380D01*
X98059761Y-140787380D01*
X97964523Y-140739761D01*
X97916904Y-140692142D01*
X97869285Y-140596904D01*
X97821666Y-140406428D01*
X97821666Y-140168333D01*
X97869285Y-139977857D01*
X97916904Y-139882619D01*
X97964523Y-139835000D01*
X98059761Y-139787380D01*
X95694904Y-76287380D02*
X96266333Y-76287380D01*
X95980619Y-77287380D02*
X95980619Y-76287380D01*
X96599666Y-76763571D02*
X96933000Y-76763571D01*
X97075857Y-77287380D02*
X96599666Y-77287380D01*
X96599666Y-76287380D01*
X97075857Y-76287380D01*
X98075857Y-77287380D02*
X97742523Y-76811190D01*
X97504428Y-77287380D02*
X97504428Y-76287380D01*
X97885380Y-76287380D01*
X97980619Y-76335000D01*
X98028238Y-76382619D01*
X98075857Y-76477857D01*
X98075857Y-76620714D01*
X98028238Y-76715952D01*
X97980619Y-76763571D01*
X97885380Y-76811190D01*
X97504428Y-76811190D01*
X98504428Y-77287380D02*
X98504428Y-76287380D01*
X98837761Y-77001666D01*
X99171095Y-76287380D01*
X99171095Y-77287380D01*
X100599666Y-76287380D02*
X100790142Y-76287380D01*
X100885380Y-76335000D01*
X100980619Y-76430238D01*
X101028238Y-76620714D01*
X101028238Y-76954047D01*
X100980619Y-77144523D01*
X100885380Y-77239761D01*
X100790142Y-77287380D01*
X100599666Y-77287380D01*
X100504428Y-77239761D01*
X100409190Y-77144523D01*
X100361571Y-76954047D01*
X100361571Y-76620714D01*
X100409190Y-76430238D01*
X100504428Y-76335000D01*
X100599666Y-76287380D01*
X101456809Y-77287380D02*
X101456809Y-76287380D01*
X102028238Y-77287380D01*
X102028238Y-76287380D01*
D10*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D12*
X77145571Y-147847857D02*
X77359857Y-147919285D01*
X77431285Y-147990714D01*
X77502714Y-148133571D01*
X77502714Y-148347857D01*
X77431285Y-148490714D01*
X77359857Y-148562142D01*
X77217000Y-148633571D01*
X76645571Y-148633571D01*
X76645571Y-147133571D01*
X77145571Y-147133571D01*
X77288428Y-147205000D01*
X77359857Y-147276428D01*
X77431285Y-147419285D01*
X77431285Y-147562142D01*
X77359857Y-147705000D01*
X77288428Y-147776428D01*
X77145571Y-147847857D01*
X76645571Y-147847857D01*
X78359857Y-148633571D02*
X78217000Y-148562142D01*
X78145571Y-148419285D01*
X78145571Y-147133571D01*
X79574142Y-147633571D02*
X79574142Y-148633571D01*
X78931285Y-147633571D02*
X78931285Y-148419285D01*
X79002714Y-148562142D01*
X79145571Y-148633571D01*
X79359857Y-148633571D01*
X79502714Y-148562142D01*
X79574142Y-148490714D01*
X80859857Y-148562142D02*
X80717000Y-148633571D01*
X80431285Y-148633571D01*
X80288428Y-148562142D01*
X80217000Y-148419285D01*
X80217000Y-147847857D01*
X80288428Y-147705000D01*
X80431285Y-147633571D01*
X80717000Y-147633571D01*
X80859857Y-147705000D01*
X80931285Y-147847857D01*
X80931285Y-147990714D01*
X80217000Y-148133571D01*
X81502714Y-148562142D02*
X81717000Y-148633571D01*
X82074142Y-148633571D01*
X82217000Y-148562142D01*
X82288428Y-148490714D01*
X82359857Y-148347857D01*
X82359857Y-148205000D01*
X82288428Y-148062142D01*
X82217000Y-147990714D01*
X82074142Y-147919285D01*
X81788428Y-147847857D01*
X81645571Y-147776428D01*
X81574142Y-147705000D01*
X81502714Y-147562142D01*
X81502714Y-147419285D01*
X81574142Y-147276428D01*
X81645571Y-147205000D01*
X81788428Y-147133571D01*
X82145571Y-147133571D01*
X82359857Y-147205000D01*
X83859857Y-148490714D02*
X83788428Y-148562142D01*
X83574142Y-148633571D01*
X83431285Y-148633571D01*
X83217000Y-148562142D01*
X83074142Y-148419285D01*
X83002714Y-148276428D01*
X82931285Y-147990714D01*
X82931285Y-147776428D01*
X83002714Y-147490714D01*
X83074142Y-147347857D01*
X83217000Y-147205000D01*
X83431285Y-147133571D01*
X83574142Y-147133571D01*
X83788428Y-147205000D01*
X83859857Y-147276428D01*
X84431285Y-148562142D02*
X84645571Y-148633571D01*
X85002714Y-148633571D01*
X85145571Y-148562142D01*
X85217000Y-148490714D01*
X85288428Y-148347857D01*
X85288428Y-148205000D01*
X85217000Y-148062142D01*
X85145571Y-147990714D01*
X85002714Y-147919285D01*
X84717000Y-147847857D01*
X84574142Y-147776428D01*
X84502714Y-147705000D01*
X84431285Y-147562142D01*
X84431285Y-147419285D01*
X84502714Y-147276428D01*
X84574142Y-147205000D01*
X84717000Y-147133571D01*
X85074142Y-147133571D01*
X85288428Y-147205000D01*
X85931285Y-148633571D02*
X85931285Y-147133571D01*
X88574142Y-148633571D02*
X87717000Y-148633571D01*
X88145571Y-148633571D02*
X88145571Y-147133571D01*
X88002714Y-147347857D01*
X87859857Y-147490714D01*
X87717000Y-147562142D01*
X89217000Y-148490714D02*
X89288428Y-148562142D01*
X89217000Y-148633571D01*
X89145571Y-148562142D01*
X89217000Y-148490714D01*
X89217000Y-148633571D01*
X90217000Y-147133571D02*
X90359857Y-147133571D01*
X90502714Y-147205000D01*
X90574142Y-147276428D01*
X90645571Y-147419285D01*
X90717000Y-147705000D01*
X90717000Y-148062142D01*
X90645571Y-148347857D01*
X90574142Y-148490714D01*
X90502714Y-148562142D01*
X90359857Y-148633571D01*
X90217000Y-148633571D01*
X90074142Y-148562142D01*
X90002714Y-148490714D01*
X89931285Y-148347857D01*
X89859857Y-148062142D01*
X89859857Y-147705000D01*
X89931285Y-147419285D01*
X90002714Y-147276428D01*
X90074142Y-147205000D01*
X90217000Y-147133571D01*
X91359857Y-148062142D02*
X92502714Y-148062142D01*
X93859857Y-148562142D02*
X93717000Y-148633571D01*
X93431285Y-148633571D01*
X93288428Y-148562142D01*
X93217000Y-148490714D01*
X93145571Y-148347857D01*
X93145571Y-147919285D01*
X93217000Y-147776428D01*
X93288428Y-147705000D01*
X93431285Y-147633571D01*
X93717000Y-147633571D01*
X93859857Y-147705000D01*
D13*
%TO.C,J2*%
X114535000Y-142375000D02*
X113535000Y-142875000D01*
X114535000Y-143375000D02*
X114535000Y-142375000D01*
X113535000Y-142875000D02*
X114535000Y-143375000D01*
X111835000Y-110345000D02*
X113145000Y-110345000D01*
X111835000Y-110345000D02*
X111835000Y-110345000D01*
X111835000Y-78005000D02*
X111835000Y-110345000D01*
X105335000Y-78005000D02*
X111835000Y-78005000D01*
X105335000Y-146785000D02*
X105335000Y-78005000D01*
X111835000Y-146785000D02*
X105335000Y-146785000D01*
X111835000Y-114445000D02*
X111835000Y-146785000D01*
X113145000Y-114445000D02*
X111835000Y-114445000D01*
X113145000Y-76705000D02*
X113145000Y-148085000D01*
X104025000Y-76705000D02*
X113145000Y-76705000D01*
X104025000Y-148085000D02*
X104025000Y-76705000D01*
X113145000Y-148085000D02*
X104025000Y-148085000D01*
%TO.C,J1*%
X89255000Y-144785000D02*
X89255000Y-140335000D01*
X89255000Y-138935000D02*
X89255000Y-136635000D01*
X89255000Y-135235000D02*
X89255000Y-134515000D01*
X89255000Y-134515000D02*
X86575000Y-134515000D01*
X84275000Y-134515000D02*
X80605000Y-134515000D01*
X78305000Y-134515000D02*
X77075000Y-134515000D01*
X77075000Y-134515000D02*
X77075000Y-144335000D01*
X87775000Y-146155000D02*
X86915000Y-146155000D01*
%TO.C,JP1*%
X102295000Y-80645000D02*
X99635000Y-80645000D01*
X102295000Y-80645000D02*
X102295000Y-78045000D01*
X102295000Y-78045000D02*
X99635000Y-78045000D01*
X99635000Y-80645000D02*
X99635000Y-78045000D01*
X99635000Y-83245000D02*
X99635000Y-81915000D01*
X100965000Y-83245000D02*
X99635000Y-83245000D01*
%TO.C,JP2*%
X97155000Y-83245000D02*
X95825000Y-83245000D01*
X95825000Y-83245000D02*
X95825000Y-81915000D01*
X95825000Y-80645000D02*
X95825000Y-78045000D01*
X98485000Y-78045000D02*
X95825000Y-78045000D01*
X98485000Y-80645000D02*
X98485000Y-78045000D01*
X98485000Y-80645000D02*
X95825000Y-80645000D01*
%TO.C,RN1*%
X98555000Y-88265000D02*
X95755000Y-88265000D01*
X98555000Y-111295000D02*
X98555000Y-85555000D01*
X95755000Y-111295000D02*
X98555000Y-111295000D01*
X95755000Y-85555000D02*
X95755000Y-111295000D01*
X98555000Y-85555000D02*
X95755000Y-85555000D01*
%TO.C,RN2*%
X102365000Y-88265000D02*
X99565000Y-88265000D01*
X102365000Y-111295000D02*
X102365000Y-85555000D01*
X99565000Y-111295000D02*
X102365000Y-111295000D01*
X99565000Y-85555000D02*
X99565000Y-111295000D01*
X102365000Y-85555000D02*
X99565000Y-85555000D01*
%TO.C,RN3*%
X95755000Y-137965000D02*
X98555000Y-137965000D01*
X98555000Y-137965000D02*
X98555000Y-112225000D01*
X98555000Y-112225000D02*
X95755000Y-112225000D01*
X95755000Y-112225000D02*
X95755000Y-137965000D01*
X95755000Y-135255000D02*
X98555000Y-135255000D01*
%TO.C,RN4*%
X99565000Y-137965000D02*
X102365000Y-137965000D01*
X102365000Y-137965000D02*
X102365000Y-112225000D01*
X102365000Y-112225000D02*
X99565000Y-112225000D01*
X99565000Y-112225000D02*
X99565000Y-137965000D01*
X99565000Y-135255000D02*
X102365000Y-135255000D01*
%TO.C,J3*%
X74355000Y-137735000D02*
X71695000Y-137735000D01*
X74355000Y-145415000D02*
X74355000Y-137735000D01*
X71695000Y-145415000D02*
X71695000Y-137735000D01*
X74355000Y-145415000D02*
X71695000Y-145415000D01*
X74355000Y-146685000D02*
X74355000Y-148015000D01*
X74355000Y-148015000D02*
X73025000Y-148015000D01*
D14*
%TO.C,J4*%
X92095000Y-146645000D02*
X92095000Y-141745000D01*
X102095000Y-141745000D02*
X102095000Y-146645000D01*
X102095000Y-141745000D02*
X92095000Y-141745000D01*
X102095000Y-146645000D02*
X92095000Y-146645000D01*
D15*
X91545000Y-144145000D02*
G75*
G03*
X91545000Y-144145000I-100000J0D01*
G01*
%TD*%
%TO.C,U1*%
D11*
X72477380Y-83946904D02*
X73286904Y-83946904D01*
X73382142Y-83899285D01*
X73429761Y-83851666D01*
X73477380Y-83756428D01*
X73477380Y-83565952D01*
X73429761Y-83470714D01*
X73382142Y-83423095D01*
X73286904Y-83375476D01*
X72477380Y-83375476D01*
X73477380Y-82375476D02*
X73477380Y-82946904D01*
X73477380Y-82661190D02*
X72477380Y-82661190D01*
X72620238Y-82756428D01*
X72715476Y-82851666D01*
X72763095Y-82946904D01*
%TO.C,J2*%
X102957380Y-145748333D02*
X103671666Y-145748333D01*
X103814523Y-145795952D01*
X103909761Y-145891190D01*
X103957380Y-146034047D01*
X103957380Y-146129285D01*
X103052619Y-145319761D02*
X103005000Y-145272142D01*
X102957380Y-145176904D01*
X102957380Y-144938809D01*
X103005000Y-144843571D01*
X103052619Y-144795952D01*
X103147857Y-144748333D01*
X103243095Y-144748333D01*
X103385952Y-144795952D01*
X103957380Y-145367380D01*
X103957380Y-144748333D01*
%TO.C,J1*%
X86661666Y-143597380D02*
X86661666Y-144311666D01*
X86614047Y-144454523D01*
X86518809Y-144549761D01*
X86375952Y-144597380D01*
X86280714Y-144597380D01*
X87661666Y-144597380D02*
X87090238Y-144597380D01*
X87375952Y-144597380D02*
X87375952Y-143597380D01*
X87280714Y-143740238D01*
X87185476Y-143835476D01*
X87090238Y-143883095D01*
%TO.C,RN1*%
X96464523Y-84907380D02*
X96131190Y-84431190D01*
X95893095Y-84907380D02*
X95893095Y-83907380D01*
X96274047Y-83907380D01*
X96369285Y-83955000D01*
X96416904Y-84002619D01*
X96464523Y-84097857D01*
X96464523Y-84240714D01*
X96416904Y-84335952D01*
X96369285Y-84383571D01*
X96274047Y-84431190D01*
X95893095Y-84431190D01*
X96893095Y-84907380D02*
X96893095Y-83907380D01*
X97464523Y-84907380D01*
X97464523Y-83907380D01*
X98464523Y-84907380D02*
X97893095Y-84907380D01*
X98178809Y-84907380D02*
X98178809Y-83907380D01*
X98083571Y-84050238D01*
X97988333Y-84145476D01*
X97893095Y-84193095D01*
%TO.C,RN2*%
X100274523Y-84907380D02*
X99941190Y-84431190D01*
X99703095Y-84907380D02*
X99703095Y-83907380D01*
X100084047Y-83907380D01*
X100179285Y-83955000D01*
X100226904Y-84002619D01*
X100274523Y-84097857D01*
X100274523Y-84240714D01*
X100226904Y-84335952D01*
X100179285Y-84383571D01*
X100084047Y-84431190D01*
X99703095Y-84431190D01*
X100703095Y-84907380D02*
X100703095Y-83907380D01*
X101274523Y-84907380D01*
X101274523Y-83907380D01*
X101703095Y-84002619D02*
X101750714Y-83955000D01*
X101845952Y-83907380D01*
X102084047Y-83907380D01*
X102179285Y-83955000D01*
X102226904Y-84002619D01*
X102274523Y-84097857D01*
X102274523Y-84193095D01*
X102226904Y-84335952D01*
X101655476Y-84907380D01*
X102274523Y-84907380D01*
%TO.C,RN3*%
X96464523Y-139517380D02*
X96131190Y-139041190D01*
X95893095Y-139517380D02*
X95893095Y-138517380D01*
X96274047Y-138517380D01*
X96369285Y-138565000D01*
X96416904Y-138612619D01*
X96464523Y-138707857D01*
X96464523Y-138850714D01*
X96416904Y-138945952D01*
X96369285Y-138993571D01*
X96274047Y-139041190D01*
X95893095Y-139041190D01*
X96893095Y-139517380D02*
X96893095Y-138517380D01*
X97464523Y-139517380D01*
X97464523Y-138517380D01*
X97845476Y-138517380D02*
X98464523Y-138517380D01*
X98131190Y-138898333D01*
X98274047Y-138898333D01*
X98369285Y-138945952D01*
X98416904Y-138993571D01*
X98464523Y-139088809D01*
X98464523Y-139326904D01*
X98416904Y-139422142D01*
X98369285Y-139469761D01*
X98274047Y-139517380D01*
X97988333Y-139517380D01*
X97893095Y-139469761D01*
X97845476Y-139422142D01*
%TO.C,RN4*%
X100274523Y-139517380D02*
X99941190Y-139041190D01*
X99703095Y-139517380D02*
X99703095Y-138517380D01*
X100084047Y-138517380D01*
X100179285Y-138565000D01*
X100226904Y-138612619D01*
X100274523Y-138707857D01*
X100274523Y-138850714D01*
X100226904Y-138945952D01*
X100179285Y-138993571D01*
X100084047Y-139041190D01*
X99703095Y-139041190D01*
X100703095Y-139517380D02*
X100703095Y-138517380D01*
X101274523Y-139517380D01*
X101274523Y-138517380D01*
X102179285Y-138850714D02*
X102179285Y-139517380D01*
X101941190Y-138469761D02*
X101703095Y-139184047D01*
X102322142Y-139184047D01*
%TO.C,J4*%
X90471666Y-142327380D02*
X90471666Y-143041666D01*
X90424047Y-143184523D01*
X90328809Y-143279761D01*
X90185952Y-143327380D01*
X90090714Y-143327380D01*
X91376428Y-142660714D02*
X91376428Y-143327380D01*
X91138333Y-142279761D02*
X90900238Y-142994047D01*
X91519285Y-142994047D01*
%TD*%
M02*

View File

@ -1,128 +0,0 @@
{
"Header":
{
"GenerationSoftware":
{
"Vendor": "KiCad",
"Application": "Pcbnew",
"Version": "(5.1.6-0-10_14)"
},
"CreationDate": "2021-03-30T09:56:54-05:00"
},
"GeneralSpecs":
{
"ProjectId":
{
"Name": "bluepill_scsi",
"GUID": "626c7565-7069-46c6-9c5f-736373692e6b",
"Revision": "rev?"
},
"Size":
{
"X": 43.865,
"Y": 73.710
},
"LayerNumber": 2,
"BoardThickness": 1.600
},
"DesignRules":
[
{
"Layers": "Outer",
"PadToPad": 0.200,
"PadToTrack": 0.200,
"TrackToTrack": 0.200,
"MinLineWidth": 0.250,
"TrackToRegion": 0.508,
"RegionToRegion": 0.508
}
],
"FilesAttributes":
[
{
"Path": "bluepill_scsi-F_Cu.gbr",
"FileFunction": "Copper,L1,Top",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-B_Cu.gbr",
"FileFunction": "Copper,L2,Bot",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-F_Paste.gbr",
"FileFunction": "SolderPaste,Top",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-B_Paste.gbr",
"FileFunction": "SolderPaste,Bot",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-F_SilkS.gbr",
"FileFunction": "Legend,Top",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-B_SilkS.gbr",
"FileFunction": "Legend,Bot",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-F_Mask.gbr",
"FileFunction": "SolderMask,Top",
"FilePolarity": "Negative"
},
{
"Path": "bluepill_scsi-B_Mask.gbr",
"FileFunction": "SolderMask,Bot",
"FilePolarity": "Negative"
},
{
"Path": "bluepill_scsi-Edge_Cuts.gbr",
"FileFunction": "Profile",
"FilePolarity": "Positive"
}
],
"MaterialStackup":
[
{
"Type": "Legend",
"Notes": "Layer F.SilkS"
},
{
"Type": "SolderPaste",
"Notes": "Layer F.Paste"
},
{
"Type": "SolderMask",
"Notes": "Layer F.Mask"
},
{
"Type": "Copper",
"Notes": "Layer F.Cu"
},
{
"Type": "Dielectric",
"Material": "FR4",
"Notes": "Layers L1/L2"
},
{
"Type": "Copper",
"Notes": "Layer B.Cu"
},
{
"Type": "SolderMask",
"Notes": "Layer B.Mask"
},
{
"Type": "SolderPaste",
"Notes": "Layer B.Paste"
},
{
"Type": "Legend",
"Notes": "Layer B.SilkS"
}
]
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,262 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11O,2.350000X1.827200*%
%ADD12R,2.350000X1.827200*%
%ADD13C,2.800000*%
%ADD14C,1.800000*%
%ADD15R,1.800000X1.800000*%
%ADD16O,1.800000X1.800000*%
%ADD17R,1.700000X1.700000*%
%ADD18O,1.700000X1.700000*%
%ADD19R,1.350000X1.350000*%
%ADD20C,1.350000*%
%ADD21R,1.900000X1.900000*%
%ADD22O,1.900000X1.900000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,U1*%
X90805000Y-83083400D03*
X90805000Y-85674200D03*
X90805000Y-88214200D03*
X90805000Y-90754200D03*
X90805000Y-93294200D03*
X90805000Y-95834200D03*
X90805000Y-98374200D03*
X90805000Y-100914200D03*
X90805000Y-103454200D03*
X90805000Y-105994200D03*
X90805000Y-108534200D03*
X90805000Y-111074200D03*
X90805000Y-113614200D03*
X90805000Y-116154200D03*
X90805000Y-118694200D03*
X90805000Y-121234200D03*
X90805000Y-123774200D03*
X90805000Y-126314200D03*
X90805000Y-128854200D03*
X90805000Y-131394200D03*
X75565000Y-131394200D03*
X75565000Y-128854200D03*
X75565000Y-126314200D03*
X75565000Y-123774200D03*
X75565000Y-121234200D03*
X75565000Y-118694200D03*
X75565000Y-116154200D03*
X75565000Y-113614200D03*
X75565000Y-111074200D03*
X75565000Y-108534200D03*
X75565000Y-105994200D03*
X75565000Y-103454200D03*
X75565000Y-100914200D03*
X75565000Y-98374200D03*
X75565000Y-95834200D03*
X75565000Y-93294200D03*
X75565000Y-90754200D03*
X75565000Y-88214200D03*
X75565000Y-85674200D03*
D12*
X75565000Y-83134200D03*
%TD*%
D13*
%TO.C,H1*%
X75057000Y-78867000D03*
%TD*%
D14*
%TO.C,J2*%
X107315000Y-81915000D03*
X107315000Y-84455000D03*
X107315000Y-86995000D03*
X107315000Y-89535000D03*
X107315000Y-92075000D03*
X107315000Y-94615000D03*
X107315000Y-97155000D03*
X107315000Y-99695000D03*
X107315000Y-102235000D03*
X107315000Y-104775000D03*
X107315000Y-107315000D03*
X107315000Y-109855000D03*
X107315000Y-112395000D03*
X107315000Y-114935000D03*
X107315000Y-117475000D03*
X107315000Y-120015000D03*
X107315000Y-122555000D03*
X107315000Y-125095000D03*
X107315000Y-127635000D03*
X107315000Y-130175000D03*
X107315000Y-132715000D03*
X107315000Y-135255000D03*
X107315000Y-137795000D03*
X107315000Y-140335000D03*
X107315000Y-142875000D03*
X109855000Y-81915000D03*
X109855000Y-84455000D03*
X109855000Y-86995000D03*
X109855000Y-89535000D03*
X109855000Y-92075000D03*
X109855000Y-94615000D03*
X109855000Y-97155000D03*
X109855000Y-99695000D03*
X109855000Y-102235000D03*
X109855000Y-104775000D03*
X109855000Y-107315000D03*
X109855000Y-109855000D03*
X109855000Y-112395000D03*
X109855000Y-114935000D03*
X109855000Y-117475000D03*
X109855000Y-120015000D03*
X109855000Y-122555000D03*
X109855000Y-125095000D03*
X109855000Y-127635000D03*
X109855000Y-130175000D03*
X109855000Y-132715000D03*
X109855000Y-135255000D03*
X109855000Y-137795000D03*
X109855000Y-140335000D03*
G36*
G01*
X110755000Y-142239705D02*
X110755000Y-143510295D01*
G75*
G02*
X110490295Y-143775000I-264705J0D01*
G01*
X109219705Y-143775000D01*
G75*
G02*
X108955000Y-143510295I0J264705D01*
G01*
X108955000Y-142239705D01*
G75*
G02*
X109219705Y-141975000I264705J0D01*
G01*
X110490295Y-141975000D01*
G75*
G02*
X110755000Y-142239705I0J-264705D01*
G01*
G37*
%TD*%
D15*
%TO.C,JP1*%
X100965000Y-81915000D03*
D16*
X100965000Y-79375000D03*
%TD*%
%TO.C,JP2*%
X97155000Y-79375000D03*
D15*
X97155000Y-81915000D03*
%TD*%
D17*
%TO.C,RN1*%
X97155000Y-86995000D03*
D18*
X97155000Y-89535000D03*
X97155000Y-92075000D03*
X97155000Y-94615000D03*
X97155000Y-97155000D03*
X97155000Y-99695000D03*
X97155000Y-102235000D03*
X97155000Y-104775000D03*
X97155000Y-107315000D03*
X97155000Y-109855000D03*
%TD*%
D17*
%TO.C,RN2*%
X100965000Y-86995000D03*
D18*
X100965000Y-89535000D03*
X100965000Y-92075000D03*
X100965000Y-94615000D03*
X100965000Y-97155000D03*
X100965000Y-99695000D03*
X100965000Y-102235000D03*
X100965000Y-104775000D03*
X100965000Y-107315000D03*
X100965000Y-109855000D03*
%TD*%
%TO.C,RN3*%
X97155000Y-113665000D03*
X97155000Y-116205000D03*
X97155000Y-118745000D03*
X97155000Y-121285000D03*
X97155000Y-123825000D03*
X97155000Y-126365000D03*
X97155000Y-128905000D03*
X97155000Y-131445000D03*
X97155000Y-133985000D03*
D17*
X97155000Y-136525000D03*
%TD*%
D18*
%TO.C,RN4*%
X100965000Y-113665000D03*
X100965000Y-116205000D03*
X100965000Y-118745000D03*
X100965000Y-121285000D03*
X100965000Y-123825000D03*
X100965000Y-126365000D03*
X100965000Y-128905000D03*
X100965000Y-131445000D03*
X100965000Y-133985000D03*
D17*
X100965000Y-136525000D03*
%TD*%
D15*
%TO.C,J3*%
X73025000Y-146685000D03*
D16*
X73025000Y-144145000D03*
X73025000Y-141605000D03*
X73025000Y-139065000D03*
%TD*%
D19*
%TO.C,J4*%
X93345000Y-144145000D03*
D20*
X95845000Y-144145000D03*
X98345000Y-144145000D03*
X100845000Y-144145000D03*
%TD*%
D21*
%TO.C,D4*%
X79375000Y-77851000D03*
D22*
X86995000Y-77851000D03*
%TD*%
%TO.C,D5*%
X86995000Y-81407000D03*
D21*
X79375000Y-81407000D03*
%TD*%
M02*

View File

@ -1,33 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
M02*

View File

@ -1,126 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11C,0.120000*%
%ADD12C,0.150000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,D4*%
X80465000Y-78991000D02*
X80465000Y-79321000D01*
X80465000Y-79321000D02*
X85905000Y-79321000D01*
X85905000Y-79321000D02*
X85905000Y-78991000D01*
X80465000Y-76711000D02*
X80465000Y-76381000D01*
X80465000Y-76381000D02*
X85905000Y-76381000D01*
X85905000Y-76381000D02*
X85905000Y-76711000D01*
X81365000Y-79321000D02*
X81365000Y-76381000D01*
X81485000Y-79321000D02*
X81485000Y-76381000D01*
X81245000Y-79321000D02*
X81245000Y-76381000D01*
%TO.C,D5*%
X81245000Y-82877000D02*
X81245000Y-79937000D01*
X81485000Y-82877000D02*
X81485000Y-79937000D01*
X81365000Y-82877000D02*
X81365000Y-79937000D01*
X85905000Y-79937000D02*
X85905000Y-80267000D01*
X80465000Y-79937000D02*
X85905000Y-79937000D01*
X80465000Y-80267000D02*
X80465000Y-79937000D01*
X85905000Y-82877000D02*
X85905000Y-82547000D01*
X80465000Y-82877000D02*
X85905000Y-82877000D01*
X80465000Y-82547000D02*
X80465000Y-82877000D01*
%TD*%
%TO.C,D4*%
D12*
X90273095Y-77287380D02*
X90273095Y-76287380D01*
X90035000Y-76287380D01*
X89892142Y-76335000D01*
X89796904Y-76430238D01*
X89749285Y-76525476D01*
X89701666Y-76715952D01*
X89701666Y-76858809D01*
X89749285Y-77049285D01*
X89796904Y-77144523D01*
X89892142Y-77239761D01*
X90035000Y-77287380D01*
X90273095Y-77287380D01*
X88844523Y-76620714D02*
X88844523Y-77287380D01*
X89082619Y-76239761D02*
X89320714Y-76954047D01*
X88701666Y-76954047D01*
%TO.C,D5*%
X90273095Y-81097380D02*
X90273095Y-80097380D01*
X90035000Y-80097380D01*
X89892142Y-80145000D01*
X89796904Y-80240238D01*
X89749285Y-80335476D01*
X89701666Y-80525952D01*
X89701666Y-80668809D01*
X89749285Y-80859285D01*
X89796904Y-80954523D01*
X89892142Y-81049761D01*
X90035000Y-81097380D01*
X90273095Y-81097380D01*
X88796904Y-80097380D02*
X89273095Y-80097380D01*
X89320714Y-80573571D01*
X89273095Y-80525952D01*
X89177857Y-80478333D01*
X88939761Y-80478333D01*
X88844523Y-80525952D01*
X88796904Y-80573571D01*
X88749285Y-80668809D01*
X88749285Y-80906904D01*
X88796904Y-81002142D01*
X88844523Y-81049761D01*
X88939761Y-81097380D01*
X89177857Y-81097380D01*
X89273095Y-81049761D01*
X89320714Y-81002142D01*
%TD*%
M02*

View File

@ -1,32 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
M02*

File diff suppressed because it is too large Load Diff

View File

@ -1,291 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11O,2.350000X1.827200*%
%ADD12R,2.350000X1.827200*%
%ADD13C,2.800000*%
%ADD14C,1.800000*%
%ADD15R,2.000000X1.450000*%
%ADD16R,1.300000X1.100000*%
%ADD17R,1.650000X1.450000*%
%ADD18R,1.270000X1.900000*%
%ADD19R,0.950000X1.200000*%
%ADD20R,0.850000X1.200000*%
%ADD21R,1.800000X1.800000*%
%ADD22O,1.800000X1.800000*%
%ADD23R,1.700000X1.700000*%
%ADD24O,1.700000X1.700000*%
%ADD25R,1.350000X1.350000*%
%ADD26C,1.350000*%
%ADD27R,1.900000X1.900000*%
%ADD28O,1.900000X1.900000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,U1*%
X90805000Y-83083400D03*
X90805000Y-85674200D03*
X90805000Y-88214200D03*
X90805000Y-90754200D03*
X90805000Y-93294200D03*
X90805000Y-95834200D03*
X90805000Y-98374200D03*
X90805000Y-100914200D03*
X90805000Y-103454200D03*
X90805000Y-105994200D03*
X90805000Y-108534200D03*
X90805000Y-111074200D03*
X90805000Y-113614200D03*
X90805000Y-116154200D03*
X90805000Y-118694200D03*
X90805000Y-121234200D03*
X90805000Y-123774200D03*
X90805000Y-126314200D03*
X90805000Y-128854200D03*
X90805000Y-131394200D03*
X75565000Y-131394200D03*
X75565000Y-128854200D03*
X75565000Y-126314200D03*
X75565000Y-123774200D03*
X75565000Y-121234200D03*
X75565000Y-118694200D03*
X75565000Y-116154200D03*
X75565000Y-113614200D03*
X75565000Y-111074200D03*
X75565000Y-108534200D03*
X75565000Y-105994200D03*
X75565000Y-103454200D03*
X75565000Y-100914200D03*
X75565000Y-98374200D03*
X75565000Y-95834200D03*
X75565000Y-93294200D03*
X75565000Y-90754200D03*
X75565000Y-88214200D03*
X75565000Y-85674200D03*
D12*
X75565000Y-83134200D03*
%TD*%
D13*
%TO.C,H1*%
X75057000Y-78867000D03*
%TD*%
D14*
%TO.C,J2*%
X107315000Y-81915000D03*
X107315000Y-84455000D03*
X107315000Y-86995000D03*
X107315000Y-89535000D03*
X107315000Y-92075000D03*
X107315000Y-94615000D03*
X107315000Y-97155000D03*
X107315000Y-99695000D03*
X107315000Y-102235000D03*
X107315000Y-104775000D03*
X107315000Y-107315000D03*
X107315000Y-109855000D03*
X107315000Y-112395000D03*
X107315000Y-114935000D03*
X107315000Y-117475000D03*
X107315000Y-120015000D03*
X107315000Y-122555000D03*
X107315000Y-125095000D03*
X107315000Y-127635000D03*
X107315000Y-130175000D03*
X107315000Y-132715000D03*
X107315000Y-135255000D03*
X107315000Y-137795000D03*
X107315000Y-140335000D03*
X107315000Y-142875000D03*
X109855000Y-81915000D03*
X109855000Y-84455000D03*
X109855000Y-86995000D03*
X109855000Y-89535000D03*
X109855000Y-92075000D03*
X109855000Y-94615000D03*
X109855000Y-97155000D03*
X109855000Y-99695000D03*
X109855000Y-102235000D03*
X109855000Y-104775000D03*
X109855000Y-107315000D03*
X109855000Y-109855000D03*
X109855000Y-112395000D03*
X109855000Y-114935000D03*
X109855000Y-117475000D03*
X109855000Y-120015000D03*
X109855000Y-122555000D03*
X109855000Y-125095000D03*
X109855000Y-127635000D03*
X109855000Y-130175000D03*
X109855000Y-132715000D03*
X109855000Y-135255000D03*
X109855000Y-137795000D03*
X109855000Y-140335000D03*
G36*
G01*
X110755000Y-142239705D02*
X110755000Y-143510295D01*
G75*
G02*
X110490295Y-143775000I-264705J0D01*
G01*
X109219705Y-143775000D01*
G75*
G02*
X108955000Y-143510295I0J264705D01*
G01*
X108955000Y-142239705D01*
G75*
G02*
X109219705Y-141975000I264705J0D01*
G01*
X110490295Y-141975000D01*
G75*
G02*
X110755000Y-142239705I0J-264705D01*
G01*
G37*
%TD*%
D15*
%TO.C,J1*%
X79455000Y-134960000D03*
X85425000Y-134960000D03*
D16*
X88925000Y-139635000D03*
X88925000Y-135935000D03*
D17*
X88750000Y-145660000D03*
D18*
X77430000Y-145435000D03*
D19*
X79690000Y-145785000D03*
X80790000Y-145785000D03*
X81890000Y-145785000D03*
X82990000Y-145785000D03*
X84090000Y-145785000D03*
X85190000Y-145785000D03*
D20*
X78640000Y-145785000D03*
D19*
X86290000Y-145785000D03*
%TD*%
D21*
%TO.C,JP1*%
X100965000Y-81915000D03*
D22*
X100965000Y-79375000D03*
%TD*%
%TO.C,JP2*%
X97155000Y-79375000D03*
D21*
X97155000Y-81915000D03*
%TD*%
D23*
%TO.C,RN1*%
X97155000Y-86995000D03*
D24*
X97155000Y-89535000D03*
X97155000Y-92075000D03*
X97155000Y-94615000D03*
X97155000Y-97155000D03*
X97155000Y-99695000D03*
X97155000Y-102235000D03*
X97155000Y-104775000D03*
X97155000Y-107315000D03*
X97155000Y-109855000D03*
%TD*%
D23*
%TO.C,RN2*%
X100965000Y-86995000D03*
D24*
X100965000Y-89535000D03*
X100965000Y-92075000D03*
X100965000Y-94615000D03*
X100965000Y-97155000D03*
X100965000Y-99695000D03*
X100965000Y-102235000D03*
X100965000Y-104775000D03*
X100965000Y-107315000D03*
X100965000Y-109855000D03*
%TD*%
%TO.C,RN3*%
X97155000Y-113665000D03*
X97155000Y-116205000D03*
X97155000Y-118745000D03*
X97155000Y-121285000D03*
X97155000Y-123825000D03*
X97155000Y-126365000D03*
X97155000Y-128905000D03*
X97155000Y-131445000D03*
X97155000Y-133985000D03*
D23*
X97155000Y-136525000D03*
%TD*%
D24*
%TO.C,RN4*%
X100965000Y-113665000D03*
X100965000Y-116205000D03*
X100965000Y-118745000D03*
X100965000Y-121285000D03*
X100965000Y-123825000D03*
X100965000Y-126365000D03*
X100965000Y-128905000D03*
X100965000Y-131445000D03*
X100965000Y-133985000D03*
D23*
X100965000Y-136525000D03*
%TD*%
D21*
%TO.C,J3*%
X73025000Y-146685000D03*
D22*
X73025000Y-144145000D03*
X73025000Y-141605000D03*
X73025000Y-139065000D03*
%TD*%
D25*
%TO.C,J4*%
X93345000Y-144145000D03*
D26*
X95845000Y-144145000D03*
X98345000Y-144145000D03*
X100845000Y-144145000D03*
%TD*%
D27*
%TO.C,D4*%
X79375000Y-77851000D03*
D28*
X86995000Y-77851000D03*
%TD*%
%TO.C,D5*%
X86995000Y-81407000D03*
D27*
X79375000Y-81407000D03*
%TD*%
M02*

View File

@ -1,62 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11R,1.900000X1.350000*%
%ADD12R,1.200000X1.000000*%
%ADD13R,1.550000X1.350000*%
%ADD14R,1.170000X1.800000*%
%ADD15R,0.850000X1.100000*%
%ADD16R,0.750000X1.100000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D11*
%TO.C,J1*%
X79455000Y-134960000D03*
X85425000Y-134960000D03*
D12*
X88925000Y-139635000D03*
X88925000Y-135935000D03*
D13*
X88750000Y-145660000D03*
D14*
X77430000Y-145435000D03*
D15*
X79690000Y-145785000D03*
X80790000Y-145785000D03*
X81890000Y-145785000D03*
X82990000Y-145785000D03*
X84090000Y-145785000D03*
X85190000Y-145785000D03*
D16*
X78640000Y-145785000D03*
D15*
X86290000Y-145785000D03*
%TD*%
M02*

View File

@ -1,731 +0,0 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(5.1.6-0-10_14)*%
%TF.CreationDate,2021-03-30T09:57:07-05:00*%
%TF.ProjectId,bluepill_scsi,626c7565-7069-46c6-9c5f-736373692e6b,rev?*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.6-0-10_14)) date 2021-03-30 09:57:07*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.050000*%
%TD*%
%ADD11C,0.150000*%
%ADD12C,0.300000*%
%ADD13C,0.120000*%
%ADD14C,0.127000*%
%ADD15C,0.200000*%
G04 APERTURE END LIST*
D10*
X71755000Y-149225000D02*
X71120000Y-149225000D01*
X71120000Y-147955000D02*
X71120000Y-149225000D01*
X114935000Y-149225000D02*
X71755000Y-149225000D01*
X114935000Y-147955000D02*
X114935000Y-149225000D01*
D11*
X75126904Y-147408333D02*
X75126904Y-146913095D01*
X75431666Y-147179761D01*
X75431666Y-147065476D01*
X75469761Y-146989285D01*
X75507857Y-146951190D01*
X75584047Y-146913095D01*
X75774523Y-146913095D01*
X75850714Y-146951190D01*
X75888809Y-146989285D01*
X75926904Y-147065476D01*
X75926904Y-147294047D01*
X75888809Y-147370238D01*
X75850714Y-147408333D01*
X75850714Y-146570238D02*
X75888809Y-146532142D01*
X75926904Y-146570238D01*
X75888809Y-146608333D01*
X75850714Y-146570238D01*
X75926904Y-146570238D01*
X75126904Y-146265476D02*
X75126904Y-145770238D01*
X75431666Y-146036904D01*
X75431666Y-145922619D01*
X75469761Y-145846428D01*
X75507857Y-145808333D01*
X75584047Y-145770238D01*
X75774523Y-145770238D01*
X75850714Y-145808333D01*
X75888809Y-145846428D01*
X75926904Y-145922619D01*
X75926904Y-146151190D01*
X75888809Y-146227380D01*
X75850714Y-146265476D01*
X75165000Y-143789285D02*
X75126904Y-143865476D01*
X75126904Y-143979761D01*
X75165000Y-144094047D01*
X75241190Y-144170238D01*
X75317380Y-144208333D01*
X75469761Y-144246428D01*
X75584047Y-144246428D01*
X75736428Y-144208333D01*
X75812619Y-144170238D01*
X75888809Y-144094047D01*
X75926904Y-143979761D01*
X75926904Y-143903571D01*
X75888809Y-143789285D01*
X75850714Y-143751190D01*
X75584047Y-143751190D01*
X75584047Y-143903571D01*
X75126904Y-142303571D02*
X75126904Y-141846428D01*
X75926904Y-142075000D02*
X75126904Y-142075000D01*
X75126904Y-141655952D02*
X75926904Y-141122619D01*
X75126904Y-141122619D02*
X75926904Y-141655952D01*
X75926904Y-139141666D02*
X75545952Y-139408333D01*
X75926904Y-139598809D02*
X75126904Y-139598809D01*
X75126904Y-139294047D01*
X75165000Y-139217857D01*
X75203095Y-139179761D01*
X75279285Y-139141666D01*
X75393571Y-139141666D01*
X75469761Y-139179761D01*
X75507857Y-139217857D01*
X75545952Y-139294047D01*
X75545952Y-139598809D01*
X75126904Y-138875000D02*
X75926904Y-138341666D01*
X75126904Y-138341666D02*
X75926904Y-138875000D01*
X99679285Y-139787380D02*
X100298333Y-139787380D01*
X99965000Y-140168333D01*
X100107857Y-140168333D01*
X100203095Y-140215952D01*
X100250714Y-140263571D01*
X100298333Y-140358809D01*
X100298333Y-140596904D01*
X100250714Y-140692142D01*
X100203095Y-140739761D01*
X100107857Y-140787380D01*
X99822142Y-140787380D01*
X99726904Y-140739761D01*
X99679285Y-140692142D01*
X100631666Y-139787380D02*
X101250714Y-139787380D01*
X100917380Y-140168333D01*
X101060238Y-140168333D01*
X101155476Y-140215952D01*
X101203095Y-140263571D01*
X101250714Y-140358809D01*
X101250714Y-140596904D01*
X101203095Y-140692142D01*
X101155476Y-140739761D01*
X101060238Y-140787380D01*
X100774523Y-140787380D01*
X100679285Y-140739761D01*
X100631666Y-140692142D01*
X101869761Y-139787380D02*
X101965000Y-139787380D01*
X102060238Y-139835000D01*
X102107857Y-139882619D01*
X102155476Y-139977857D01*
X102203095Y-140168333D01*
X102203095Y-140406428D01*
X102155476Y-140596904D01*
X102107857Y-140692142D01*
X102060238Y-140739761D01*
X101965000Y-140787380D01*
X101869761Y-140787380D01*
X101774523Y-140739761D01*
X101726904Y-140692142D01*
X101679285Y-140596904D01*
X101631666Y-140406428D01*
X101631666Y-140168333D01*
X101679285Y-139977857D01*
X101726904Y-139882619D01*
X101774523Y-139835000D01*
X101869761Y-139787380D01*
X95916904Y-139882619D02*
X95964523Y-139835000D01*
X96059761Y-139787380D01*
X96297857Y-139787380D01*
X96393095Y-139835000D01*
X96440714Y-139882619D01*
X96488333Y-139977857D01*
X96488333Y-140073095D01*
X96440714Y-140215952D01*
X95869285Y-140787380D01*
X96488333Y-140787380D01*
X96869285Y-139882619D02*
X96916904Y-139835000D01*
X97012142Y-139787380D01*
X97250238Y-139787380D01*
X97345476Y-139835000D01*
X97393095Y-139882619D01*
X97440714Y-139977857D01*
X97440714Y-140073095D01*
X97393095Y-140215952D01*
X96821666Y-140787380D01*
X97440714Y-140787380D01*
X98059761Y-139787380D02*
X98155000Y-139787380D01*
X98250238Y-139835000D01*
X98297857Y-139882619D01*
X98345476Y-139977857D01*
X98393095Y-140168333D01*
X98393095Y-140406428D01*
X98345476Y-140596904D01*
X98297857Y-140692142D01*
X98250238Y-140739761D01*
X98155000Y-140787380D01*
X98059761Y-140787380D01*
X97964523Y-140739761D01*
X97916904Y-140692142D01*
X97869285Y-140596904D01*
X97821666Y-140406428D01*
X97821666Y-140168333D01*
X97869285Y-139977857D01*
X97916904Y-139882619D01*
X97964523Y-139835000D01*
X98059761Y-139787380D01*
X95694904Y-76287380D02*
X96266333Y-76287380D01*
X95980619Y-77287380D02*
X95980619Y-76287380D01*
X96599666Y-76763571D02*
X96933000Y-76763571D01*
X97075857Y-77287380D02*
X96599666Y-77287380D01*
X96599666Y-76287380D01*
X97075857Y-76287380D01*
X98075857Y-77287380D02*
X97742523Y-76811190D01*
X97504428Y-77287380D02*
X97504428Y-76287380D01*
X97885380Y-76287380D01*
X97980619Y-76335000D01*
X98028238Y-76382619D01*
X98075857Y-76477857D01*
X98075857Y-76620714D01*
X98028238Y-76715952D01*
X97980619Y-76763571D01*
X97885380Y-76811190D01*
X97504428Y-76811190D01*
X98504428Y-77287380D02*
X98504428Y-76287380D01*
X98837761Y-77001666D01*
X99171095Y-76287380D01*
X99171095Y-77287380D01*
X100599666Y-76287380D02*
X100790142Y-76287380D01*
X100885380Y-76335000D01*
X100980619Y-76430238D01*
X101028238Y-76620714D01*
X101028238Y-76954047D01*
X100980619Y-77144523D01*
X100885380Y-77239761D01*
X100790142Y-77287380D01*
X100599666Y-77287380D01*
X100504428Y-77239761D01*
X100409190Y-77144523D01*
X100361571Y-76954047D01*
X100361571Y-76620714D01*
X100409190Y-76430238D01*
X100504428Y-76335000D01*
X100599666Y-76287380D01*
X101456809Y-77287380D02*
X101456809Y-76287380D01*
X102028238Y-77287380D01*
X102028238Y-76287380D01*
D10*
X114935000Y-75565000D02*
X71120000Y-75565000D01*
X114935000Y-147955000D02*
X114935000Y-75565000D01*
X71120000Y-147955000D02*
X71120000Y-75565000D01*
D12*
X77145571Y-147847857D02*
X77359857Y-147919285D01*
X77431285Y-147990714D01*
X77502714Y-148133571D01*
X77502714Y-148347857D01*
X77431285Y-148490714D01*
X77359857Y-148562142D01*
X77217000Y-148633571D01*
X76645571Y-148633571D01*
X76645571Y-147133571D01*
X77145571Y-147133571D01*
X77288428Y-147205000D01*
X77359857Y-147276428D01*
X77431285Y-147419285D01*
X77431285Y-147562142D01*
X77359857Y-147705000D01*
X77288428Y-147776428D01*
X77145571Y-147847857D01*
X76645571Y-147847857D01*
X78359857Y-148633571D02*
X78217000Y-148562142D01*
X78145571Y-148419285D01*
X78145571Y-147133571D01*
X79574142Y-147633571D02*
X79574142Y-148633571D01*
X78931285Y-147633571D02*
X78931285Y-148419285D01*
X79002714Y-148562142D01*
X79145571Y-148633571D01*
X79359857Y-148633571D01*
X79502714Y-148562142D01*
X79574142Y-148490714D01*
X80859857Y-148562142D02*
X80717000Y-148633571D01*
X80431285Y-148633571D01*
X80288428Y-148562142D01*
X80217000Y-148419285D01*
X80217000Y-147847857D01*
X80288428Y-147705000D01*
X80431285Y-147633571D01*
X80717000Y-147633571D01*
X80859857Y-147705000D01*
X80931285Y-147847857D01*
X80931285Y-147990714D01*
X80217000Y-148133571D01*
X81502714Y-148562142D02*
X81717000Y-148633571D01*
X82074142Y-148633571D01*
X82217000Y-148562142D01*
X82288428Y-148490714D01*
X82359857Y-148347857D01*
X82359857Y-148205000D01*
X82288428Y-148062142D01*
X82217000Y-147990714D01*
X82074142Y-147919285D01*
X81788428Y-147847857D01*
X81645571Y-147776428D01*
X81574142Y-147705000D01*
X81502714Y-147562142D01*
X81502714Y-147419285D01*
X81574142Y-147276428D01*
X81645571Y-147205000D01*
X81788428Y-147133571D01*
X82145571Y-147133571D01*
X82359857Y-147205000D01*
X83859857Y-148490714D02*
X83788428Y-148562142D01*
X83574142Y-148633571D01*
X83431285Y-148633571D01*
X83217000Y-148562142D01*
X83074142Y-148419285D01*
X83002714Y-148276428D01*
X82931285Y-147990714D01*
X82931285Y-147776428D01*
X83002714Y-147490714D01*
X83074142Y-147347857D01*
X83217000Y-147205000D01*
X83431285Y-147133571D01*
X83574142Y-147133571D01*
X83788428Y-147205000D01*
X83859857Y-147276428D01*
X84431285Y-148562142D02*
X84645571Y-148633571D01*
X85002714Y-148633571D01*
X85145571Y-148562142D01*
X85217000Y-148490714D01*
X85288428Y-148347857D01*
X85288428Y-148205000D01*
X85217000Y-148062142D01*
X85145571Y-147990714D01*
X85002714Y-147919285D01*
X84717000Y-147847857D01*
X84574142Y-147776428D01*
X84502714Y-147705000D01*
X84431285Y-147562142D01*
X84431285Y-147419285D01*
X84502714Y-147276428D01*
X84574142Y-147205000D01*
X84717000Y-147133571D01*
X85074142Y-147133571D01*
X85288428Y-147205000D01*
X85931285Y-148633571D02*
X85931285Y-147133571D01*
X88574142Y-148633571D02*
X87717000Y-148633571D01*
X88145571Y-148633571D02*
X88145571Y-147133571D01*
X88002714Y-147347857D01*
X87859857Y-147490714D01*
X87717000Y-147562142D01*
X89217000Y-148490714D02*
X89288428Y-148562142D01*
X89217000Y-148633571D01*
X89145571Y-148562142D01*
X89217000Y-148490714D01*
X89217000Y-148633571D01*
X90217000Y-147133571D02*
X90359857Y-147133571D01*
X90502714Y-147205000D01*
X90574142Y-147276428D01*
X90645571Y-147419285D01*
X90717000Y-147705000D01*
X90717000Y-148062142D01*
X90645571Y-148347857D01*
X90574142Y-148490714D01*
X90502714Y-148562142D01*
X90359857Y-148633571D01*
X90217000Y-148633571D01*
X90074142Y-148562142D01*
X90002714Y-148490714D01*
X89931285Y-148347857D01*
X89859857Y-148062142D01*
X89859857Y-147705000D01*
X89931285Y-147419285D01*
X90002714Y-147276428D01*
X90074142Y-147205000D01*
X90217000Y-147133571D01*
X91359857Y-148062142D02*
X92502714Y-148062142D01*
X93859857Y-148562142D02*
X93717000Y-148633571D01*
X93431285Y-148633571D01*
X93288428Y-148562142D01*
X93217000Y-148490714D01*
X93145571Y-148347857D01*
X93145571Y-147919285D01*
X93217000Y-147776428D01*
X93288428Y-147705000D01*
X93431285Y-147633571D01*
X93717000Y-147633571D01*
X93859857Y-147705000D01*
D13*
%TO.C,J2*%
X114535000Y-142375000D02*
X113535000Y-142875000D01*
X114535000Y-143375000D02*
X114535000Y-142375000D01*
X113535000Y-142875000D02*
X114535000Y-143375000D01*
X111835000Y-110345000D02*
X113145000Y-110345000D01*
X111835000Y-110345000D02*
X111835000Y-110345000D01*
X111835000Y-78005000D02*
X111835000Y-110345000D01*
X105335000Y-78005000D02*
X111835000Y-78005000D01*
X105335000Y-146785000D02*
X105335000Y-78005000D01*
X111835000Y-146785000D02*
X105335000Y-146785000D01*
X111835000Y-114445000D02*
X111835000Y-146785000D01*
X113145000Y-114445000D02*
X111835000Y-114445000D01*
X113145000Y-76705000D02*
X113145000Y-148085000D01*
X104025000Y-76705000D02*
X113145000Y-76705000D01*
X104025000Y-148085000D02*
X104025000Y-76705000D01*
X113145000Y-148085000D02*
X104025000Y-148085000D01*
%TO.C,J1*%
X89255000Y-144785000D02*
X89255000Y-140335000D01*
X89255000Y-138935000D02*
X89255000Y-136635000D01*
X89255000Y-135235000D02*
X89255000Y-134515000D01*
X89255000Y-134515000D02*
X86575000Y-134515000D01*
X84275000Y-134515000D02*
X80605000Y-134515000D01*
X78305000Y-134515000D02*
X77075000Y-134515000D01*
X77075000Y-134515000D02*
X77075000Y-144335000D01*
X87775000Y-146155000D02*
X86915000Y-146155000D01*
%TO.C,JP1*%
X102295000Y-80645000D02*
X99635000Y-80645000D01*
X102295000Y-80645000D02*
X102295000Y-78045000D01*
X102295000Y-78045000D02*
X99635000Y-78045000D01*
X99635000Y-80645000D02*
X99635000Y-78045000D01*
X99635000Y-83245000D02*
X99635000Y-81915000D01*
X100965000Y-83245000D02*
X99635000Y-83245000D01*
%TO.C,JP2*%
X97155000Y-83245000D02*
X95825000Y-83245000D01*
X95825000Y-83245000D02*
X95825000Y-81915000D01*
X95825000Y-80645000D02*
X95825000Y-78045000D01*
X98485000Y-78045000D02*
X95825000Y-78045000D01*
X98485000Y-80645000D02*
X98485000Y-78045000D01*
X98485000Y-80645000D02*
X95825000Y-80645000D01*
%TO.C,RN1*%
X98555000Y-88265000D02*
X95755000Y-88265000D01*
X98555000Y-111295000D02*
X98555000Y-85555000D01*
X95755000Y-111295000D02*
X98555000Y-111295000D01*
X95755000Y-85555000D02*
X95755000Y-111295000D01*
X98555000Y-85555000D02*
X95755000Y-85555000D01*
%TO.C,RN2*%
X102365000Y-88265000D02*
X99565000Y-88265000D01*
X102365000Y-111295000D02*
X102365000Y-85555000D01*
X99565000Y-111295000D02*
X102365000Y-111295000D01*
X99565000Y-85555000D02*
X99565000Y-111295000D01*
X102365000Y-85555000D02*
X99565000Y-85555000D01*
%TO.C,RN3*%
X95755000Y-137965000D02*
X98555000Y-137965000D01*
X98555000Y-137965000D02*
X98555000Y-112225000D01*
X98555000Y-112225000D02*
X95755000Y-112225000D01*
X95755000Y-112225000D02*
X95755000Y-137965000D01*
X95755000Y-135255000D02*
X98555000Y-135255000D01*
%TO.C,RN4*%
X99565000Y-137965000D02*
X102365000Y-137965000D01*
X102365000Y-137965000D02*
X102365000Y-112225000D01*
X102365000Y-112225000D02*
X99565000Y-112225000D01*
X99565000Y-112225000D02*
X99565000Y-137965000D01*
X99565000Y-135255000D02*
X102365000Y-135255000D01*
%TO.C,J3*%
X74355000Y-137735000D02*
X71695000Y-137735000D01*
X74355000Y-145415000D02*
X74355000Y-137735000D01*
X71695000Y-145415000D02*
X71695000Y-137735000D01*
X74355000Y-145415000D02*
X71695000Y-145415000D01*
X74355000Y-146685000D02*
X74355000Y-148015000D01*
X74355000Y-148015000D02*
X73025000Y-148015000D01*
D14*
%TO.C,J4*%
X92095000Y-146645000D02*
X92095000Y-141745000D01*
X102095000Y-141745000D02*
X102095000Y-146645000D01*
X102095000Y-141745000D02*
X92095000Y-141745000D01*
X102095000Y-146645000D02*
X92095000Y-146645000D01*
D15*
X91545000Y-144145000D02*
G75*
G03*
X91545000Y-144145000I-100000J0D01*
G01*
%TD*%
%TO.C,U1*%
D11*
X72477380Y-83946904D02*
X73286904Y-83946904D01*
X73382142Y-83899285D01*
X73429761Y-83851666D01*
X73477380Y-83756428D01*
X73477380Y-83565952D01*
X73429761Y-83470714D01*
X73382142Y-83423095D01*
X73286904Y-83375476D01*
X72477380Y-83375476D01*
X73477380Y-82375476D02*
X73477380Y-82946904D01*
X73477380Y-82661190D02*
X72477380Y-82661190D01*
X72620238Y-82756428D01*
X72715476Y-82851666D01*
X72763095Y-82946904D01*
%TO.C,J2*%
X102957380Y-145748333D02*
X103671666Y-145748333D01*
X103814523Y-145795952D01*
X103909761Y-145891190D01*
X103957380Y-146034047D01*
X103957380Y-146129285D01*
X103052619Y-145319761D02*
X103005000Y-145272142D01*
X102957380Y-145176904D01*
X102957380Y-144938809D01*
X103005000Y-144843571D01*
X103052619Y-144795952D01*
X103147857Y-144748333D01*
X103243095Y-144748333D01*
X103385952Y-144795952D01*
X103957380Y-145367380D01*
X103957380Y-144748333D01*
%TO.C,J1*%
X86661666Y-143597380D02*
X86661666Y-144311666D01*
X86614047Y-144454523D01*
X86518809Y-144549761D01*
X86375952Y-144597380D01*
X86280714Y-144597380D01*
X87661666Y-144597380D02*
X87090238Y-144597380D01*
X87375952Y-144597380D02*
X87375952Y-143597380D01*
X87280714Y-143740238D01*
X87185476Y-143835476D01*
X87090238Y-143883095D01*
%TO.C,RN1*%
X96464523Y-84907380D02*
X96131190Y-84431190D01*
X95893095Y-84907380D02*
X95893095Y-83907380D01*
X96274047Y-83907380D01*
X96369285Y-83955000D01*
X96416904Y-84002619D01*
X96464523Y-84097857D01*
X96464523Y-84240714D01*
X96416904Y-84335952D01*
X96369285Y-84383571D01*
X96274047Y-84431190D01*
X95893095Y-84431190D01*
X96893095Y-84907380D02*
X96893095Y-83907380D01*
X97464523Y-84907380D01*
X97464523Y-83907380D01*
X98464523Y-84907380D02*
X97893095Y-84907380D01*
X98178809Y-84907380D02*
X98178809Y-83907380D01*
X98083571Y-84050238D01*
X97988333Y-84145476D01*
X97893095Y-84193095D01*
%TO.C,RN2*%
X100274523Y-84907380D02*
X99941190Y-84431190D01*
X99703095Y-84907380D02*
X99703095Y-83907380D01*
X100084047Y-83907380D01*
X100179285Y-83955000D01*
X100226904Y-84002619D01*
X100274523Y-84097857D01*
X100274523Y-84240714D01*
X100226904Y-84335952D01*
X100179285Y-84383571D01*
X100084047Y-84431190D01*
X99703095Y-84431190D01*
X100703095Y-84907380D02*
X100703095Y-83907380D01*
X101274523Y-84907380D01*
X101274523Y-83907380D01*
X101703095Y-84002619D02*
X101750714Y-83955000D01*
X101845952Y-83907380D01*
X102084047Y-83907380D01*
X102179285Y-83955000D01*
X102226904Y-84002619D01*
X102274523Y-84097857D01*
X102274523Y-84193095D01*
X102226904Y-84335952D01*
X101655476Y-84907380D01*
X102274523Y-84907380D01*
%TO.C,RN3*%
X96464523Y-139517380D02*
X96131190Y-139041190D01*
X95893095Y-139517380D02*
X95893095Y-138517380D01*
X96274047Y-138517380D01*
X96369285Y-138565000D01*
X96416904Y-138612619D01*
X96464523Y-138707857D01*
X96464523Y-138850714D01*
X96416904Y-138945952D01*
X96369285Y-138993571D01*
X96274047Y-139041190D01*
X95893095Y-139041190D01*
X96893095Y-139517380D02*
X96893095Y-138517380D01*
X97464523Y-139517380D01*
X97464523Y-138517380D01*
X97845476Y-138517380D02*
X98464523Y-138517380D01*
X98131190Y-138898333D01*
X98274047Y-138898333D01*
X98369285Y-138945952D01*
X98416904Y-138993571D01*
X98464523Y-139088809D01*
X98464523Y-139326904D01*
X98416904Y-139422142D01*
X98369285Y-139469761D01*
X98274047Y-139517380D01*
X97988333Y-139517380D01*
X97893095Y-139469761D01*
X97845476Y-139422142D01*
%TO.C,RN4*%
X100274523Y-139517380D02*
X99941190Y-139041190D01*
X99703095Y-139517380D02*
X99703095Y-138517380D01*
X100084047Y-138517380D01*
X100179285Y-138565000D01*
X100226904Y-138612619D01*
X100274523Y-138707857D01*
X100274523Y-138850714D01*
X100226904Y-138945952D01*
X100179285Y-138993571D01*
X100084047Y-139041190D01*
X99703095Y-139041190D01*
X100703095Y-139517380D02*
X100703095Y-138517380D01*
X101274523Y-139517380D01*
X101274523Y-138517380D01*
X102179285Y-138850714D02*
X102179285Y-139517380D01*
X101941190Y-138469761D02*
X101703095Y-139184047D01*
X102322142Y-139184047D01*
%TO.C,J4*%
X90471666Y-142327380D02*
X90471666Y-143041666D01*
X90424047Y-143184523D01*
X90328809Y-143279761D01*
X90185952Y-143327380D01*
X90090714Y-143327380D01*
X91376428Y-142660714D02*
X91376428Y-143327380D01*
X91138333Y-142279761D02*
X90900238Y-142994047D01*
X91519285Y-142994047D01*
%TD*%
M02*

View File

@ -1,16 +0,0 @@
M48
; DRILL file {KiCad (5.1.6-0-10_14)} date Tuesday, March 30, 2021 at 09:57:37 AM
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2021-03-30T09:57:37-05:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.6-0-10_14)
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
INCH
T1C0.1063
%
G90
G05
T1
X2.955Y-3.105
T0
M30

View File

@ -1,181 +0,0 @@
M48
; DRILL file {KiCad (5.1.6-0-10_14)} date Tuesday, March 30, 2021 at 09:57:37 AM
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2021-03-30T09:57:37-05:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.6-0-10_14)
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
INCH
T1C0.0157
T2C0.0315
T3C0.0354
T4C0.0394
T5C0.0400
%
G90
G05
T1
X2.975Y-5.325
X3.075Y-4.775
X3.1541Y-5.0376
X3.175Y-3.625
X3.175Y-4.375
X3.2827Y-4.6673
X3.3569Y-4.8833
X3.375Y-4.675
X3.475Y-3.875
X3.475Y-4.925
X3.675Y-3.125
X3.675Y-4.125
T2
X3.825Y-4.475
X3.825Y-4.575
X3.825Y-4.675
X3.825Y-4.775
X3.825Y-4.875
X3.825Y-4.975
X3.825Y-5.075
X3.825Y-5.175
X3.825Y-5.275
X3.825Y-5.375
X3.975Y-4.475
X3.975Y-4.575
X3.975Y-4.675
X3.975Y-4.775
X3.975Y-4.875
X3.975Y-4.975
X3.975Y-5.075
X3.975Y-5.175
X3.975Y-5.275
X3.975Y-5.375
X3.825Y-3.425
X3.825Y-3.525
X3.825Y-3.625
X3.825Y-3.725
X3.825Y-3.825
X3.825Y-3.925
X3.825Y-4.025
X3.825Y-4.125
X3.825Y-4.225
X3.825Y-4.325
X3.975Y-3.425
X3.975Y-3.525
X3.975Y-3.625
X3.975Y-3.725
X3.975Y-3.825
X3.975Y-3.925
X3.975Y-4.025
X3.975Y-4.125
X3.975Y-4.225
X3.975Y-4.325
T3
X3.125Y-3.065
X3.425Y-3.065
X3.675Y-5.675
X3.7734Y-5.675
X3.8719Y-5.675
X3.9703Y-5.675
X3.125Y-3.205
X3.425Y-3.205
T4
X2.875Y-5.475
X2.875Y-5.575
X2.875Y-5.675
X2.875Y-5.775
X3.825Y-3.125
X3.825Y-3.225
X4.225Y-3.225
X4.225Y-3.325
X4.225Y-3.425
X4.225Y-3.525
X4.225Y-3.625
X4.225Y-3.725
X4.225Y-3.825
X4.225Y-3.925
X4.225Y-4.025
X4.225Y-4.125
X4.225Y-4.225
X4.225Y-4.325
X4.225Y-4.425
X4.225Y-4.525
X4.225Y-4.625
X4.225Y-4.725
X4.225Y-4.825
X4.225Y-4.925
X4.225Y-5.025
X4.225Y-5.125
X4.225Y-5.225
X4.225Y-5.325
X4.225Y-5.425
X4.225Y-5.525
X4.225Y-5.625
X4.325Y-3.225
X4.325Y-3.325
X4.325Y-3.425
X4.325Y-3.525
X4.325Y-3.625
X4.325Y-3.725
X4.325Y-3.825
X4.325Y-3.925
X4.325Y-4.025
X4.325Y-4.125
X4.325Y-4.225
X4.325Y-4.325
X4.325Y-4.425
X4.325Y-4.525
X4.325Y-4.625
X4.325Y-4.725
X4.325Y-4.825
X4.325Y-4.925
X4.325Y-5.025
X4.325Y-5.125
X4.325Y-5.225
X4.325Y-5.325
X4.325Y-5.425
X4.325Y-5.525
X4.325Y-5.625
X3.975Y-3.125
X3.975Y-3.225
T5
X2.975Y-3.273
X2.975Y-3.373
X2.975Y-3.473
X2.975Y-3.573
X2.975Y-3.673
X2.975Y-3.773
X2.975Y-3.873
X2.975Y-3.973
X2.975Y-4.073
X2.975Y-4.173
X2.975Y-4.273
X2.975Y-4.373
X2.975Y-4.473
X2.975Y-4.573
X2.975Y-4.673
X2.975Y-4.773
X2.975Y-4.873
X2.975Y-4.973
X2.975Y-5.073
X2.975Y-5.173
X3.575Y-3.271
X3.575Y-3.373
X3.575Y-3.473
X3.575Y-3.573
X3.575Y-3.673
X3.575Y-3.773
X3.575Y-3.873
X3.575Y-3.973
X3.575Y-4.073
X3.575Y-4.173
X3.575Y-4.273
X3.575Y-4.373
X3.575Y-4.473
X3.575Y-4.573
X3.575Y-4.673
X3.575Y-4.773
X3.575Y-4.873
X3.575Y-4.973
X3.575Y-5.073
X3.575Y-5.173
T0
M30

View File

@ -1,128 +0,0 @@
{
"Header":
{
"GenerationSoftware":
{
"Vendor": "KiCad",
"Application": "Pcbnew",
"Version": "(5.1.6-0-10_14)"
},
"CreationDate": "2021-03-30T09:57:07-05:00"
},
"GeneralSpecs":
{
"ProjectId":
{
"Name": "bluepill_scsi",
"GUID": "626c7565-7069-46c6-9c5f-736373692e6b",
"Revision": "rev?"
},
"Size":
{
"X": 43.865,
"Y": 73.710
},
"LayerNumber": 2,
"BoardThickness": 1.600
},
"DesignRules":
[
{
"Layers": "Outer",
"PadToPad": 0.200,
"PadToTrack": 0.200,
"TrackToTrack": 0.200,
"MinLineWidth": 0.250,
"TrackToRegion": 0.508,
"RegionToRegion": 0.508
}
],
"FilesAttributes":
[
{
"Path": "bluepill_scsi-F_Cu.gbr",
"FileFunction": "Copper,L1,Top",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-B_Cu.gbr",
"FileFunction": "Copper,L2,Bot",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-F_Paste.gbr",
"FileFunction": "SolderPaste,Top",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-B_Paste.gbr",
"FileFunction": "SolderPaste,Bot",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-F_SilkS.gbr",
"FileFunction": "Legend,Top",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-B_SilkS.gbr",
"FileFunction": "Legend,Bot",
"FilePolarity": "Positive"
},
{
"Path": "bluepill_scsi-F_Mask.gbr",
"FileFunction": "SolderMask,Top",
"FilePolarity": "Negative"
},
{
"Path": "bluepill_scsi-B_Mask.gbr",
"FileFunction": "SolderMask,Bot",
"FilePolarity": "Negative"
},
{
"Path": "bluepill_scsi-Edge_Cuts.gbr",
"FileFunction": "Profile",
"FilePolarity": "Positive"
}
],
"MaterialStackup":
[
{
"Type": "Legend",
"Notes": "Layer F.SilkS"
},
{
"Type": "SolderPaste",
"Notes": "Layer F.Paste"
},
{
"Type": "SolderMask",
"Notes": "Layer F.Mask"
},
{
"Type": "Copper",
"Notes": "Layer F.Cu"
},
{
"Type": "Dielectric",
"Material": "FR4",
"Notes": "Layers L1/L2"
},
{
"Type": "Copper",
"Notes": "Layer B.Cu"
},
{
"Type": "SolderMask",
"Notes": "Layer B.Mask"
},
{
"Type": "SolderPaste",
"Notes": "Layer B.Paste"
},
{
"Type": "Legend",
"Notes": "Layer B.SilkS"
}
]
}

View File

@ -1,3 +0,0 @@
(sym_lib_table
(lib (name bluepill_scsi-rescue)(type Legacy)(uri ${KIPRJMOD}/bluepill_scsi-rescue.lib)(options "")(descr ""))
)

View File

@ -1,39 +0,0 @@
This directory is intended for project header files.
A header file is a file containing C declarations and macro definitions
to be shared between several project source files. You request the use of a
header file in your project source file (C, C++, etc) located in `src` folder
by including it, with the C preprocessing directive `#include'.
```src/main.c
#include "header.h"
int main (void)
{
...
}
```
Including a header file produces the same results as copying the header file
into each source file that needs it. Such copying would be time-consuming
and error-prone. With a header file, the related declarations appear
in only one place. If they need to be changed, they can be changed in one
place, and programs that include the header file will automatically use the
new version when next recompiled. The header file eliminates the labor of
finding and changing all the copies as well as the risk that a failure to
find one copy will result in inconsistencies within a program.
In C, the usual convention is to give header files names that end with `.h'.
It is most portable to use only letters, digits, dashes, and underscores in
header file names, and at most one dot.
Read more about using header files in official GCC documentation:
* Include Syntax
* Include Operation
* Once-Only Headers
* Computed Includes
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

View File

@ -1,46 +0,0 @@
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in a an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html

View File

@ -1,40 +0,0 @@
; PlatformIO Project Configuration File https://docs.platformio.org/page/projectconf.html
[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
board_build.mcu = stm32f103c8t6
board_build.core = maple
framework = arduino
lib_deps =
greiman/SdFat @ ^2.0.6
upload_protocol = stlink
; Different gcc versions produce much different binaries in terms of speed.
; 1.40804.0 ; 985kb/sec
; 1.60301.0 ; 1012kb/sec ***
; 1.70201.0 ; 926kb/sec
; 1.80301.0 ; 935kb/sec
; 1.80201.181220 ; 921kb/sec
; 1.90201.191206 ; 912kb/sec
; 1.90301.200702 ; default - 955kb/sec
platform_packages = toolchain-gccarmnoneeabi@1.60301.0
build_unflags =
-Os
-DARDUINO_ARCH_STM32F1
build_flags =
-w
-DARDUINO_GENERIC_STM32F103C
-DARDUINO_LIB_DISCOVERY_PHASE
-DARDUINO=10813
-DARDUINO_ARCH_STM32
-DDEBUG_LEVEL=DEBUG_NONE
-O3
; Work around for clones.
; https://community.platformio.org/t/cannot-upload-to-stm32-bluepill-board-over-stlink-v2/3492/25
; upload_flags = -c set CPUTAPID 0x2ba01477
; [env:debug]
; build_type = debug
; debug_tool = stlink

File diff suppressed because it is too large Load Diff

37
src/cmd.h Executable file
View File

@ -0,0 +1,37 @@
#ifndef __CMD_H
#define __CMD_H
#define MAX_MSG_SIZE 256
#define MAXARG 32
#include <stdint.h>
// command line structure
typedef struct Commands_s {
const char *Name;
const char *ValidPath;
int MinParams;
const char *ShortHelp;
const char *FullHelp;
void (*Func)(int argc, char **argv);
struct Commands_s *Dispatch;
} Commands_t;
void cmdDisplay();
void cmdParse(char *cmd);
void cmdPoll();
void cmdCommandHelp(boolean singleCommand, Commands_t *table, int cmd);
void cmdDispatchHelp(Commands_t *table, int argc, char **argv);
void cmdDispatch(Commands_t *table, int argc, char **argv);
int execHandler(char *filename);
int execLoop();
void execcmd(int argc, char **argv);
void showcmd(int argc, char **argv);
void setcmd(int argc, char **argv);
extern Commands_t GlobalCommands[];
#endif /* __CMD_H */

2079
src/cmd.ino Executable file

File diff suppressed because it is too large Load Diff

43
src/config.h Executable file
View File

@ -0,0 +1,43 @@
#ifndef __CONFIG_H
#define __CONFIG_H
#define DEBUG 1 // 0:No debug information output (Faster by 2-3x+)
// 1: Debug information output to USB Serial
// 2: Debug information output to LOG.txt (slow)
#define SYNCHRO false // Support Synchronous mode.
#define ACK_INTERRUPTS false
#define READ_SPEED_OPTIMIZE true //
#define WRITE_SPEED_OPTIMIZE true //
#define READ_SPEED_OPTIMIZE_RAW true //
#define WRITE_SPEED_OPTIMIZE_RAW true //
#define USE_DB2ID_TABLE true // Use table to get ID from SEL-DB
// SCSI config
#define NUM_SCSIID 8 // Maximum number of supported SCSI-IDs (The minimum is 1)
#define NUM_SCSILUN 8 // Maximum number of LUNs supported (The minimum is 1)
#define NUM_VDEV 16 // Maximum number of VDEVs supported (The minimum is 1)
#define READ_PARITY_CHECK 0 // Perform read parity check (unverified)
// HDD format
#define MAX_BLOCKSIZE (1 << 15) // Maximum BLOCK size (2048 to 8192 tested, 16384 had issues)
#define SCSI_INQUIRY_RESPONSE_SIZE 96
extern uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE];
// Supported Device Types
#define SUPPORT_DISK true
#define SUPPORT_OPTICAL true
#define SUPPORT_TAPE false
#define SUPPORT_MO false
#define SUPPORT_INITIATOR true
#define SUPPORT_CONTROL true
// Compatibility Settings
#define SUPPORT_SASI false // Enable SASI compatiblity for Sharp X68000
#define SUPPORT_SASI_DEFAULT false // Turn it on by default
#define SUPPORT_APPLE true
#define SUPPORT_APPLE_DEFAULT false
#endif /* __CONFIG_H */

111
src/control.ino Normal file
View File

@ -0,0 +1,111 @@
#include "config.h"
#include "scsi_defs.h"
#if SUPPORT_CONTROL
/*
* RECEIVE Command processing.
*/
void onControlReceiveCommand(uint32_t adds, uint32_t len)
{
LOG("-R ");
LOGHEX4N(len);
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
switch(m_cmd[1] & 0x3) {
case 0:
if(len == 0) return;
break;
case 1: // Fixed
break;
case 2: // SILI
break;
case 3: // Illegal Request
m_sts = 0x02;
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 1" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x01;
m_phase = PHASE_STATUSIN;
return;
}
LED_ON();
writeDataPhase(len, m_responsebuffer);
LED_OFF();
m_phase = PHASE_STATUSIN;
}
/*
* SEND Command processing.
*/
void onControlSendCommand(uint32_t adds, uint32_t len)
{
LOG("-W ");
LOGHEX4N(len);
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
if(len > MAX_BLOCKSIZE) {
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 4" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x04;
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
LED_ON();
readDataPhase(len, m_responsebuffer);
LED_OFF();
m_phase = PHASE_STATUSIN;
}
void ControlReceive6CommandHandler() {
LOG("[Receive6]");
onControlReceiveCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
}
void ControlSend6CommandHandler() {
LOG("[Send6]");
onControlSendCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
}
void ConfigureControlHandlers(VirtualDevice_t *vdev) {
for(int c = 0; c < 256; c++)
vdev->m_handler[c] = &UnknownCommandHandler;
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
vdev->m_handler[CMD_READ6] = &ControlReceive6CommandHandler;
vdev->m_handler[CMD_WRITE6] = &ControlSend6CommandHandler;
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
vdev->m_handler[CMD_SEND_DIAGNOSTIC] = &SendDiagnosticCommandHandler;
}
// If config file exists, read the first three lines and copy the contents.
// File must be well formed or you will get junk in the SCSI Vendor fields.
void ConfigureControl(VirtualDevice_t *vdev, const char *image_name) {
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_PROCESSOR) {
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
break;
}
}
vdev->m_type = DEV_PROCESSOR;
ConfigureControlHandlers(vdev);
}
#endif

193
src/defaults.ino Executable file
View File

@ -0,0 +1,193 @@
#include "config.h"
// SCSI Drive Vendor information
uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
#if SUPPORT_SASI
{
DEV_DISK, //Device type
0x00, //RMB = 0
0x01, //ISO,ECMA,ANSI version
0x01, //Response data format
35 - 4, //Additional data length
0, 0, //Reserve
0x00, //Support function
'N', 'E', 'C', 'I', 'T', 'S', 'U', ' ',
'A', 'r', 'd', 'S', 'C', 'S', 'i', 'n', 'o', ' ', ' ',' ', ' ', ' ', ' ', ' ',
'0', '0', '1', '0',
0
},
#endif /* SUPPORT_SASI */
#if SUPPORT_DISK
{
DEV_DISK, //device type
0x00, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
35 - 4, //Additional data length
0, 0, //Reserve
0x00, //Support function
'Q', 'U', 'A', 'N', 'T', 'U', 'M', ' ', // vendor 8
'F', 'I', 'R', 'E', 'B', 'A', 'L', 'L', '1', ' ', ' ',' ', ' ', ' ', ' ', ' ', // product 16
'1', '.', '0', ' ', // version 4
// Release Number (1 Byte)
0x20,
// Revision Date (10 Bytes)
'2','0','2','1','/','1','1','/','2','2',
0
},
{
DEV_DISK, //device type
0x00, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
35 - 4, //Additional data length
0, 0, //Reserve
0x00, //Support function
'S', 'E', 'A', 'G', 'A', 'T', 'E', ' ', // vendor 8
'S', 'T', '2', '2', '5', 'N', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', // product 16
'1', '.', '0', ' ', // version 4
// Release Number (1 Byte)
0x20,
// Revision Date (10 Bytes)
'2','0','2','1','/','1','1','/','2','2',
0
},
#endif /* SUPPORT_DISK */
#if SUPPORT_OPTICAL
{
DEV_OPTICAL, //device type
0x80, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
46 - 4, //Additional data length
0, 0, //Reserve
0x00, //Support function
'S', 'O', 'N', 'Y', ' ', ' ', ' ', ' ', // vendor 8
'C', 'D', '-', 'R', 'O', 'M', ' ', 'C', 'D', 'U', '-','8', '0', '0', '3', ' ', // product 16
'1', '.', '7', 'w', // version 4
// Release Number (1 Byte)
0x20,
// Revision Date (10 Bytes)
'2','0','2','1','/','1','1','/','2','2',
0
},
{
DEV_OPTICAL, //device type
0x80, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
46 - 4, //Additional data length
0, 0, //Reserve
0x00, //Support function
'S', 'O', 'N', 'Y', ' ', ' ', ' ', ' ', // vendor 8
'C', 'D', 'U', '-', '7', '6', 'S', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', // product 16
'1', '.', '0', ' ', // version 4
// Release Number (1 Byte)
0x20,
// Revision Date (10 Bytes)
'2','0','2','1','/','1','1','/','2','2',
0
},
{
DEV_OPTICAL, //device type
0x80, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
35 - 4, //Additional data length
0, 0, //Reserve
0x00, //Support function
'M', 'A', 'T', 'S', 'H', 'I', 'T', 'A', // vendor 8
'C', 'D', '-', 'R', 'O', 'M', ' ', 'C', 'R', '8', '0','0', '5', ' ', ' ', ' ', // product 16
'1', '.', '0', 'k', // version 4
0
},
{
DEV_OPTICAL, //device type
0x80, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
35 - 4, //Additional data length
0, 0, //Reserve
0x00, //Support function
'D', 'E', 'C', ' ', ' ', ' ', ' ', ' ', // vendor 8
'R', 'R', 'D', '4', '5', ' ', ' ', ' ', '(', 'C', ')',' ', 'D', 'E', 'C', ' ', // product 16
'0', '4', '3', '6', // version 4
0
},
{
DEV_OPTICAL, //device type
0x80, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
35 - 4, //Additional data length
0, 0, //Reserve
0x98, //Support function
'T', 'O', 'S', 'H', 'I', 'B', 'A', ' ', // vendor 8
'C', 'D', '-', 'R', 'O', 'M', ' ', 'X', 'M', '-', '3','3', '0', '1', 'T', 'A', // product 16
'0', '2', '7', '2', // version 4
0
},
{
DEV_OPTICAL, //device type
0x80, //RMB = 0
0x05, //ISO, ECMA, ANSI version
0x02, //Response data format
35 - 4, //Additional data length
0, 0, //Reserve
0x98, //Support function
'T', 'O', 'S', 'H', 'I', 'B', 'A', ' ', // vendor 8
'C', 'D', '-', 'R', 'O', 'M', ' ', 'X', 'M', '-', '5','7', '0', '1', 'T', 'A', // product 16
'3', '1', '3', '6', // version 4
0
},
#endif /* SUPPORT_OPTICAL */
#if SUPPORT_TAPE
{
DEV_TAPE, //device type
0x80, //RMB = 0
0x03, //ISO, ECMA, ANSI version
0x02, //Response data format
37 - 4, //Additional data length
0, //Reserve
0x00, // Support function
0x00, // Support function
'I', 'B', 'M', ' ', ' ', ' ', ' ', ' ', // vendor 8
'U', 'L', 'T', '3', '5', '8', '0', '-', 'T', 'D', '1',' ', ' ', ' ', ' ', ' ', // product 16
'M', 'B', 'N', '0', // version 4
0
},
#endif /* SUPPORT_TAPE */
#if SUPPORT_CONTROL
{
DEV_PROCESSOR, //device type
0x80, //RMB = 0
0x03, //ISO, ECMA, ANSI version
0x02, //Response data format
37 - 4, //Additional data length
0, //Reserve
0x00, // Support function
0x00, // Support function
'G', 'R', 'N', 'S', 'C', 'S', 'I', ' ', // vendor 8
'G', 'R', 'E', 'E', 'N', 'S', 'C', 'S', 'I', 'C', 'T','R', 'L', ' ', ' ', ' ', // product 16
'G', 'S', 'C', '0', // version 4
0
},
#endif /* SUPPORT_CONTROL */
// Invalid entry to mark end of data
{
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ',
0
}
};

264
src/disk.ino Executable file
View File

@ -0,0 +1,264 @@
#include "config.h"
#include "scsi_defs.h"
/*
* Check that the image file is present and the block range is valid.
*/
byte checkBlockCommand(uint32_t adds, uint32_t len)
{
// Check that image file is present
if(!m_sel) {
return STATUS_CHECK;
}
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
m_sel->m_sense.m_key = NOT_READY; // Not ready
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
m_sel->m_sense.m_key_specific[0] = 0x03;
return STATUS_CHECK;
}
// Check block range is valid
uint32_t bc = m_sel->m_fileSize / m_sel->m_blocksize;
if (adds >= bc || (adds + len) > bc) {
m_sel->m_sense.m_key = 5; // Illegal request
m_sel->m_sense.m_code = INVALID_LBA; // Logical block address out of range
return STATUS_CHECK;
}
return 0x00;
}
void Read6CommandHandler() {
LOG("[Read6]");
m_sts |= onReadCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
m_phase = PHASE_STATUSIN;
}
void Write6CommandHandler() {
LOG("[Write6]");
m_sts |= onWriteCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
m_phase = PHASE_STATUSIN;
}
void Seek6CommandHandler() {
LOG("[Seek6]");
m_phase = PHASE_STATUSIN;
}
/*
* READ CAPACITY command processing.
*/
void ReadCapacityCommandHandler() {
LOGN("[ReadCapacity]");
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = NOT_READY; // Not ready
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
m_sel->m_sense.m_key_specific[0] = 0x03;
m_phase = PHASE_STATUSIN;
return;
}
uint32_t bl = m_sel->m_blocksize;
uint32_t bc = m_sel->m_fileSize / bl;
uint8_t buf[8] = {
(uint8_t)(((uint32_t)(bc >> 24))&0xff), (uint8_t)(((uint32_t)(bc >> 16))&0xff), (uint8_t)(((uint32_t)(bc >> 8))&0xff), (uint8_t)(((uint32_t)(bc))&0xff),
(uint8_t)(((uint32_t)(bl >> 24))&0xff), (uint8_t)(((uint32_t)(bl >> 16))&0xff), (uint8_t)(((uint32_t)(bl >> 8))&0xff), (uint8_t)(((uint32_t)(bl))&0xff)
};
writeDataPhase(8, buf);
m_phase = PHASE_STATUSIN;
}
void Read10CommandHandler() {
LOG("[Read10]");
m_sts |= onReadCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
m_phase = PHASE_STATUSIN;
}
void Write10CommandHandler() {
LOG("[Write10]");
m_sts |= onWriteCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
m_phase = PHASE_STATUSIN;
}
void Seek10CommandHandler() {
LOG("[Seek10]");
m_phase = PHASE_STATUSIN;
}
void Verify10CommandHandler() {
LOG("[Verify10]");
m_sts |= onVerifyCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
m_phase = PHASE_STATUSIN;
}
/*
* READ6 / 10 Command processing.
*/
uint8_t onReadCommand(uint32_t adds, uint32_t len)
{
uint8_t sts;
LOG("-R ");
LOGHEX6(adds);
LOG(" ");
LOGHEX4N(len);
sts = checkBlockCommand(adds, len);
if(sts) return sts;
LED_ON();
if(m_sel->m_rawPart) {
writeDataPhaseRaw(adds, len);
} else {
writeDataPhaseSD(adds, len);
}
LED_OFF();
return 0x00; //sts
}
/*
* WRITE6 / 10 Command processing.
*/
uint8_t onWriteCommand(uint32_t adds, uint32_t len)
{
uint8_t sts;
LOG("-W ");
LOGHEX6(adds);
LOG(" ");
LOGHEX4N(len);
sts = checkBlockCommand(adds, len);
if(sts) return sts;
LED_ON();
if(m_sel->m_rawPart) {
readDataPhaseRaw(adds, len);
} else {
readDataPhaseSD(adds, len);
}
LED_OFF();
return 0; //sts
}
/*
* VERIFY6 / 10 Command processing.
*/
uint8_t onVerifyCommand(uint32_t adds, uint32_t len)
{
uint8_t sts;
LOG("-V ");
LOGHEX6(adds);
LOG(" ");
LOGHEX4N(len);
sts = checkBlockCommand(adds, len);
if(sts) return sts;
LED_ON();
if(m_sel->m_rawPart) {
verifyDataPhaseRaw(adds, len);
} else {
verifyDataPhaseSD(adds, len);
}
LED_OFF();
return 0; //sts
}
void ConfigureDiskHandlers(VirtualDevice_t *vdev) {
for(int c = 0; c < 256; c++)
vdev->m_handler[c] = &UnknownCommandHandler;
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
vdev->m_handler[CMD_REZERO_UNIT] = &RezeroUnitCommandHandler;
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
vdev->m_handler[CMD_FORMAT_UNIT] = &FormatUnitCommandHandler;
vdev->m_handler[CMD_FORMAT_UNIT_ALT] = &FormatUnitCommandHandler;
vdev->m_handler[CMD_REASSIGN_BLOCKS] = &ReassignBlocksCommandHandler;
vdev->m_handler[CMD_READ6] = &Read6CommandHandler;
vdev->m_handler[CMD_WRITE6] = &Write6CommandHandler;
vdev->m_handler[CMD_SEEK6] = &Seek6CommandHandler;
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
vdev->m_handler[CMD_MODE_SELECT6] = &ModeSelect6CommandHandler;
vdev->m_handler[CMD_MODE_SENSE6] = &ModeSenseCommandHandler;
vdev->m_handler[CMD_START_STOP_UNIT] = &StartStopUnitCommandHandler;
vdev->m_handler[CMD_PREVENT_REMOVAL] = &PreAllowMediumRemovalCommandHandler;
vdev->m_handler[CMD_READ_CAPACITY10] = &ReadCapacityCommandHandler;
vdev->m_handler[CMD_READ10] = &Read10CommandHandler;
vdev->m_handler[CMD_WRITE10] = &Write10CommandHandler;
vdev->m_handler[CMD_SEEK10] = &Seek10CommandHandler;
vdev->m_handler[CMD_VERIFY10] = &Verify10CommandHandler;
vdev->m_handler[CMD_MODE_SENSE10] = &ModeSenseCommandHandler;
vdev->m_handler[CMD_SEARCH_DATA_EQUAL] = &SearchDataEqualCommandHandler;
vdev->m_handler[CMD_READ_DEFECT_DATA] = &ReadDefectCommandHandler;
vdev->m_handler[CMD_SEND_DIAGNOSTIC] = &SendDiagnosticCommandHandler;
vdev->m_handler[CMD_PREFETCH_CACHE10] = &PrefetchCommandHandler;
vdev->m_handler[CMD_SYNCHRONIZE_CACHE10] = &SyncCacheCommandHandler;
#if SUPPORT_SASI
if(vdev->m_quirks & QUIRKS_SASI)
vdev->m_handler[CMD_SET_DRIVE_PARAMETER] = &DTCsetDriveParameterCommandHandler;
#endif
#if SUPPORT_APPLE
if(vdev->m_quirks & QUIRKS_APPLE)
vdev->m_handler[CMD_MAC_UNKNOWN] = &AppleEECommandHandler;
#endif
}
// If config file exists, read the first three lines and copy the contents.
// File must be well formed or you will get junk in the SCSI Vendor fields.
void ConfigureDisk(VirtualDevice_t *vdev, const char *image_name) {
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_DISK) {
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
break;
}
}
vdev->m_sectors = 63;
vdev->m_heads = 16;
vdev->m_cylinders = (uint32_t)((uint64_t)vdev->m_fileSize / ((uint64_t)vdev->m_blocksize * (uint64_t)vdev->m_heads * (uint64_t)vdev->m_sectors));
if(image_name) {
char configname[MAX_FILE_PATH+1];
memcpy(configname, image_name, MAX_FILE_PATH+1);
char *psuffix = strstr(configname, ".img");
if(psuffix) {
strcpy(psuffix, ".cfg");
} else {
sprintf(configname, "hd%d%d.cfg", vdev->m_id, vdev->m_lun);
}
FsFile config_file = sd.open(configname, O_RDONLY);
if (config_file.isOpen()) {
char vendor[9];
memset(vendor, 0, sizeof(vendor));
config_file.readBytes(vendor, sizeof(vendor));
LOGN("SCSI VENDOR: ");
LOGN(vendor);
memcpy(&(vdev->m_inquiryresponse[8]), vendor, 8);
char product[17];
memset(product, 0, sizeof(product));
config_file.readBytes(product, sizeof(product));
LOGN("SCSI PRODUCT: ");
LOGN(product);
memcpy(&(vdev->m_inquiryresponse[16]), product, 16);
char version[5];
memset(version, 0, sizeof(version));
config_file.readBytes(version, sizeof(version));
LOGN("SCSI VERSION: ");
LOGN(version);
memcpy(&(vdev->m_inquiryresponse[32]), version, 4);
config_file.close();
}
}
vdev->m_type = DEV_DISK;
ConfigureDiskHandlers(vdev);
}

403
src/dump.ino Executable file
View File

@ -0,0 +1,403 @@
#if SUPPORT_INITIATOR
// Take control of the SCSI bus
void initiatorTakeBus() {
pinModeFastSlew(ATN, OUTPUT_OPENDRAIN);
pinModeFastSlew(ACK, OUTPUT_OPENDRAIN);
pinModeFastSlew(RST, OUTPUT_OPENDRAIN);
pinModeFastSlew(SEL, OUTPUT_OPENDRAIN);
pinMode(BSY, INPUT_PULLUP);
pinMode(MSG, INPUT_PULLUP);
pinMode(CD, INPUT_PULLUP);
pinMode(IO, INPUT_PULLUP);
pinMode(REQ, INPUT_PULLUP);
pinModeFastSlew(DB0, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB1, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB2, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB3, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB4, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB5, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB6, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB7, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB8, OUTPUT_OPENDRAIN);
SCSI_INITIATOR_INACTIVE();
}
// Return the bus to floating, allowing other hosts to take over
void initiatorReleaseBus() {
// Input port
pinMode(ATN, INPUT_PULLUP);
pinMode(ACK, INPUT_PULLUP);
pinMode(RST, INPUT_PULLUP);
pinMode(SEL, INPUT_PULLUP);
// Output port
pinModeFastSlew(BSY, OUTPUT_OPENDRAIN);
pinModeFastSlew(MSG, OUTPUT_OPENDRAIN);
pinModeFastSlew(CD, OUTPUT_OPENDRAIN);
pinModeFastSlew(IO, OUTPUT_OPENDRAIN);
pinModeFastSlew(REQ, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB0, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB1, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB2, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB3, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB4, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB5, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB6, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB7, OUTPUT_OPENDRAIN);
pinModeFastSlew(DB8, OUTPUT_OPENDRAIN);
// Turn off the output port
SCSI_TARGET_INACTIVE();
}
// Issue a bus reset
void initiatorBusFree() {
SET_RST_ACTIVE();
delay(50);
SET_RST_INACTIVE();
delay(20);
}
// Selection phase, assert Host & Target ID bits and assert SEL, wait for BSY to be asserted by the target, or timeout.
int initiateSelection(uint8_t target_id, boolean withATN) {
int timeout = 10000;
GPIOB_PDDR = SCSI_DB_MASK;
SCSI_DB_OUTPUT((1 << target_id) | 0x80);
SET_SEL_ACTIVE();
while(timeout--) {
delay(20);
if(GET_BSY()) break;
}
if(withATN) SET_ATN_ACTIVE();
SET_SEL_INACTIVE();
SCSI_DB_INPUT();
return GET_BSY();
}
// Message Out phase, hold ATN asserted until the last message byte
int initiateMessageOut(const uint8_t *buf, uint8_t len) {
int timeout = 10000;
SET_ATN_ACTIVE();
while(timeout--) {
delay(20);
if(!GET_CD() && !GET_IO() && GET_MSG()) break;
}
if(timeout > 0) {
for(uint8_t x = 0; x < len; x++) {
timeout = 10000;
while(!GET_REQ() && (timeout--));
if(!timeout) break;
GPIOB_PDDR = SCSI_DB_MASK;
SCSI_DB_OUTPUT(buf[x]);
if((x + 1) == len)
SET_ATN_INACTIVE();
SET_ACK_ACTIVE();
timeout = 10000;
while(GET_REQ() && (timeout--));
SET_ACK_INACTIVE();
if(!timeout) break;
}
}
SET_ATN_INACTIVE();
SCSI_DB_INPUT();
return (timeout > 0);
}
// Message In phase, read a single byte from target once it's phase matches
int initiateMessageIn(uint8_t *buf) {
int timeout = 10000;
while(timeout--) {
delay(20);
if(!GET_CD() && GET_IO() && GET_MSG()) break;
}
if(timeout > 0) {
timeout = 10000;
while(!GET_REQ() && (timeout--));
if(!timeout) goto failed;
buf[0] = readIO();
SET_ACK_ACTIVE();
timeout = 10000;
while(GET_REQ() && (timeout--));
SET_ACK_INACTIVE();
}
failed:
return (timeout > 0);
}
// Command Out phase, tell the target what we want from it.
int initiateCommandOut(const uint8_t *buf, uint8_t len) {
int timeout = 10000;
while(timeout--) {
delay(20);
if(GET_CD() && !GET_IO() && !GET_MSG()) break;
}
if(timeout > 0) {
for(uint8_t x = 0; x < len; x++) {
timeout = 10000;
while(!GET_REQ() && (timeout--));
if(!timeout) break;
GPIOB_PDDR = SCSI_DB_MASK;
SCSI_DB_OUTPUT(buf[x]);
SET_ACK_ACTIVE();
timeout = 10000;
while(GET_REQ() && (timeout--));
SET_ACK_INACTIVE();
if(!timeout) break;
}
}
SCSI_DB_INPUT();
return (timeout > 0);
}
// Data Out phase, send data to target
int initiateDataOut(const uint8_t *buf, uint16_t len) {
int timeout = 10000;
while(timeout--) {
delay(20);
if(!GET_CD() && !GET_IO() && !GET_MSG()) break;
}
if(timeout > 0) {
for(uint16_t x = 0; x < len; x++) {
timeout = 10000;
while(!GET_REQ() && (timeout--));
if(!timeout) break;
GPIOB_PDDR = SCSI_DB_MASK;
SCSI_DB_OUTPUT(buf[x]);
SET_ACK_ACTIVE();
timeout = 10000;
while(GET_REQ() && (timeout--));
SET_ACK_INACTIVE();
if(!timeout) break;
}
}
SCSI_DB_INPUT();
return (timeout > 0);
}
// Data In phase, get data from target
int initiateDataIn(uint8_t *buf, uint16_t len) {
int timeout = 10000;
while(timeout--) {
delay(20);
if(!GET_CD() && GET_IO() && !GET_MSG()) break;
}
if(timeout > 0) {
for(uint16_t x = 0; x < len; x++) {
timeout = 10000;
while(!GET_REQ() && (timeout--));
if(!timeout) break;
buf[x] = readIO();
SET_ACK_ACTIVE();
timeout = 10000;
while(GET_REQ() && (timeout--));
SET_ACK_INACTIVE();
if(!timeout) break;
}
}
return (timeout > 0);
}
// Status In phase, read target's command status
int initiateStatusIn(uint8_t *buf) {
int timeout = 10000;
while(timeout--) {
delay(20);
if(GET_CD() && GET_IO() && !GET_MSG()) break;
}
if(timeout > 0) {
timeout = 10000;
while(!GET_REQ() && (timeout--));
if(!timeout) goto failed;
buf[0] = readIO();
SET_ACK_ACTIVE();
timeout = 10000;
while(GET_REQ() && (timeout--));
SET_ACK_INACTIVE();
}
failed:
return (timeout > 0);
}
int initiateReadCapacity(uint8_t target_id, uint32_t *blockSize, uint32_t *blockCount) {
initiatorTakeBus();
// Select Target
if(!initiateSelection(target_id, true)) goto failed;
// Select LUN 0
m_buf[0] = 0x80;
if(!initiateMessageOut(m_buf, 1)) goto failed;
// Execute Read Capacity
memset(m_cmd, 0x00, 10);
m_cmd[0] = CMD_READ_CAPACITY10;
if(!initiateCommandOut(m_cmd, 10)) goto failed;
// Get Data Back
if(!initiateDataIn(m_buf, 8)) goto failed;
*blockSize = (m_buf[0] << 24) | (m_buf[1] << 16) || (m_buf[2] << 8) | (m_buf[3] << 0);
*blockCount = (m_buf[4] << 24) | (m_buf[5] << 16) || (m_buf[6] << 8) | (m_buf[7] << 0);
// Get Status
if(!initiateStatusIn(m_buf)) goto failed;
// Get Messages
if(!initiateMessageIn(m_buf)) goto failed;
return 1;
failed:
initiatorBusFree();
initiatorReleaseBus();
return 0;
}
int initiateReadVolume(FsFile file, uint8_t target_id, uint32_t blockSize, uint32_t blockCount) {
uint32_t pos = 0;
initiatorTakeBus();
while(blockCount) {
uint32_t blocks = min(blockCount, (MAX_BLOCKSIZE / blockSize));
if(!initiateSelection(target_id, true)) goto failed;
// Select LUN 0
m_buf[0] = 0x80;
if(!initiateMessageOut(m_buf, 1)) goto failed;
// Execute Read
memset(m_cmd, 0x00, 10);
m_cmd[0] = CMD_READ10;
m_cmd[2] = (pos >> 24) & 0xff;
m_cmd[3] = (pos >> 16) & 0xff;
m_cmd[4] = (pos >> 8) & 0xff;
m_cmd[5] = (pos >> 0) & 0xff;
m_cmd[6] = (blocks >> 8) & 0xff;
m_cmd[7] = (blocks >> 0) & 0xff;
if(!initiateCommandOut(m_cmd, 10)) goto failed;
// Get Data Back
if(!initiateDataIn(m_buf, blockSize * blocks)) goto failed;
file.write(m_buf, blockSize * blocks);
// Get Status
if(!initiateStatusIn(m_buf)) goto failed;
// Get Messages
if(!initiateMessageIn(m_buf)) goto failed;
pos += blocks;
blockCount -= blocks;
}
return 1;
failed:
initiatorBusFree();
initiatorReleaseBus();
return 0;
}
void dumpcmd(int argc, char **argv) {
uint8_t target_id = 0xff;
uint32_t blockSize, blockCount;
char tmp_path[MAX_FILE_PATH+1];
FsFile file;
if(argc < 3) {
// Syntax error
return;
}
target_id = strtoul(argv[1], NULL, 0);
if(target_id > 7) {
Serial.print("ERROR");
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
Serial.printf(": SCSI ID '%s' is not within range.\r\n", argv[1]);
return;
}
fixupPath(tmp_path, argv[2]);
if(strncmp(tmp_path, "/sd/", 4)) {
Serial.print("ERROR");
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
Serial.printf(": Can only create images on the SD Card.\r\n");
return;
}
if(!file.open(tmp_path+3, O_WRONLY | O_CREAT | O_TRUNC)) {
Serial.print("ERROR");
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
Serial.printf(": Unable to open '%s'.\r\n", tmp_path);
return;
}
detachInterrupt(RST);
detachInterrupt(SEL);
if(!initiateReadCapacity(target_id, &blockSize, &blockCount)) {
Serial.print("ERROR");
if(scriptlevel >= 0) Serial.printf(" on line %d of '%s'", exec_line, exec_filename);
Serial.printf(": Unable to read the capacity of SCSI target device.\r\n");
} else {
initiateReadVolume(file, target_id, blockSize, blockCount);
}
attachInterrupt(RST, onBusReset, FALLING);
attachInterrupt(SEL, SelectionPhaseISR, FALLING);
file.close();
}
#endif

464
src/eggs.ino Executable file
View File

@ -0,0 +1,464 @@
/*
* Don't put all your eggs in one basket,
*
* I suggest you not read this file if you don't want to spoil all the fun,
*
* because spoiled eggs smell bad.
*
*/
#include <unistd.h>
/*
* Based on SL version 5.02
* Copyright 1993,1998,2014 Toyoda Masashi (mtoyoda@acm.org)
* https://github.com/mtoyoda/sl
*
* Everyone is permitted to do anything on this program including copying,
* modifying, and improving, unless you try to pretend that you wrote it.
* i.e., the above copyright notice has to appear in all copies.
* THE AUTHOR DISCLAIMS ANY RESPONSIBILITY WITH REGARD TO THIS SOFTWARE.
*/
#define D51HEIGHT 10
#define D51FUNNEL 7
#define D51LENGTH 83
#define D51PATTERNS 6
#define D51STR1 " ==== ________ ___________ "
#define D51STR2 " _D _| |_______/ \\__I_I_____===__|_________| "
#define D51STR3 " |(_)--- | H\\________/ | | =|___ ___| "
#define D51STR4 " / | | H | | | | ||_| |_|| "
#define D51STR5 " | | | H |__--------------------| [___] | "
#define D51STR6 " | ________|___H__/__|_____/[][]~\\_______| | "
#define D51STR7 " |/ | |-----------I_____I [][] [] D |=======|__ "
#define D51WHL11 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define D51WHL12 " |/-=|___|= || || || |_____/~\\___/ "
#define D51WHL13 " \\_/ \\O=====O=====O=====O_/ \\_/ "
#define D51WHL21 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define D51WHL22 " |/-=|___|=O=====O=====O=====O |_____/~\\___/ "
#define D51WHL23 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define D51WHL31 "__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__ "
#define D51WHL32 " |/-=|___|= || || || |_____/~\\___/ "
#define D51WHL33 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define D51WHL41 "__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__ "
#define D51WHL42 " |/-=|___|= || || || |_____/~\\___/ "
#define D51WHL43 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define D51WHL51 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define D51WHL52 " |/-=|___|= O=====O=====O=====O|_____/~\\___/ "
#define D51WHL53 " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ "
#define D51WHL61 "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__ "
#define D51WHL62 " |/-=|___|= || || || |_____/~\\___/ "
#define D51WHL63 " \\_/ \\_O=====O=====O=====O/ \\_/ "
#define D51DEL " "
#define COAL01 " "
#define COAL02 " "
#define COAL03 " _________________ "
#define COAL04 " _| \\_____A "
#define COAL05 " =| | "
#define COAL06 " -| | "
#define COAL07 "__|________________________|_ "
#define COAL08 "|__________________________|_ "
#define COAL09 " |_D__D__D_| |_D__D__D_| "
#define COAL10 " \\_/ \\_/ \\_/ \\_/ "
#define COALDEL " "
#define LOGOHEIGHT 6
#define LOGOFUNNEL 4
#define LOGOLENGTH 84
#define LOGOPATTERNS 6
#define LOGO1 " ++ +------ "
#define LOGO2 " || |+-+ | "
#define LOGO3 " /---------|| | | "
#define LOGO4 " + ======== +-+ | "
#define LWHL11 " _|--O========O~\\-+ "
#define LWHL12 "//// \\_/ \\_/ "
#define LWHL21 " _|--/O========O\\-+ "
#define LWHL22 "//// \\_/ \\_/ "
#define LWHL31 " _|--/~O========O-+ "
#define LWHL32 "//// \\_/ \\_/ "
#define LWHL41 " _|--/~\\------/~\\-+ "
#define LWHL42 "//// \\_O========O "
#define LWHL51 " _|--/~\\------/~\\-+ "
#define LWHL52 "//// \\O========O/ "
#define LWHL61 " _|--/~\\------/~\\-+ "
#define LWHL62 "//// O========O_/ "
#define LCOAL1 "____ "
#define LCOAL2 "| \\@@@@@@@@@@@ "
#define LCOAL3 "| \\@@@@@@@@@@@@@_ "
#define LCOAL4 "| | "
#define LCOAL5 "|__________________| "
#define LCOAL6 " (O) (O) "
#define LCAR1 "____________________ "
#define LCAR2 "| ___ ___ ___ ___ | "
#define LCAR3 "| |_| |_| |_| |_| | "
#define LCAR4 "|__________________| "
#define LCAR5 "|__________________| "
#define LCAR6 " (O) (O) "
#define DELLN " "
#define C51HEIGHT 11
#define C51FUNNEL 7
#define C51LENGTH 87
#define C51PATTERNS 6
#define C51DEL " "
#define C51STR1 " ___ "
#define C51STR2 " _|_|_ _ __ __ ___________"
#define C51STR3 " D__/ \\_(_)___| |__H__| |_____I_Ii_()|_________|"
#define C51STR4 " | `---' |:: `--' H `--' | |___ ___| "
#define C51STR5 " +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_|| "
#define C51STR6 " || | :: H +=====+ | |:: ...| "
#define C51STR7 "| | _______|_::-----------------[][]-----| | "
#define C51WH61 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
#define C51WH62 "------'|oOo|==[]=- || || | ||=======_|__"
#define C51WH63 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| "
#define C51WH64 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
#define C51WH51 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
#define C51WH52 "------'|oOo|===[]=- || || | ||=======_|__"
#define C51WH53 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| "
#define C51WH54 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
#define C51WH41 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
#define C51WH42 "------'|oOo|===[]=- O=======O=======O | ||=======_|__"
#define C51WH43 "/~\\____|___|/~\\_| || || |__|+-/~\\_| "
#define C51WH44 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
#define C51WH31 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
#define C51WH32 "------'|oOo|==[]=- O=======O=======O | ||=======_|__"
#define C51WH33 "/~\\____|___|/~\\_| || || |__|+-/~\\_| "
#define C51WH34 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
#define C51WH21 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
#define C51WH22 "------'|oOo|=[]=- O=======O=======O | ||=======_|__"
#define C51WH23 "/~\\____|___|/~\\_| || || |__|+-/~\\_| "
#define C51WH24 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
#define C51WH11 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__"
#define C51WH12 "------'|oOo|=[]=- || || | ||=======_|__"
#define C51WH13 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| "
#define C51WH14 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ "
int ACCIDENT = 0;
int LOGO = 0;
int FLY = 0;
int C51 = 0;
#define COLS 80
#define LINES 24
#define ERR -1
#define OK 0
static char sB[LINES][COLS];
static char tL[COLS+1];
static void refresh()
{
int fX, oX, lC;
boolean pO;
for(int y = 0; y < LINES; y++) {
fX = 0; oX = 0; lC = 0; pO = false;
for(int x = 0; x < COLS; x++) {
if(!pO && (sB[y][x] != ' ')) { fX = x; pO = 1; }
if(pO && (sB[y][x] != ' ')) { lC = oX+1; }
if(pO) { tL[oX++] = sB[y][x]; }
}
tL[lC] = 0;
Serial.printf("\x1b[%d;%dH\x1b[1K%s\x1b[K", y+1, fX+1, tL);
}
}
int mvaddch(int y, int x, char c)
{
if((y < 0) || (y >= LINES) || (x < 0) || (x >= COLS)) return ERR;
if((c >= 0) && (c < ' ')) c = ' ';
sB[y][x] = c;
return OK;
}
int my_mvaddstr(int y, int x, const char *str)
{
for ( ; x < 0; ++x, ++str)
if (*str == '\0') return ERR;
for ( ; *str != '\0'; ++str, ++x)
if (mvaddch(y, x, *str) == ERR) return ERR;
return OK;
}
void option(char *str)
{
extern int ACCIDENT, LOGO, FLY, C51;
while (*str != '\0') {
switch (*str++) {
case 'a': ACCIDENT = 1; break;
case 'F': FLY = 1; break;
case 'l': LOGO = 1; break;
case 'c': C51 = 1; break;
default: break;
}
}
}
void slcmd(int argc, char *argv[])
{
int x, i;
ACCIDENT = 0;
LOGO = 0;
FLY = 0;
C51 = 0;
for (i = 1; i < argc; ++i) {
if (*argv[i] == '-') {
option(argv[i] + 1);
}
}
for(int y = 0; y < LINES; y++) {
for(int x = 0; x < COLS; x++) {
sB[y][x] = ' ';
}
}
Serial.print("\x1b[?25l\x1b[2J\x1b[H");
for (x = COLS - 1; ; --x) {
if (LOGO == 1) {
if (add_sl(x) == ERR) break;
}
else if (C51 == 1) {
if (add_C51(x) == ERR) break;
}
else {
if (add_D51(x) == ERR) break;
}
refresh();
delay(50);
}
delay(125);
Serial.print("\x1b[?25h\x1b[2J\x1b[H");
return;
}
int add_sl(int x)
{
static const char *sl[LOGOPATTERNS][LOGOHEIGHT + 1]
= {{LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN},
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN},
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN},
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN},
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN},
{LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN}};
static const char *coal[LOGOHEIGHT + 1]
= {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN};
static const char *car[LOGOHEIGHT + 1]
= {LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN};
int i, y, py1 = 0, py2 = 0, py3 = 0;
if (x < - LOGOLENGTH) return ERR;
y = LINES / 2 - 3;
if (FLY == 1) {
y = (x / 6) + LINES - (COLS / 6) - LOGOHEIGHT;
py1 = 2; py2 = 4; py3 = 6;
}
for (i = 0; i <= LOGOHEIGHT; ++i) {
my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]);
my_mvaddstr(y + i + py1, x + 21, coal[i]);
my_mvaddstr(y + i + py2, x + 42, car[i]);
my_mvaddstr(y + i + py3, x + 63, car[i]);
}
if (ACCIDENT == 1) {
add_man(y + 1, x + 14);
add_man(y + 1 + py2, x + 45); add_man(y + 1 + py2, x + 53);
add_man(y + 1 + py3, x + 66); add_man(y + 1 + py3, x + 74);
}
add_smoke(y - 1, x + LOGOFUNNEL);
return OK;
}
int add_D51(int x)
{
static const char *d51[D51PATTERNS][D51HEIGHT + 1]
= {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
D51WHL11, D51WHL12, D51WHL13, D51DEL},
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
D51WHL21, D51WHL22, D51WHL23, D51DEL},
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
D51WHL31, D51WHL32, D51WHL33, D51DEL},
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
D51WHL41, D51WHL42, D51WHL43, D51DEL},
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
D51WHL51, D51WHL52, D51WHL53, D51DEL},
{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
D51WHL61, D51WHL62, D51WHL63, D51DEL}};
static const char *coal[D51HEIGHT + 1]
= {COAL01, COAL02, COAL03, COAL04, COAL05,
COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL};
int y, i, dy = 0;
if (x < - D51LENGTH) return ERR;
y = LINES / 2 - 5;
if (FLY == 1) {
y = (x / 7) + LINES - (COLS / 7) - D51HEIGHT;
dy = 1;
}
for (i = 0; i <= D51HEIGHT; ++i) {
my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]);
my_mvaddstr(y + i + dy, x + 53, coal[i]);
}
if (ACCIDENT == 1) {
add_man(y + 2, x + 43);
add_man(y + 2, x + 47);
}
add_smoke(y - 1, x + D51FUNNEL);
return OK;
}
int add_C51(int x)
{
static const char *c51[C51PATTERNS][C51HEIGHT + 1]
= {{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
C51WH11, C51WH12, C51WH13, C51WH14, C51DEL},
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
C51WH21, C51WH22, C51WH23, C51WH24, C51DEL},
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
C51WH31, C51WH32, C51WH33, C51WH34, C51DEL},
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
C51WH41, C51WH42, C51WH43, C51WH44, C51DEL},
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
C51WH51, C51WH52, C51WH53, C51WH54, C51DEL},
{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7,
C51WH61, C51WH62, C51WH63, C51WH64, C51DEL}};
static const char *coal[C51HEIGHT + 1]
= {COALDEL, COAL01, COAL02, COAL03, COAL04, COAL05,
COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL};
int y, i, dy = 0;
if (x < - C51LENGTH) return ERR;
y = LINES / 2 - 5;
if (FLY == 1) {
y = (x / 7) + LINES - (COLS / 7) - C51HEIGHT;
dy = 1;
}
for (i = 0; i <= C51HEIGHT; ++i) {
my_mvaddstr(y + i, x, c51[(C51LENGTH + x) % C51PATTERNS][i]);
my_mvaddstr(y + i + dy, x + 55, coal[i]);
}
if (ACCIDENT == 1) {
add_man(y + 3, x + 45);
add_man(y + 3, x + 49);
}
add_smoke(y - 1, x + C51FUNNEL);
return OK;
}
void add_man(int y, int x)
{
static const char *man[2][2] = {{"", "(O)"}, {"Help!", "\\O/"}};
int i;
for (i = 0; i < 2; ++i) {
my_mvaddstr(y + i, x, man[(LOGOLENGTH + x) / 12 % 2][i]);
}
}
void add_smoke(int y, int x)
#define SMOKEPTNS 16
{
static struct smokes {
int y, x;
int ptrn, kind;
} S[1000];
static int sum = 0;
static const char *Smoke[2][SMOKEPTNS]
= {{"( )", "( )", "( )", "( )", "( )",
"( )" , "( )" , "( )" , "()" , "()" ,
"O" , "O" , "O" , "O" , "O" ,
" " },
{"(@@@)", "(@@@@)", "(@@@@)", "(@@@)", "(@@)",
"(@@)" , "(@)" , "(@)" , "@@" , "@@" ,
"@" , "@" , "@" , "@" , "@" ,
" " }};
static const char *Eraser[SMOKEPTNS]
= {" ", " ", " ", " ", " ",
" " , " " , " " , " " , " " ,
" " , " " , " " , " " , " " ,
" " };
static int dy[SMOKEPTNS] = { 2, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0 };
static int dx[SMOKEPTNS] = {-2, -1, 0, 1, 1, 1, 1, 1, 2, 2,
2, 2, 2, 3, 3, 3 };
int i;
if (x % 4 == 0) {
for (i = 0; i < sum; ++i) {
my_mvaddstr(S[i].y, S[i].x, Eraser[S[i].ptrn]);
S[i].y -= dy[S[i].ptrn];
S[i].x += dx[S[i].ptrn];
S[i].ptrn += (S[i].ptrn < SMOKEPTNS - 1) ? 1 : 0;
my_mvaddstr(S[i].y, S[i].x, Smoke[S[i].kind][S[i].ptrn]);
}
my_mvaddstr(y, x, Smoke[sum % 2][0]);
S[sum].y = y; S[sum].x = x;
S[sum].ptrn = 0; S[sum].kind = sum % 2;
sum ++;
}
}
void punishDirectory(int argc, char **argv) {
Serial.printf("You seem to have made a mistake, let me fix that for you...\r\n");
cmdDisplay();
Serial.printf("l");
delay(random(175,500));
Serial.printf("s");
delay(random(175,500));
for(int i = 1; i < argc; i++) {
Serial.printf(" ");
delay(random(175,500));
for(int x = 0; argv[i][x] != 0; x++) {
Serial.printf("%c", argv[i][x]);
delay(random(175,500));
}
}
Serial.printf("\r\n");
return showDirectory(argc, argv);
}

523
src/general.ino Executable file
View File

@ -0,0 +1,523 @@
#include "config.h"
#include "scsi_defs.h"
/*
* INQUIRY command processing.
*/
void InquiryCommandHandler() {
LOGN("[Inquiry]");
uint8_t len;
if(!m_sel) {
memset(m_responsebuffer, 0, 96);
m_responsebuffer[0] = 0x7f;
m_responsebuffer[4] = 35 - 4;
len = 36;
} else {
memcpy(m_responsebuffer, m_sel->m_inquiryresponse, 96);
len = m_responsebuffer[4] + 5;
}
len = min(len, m_cmd[4]);
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
/*
* REQUEST SENSE command processing.
*/
void RequestSenseCommandHandler() {
LOGN("[RequestSense]");
uint8_t len = m_cmd[4];
uint8_t buf[18] = {
0x70, //CheckCondition
0, //Segment number
0x00, //Sense key
0, 0, 0, 0, //information
17 - 7 , //Additional data length
0,
};
if(!m_sel) {
buf[2] = 2; // Not ready
buf[12] = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
buf[13] = 0x03;
} else {
buf[2] = m_sel->m_sense.m_key;
buf[12] = m_sel->m_sense.m_code;
buf[13] = m_sel->m_sense.m_key_specific[0];
buf[14] = m_sel->m_sense.m_key_specific[1];
buf[15] = m_sel->m_sense.m_key_specific[2];
m_sel->m_sense.m_key = 0;
m_sel->m_sense.m_code = 0;
m_sel->m_sense.m_key_specific[0] = 0;
m_sel->m_sense.m_key_specific[1] = 0;
m_sel->m_sense.m_key_specific[2] = 0;
}
writeDataPhase(len < 18 ? len : 18, buf);
m_phase = PHASE_STATUSIN;
}
void TestUnitCommandHandler() {
LOGN("[TestUnit]");
if(!m_sel) {
m_sts |= STATUS_CHECK;
return;
}
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = NOT_READY; // Not ready
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
m_sel->m_sense.m_key_specific[0] = 0x03;
return;
}
m_phase = PHASE_STATUSIN;
}
void RezeroUnitCommandHandler() {
LOGN("[RezeroUnit]");
if(!m_sel) {
m_sts |= STATUS_CHECK;
return;
}
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = NOT_READY; // Not ready
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
m_sel->m_sense.m_key_specific[0] = 0x03;
return;
}
m_phase = PHASE_STATUSIN;
}
void FormatUnitCommandHandler() {
LOGN("[FormatUnit]");
if(!m_sel) {
m_sts |= STATUS_CHECK;
return;
}
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = NOT_READY; // Not ready
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
m_sel->m_sense.m_key_specific[0] = 0x03;
return;
}
m_phase = PHASE_STATUSIN;
}
void ReassignBlocksCommandHandler() {
LOGN("[ReassignBlocks]");
if(!m_sel) {
m_sts |= STATUS_CHECK;
return;
}
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = NOT_READY; // Not ready
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
m_sel->m_sense.m_key_specific[0] = 0x03;
return;
}
m_phase = PHASE_STATUSIN;
}
#if SUPPORT_APPLE
void AppleEECommandHandler() {
LOGN("[Apple:0xEE]");
m_phase = PHASE_STATUSIN;
}
#endif
/*
* MODE SENSE command processing.
*/
void ModeSenseCommandHandler()
{
uint16_t len, maxlen;
int page, pagemax, pagemin;
switch(m_cmd[0]) {
case CMD_MODE_SENSE6:
LOGN("[ModeSense6]");
maxlen = m_cmd[4];
len = 1;
break;
case CMD_MODE_SENSE10:
LOGN("[ModeSense10]");
maxlen = ((uint16_t)m_cmd[7] << 8) | m_cmd[8];
len = 2;
break;
default:
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
/* Check whether medium is present */
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
if(!m_sel->m_rawPart && !m_sel->m_file.isOpen()) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = NOT_READY; // Not ready
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
m_sel->m_sense.m_key_specific[0] = 0x03;
m_phase = PHASE_STATUSIN;
return;
}
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
{
/* Default medium type */
m_responsebuffer[len++] = (m_sel->m_type == DEV_OPTICAL) ? 0xf0 : 0x00;
/* Write protected */
m_responsebuffer[len++] = (m_sel->m_type == DEV_OPTICAL) ? 0x80 : 0x00;
// ModeSense10 has two extra bytes, and Block Descriptor Length has an extra MSB
if(m_cmd[0] == CMD_MODE_SENSE10) {
len += 2;
m_responsebuffer[len++] = 0;
}
/* Add block descriptor if DBD is not set */
if (m_cmd[1] & 0x08) {
m_responsebuffer[len++] = 0; /* No block descriptor */
} else {
if(m_sel->m_type == DEV_TAPE) {
m_responsebuffer[len++] = 8; /* Block descriptor length */
m_responsebuffer[len++] = 0x40; /* Medium Density Code */
m_responsebuffer[len++] = 0x00; /* Number of Blocks (0) */
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00; /* Block Length 1024 */
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x04;
m_responsebuffer[len++] = 0x00;
} else {
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
m_responsebuffer[len++] = 8; /* Block descriptor length */
m_responsebuffer[len++] = (capacity >> 24) & 0xff;
m_responsebuffer[len++] = (capacity >> 16) & 0xff;
m_responsebuffer[len++] = (capacity >> 8) & 0xff;
m_responsebuffer[len++] = capacity & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize >> 24) & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize >> 16) & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize >> 8) & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize) & 0xff;
}
}
/* Check for requested mode page */
page = m_cmd[2] & 0x3F;
pagemax = (page != 0x3f) ? page : 0x3e;
pagemin = (page != 0x3f) ? page : 0x00;
for(page = pagemax; page >= pagemin; page--) {
switch (page) {
case MODEPAGE_VENDOR_SPECIFIC:
/* Accept request only for current values */
if (m_cmd[2] & 0xC0) {
//DEBUGPRINT(DBG_TRACE, " [2]==%d", m_cmd[2]);
/* Prepare sense data */
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x02;
m_phase = PHASE_STATUSIN;
return;
}
/* Unit attention */
m_responsebuffer[len++] = 0x80; // PS, page id
m_responsebuffer[len++] = 0x02; // Page length
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00;
break;
case MODEPAGE_RW_ERROR_RECOVERY:
if(m_cmd[2] & 0x40) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x02;
m_phase = PHASE_STATUSIN;
return;
}
m_responsebuffer[len++] = MODEPAGE_RW_ERROR_RECOVERY; // PS, page id
m_responsebuffer[len++] = 0x0a; // Page length
m_responsebuffer[len++] = 0x05; //
m_responsebuffer[len++] = 0x00; // Read Retry Count
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Write Retry Count
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Recovery Time Limit
m_responsebuffer[len++] = 0x00;
break;
#if 0
case MODEPAGE_DCRC_PARAMETERS:
m_responsebuffer[len++] = 0x82; // PS, page id
m_responsebuffer[len++] = 0x0e; // Page length
m_responsebuffer[len++] = 0xe6; // Buffer full ratio, 90%
m_responsebuffer[len++] = 0x1a; // Buffer empty ratio, 10%
m_responsebuffer[len++] = 0x00; // Bus inactivity limit
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00; // Disconnect time limit
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00; // Connect time limit
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00; // Maximum burst size
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00; // EMDP, Dimm, DTDC
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Reserved
break;
#endif
#if SUPPORT_APPLE
case MODEPAGE_APPLE:
if( m_sel->m_quirks & QUIRKS_APPLE) {
m_responsebuffer[len++] = 0xb0;
m_responsebuffer[len++] = 0x16;
m_responsebuffer[len++] = 'A';
m_responsebuffer[len++] = 'P';
m_responsebuffer[len++] = 'P';
m_responsebuffer[len++] = 'L';
m_responsebuffer[len++] = 'E';
m_responsebuffer[len++] = ' ';
m_responsebuffer[len++] = 'C';
m_responsebuffer[len++] = 'O';
m_responsebuffer[len++] = 'M';
m_responsebuffer[len++] = 'P';
m_responsebuffer[len++] = 'U';
m_responsebuffer[len++] = 'T';
m_responsebuffer[len++] = 'E';
m_responsebuffer[len++] = 'R';
m_responsebuffer[len++] = ',';
m_responsebuffer[len++] = ' ';
m_responsebuffer[len++] = 'I';
m_responsebuffer[len++] = 'N';
m_responsebuffer[len++] = 'C';
m_responsebuffer[len++] = ' ';
m_responsebuffer[len++] = ' ';
m_responsebuffer[len++] = ' ';
}
break;
#endif
case MODEPAGE_FORMAT_PARAMETERS:
m_responsebuffer[len + 0] = MODEPAGE_FORMAT_PARAMETERS; //Page code
m_responsebuffer[len + 1] = 0x16; // Page length
if((m_cmd[2] >> 6) != 1) {
m_responsebuffer[len + 11] = 0x3F; // Number of sectors / track
m_responsebuffer[len + 12] = (m_sel->m_blocksize >> 8) & 0xff; // Blocksize MSB
m_responsebuffer[len + 13] = (m_sel->m_blocksize >> 0) & 0xff; // Blocksize LSB
m_responsebuffer[len + 15] = 0x1; // Interleave
}
len += 24;
break;
case MODEPAGE_RIGID_GEOMETRY:
m_responsebuffer[len + 0] = MODEPAGE_RIGID_GEOMETRY; //Page code
m_responsebuffer[len + 1] = 0x16; // Page length
if((m_cmd[2] >> 6) != 1) {
m_responsebuffer[len + 2] = m_sel->m_cylinders >> 16; // Number of cylinders
m_responsebuffer[len + 3] = m_sel->m_cylinders >> 8;
m_responsebuffer[len + 4] = m_sel->m_cylinders;
m_responsebuffer[len + 5] = m_sel->m_heads; // Number of heads
memcpy(&m_responsebuffer[len + 6], &m_responsebuffer[len + 2], 3); // Write Precomp Cyl
memcpy(&m_responsebuffer[len + 9], &m_responsebuffer[len + 2], 3); // Reduced Write Current Cyl
m_responsebuffer[len + 20] = 0x1C; // 7200 RPM
m_responsebuffer[len + 21] = 0x20;
}
len += 24;
break;
case MODEPAGE_FLEXIBLE_GEOMETRY:
{
m_responsebuffer[len + 0] = MODEPAGE_FLEXIBLE_GEOMETRY; //Page code
m_responsebuffer[len + 1] = 0x1E; // Page length
m_responsebuffer[len + 2] = 0x03; // Transfer rate 1mbit/s (MSB)
m_responsebuffer[len + 3] = 0xE8; // Transfer rate 1mbit/s (LSB)
m_responsebuffer[len + 4] = 16; // Number of heads
m_responsebuffer[len + 5] = 18; // Sectors per track
m_responsebuffer[len + 6] = 0x20; // Data bytes per sector (MSB)
m_responsebuffer[len + 6] = 0x00; // Data bytes per sector (LSB)
len += 24;
}
break;
default:
if(pagemin == pagemax) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x02;
m_phase = PHASE_STATUSIN;
return;
}
}
}
/* Report size of requested data */
if(m_cmd[0] == CMD_MODE_SENSE6) {
m_responsebuffer[0] = len;
} else {
m_responsebuffer[0] = (len >> 8) & 0xff;
m_responsebuffer[1] = len & 0xff;
}
/* Truncate data if necessary */
if (maxlen < len) {
len = maxlen;
}
// Send it
writeDataPhase(len, m_responsebuffer);
}
m_phase = PHASE_STATUSIN;
}
uint8_t onModeSelectCommand() {
return STATUS_GOOD;
}
void ModeSelect6CommandHandler() {
LOG("[ModeSelect6] ");
uint16_t len = m_cmd[4];
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
if(len > MAX_BLOCKSIZE) {
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 4" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x04;
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
readDataPhase(len, m_responsebuffer);
for(int i = 1; i < len; i++ ) {
LOG(":");
LOGHEX2(m_responsebuffer[i]);
}
LOGN("");
m_sts |= onModeSelectCommand();
m_phase = PHASE_STATUSIN;
}
void ModeSelect10CommandHandler() {
LOGN("[ModeSelect10]");
uint16_t len = ((uint16_t)m_cmd[7] << 8) | m_cmd[8];
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
if(len > MAX_BLOCKSIZE) {
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 7" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x07;
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
readDataPhase(len, m_responsebuffer);
for(int i = 1; i < len; i++ ) {
LOG(":");
LOGHEX2(m_responsebuffer[i]);
}
LOGN("");
m_sts |= onModeSelectCommand();
m_phase = PHASE_STATUSIN;
}
void SearchDataEqualCommandHandler() {
LOGN("[SearchDataEqual]");
m_phase = PHASE_STATUSIN;
}
void SendDiagnosticCommandHandler() {
LOGN("[SendDiagnostic]");
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
if(m_cmd[1] & 0x04) {
} else {
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 1" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x01;
m_sts |= STATUS_CHECK;
}
m_phase = PHASE_STATUSIN;
}
void ReadDefectCommandHandler() {
LOGN("[ReadDefect]");
m_responsebuffer[0] = 0x00;
m_responsebuffer[1] = m_cmd[2];
m_responsebuffer[2] = m_cmd[7]; // List Length MSB
m_responsebuffer[3] = m_cmd[8]; // List Length LSB
writeDataPhase(4, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
void StartStopUnitCommandHandler() {
LOGN("[StartStopUnit]");
m_phase = PHASE_STATUSIN;
}
void PreAllowMediumRemovalCommandHandler() {
LOGN("[PreAllowMed.Removal]");
m_phase = PHASE_STATUSIN;
}
void PrefetchCommandHandler() {
LOGN("[Prefetch]");
m_phase = PHASE_STATUSIN;
}
void SyncCacheCommandHandler() {
LOGN("[SyncCache]");
m_phase = PHASE_STATUSIN;
}
void UnknownCommandHandler() {
LOGN("[*Unknown]");
m_sts |= STATUS_CHECK;
if(m_sel) {
m_sel->m_sense.m_key = 5;
}
m_phase = PHASE_STATUSIN;
}
void BadLunCommandHandler() {
LOGN("[Bad LUN]");
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
}

1259
src/greenscsi.ino Executable file

File diff suppressed because it is too large Load Diff

595
src/optical.ino Executable file
View File

@ -0,0 +1,595 @@
#include "config.h"
#include "scsi_defs.h"
#if SUPPORT_OPTICAL
static const uint8_t SessionTOC[] =
{
0x00, // toc length, MSB
0x0A, // toc length, LSB
0x01, // First session number
0x01, // Last session number,
// TRACK 1 Descriptor
0x00, // reserved
0x14, // Q sub-channel encodes current position, Digital track
0x01, // First track number in last complete session
0x00, // Reserved
0x00,0x00,0x00,0x00 // LBA of first track in last session
};
static const uint8_t FullTOC[] =
{
0x00, // toc length, MSB
0x44, // toc length, LSB
0x01, // First session number
0x01, // Last session number,
// A0 Descriptor
0x01, // session number
0x14, // ADR/Control
0x00, // TNO
0xA0, // POINT
0x00, // Min
0x00, // Sec
0x00, // Frame
0x00, // Zero
0x01, // First Track number.
0x00, // Disc type 00 = Mode 1
0x00, // PFRAME
// A1
0x01, // session number
0x14, // ADR/Control
0x00, // TNO
0xA1, // POINT
0x00, // Min
0x00, // Sec
0x00, // Frame
0x00, // Zero
0x01, // Last Track number
0x00, // PSEC
0x00, // PFRAME
// A2
0x01, // session number
0x14, // ADR/Control
0x00, // TNO
0xA2, // POINT
0x00, // Min
0x00, // Sec
0x00, // Frame
0x00, // Zero
0x79, // LEADOUT position BCD
0x59, // leadout PSEC BCD
0x74, // leadout PFRAME BCD
// TRACK 1 Descriptor
0x01, // session number
0x14, // ADR/Control
0x00, // TNO
0x01, // Point
0x00, // Min
0x00, // Sec
0x00, // Frame
0x00, // Zero
0x00, // PMIN
0x00, // PSEC
0x00, // PFRAME
// b0
0x01, // session number
0x54, // ADR/Control
0x00, // TNO
0xB1, // POINT
0x79, // Min BCD
0x59, // Sec BCD
0x74, // Frame BCD
0x00, // Zero
0x79, // PMIN BCD
0x59, // PSEC BCD
0x74, // PFRAME BCD
// c0
0x01, // session number
0x54, // ADR/Control
0x00, // TNO
0xC0, // POINT
0x00, // Min
0x00, // Sec
0x00, // Frame
0x00, // Zero
0x00, // PMIN
0x00, // PSEC
0x00 // PFRAME
};
static const uint8_t DiscInfoBlock[] =
{
0x00, // disc info length, MSB
0x44, // disc info length, LSB
0x0e, // DiscStatus = Complete
0x01, // First Track on Disc
0x01, // Sessions on Disc (LSB)
0x01, // First Track in Last Session (LSB)
0x01, // Last Track in Last Session (LSB)
0x20, // DID_V DBC_V URU
0x00, // Disc Type
0x00, // Sessions on Disc (MSB)
0x00, // First Track in Last Session (MSB)
0x00, // Last Track in Last Session (MSB)
0x00, // DiscID (MSB)
0x00, // DiscID
0x00, // DiscID
0x00, // DiscID (LSB)
0x00, // Last Session Lead-In Start (MSB)
0x00, // IN MSF
0x00, //
0x00, // Last Session Lead-In Start (LSB)
0x00, // Last Possible Lead-Out Start (MSB)
0x00, // IN MSF
0x00, //
0x00, // Last Possible Lead-Out Start (LSB)
0x00, // Bar Code (MSB)
0x00, //
0x00, //
0x00, //
0x00, //
0x00, //
0x00, //
0x00, // Bar Code (LSB)
0x00, // Reserved
0x00, // Number of OPC Entries
};
static void LBA2MSF(uint32_t LBA, uint8_t* MSF)
{
MSF[0] = 0; // reserved.
MSF[3] = (uint32_t)(LBA % 75); // F
uint32_t rem = LBA / 75;
MSF[2] = (uint32_t)(rem % 60); // S
MSF[1] = (uint32_t)(rem / 60); // M
}
void OpticalReadSimpleTOC()
{
int MSF = m_cmd[1] & 0x02 ? 1 : 0;
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
uint8_t len = 0;
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
m_responsebuffer[len++] = 0x00; // toc length, MSB
m_responsebuffer[len++] = 0x00; // toc length, LSB
m_responsebuffer[len++] = 0x01; // First track number
m_responsebuffer[len++] = 0x01; // Last track number
// We only support track 1 and 0xaa (lead-out).
// track 0 means "return all tracks"
switch (m_cmd[6]) {
case 0x00:
case 0x01:
m_responsebuffer[len++] = 0x00; // reserved
m_responsebuffer[len++] = 0x14; // Q sub-channel encodes current position, Digital track
m_responsebuffer[len++] = 0x01; // Track 1
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // MSB LBA
m_responsebuffer[len++] = 0x00; //
m_responsebuffer[len++] = 0x00; //
m_responsebuffer[len++] = 0x00; // LSB LBA
case 0xAA:
m_responsebuffer[len++] = 0x00; // reserved
m_responsebuffer[len++] = 0x14; // Q sub-channel encodes current position, Digital track
m_responsebuffer[len++] = 0xAA; // Leadout Track
m_responsebuffer[len++] = 0x00; // Reserved
// Replace start of leadout track
if (MSF)
{
LBA2MSF(capacity, m_responsebuffer + len);
len+=4;
}
else
{
// Track start sector (LBA)
m_responsebuffer[len++] = capacity >> 24;
m_responsebuffer[len++] = capacity >> 16;
m_responsebuffer[len++] = capacity >> 8;
m_responsebuffer[len++] = capacity;
}
break;
default:
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 6
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x06;
m_phase = PHASE_STATUSIN;
}
m_responsebuffer[0] = (len >> 8) & 0xff;
m_responsebuffer[1] = len & 0xff;
// Truncate if necessary
if(allocationLength < len)
len = allocationLength;
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
void OpticalReadSessionInfo()
{
// int MSF = m_cmd[1] & 0x02 ? 1 : 0;
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
uint32_t len = sizeof(SessionTOC);
memcpy(m_responsebuffer, SessionTOC, len);
// Truncate if necessary
if(allocationLength < len)
len = allocationLength;
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
uint8_t fromBCD(uint8_t val)
{
return ((val >> 4) * 10) + (val & 0xF);
}
void OpticalReadFullTOC(int convertBCD)
{
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
// We only support session 1.
if (m_cmd[6] > 1) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 6
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x06;
m_phase = PHASE_STATUSIN;
return;
}
uint32_t len = sizeof(FullTOC);
memcpy(m_responsebuffer, FullTOC, len);
if (convertBCD)
{
uint32_t descriptor = 4;
while (descriptor < len)
{
int i;
for (i = 0; i < 7; ++i)
{
m_responsebuffer[descriptor + i] =
fromBCD(m_responsebuffer[descriptor + 4 + i]);
}
descriptor += 11;
}
}
// Truncate if necessary
if(allocationLength < len)
len = allocationLength;
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
void OpticalReadTOCCommandHandler()
{
LOGN("[Read TOC]");
switch(m_cmd[2] & 0xf) {
case 0:
LOGN("Simple");
OpticalReadSimpleTOC();
return;
case 1:
LOGN("Session");
OpticalReadSessionInfo();
return;
case 2:
LOGN("Full 0");
OpticalReadFullTOC(0);
return;
case 3:
LOGN("Full 1");
OpticalReadFullTOC(1);
return;
}
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 2
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x02;
m_phase = PHASE_STATUSIN;
}
static uint8_t SimpleHeader[] =
{
0x01, // 2048byte user data, L-EC in 288 byte aux field.
0x00, // reserved
0x00, // reserved
0x00, // reserved
0x00,0x00,0x00,0x00 // Track start sector (LBA or MSF)
};
void OpticalHeaderCommandHandler()
{
uint32_t len = sizeof(SimpleHeader);
memcpy(m_responsebuffer, SimpleHeader, len);
LOGN("[Read Header]");
//int MSF = m_cmd[1] & 0x02 ? 1 : 0;
//uint32_t lba = 0;
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
// Truncate if necessary
if(allocationLength < len)
len = allocationLength;
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
void OpticalReadDiscInfoCommandHandler()
{
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
uint32_t len = sizeof(DiscInfoBlock);
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
memcpy(m_responsebuffer, DiscInfoBlock, len);
LOGN("[DiscInfo]");
// Truncate if necessary
if(allocationLength < len)
len = allocationLength;
LBA2MSF(capacity, m_responsebuffer + 20);
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
uint16_t SupportedFeatures[] = {
0x0001, // Core Features
0x0003, // Removable Media
0x0010, // Random Readable
0x001D, // Reads all Media Types
0x001E, // Reads CD Structures
};
void OpticalGetConfigurationCommandHandler()
{
uint16_t sfn = (m_cmd[2] << 8) | m_cmd[3];
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
uint16_t sfnmax = (allocationLength - 8) / 4;
uint16_t sfi = 0;
uint8_t len;
LOGN("[GetConfiguration]");
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
switch(m_cmd[1] & 0x3) {
case 0: {
break;
}
case 1: {
break;
}
case 2: {
sfnmax = 1;
break;
}
}
len = 8;
for(sfi = 0; (sfi < sizeof(SupportedFeatures)) && sfnmax; sfi++) {
if( SupportedFeatures[sfi] > sfn ) {
m_responsebuffer[len++] = (SupportedFeatures[sfi] >> 8) & 0xff;
m_responsebuffer[len++] = SupportedFeatures[sfi] & 0xff;
m_responsebuffer[len++] = 0;
m_responsebuffer[len++] = 0;
sfnmax--;
}
}
m_responsebuffer[0] = (len >> 24) & 0xff;
m_responsebuffer[1] = (len >> 16) & 0xff;
m_responsebuffer[2] = (len >> 8) & 0xff;
m_responsebuffer[3] = (len) & 0xff;
m_responsebuffer[6] = 0x00; // CD-ROM Profile
m_responsebuffer[7] = 0x08;
// Truncate if necessary
if(allocationLength < len)
len = allocationLength;
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
void OpticalEventStatusCommandHandler()
{
uint8_t len = 0;
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
LOGN("[Read Event Status]");
if((m_cmd[1] & 1) == 0) {
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST; // Illegal Request
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; // Invalid field in CDB
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; // Error in Byte 1
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x01;
m_phase = PHASE_STATUSIN;
return;
}
int ncr;
for(ncr = 0; ncr < 8; ncr++) {
if(m_cmd[4] & (1<<ncr)) {
switch (ncr) {
case 1:
m_responsebuffer[len++] = 0x00; // MSB Descriptor Length
m_responsebuffer[len++] = 0x06; // LSB
m_responsebuffer[len++] = 0x02; // Operational Change Event
m_responsebuffer[len++] = 0x12; // Supported Event Class
m_responsebuffer[len++] = 0x00; // No Change
m_responsebuffer[len++] = 0x00; // Operational Status
m_responsebuffer[len++] = 0x00; // MSB Operational Change
m_responsebuffer[len++] = 0x00; // LSB
break;
case 4:
m_responsebuffer[len++] = 0x00; // MSB Descriptor Length
m_responsebuffer[len++] = 0x06; // LSB
m_responsebuffer[len++] = 0x04; // Media Change Event
m_responsebuffer[len++] = 0x12; // Supported Event Class
m_responsebuffer[len++] = 0x00; // No Change
m_responsebuffer[len++] = (!m_sel) ? 0x00 : 0x02; // Media Present
m_responsebuffer[len++] = 0x00; // Start Slot
m_responsebuffer[len++] = 0x00; // End Slot
break;
}
}
}
uint16_t allocationLength = (m_cmd[7] << 8) | m_cmd[8];
// Truncate if necessary
if(allocationLength < len)
len = allocationLength;
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
void OpticalLockTrayCommandHandler() {
if(m_cmd[4] & 1) {
LOGN("[Lock Tray]");
} else {
LOGN("[Unlock Tray]");
}
m_phase = PHASE_STATUSIN;
}
void OpticalReadCapacityCommandHandler() {
LOGN("[ReadCapacity]");
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_sel->m_sense.m_key_specific[0] = 0x04;
m_sel->m_sense.m_key_specific[1] = 0x03;
m_sel->m_sense.m_key_specific[2] = 0x00;
m_sel->m_sense.m_key_specific[3] = 0x00;
m_phase = PHASE_STATUSIN;
return;
}
uint32_t bl = m_sel->m_blocksize;
uint32_t bc = m_sel->m_fileSize / bl;
uint8_t buf[8] = {
(uint8_t)(((uint32_t)(bc >> 24))&0xff), (uint8_t)(((uint32_t)(bc >> 16))&0xff), (uint8_t)(((uint32_t)(bc >> 8))&0xff), (uint8_t)(((uint32_t)(bc))&0xff),
(uint8_t)(((uint32_t)(bl >> 24))&0xff), (uint8_t)(((uint32_t)(bl >> 16))&0xff), (uint8_t)(((uint32_t)(bl >> 8))&0xff), (uint8_t)(((uint32_t)(bl))&0xff)
};
writeDataPhase(8, buf);
m_phase = PHASE_STATUSIN;
}
void ConfigureOpticalHandlers(VirtualDevice_t *vdev) {
for(int c = 0; c < 256; c++)
vdev->m_handler[c] = &UnknownCommandHandler;
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
vdev->m_handler[CMD_REZERO_UNIT] = &RezeroUnitCommandHandler;
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
vdev->m_handler[CMD_READ6] = &Read6CommandHandler;
vdev->m_handler[CMD_SEEK6] = &Seek6CommandHandler;
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
vdev->m_handler[CMD_MODE_SELECT6] = &ModeSelect6CommandHandler;
vdev->m_handler[CMD_MODE_SENSE6] = &ModeSenseCommandHandler;
vdev->m_handler[CMD_START_STOP_UNIT] = &StartStopUnitCommandHandler;
vdev->m_handler[CMD_PREVENT_REMOVAL] = &OpticalLockTrayCommandHandler;
vdev->m_handler[CMD_READ_CAPACITY10] = &OpticalReadCapacityCommandHandler;
vdev->m_handler[CMD_READ10] = &Read10CommandHandler;
vdev->m_handler[CMD_SEEK10] = &Seek10CommandHandler;
vdev->m_handler[CMD_READ_TOC] = &OpticalReadTOCCommandHandler;
vdev->m_handler[CMD_READ_HEADER] = &OpticalHeaderCommandHandler;
//vdev->m_handler[CMD_GET_CONFIGURATION] = &OpticalGetConfigurationCommandHandler;
vdev->m_handler[CMD_SEND_DIAGNOSTIC] = &SendDiagnosticCommandHandler;
vdev->m_handler[CMD_GET_EVENT_STATUS_NOTIFICATION] = &OpticalEventStatusCommandHandler;
vdev->m_handler[CMD_READ_DISC_INFORMATION] = &OpticalReadDiscInfoCommandHandler;
vdev->m_handler[CMD_MODE_SELECT10] = &ModeSelect10CommandHandler;
vdev->m_handler[CMD_MODE_SENSE10] = &ModeSenseCommandHandler;
}
// If config file exists, read the first three lines and copy the contents.
// File must be well formed or you will get junk in the SCSI Vendor fields.
void ConfigureOptical(VirtualDevice_t *vdev, const char *image_name) {
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_OPTICAL) {
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
break;
}
}
if(image_name) {
char configname[MAX_FILE_PATH+1];
memcpy(configname, image_name, MAX_FILE_PATH+1);
char *psuffix = strstr(configname, ".img");
if(psuffix) {
strcpy(psuffix, ".cfg");
} else {
sprintf(configname, "cd%d%d.cfg", vdev->m_id, vdev->m_lun);
}
FsFile config_file = sd.open(configname, O_RDONLY);
if (config_file.isOpen()) {
char vendor[9];
memset(vendor, 0, sizeof(vendor));
config_file.readBytes(vendor, sizeof(vendor));
LOGN("SCSI VENDOR: ");
LOGN(vendor);
memcpy(&(vdev->m_inquiryresponse[8]), vendor, 8);
char product[17];
memset(product, 0, sizeof(product));
config_file.readBytes(product, sizeof(product));
LOGN("SCSI PRODUCT: ");
LOGN(product);
memcpy(&(vdev->m_inquiryresponse[16]), product, 16);
char version[5];
memset(version, 0, sizeof(version));
config_file.readBytes(version, sizeof(version));
LOGN("SCSI VERSION: ");
LOGN(version);
memcpy(&(vdev->m_inquiryresponse[32]), version, 4);
config_file.close();
}
}
vdev->m_type = DEV_OPTICAL;
ConfigureOpticalHandlers(vdev);
}
#endif

62
src/partitions.ino Executable file
View File

@ -0,0 +1,62 @@
#if 0
#include "config.h"
#include "cmd.h"
typedef struct PartType_s {
unsigned char Type;
const char *Name;
} PartType_t;
PartType_t PartType[] = {
{ 0x00, "Empty" },
{ 0x01, "FAT12" },
{ 0x04, "FAT16 <32MB" },
{ 0x05, "Extended" },
{ 0x06, "FAT16 >32MB" },
{ 0x07, "NTFS" },
{ 0x0b, "FAT32" },
{ 0x0c, "FAT32 LBA" },
{ 0x0e, "FAT16 LBA" },
{ 0x0f, "Extended LBA" },
{ 0xf8, "TinySCSI Disk LUN" },
{ 0xf9, "TinySCSI Optical LUN" },
{ 0xff, NULL }
};
#endif
/*
* Public domain MBR boot manager from https://github.com/egormkn/mbr-boot-manager
*/
uint8_t mbr_bin[512] = {
0xFA, 0xBC, 0x00, 0x7C, 0x31, 0xC0, 0x8E, 0xD0, 0x8E, 0xC0, 0x8E, 0xD8, 0x52, 0xBE, 0x00, 0x7C,
0xBF, 0x00, 0x06, 0xB9, 0x00, 0x02, 0xFC, 0xF3, 0xA4, 0xE9, 0x00, 0x8A, 0xFB, 0xB8, 0x03, 0x00,
0xCD, 0x10, 0xB8, 0x00, 0x06, 0xB7, 0x02, 0x31, 0xC9, 0xBA, 0x4F, 0x18, 0xCD, 0x10, 0xB8, 0x03,
0x01, 0xB9, 0x05, 0x01, 0xCD, 0x10, 0xB9, 0x04, 0x00, 0xBD, 0xEE, 0x07, 0x31, 0xDB, 0x55, 0x80,
0x7E, 0x00, 0x80, 0x75, 0x02, 0x88, 0xCB, 0xB4, 0x02, 0xBA, 0x22, 0x08, 0x00, 0xCE, 0xCD, 0x10,
0xBE, 0x8D, 0x07, 0xE8, 0x2B, 0x01, 0xB0, 0x30, 0x00, 0xC8, 0xB4, 0x0E, 0xCD, 0x10, 0x38, 0xCB,
0x75, 0x06, 0xBE, 0x98, 0x07, 0xE8, 0x19, 0x01, 0x5D, 0x83, 0xED, 0x10, 0xE2, 0xD0, 0x38, 0xFB,
0x75, 0x03, 0x43, 0xEB, 0x0A, 0xB4, 0x02, 0xCD, 0x16, 0x24, 0x03, 0x38, 0xF8, 0x74, 0x51, 0xB4,
0x02, 0xBA, 0x20, 0x08, 0x00, 0xDE, 0xCD, 0x10, 0x88, 0xFC, 0xCD, 0x16, 0x3D, 0x00, 0x48, 0x74,
0x11, 0x3D, 0x00, 0x50, 0x74, 0x14, 0x3D, 0x1B, 0x01, 0x74, 0x2D, 0x3D, 0x0D, 0x1C, 0x74, 0x30,
0xEB, 0xDD, 0x80, 0xFB, 0x01, 0x7E, 0x01, 0x4B, 0xEB, 0xD5, 0x80, 0xFB, 0x04, 0x73, 0x01, 0x43,
0xEB, 0xCD, 0xBE, 0x9D, 0x07, 0xE8, 0xC9, 0x00, 0xB8, 0x00, 0x86, 0xB9, 0x2D, 0x00, 0x31, 0xD2,
0xCD, 0x15, 0xEB, 0x04, 0xCD, 0x18, 0xCD, 0x19, 0xEA, 0x00, 0x00, 0xFF, 0xFF, 0xF4, 0xEB, 0xFD,
0x53, 0xB4, 0x02, 0xBA, 0x01, 0x01, 0xCD, 0x10, 0xB8, 0x00, 0x06, 0xB7, 0x02, 0x31, 0xC9, 0xBA,
0x4F, 0x18, 0xCD, 0x10, 0xBD, 0xAE, 0x07, 0x5B, 0xC1, 0xE3, 0x04, 0x01, 0xDD, 0x5A, 0x88, 0x56,
0x00, 0x55, 0xC6, 0x46, 0x11, 0x05, 0x88, 0x7E, 0x10, 0xB4, 0x41, 0xBB, 0xAA, 0x55, 0xCD, 0x13,
0x5D, 0x72, 0x0F, 0x81, 0xFB, 0x55, 0xAA, 0x75, 0x09, 0xF7, 0xC1, 0x01, 0x00, 0x74, 0x03, 0xFE,
0x46, 0x10, 0x66, 0x60, 0x80, 0x7E, 0x0A, 0x00, 0x74, 0x20, 0x66, 0x6A, 0x00, 0x66, 0xFF, 0x76,
0x08, 0x6A, 0x00, 0x68, 0x00, 0x7C, 0x6A, 0x01, 0x6A, 0x10, 0xB4, 0x42, 0x8A, 0x56, 0x00, 0x89,
0xE6, 0xCD, 0x13, 0x9F, 0x83, 0xC4, 0x10, 0x9E, 0xEB, 0x14, 0xB8, 0x01, 0x02, 0xBB, 0x00, 0x7C,
0x8A, 0x56, 0x00, 0x8A, 0x76, 0x01, 0x8A, 0x4E, 0x02, 0x8A, 0x6E, 0x03, 0xCD, 0x13, 0x66, 0x61,
0x73, 0x12, 0xFE, 0x4E, 0x11, 0x0F, 0x84, 0x59, 0xFF, 0x55, 0x30, 0xE4, 0x8A, 0x56, 0x00, 0xCD,
0x13, 0x5D, 0xEB, 0xAE, 0x81, 0x3E, 0xFE, 0x7D, 0x55, 0xAA, 0x0F, 0x85, 0x44, 0xFF, 0x83, 0x3E,
0x00, 0x7C, 0x00, 0x0F, 0x84, 0x3B, 0xFF, 0x8B, 0x56, 0x00, 0x30, 0xF6, 0xEA, 0x00, 0x7C, 0x00,
0x00, 0xB4, 0x0E, 0xAC, 0x3C, 0x00, 0x74, 0x04, 0xCD, 0x10, 0xEB, 0xF7, 0xC3, 0x50, 0x61, 0x72,
0x74, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x00, 0x20, 0x28, 0x41, 0x29, 0x00, 0x42, 0x6F, 0x6F,
0x74, 0x20, 0x73, 0x65, 0x63, 0x74, 0x6F, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x0D, 0x0A,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA
};

60
src/sasi.ino Executable file
View File

@ -0,0 +1,60 @@
#include "config.h"
#include "scsi_defs.h"
#if SUPPORT_SASI
/*
* dtc510b_setDriveparameter
*/
#define PACKED __attribute__((packed))
typedef struct PACKED dtc500_cmd_c2_param_struct
{
uint8_t StepPlusWidth; // Default is 13.6usec (11)
uint8_t StepPeriod; // Default is 3 msec.(60)
uint8_t StepMode; // Default is Bufferd (0)
uint8_t MaximumHeadAdress; // Default is 4 heads (3)
uint8_t HighCylinderAddressuint8_t; // Default set to 0 (0)
uint8_t LowCylinderAddressuint8_t; // Default is 153 cylinders (152)
uint8_t ReduceWrietCurrent; // Default is above Cylinder 128 (127)
uint8_t DriveType_SeekCompleteOption;// (0)
uint8_t Reserved8; // (0)
uint8_t Reserved9; // (0)
} DTC510_CMD_C2_PARAM;
static void logStrHex(const char *msg,uint32_t num)
{
LOG(msg);
LOGHEX6N(num);
}
void DTCsetDriveParameterCommandHandler() {
LOGN("[DTC510B setDriveParameter]");
DTC510_CMD_C2_PARAM DriveParameter;
uint16_t maxCylinder;
uint16_t numLAD;
//uint32_t stepPulseUsec;
int StepPeriodMsec;
// receive paramter
writeDataPhase(sizeof(DriveParameter),(uint8_t *)(&DriveParameter));
maxCylinder =
(((uint16_t)DriveParameter.HighCylinderAddressuint8_t)<<8) |
(DriveParameter.LowCylinderAddressuint8_t);
numLAD = maxCylinder * (DriveParameter.MaximumHeadAdress+1);
//stepPulseUsec = calcStepPulseUsec(DriveParameter.StepPlusWidth);
StepPeriodMsec = DriveParameter.StepPeriod*50;
logStrHex (" StepPlusWidth : ",DriveParameter.StepPlusWidth);
logStrHex (" StepPeriod : ",DriveParameter.StepPeriod );
logStrHex (" StepMode : ",DriveParameter.StepMode );
logStrHex (" MaximumHeadAdress : ",DriveParameter.MaximumHeadAdress);
logStrHex (" CylinderAddress : ",maxCylinder);
logStrHex (" ReduceWrietCurrent : ",DriveParameter.ReduceWrietCurrent);
logStrHex (" DriveType/SeekCompleteOption : ",DriveParameter.DriveType_SeekCompleteOption);
logStrHex (" Maximum LAD : ",numLAD-1);
m_sts = 0;
m_phase = PHASE_STATUSIN;
}
#endif

181
src/scsi_defs.h Executable file
View File

@ -0,0 +1,181 @@
#ifndef __SCSI_DEFS_H
#define __SCSI_DEFS_H
/* Mode pages */
#define MODEPAGE_VENDOR_SPECIFIC 0x00
#define MODEPAGE_RW_ERROR_RECOVERY 0x01
#define MODEPAGE_DCRC_PARAMETERS 0x02
#define MODEPAGE_FORMAT_PARAMETERS 0x03
#define MODEPAGE_RIGID_GEOMETRY 0x04
#define MODEPAGE_FLEXIBLE_GEOMETRY 0x05
#define MODEPAGE_APPLE 0x30
#define MODEPAGE_ALL_PAGES 0x3F
/* 6 Byte command opcodes */
#define CMD_TEST_UNIT_READY 0x00
#define CMD_REZERO_UNIT 0x01
#define CMD_REQUEST_SENSE 0x03
#define CMD_FORMAT_UNIT 0x04
#define CMD_READ_BLOCK_LIMITS 0x05
#define CMD_FORMAT_UNIT_ALT 0x06
#define CMD_REASSIGN_BLOCKS 0x07
#define CMD_READ6 0x08
#define CMD_WRITE6 0x0A /* Optional */
#define CMD_SEEK6 0x0B /* Optional */
#define CMD_WRITE_FILEMARKS 0x10
#define CMD_SPACE 0x11
#define CMD_INQUIRY 0x12
#define CMD_MODE_SELECT6 0x15 /* Optional */
#define CMD_RESERVE6 0x16 /* Optional */
#define CMD_RELEASE6 0x17 /* Optional */
#define CMD_ERASE 0x19
#define CMD_MODE_SENSE6 0x1A /* Optional */
#define CMD_START_STOP_UNIT 0x1B /* Optional */
#define CMD_RECV_DIAGNOSTIC 0x1C
#define CMD_SEND_DIAGNOSTIC 0x1D
#define CMD_PREVENT_REMOVAL 0x1E
/* 10 Byte command opcodes */
#define CMD_READ_CAPACITY10 0x25
#define CMD_READ10 0x28
#define CMD_WRITE10 0x2A /* Optional */
#define CMD_SEEK10 0x2B /* Optional */
#define CMD_READUPDATEDBLOCK10 0x2D
#define CMD_WRITEANDVERIFY10 0x2E /* Optional */
#define CMD_VERIFY10 0x2F
#define CMD_SEARCH_DATA_EQUAL 0x31 /* Optional */
#define CMD_PREFETCH_CACHE10 0x34 /* Optional */
#define CMD_READPOSITION10 0x34 /* Optional */
#define CMD_SYNCHRONIZE_CACHE10 0x35 /* Optional */
#define CMD_LOCKUNLOCK_CACHE10 0x36 /* Optional */
#define CMD_READ_DEFECT_DATA 0x37 /* Optional */
#define CMD_WRITEBUFFER 0x3B /* Optional */
#define CMD_READBUFFER 0x3C /* Optional */
#define CMD_READLONG10 0x3E /* Optional */
#define CMD_WRITELONG10 0x3F /* Optional */
#define CMD_READ_TOC 0x43
#define CMD_READ_HEADER 0x44
#define CMD_GET_CONFIGURATION 0x46
#define CMD_GET_EVENT_STATUS_NOTIFICATION 0x4a
#define CMD_READ_DISC_INFORMATION 0x51
#define CMD_MODE_SELECT10 0x55
#define CMD_RESERVE10 0x56
#define CMD_RELEASE10 0x57
#define CMD_MODE_SENSE10 0x5A /* Optional */
/* 12 Byte command opcodes */
#define CMD_REPORT_LUNS 0xA0 /* Optional */
#define CMD_SET_DRIVE_PARAMETER 0xC2
#define CMD_MAC_UNKNOWN 0xEE /* Unknown */
/* Dayna SCSI/Link Ethernet */
#define CMD_SCSILINK_STATS 0x09
#define CMD_SCSILINK_ENABLE 0x0E
#define CMD_SCSILINK_SET 0x0C
#define CMD_SCSILINK_SETMODE 0x80
#define CMD_SCSILINK_SETMAC 0x40
/* Cabletron Ethernet */
#define CMD_CABLETRON_SEND 0x0c01
#define CMD_CABLETRON_RECV 0xe1
#define CMD_CABLETRON_GET_ADDR 0x0c04
#define CMD_CABLETRON_ADD_PROTO 0x0d01
#define CMD_CABLETRON_REM_PROTO 0x0d02
#define CMD_CABLETRON_SET_MODE 0x0d03
#define CMD_CABLETRON_SET_MULTI 0x0d04
#define CMD_CABLETRON_REMOVE_MULTI 0x0d05
#define CMD_CABLETRON_GET_STATS 0x0d06
#define CMD_CABLETRON_SET_MEDIA 0x0d07
#define CMD_CABLETRON_GET_MEDIA 0x0d08
#define CMD_CABLETRON_LOAD_IMAGE 0x0d09
#define CMD_CABLETRON_SET_ADDR 0x0d0a
/*
* SCSI DEVICE CODES
*/
#define DEV_DISK 0x00
#define DEV_TAPE 0x01
#define DEV_PRINTER 0x02
#define DEV_PROCESSOR 0x03
#define DEV_WORM 0x04
#define DEV_OPTICAL 0x05
#define DEV_SCANNER 0x06
#define DEV_OMS 0x07
#define DEV_CHANGER 0x08
#define DEV_COMM 0x09
/*
* SCSI MESSAGE CODES
*/
#define COMMAND_COMPLETE 0x00
#define EXTENDED_MESSAGE 0x01
#define EXTENDED_MODIFY_DATA_POINTER 0x00
#define EXTENDED_SDTR 0x01
#define EXTENDED_EXTENDED_IDENTIFY 0x02 /* SCSI-I only */
#define EXTENDED_WDTR 0x03
#define EXTENDED_PPR 0x04
#define EXTENDED_MODIFY_BIDI_DATA_PTR 0x05
#define SAVE_POINTERS 0x02
#define RESTORE_POINTERS 0x03
#define DISCONNECT 0x04
#define INITIATOR_ERROR 0x05
#define ABORT_TASK_SET 0x06
#define MESSAGE_REJECT 0x07
#define NOP 0x08
#define MSG_PARITY_ERROR 0x09
#define LINKED_CMD_COMPLETE 0x0a
#define LINKED_FLG_CMD_COMPLETE 0x0b
#define TARGET_RESET 0x0c
#define ABORT_TASK 0x0d
#define CLEAR_TASK_SET 0x0e
#define INITIATE_RECOVERY 0x0f /* SCSI-II only */
#define RELEASE_RECOVERY 0x10 /* SCSI-II only */
#define CLEAR_ACA 0x16
#define LOGICAL_UNIT_RESET 0x17
#define SIMPLE_QUEUE_TAG 0x20
#define HEAD_OF_QUEUE_TAG 0x21
#define ORDERED_QUEUE_TAG 0x22
#define IGNORE_WIDE_RESIDUE 0x23
#define ACA 0x24
#define QAS_REQUEST 0x55
#define IDENTIFY 0x80
/* Task states */
#define ENDED 0x00
#define CURRENT 0x01
/* Status */
#define STATUS_GOOD 0x00
#define STATUS_CHECK 0x02
#define STATUS_BUSY 0x08
#define STATUS_INTERMEDIATE 0x10
#define STATUS_CONFLICT 0x18
/* Sense keys */
#define NO_SENSE 0x00
#define RECOVERED_ERROR 0x01
#define NOT_READY 0x02
#define MEDIUM_ERROR 0x03
#define HARDWARE_ERROR 0x04
#define ILLEGAL_REQUEST 0x05
#define UNIT_ATTENTION 0x06
#define DATA_PROTECT 0x07
/* Additional Sense Information */
#define NO_ADDITIONAL_SENSE_INFORMATION 0x00
#define LUN_NOT_READY 0x04
#define INVALID_LBA 0x21
#define INVALID_FIELD_IN_CDB 0x24
#define NOTREADY_TO_READY_CHANGE 0x28
#define UNIT_POWERON_RESET 0x29
#define NO_MEDIA 0x3A
#define ERROR_IN_OPCODE 0xC0
#if USE_DB2ID_TABLE
extern const uint8_t db2scsiid[256];
#endif
#define QUIRKS_SASI 0b00000001
#define QUIRKS_APPLE 0b00000010
#endif

449
src/scsibus.ino Executable file
View File

@ -0,0 +1,449 @@
#include "config.h"
#include "scsi_defs.h"
/*
* Data uint8_t to GPIOB register setting value and parity table
*/
// Parity bit generation
#define PTY(V) ((1^((V)^((V)>>1)^((V)>>2)^((V)>>3)^((V)>>4)^((V)>>5)^((V)>>6)^((V)>>7)))&1)
// Set DBP
#define DBP(D) ((((uint32_t)(D)<<16)|(PTY(D)<<11)) ^ SCSI_DB_MASK)
#define DBP8(D) DBP(D),DBP(D+1),DBP(D+2),DBP(D+3),DBP(D+4),DBP(D+5),DBP(D+6),DBP(D+7)
#define DBP32(D) DBP8(D),DBP8(D+8),DBP8(D+16),DBP8(D+24)
// BSRR register control value that simultaneously performs DB set, DP set, and REQ = H (inactrive)
const uint32_t db_bsrr[256]={
DBP32(0x00),DBP32(0x20),DBP32(0x40),DBP32(0x60),
DBP32(0x80),DBP32(0xA0),DBP32(0xC0),DBP32(0xE0)
};
// Parity bit acquisition
#define PARITY(DB) ((db_bsrr[DB & 0xff] & 0x0800) >> 11)
// Macro cleaning
#undef DBP32
#undef DBP8
//#undef DBP
//#undef PTY
#if USE_DB2ID_TABLE
/* DB to SCSI-ID translation table */
const uint8_t db2scsiid[256]={
0xff,
0,
1,1,
2,2,2,2,
3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
};
#endif
// Put DB and DP in output mode
inline void SCSI_DB_OUTPUT(uint8_t d) {
GPIOB_PDOR = db_bsrr[d];
}
// Put DB and DP in input mode
inline void SCSI_DB_INPUT() {
GPIOB_PDDR = 0x00000000;
GPIOB_PDOR = SCSI_DB_MASK;
}
/*
* Bus reset interrupt.
*/
void onBusReset(void)
{
#if SUPPORT_SASI
// SASI I / F for X1 turbo has RST pulse write cycle +2 clock ==
// I can't filter because it only activates about 1.25us
if(!(m_sel->m_quirks & QUIRKS_SASI)) {
#endif
if(digitalRead(RST)) return;
delayMicroseconds(20);
if(digitalRead(RST)) return;
#if SUPPORT_SASI
}
#endif
SCSI_DB_INPUT();
LOGN("BusReset!");
m_isBusReset = true;
}
/*
* Read by handshake.
*/
inline uint8_t readHandshake(void)
{
SET_REQ_ACTIVE();
while(!GET_ACK()) { if(m_isBusReset) { return 0; } }
uint8_t r = readIO();
SET_REQ_INACTIVE();
while(GET_ACK()) { if(m_isBusReset) { return 0; } }
return r;
}
inline void readHandshakeBlock(uint8_t *d, uint16_t len)
{
while(len) {
SET_REQ_ACTIVE();
while(!GET_ACK()) { if(m_isBusReset) { return; } }
*d++ = readIO();
len--;
SET_REQ_INACTIVE();
while(GET_ACK()) { if(m_isBusReset) { return; } }
}
}
/*
* Write with a handshake.
*/
inline void writeHandshake(uint8_t d)
{
GPIOB_PDDR = SCSI_DB_MASK;
SCSI_DB_OUTPUT(d);
SET_REQ_ACTIVE();
while(!GET_ACK()) { if(m_isBusReset) { return; } }
SET_REQ_INACTIVE();
SCSI_DB_INPUT();
while(GET_ACK()) { if(m_isBusReset) { return; } }
}
inline void writeHandshakeBlock(const uint8_t *d, uint16_t len)
{
GPIOB_PDDR = SCSI_DB_MASK;
while(len) {
SCSI_DB_OUTPUT(*d++);
SET_REQ_ACTIVE();
while(!GET_ACK()) { if(m_isBusReset) { return; } }
len--;
SET_REQ_INACTIVE();
while(GET_ACK()) { if(m_isBusReset) { return; } }
}
SCSI_DB_INPUT();
}
/*
* Data in phase.
* Send len uint8_ts of data array p.
*/
void writeDataPhase(int len, const uint8_t* p)
{
//LOGN("DATAIN PHASE");
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_ACTIVE();
#if READ_SPEED_OPTIMIZE
writeHandshakeBlock(p, len);
#else
for (int i = 0; i < len; i++) {
if(m_isBusReset) {
m_phase = PHASE_BUSFREE;
return;
}
writeHandshake(p[i]);
}
#endif
if(m_isBusReset) {
m_phase = PHASE_BUSFREE;
}
}
/*
* Data in phase.
* Send len block while reading from SD card.
*/
void writeDataPhaseSD(uint32_t adds, uint32_t len)
{
#if READ_SPEED_OPTIMIZE
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
#endif
uint32_t i = 0;
//LOGN("DATAIN PHASE(SD)");
uint32_t pos = adds * m_sel->m_blocksize;
m_sel->m_file.seek(pos);
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_ACTIVE();
while(i < len) {
// Asynchronous reads will make it faster ...
#if READ_SPEED_OPTIMIZE
if((len-i) >= bigread) {
m_sel->m_file.read(m_buf, MAX_BLOCKSIZE);
writeHandshakeBlock(m_buf, MAX_BLOCKSIZE);
i += bigread;
} else {
m_sel->m_file.read(m_buf, m_sel->m_blocksize * (len-i));
writeHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
i = len;
}
#else
m_sel->m_file.read(m_buf, m_sel->m_blocksize);
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
if(m_isBusReset) {
m_phase = PHASE_BUSFREE;
return;
}
writeHandshake(m_buf[j]);
}
#endif
if(m_isBusReset) {
m_phase = PHASE_BUSFREE;
return;
}
}
}
/*
* Data in phase.
* Send len block while reading from SD card.
*/
void writeDataPhaseRaw(uint32_t adds, uint32_t len)
{
#if READ_SPEED_OPTIMIZE_RAW
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
#endif
uint32_t i = 0;
//LOGN("DATAIN PHASE(RAW)");
uint32_t pos = ((adds * m_sel->m_blocksize) / 512) + m_sel->m_firstSector;
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_ACTIVE();
while(i < len) {
// Asynchronous reads will make it faster ...
#if READ_SPEED_OPTIMIZE_RAW
if((len-i) >= bigread) {
sd.card()->readSectors(pos, m_buf, (MAX_BLOCKSIZE / 512));
writeHandshakeBlock(m_buf, MAX_BLOCKSIZE);
i += bigread;
pos += (MAX_BLOCKSIZE / 512);
} else {
sd.card()->readSectors(pos, m_buf, ((m_sel->m_blocksize * (len-i)) / 512));
writeHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
i = len;
}
#else
sd.card()->readSectors(pos, m_buf, (m_sel->m_blocksize / 512));
pos++;
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
if(m_isBusReset) {
m_phase = PHASE_BUSFREE;
return;
}
writeHandshake(m_buf[j]);
}
#endif
if(m_isBusReset) {
m_phase = PHASE_BUSFREE;
return;
}
}
}
/*
* Data out phase.
* len block read
*/
void readDataPhase(int len, uint8_t* p)
{
//LOGN("DATAOUT PHASE");
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_INACTIVE();
#if WRITE_SPEED_OPTIMIZE
readHandshakeBlock(p, len);
#else
for(int i = 0; i < len; i++)
p[i] = readHandshake();
#endif
if(m_isBusReset) {
m_phase = PHASE_BUSFREE;
}
}
/*
* Data out phase.
* Write to SD card while reading len block.
*/
void readDataPhaseSD(uint32_t adds, uint32_t len)
{
#if WRITE_SPEED_OPTIMIZE
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
#endif
uint32_t i = 0;
//LOGN("DATAOUT PHASE(SD)");
uint32_t pos = adds * m_sel->m_blocksize;
m_sel->m_file.seek(pos);
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_INACTIVE();
while(i < len) {
#if WRITE_SPEED_OPTIMIZE
if((len-i) >= bigread) {
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
m_sel->m_file.write(m_buf, MAX_BLOCKSIZE);
i += bigread;
} else {
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
m_sel->m_file.write(m_buf, m_sel->m_blocksize * (len-i));
i = len;
}
#else
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
if(m_isBusReset) {
return;
}
m_buf[j] = readHandshake();
}
m_sel->m_file.write(m_buf, m_sel->m_blocksize);
#endif
}
m_sel->m_file.flush();
}
/*
* Data out phase.
* Write to SD card while reading len block.
*/
void readDataPhaseRaw(uint32_t adds, uint32_t len)
{
#if WRITE_SPEED_OPTIMIZE_RAW
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
#endif
uint32_t i = 0;
//LOGN("DATAOUT PHASE(RAW)");
uint32_t pos = ((adds * m_sel->m_blocksize) / 512) + m_sel->m_firstSector;
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_INACTIVE();
while(i < len) {
#if WRITE_SPEED_OPTIMIZE_RAW
if((len-i) >= bigread) {
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
sd.card()->writeSectors(pos, m_buf, (MAX_BLOCKSIZE / 512));
i += bigread;
pos += (MAX_BLOCKSIZE / 512);
} else {
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
sd.card()->writeSectors(pos, m_buf, ((m_sel->m_blocksize * (len-i)) / 512));
i = len;
}
#else
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
if(m_isBusReset) {
return;
}
m_buf[j] = readHandshake();
}
sd.card()->writeSectors(pos, m_buf, (m_sel->m_blocksize / 512));
i++;
pos += (m_sel->m_blocksize / 512);
#endif
}
m_sel->m_file.flush();
}
/*
* Data out phase.
* Verify SD card while reading len block.
*/
void verifyDataPhaseSD(uint32_t adds, uint32_t len)
{
#if WRITE_SPEED_OPTIMIZE
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
#endif
uint32_t i = 0;
//LOGN("DATAOUT PHASE(SD)");
uint32_t pos = adds * m_sel->m_blocksize;
m_sel->m_file.seek(pos);
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_INACTIVE();
while(i < len) {
#if WRITE_SPEED_OPTIMIZE
if((len-i) >= bigread) {
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
//m_sel->m_file.verify(m_buf, MAX_BLOCKSIZE);
i += bigread;
} else {
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
//m_sel->m_file.verify(m_buf, m_sel->m_blocksize * (len-i));
i = len;
}
#else
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
if(m_isBusReset) {
return;
}
m_buf[j] = readHandshake();
}
//m_sel->m_file.verify(m_buf, m_sel->m_blocksize);
#endif
}
}
/*
* Data out phase.
* Verify SD card while reading len block.
*/
void verifyDataPhaseRaw(uint32_t adds, uint32_t len)
{
#if WRITE_SPEED_OPTIMIZE_RAW
uint32_t bigread = (MAX_BLOCKSIZE / m_sel->m_blocksize);
#endif
uint32_t i = 0;
//LOGN("DATAOUT PHASE(RAW)");
//uint32_t pos = ((adds * m_sel->m_blocksize) / 512) + m_sel->m_firstSector;
SET_MSG_INACTIVE();
SET_CD_INACTIVE();
SET_IO_INACTIVE();
while(i < len) {
#if WRITE_SPEED_OPTIMIZE_RAW
if((len-i) >= bigread) {
readHandshakeBlock(m_buf, MAX_BLOCKSIZE);
i += bigread;
} else {
readHandshakeBlock(m_buf, m_sel->m_blocksize * (len-i));
i = len;
}
#else
for(unsigned int j = 0; j < m_sel->m_blocksize; j++) {
if(m_isBusReset) {
return;
}
m_buf[j] = readHandshake();
}
#endif
}
}

371
src/tape.ino Executable file
View File

@ -0,0 +1,371 @@
#include "config.h"
#include "scsi_defs.h"
#if SUPPORT_TAPE
/*
* READ6 / 10 Command processing.
*/
void onTapeReadCommand(uint32_t adds, uint32_t len)
{
LOG("-R ");
LOGHEX4N(len);
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
switch(m_cmd[1] & 0x3) {
case 0:
if(len == 0) return;
break;
case 1: // Fixed
break;
case 2: // SILI
break;
case 3: // Illegal Request
m_sts = 0x02;
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 1" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x01;
m_phase = PHASE_STATUSIN;
return;
}
LED_ON();
writeDataPhaseTape(len);
LED_OFF();
m_phase = PHASE_STATUSIN;
}
/*
* WRITE6 / 10 Command processing.
*/
void onTapeWriteCommand(uint32_t adds, uint32_t len)
{
LOG("-W ");
LOGHEX4N(len);
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
LED_ON();
m_sel->m_file.write(&len, 4);
readDataPhaseTape(len);
m_sel->m_file.write(&len, 4);
LED_OFF();
m_phase = PHASE_STATUSIN;
}
void TapeRead6CommandHandler() {
LOG("[Read6]");
m_sts |= onTapeReadCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
m_phase = PHASE_STATUSIN;
}
void TapeWrite6CommandHandler() {
LOG("[Write6]");
m_sts |= onTapeWriteCommand((((uint32_t)m_cmd[1] & 0x1F) << 16) | ((uint32_t)m_cmd[2] << 8) | m_cmd[3], (m_cmd[4] == 0) ? 0x100 : m_cmd[4]);
m_phase = PHASE_STATUSIN;
}
void TapeSeek6CommandHandler() {
LOG("[Seek6]");
m_phase = PHASE_STATUSIN;
}
void TapeRead10CommandHandler() {
LOG("[Read10]");
m_sts |= onTapeReadCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
m_phase = PHASE_STATUSIN;
}
void TapeWrite10CommandHandler() {
LOG("[Write10]");
m_sts |= onTapeWriteCommand(((uint32_t)m_cmd[2] << 24) | ((uint32_t)m_cmd[3] << 16) | ((uint32_t)m_cmd[4] << 8) | m_cmd[5], ((uint32_t)m_cmd[7] << 8) | m_cmd[8]);
m_phase = PHASE_STATUSIN;
}
void TapeSeek10CommandHandler() {
LOG("[Seek10]");
m_phase = PHASE_STATUSIN;
}
void TapeModeSense6CommandHandler() {
uint8_t len;
int page, pagemax, pagemin;
LOGN("[ModeSense6]");
/* Check whether medium is present */
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
memset(m_responsebuffer, 0, sizeof(m_responsebuffer));
len = 1;
/* Default medium type */
m_responsebuffer[len++] = 0xf0;
/* Write protected */
m_responsebuffer[len++] = 0x80;
/* Add block descriptor if DBD is not set */
if (m_cmd[1] & 0x08) {
m_responsebuffer[len++] = 0; /* No block descriptor */
} else {
uint32_t capacity = (m_sel->m_fileSize / m_sel->m_blocksize) - 1;
m_responsebuffer[len++] = 8; /* Block descriptor length */
m_responsebuffer[len++] = (capacity >> 24) & 0xff;
m_responsebuffer[len++] = (capacity >> 16) & 0xff;
m_responsebuffer[len++] = (capacity >> 8) & 0xff;
m_responsebuffer[len++] = capacity & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize >> 24) & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize >> 16) & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize >> 8) & 0xff;
m_responsebuffer[len++] = (m_sel->m_blocksize) & 0xff;
}
/* Check for requested mode page */
page = m_cmd[2] & 0x3F;
pagemax = (page != 0x3f) ? page : 0x3e;
pagemin = (page != 0x3f) ? page : 0x00;
for(page = pagemax; page >= pagemin; page--) {
switch (page) {
default:
if(pagemin == pagemax) {
/* Requested mode page is not supported */
/* Prepare sense data */
m_sts |= STATUS_CHECK;
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
m_sel->m_sense.m_key_specific[1] = 0x00;
m_sel->m_sense.m_key_specific[2] = 0x02;
m_phase = PHASE_STATUSIN;
return;
}
}
}
/* Report size of requested data */
m_responsebuffer[0] = len;
/* Truncate data if necessary */
if (m_cmd[4] < len) {
len = m_cmd[4];
}
// Send it
writeDataPhase(len, m_responsebuffer);
m_phase = PHASE_STATUSIN;
}
void TapeLoadUnloadCommandHandler() {
if(m_cmd[4] & 1) {
LOGN("[Load]");
} else {
LOGN("[Unload]");
}
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
m_phase = PHASE_STATUSIN;
}
void TapePreventRemovalCommandHandler() {
if(m_cmd[4] & 1) {
LOGN("[Prevent Removal]");
} else {
LOGN("[Allow Removal]");
}
if(!m_sel) {
m_sts |= STATUS_CHECK;
m_phase = PHASE_STATUSIN;
return;
}
m_phase = PHASE_STATUSIN;
}
void TapeReadCapacityCommandHandler() {
LOGN("[ReadCapacity]");
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
uint32_t bl = m_sel->m_blocksize;
uint32_t bc = m_sel->m_fileSize / bl;
uint8_t buf[8] = {
(uint8_t)(((uint32_t)(bc >> 24))&0xff), (uint8_t)(((uint32_t)(bc >> 16))&0xff), (uint8_t)(((uint32_t)(bc >> 8))&0xff), (uint8_t)(((uint32_t)(bc))&0xff),
(uint8_t)(((uint32_t)(bl >> 24))&0xff), (uint8_t)(((uint32_t)(bl >> 16))&0xff), (uint8_t)(((uint32_t)(bl >> 8))&0xff), (uint8_t)(((uint32_t)(bl))&0xff)
};
writeDataPhase(8, buf);
m_phase = PHASE_STATUSIN;
}
void TapeEraseCommandHandler() {
LOGN("[Erase]");
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
// Truncate the current .tap file (maybe archive it by renaming instead of truncating?)
}
void TapeReadBlockLimitsCommandHandler() {
uint16_t len = 0;
LOGN("[ReadBlockLimits]");
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0xFF; // Maximum Block Length
m_responsebuffer[len++] = 0xFF;
m_responsebuffer[len++] = 0xFF;
m_responsebuffer[len++] = 0x00; // Minimum Block Length
m_responsebuffer[len++] = 0x00;
writeDataPhase(len, buf);
m_phase = PHASE_STATUSIN;
}
void TapeRewindUnitCommandHandler() {
LOGN("[Rewind]");
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
m_sel->m_filemarks = 0;
m_sel->m_file.seek(0);
m_phase = PHASE_STATUSIN;
}
void TapeReadPositionCommandHandler() {
uint16_t len = 0;
LOGN("[ReadPosition]");
if(!m_sel) {
m_sts |= STATUS_CHECK; // Image file absent
m_phase = PHASE_STATUSIN;
return;
}
m_responsebuffer[len++] = (m_sel->m_filemarks == 0) ? (1 << 7) : 0;
m_responsebuffer[len++] = 0x00; // Partition(0)
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff); // First Block Location
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff00) >> 8;
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff0000) >> 16;
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff000000) >> 24;
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff); // Last Block Location
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff00) >> 8;
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff0000) >> 16;
m_responsebuffer[len++] = (m_sel->m_filemarks & 0xff000000) >> 24;
m_responsebuffer[len++] = 0x00; // Reserved
m_responsebuffer[len++] = 0x00; // Blocks in buffer (0)
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00; // Bytes in buffer (0)
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00;
m_responsebuffer[len++] = 0x00;
writeDataPhase(len, buf);
m_phase = PHASE_STATUSIN;
}
void ConfigureTapeHandlers(VirtualDevice_t *vdev) {
for(int c = 0; c < 256; c++)
vdev->m_handler[c] = &UnknownCommandHandler;
vdev->m_handler[CMD_ERASE] = &TapeEraseCommandHandler;
vdev->m_handler[CMD_TEST_UNIT_READY] = &TestUnitCommandHandler;
vdev->m_handler[CMD_REZERO_UNIT] = &TapeRewindUnitCommandHandler;
vdev->m_handler[CMD_REQUEST_SENSE] = &RequestSenseCommandHandler;
vdev->m_handler[CMD_READ_BLOCK_LIMITS] = &TapeReadBlockLimitsCommandHandler;
vdev->m_handler[CMD_READ6] = &TapeRead6CommandHandler;
vdev->m_handler[CMD_WRITE6] = &TapeWrite6CommandHandler;
vdev->m_handler[CMD_SEEK6] = &TapeSeek6CommandHandler;
vdev->m_handler[CMD_INQUIRY] = &InquiryCommandHandler;
vdev->m_handler[CMD_MODE_SELECT6] = &ModeSelect6CommandHandler;
vdev->m_handler[CMD_MODE_SENSE6] = &TapeModeSense6CommandHandler;
vdev->m_handler[CMD_START_STOP_UNIT] = &TapeLoadUnloadCommandHandler;
vdev->m_handler[CMD_PREVENT_REMOVAL] = &TapePreventRemovalCommandHandler;
vdev->m_handler[CMD_READ_CAPACITY10] = &TapeReadCapacityCommandHandler;
vdev->m_handler[CMD_READ10] = &TapeRead10CommandHandler;
vdev->m_handler[CMD_WRITE10] = &TapeWrite10CommandHandler;
vdev->m_handler[CMD_SEEK10] = &TapeSeek10CommandHandler;
vdev->m_handler[CMD_READPOSITION10] = &TapeReadPositionCommandHandler;
vdev->m_handler[CMD_MODE_SELECT10] = &ModeSelect10CommandHandler;
vdev->m_handler[CMD_MODE_SENSE10] = &TapeModeSense10CommandHandler;
}
// If config file exists, read the first three lines and copy the contents.
// File must be well formed or you will get junk in the SCSI Vendor fields.
void ConfigureTape(VirtualDevice_t *vdev, const char *image_name) {
for(int i = 0; SCSI_INQUIRY_RESPONSE[i][0] != 0xff; i++) {
if(SCSI_INQUIRY_RESPONSE[i][0] == DEV_TAPE) {
memcpy(vdev->m_inquiryresponse, SCSI_INQUIRY_RESPONSE[i], SCSI_INQUIRY_RESPONSE_SIZE);
break;
}
}
if(image_name) {
char configname[MAX_FILE_PATH+1];
memcpy(configname, image_name, MAX_FILE_PATH+1);
char *psuffix = strstr(configname, ".img");
if(psuffix) {
strcpy(psuffix, ".cfg");
} else {
sprintf(configname, "mt%d%d.cfg", vdev->m_id, vdev->m_lun);
}
FsFile config_file = sd.open(configname, O_RDONLY);
if (config_file.isOpen()) {
char vendor[9];
memset(vendor, 0, sizeof(vendor));
config_file.readBytes(vendor, sizeof(vendor));
LOGN("SCSI VENDOR: ");
LOGN(vendor);
memcpy(&(vdev->m_inquiryresponse[8]), vendor, 8);
char product[17];
memset(product, 0, sizeof(product));
config_file.readBytes(product, sizeof(product));
LOGN("SCSI PRODUCT: ");
LOGN(product);
memcpy(&(vdev->m_inquiryresponse[16]), product, 16);
char version[5];
memset(version, 0, sizeof(version));
config_file.readBytes(version, sizeof(version));
LOGN("SCSI VERSION: ");
LOGN(version);
memcpy(&(vdev->m_inquiryresponse[32]), version, 4);
config_file.close();
}
}
vdev->m_type = DEV_TAPE;
ConfigureTapeHandlers(vdev);
}
#endif

View File

@ -1,11 +0,0 @@
This directory is intended for PlatformIO Unit Testing and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PlatformIO Unit Testing:
- https://docs.platformio.org/page/plus/unit-testing.html