diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..61706f1
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,26 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+## Bug Report
+
+### Expected Behavior
+
+What should it do?
+
+### Observed Behavior
+
+What did it actually do?
+
+### Steps to Reproduce
+
+How did you make it do that, and which firmware versions were used (git commit or release version)?
+
+### References
+
+Links to a video, or more info
diff --git a/.github/ISSUE_TEMPLATE/enhancement-request.md b/.github/ISSUE_TEMPLATE/enhancement-request.md
new file mode 100644
index 0000000..a6e8e2b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/enhancement-request.md
@@ -0,0 +1,20 @@
+---
+name: Enhancement request
+about: Suggest an enhancement to an existing feature for this project
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+**Is your enhancement request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
new file mode 100644
index 0000000..5c81229
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest a new feature for this project
+title: ''
+labels: feature
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 19ec2a7..69d2a83 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -23,7 +23,31 @@
- Add hardware version support for pin definitions
- Add 128KB bankswitching (V-INT pin)
- Developer mode, allow the cart to stay plugged into a computer and appear as a RAMDISK
-- Figure out why Polar Rescue crashes when the sub launches
+
+## v0.23
+
+- Fixes issue where VEXTREME takes several minutes to mount as USB drive on Windows #53
+
+## v0.22
+
+- ignore all file extensions that are not .bin or .vec (case insensitive) #49
+- increased quick reset delay to 700ms #45
+- adds HW/SW version to VEXTREME menu and games #48
+ - see example in LED Test v1.1.bin
+
+## v0.21
+
+- :warning: Added NOTICE of Current Development
+- Fixes Polar Rescue and implements a new Reset Heurisic #37
+- Adds addressable LED control and demo #41
+ - added 3 functions to control the LEDs from a Vectrex program
+ - updateOne() - RPC 6
+ - updateAll() - RPC 4
+ - updateMulti() - RPC 7
+ - added RPC function 5 to step through rainbow control of LEDs in menu
+ - added "LED TEST" which uses updateMulti to show how to finely control
+ all of the LEDs with a test program. Press UP on the joystick, try it slowly as well :D
+ - added addressable LED control to Veccy Bird v1.5
## v0.2
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
deleted file mode 100644
index 0a365a4..0000000
--- a/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
- please remove this details header
-
-```
-Please choose one of the following templates **Bug Report** or **Feature/Enhancement Request** and delete the other.
-
-Please remove this details header before submitting. Thank you for contributing!
-```
-
-
-
-
-## Bug Report
-
-### Expected Behavior
-
-What should it do?
-
-### Observed Behavior
-
-What did it actually do?
-
-### Steps to Reproduce
-
-How did you make it do that, and which firmware versions were used (git commit or release version)?
-
-### References
-
-Links to a video, or more info
-
----
-
-## Feature/Enhancement Request
-
-Please describe your use case in as much detail as possible. Background information and detailing what the feature will enable you to do, is especially helpful.
diff --git a/README.md b/README.md
index 374081a..6a954f6 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,11 @@ VEXTREME Vectrex Multicart
We're carrying on and pushing forward the amazing work of [Sprite_tm](http://spritesmods.com/?art=veccart&page=1) and his Extreme Vectrex Multicart. He posted the code (GPLv3 License) and lots of screens of the PCB/initial schematic, but he never released the PCB. It's a great base for an inexpensive and open multicart, for developers and players alike!
+:warning: Please read this NOTICE of Current Development :warning:
+===
+
+**This project is a work in progress, and is not ready for mass production.** Please observe the currently [posted issues](https://github.com/technobly/vextreme/issues) and there may be more lurking that are not yet identified. The hardware and software is evolving. You are free to build any version, contribute and/or follow along. Please note that support of these pre-releases will be very limited and if you embark on an epic adventure to build one or a few, you should feel comfortable with this type of embedded hardware and software development. There will be road bumps, but the journey is half the fun of the destination. When things appear to be stable and we've worked out most of the kinks, we'll change the version to v1.0. Only then is it advisable to mass produce.
+
3D Renders
===
@@ -13,15 +18,16 @@ Video Updates
Be sure to subscribe to my Youtube channel for updates! Here's my [Vectrex playlist](https://www.youtube.com/watch?v=zkJ-z77fJCw&list=PL7MgXfpGKg6CCaIQejZVb5CsTg3-5mHU0&index=1) if you want to stay laser focused on this project.
+VEXTREME Discord Server
+===
+Join the [VEXTREME Discord server](https://discord.gg/VDssGVJ) to chat with us about the development
+
BOM and Parts ordering
===
All the parts are described in [veccart.csv](bom/veccart.csv)
-Also, you can use this [Digi-Key shared cart](https://www.digikey.com/short/pv2qr0) if you're in a hurry. It has will have part references right on the packages for you!
-
-:pencil: Note: The USB-C connector I chose is not available at Digi-Key, check Google for "Korean Hroparts Elec TYPE-C-31-M-12".
-
+Also, you can use this [Digi-Key shared cart](https://www.digikey.com/short/zpdmtp) if you're in a hurry. It has will have part references right on the packages for you!
Ordering PCB's
===
@@ -36,8 +42,9 @@ Building and Flashing STM firmware
### This assumes you have these prerequisits installed:
- Docker
-- dfu-util
+- dfu-util v0.9
- Make
+- Windows will also require these [Zadig instructions](https://github.com/profezzorn/ProffieOS/wiki/zadig)
### Build the stm32-build docker image
```
@@ -66,7 +73,9 @@ Found DFU: [0483:df11] ver=2200, devnum=22, cfg=1, intf=0, path="20-1.4.3", alt=
### Build and flash the STM32 image via dfu-util
```
-code/veccart $ make clean all flash
+code/veccart $ make clean all flash USE_HW=v0.3
+
+// NOTE: Use v0.2 above if you have v0.2 HW, or you may use v0.3 if you make the proper mods to your board. See "Modifying v0.2 to v0.3"
// You should end up with something like this
@@ -94,6 +103,7 @@ code/multicart $ make docker-build
- Name: VEXTREME
- Format: MS-DOS (FAT)
- Scheme: Master Boot Record
+ - 512 byte page size
- Be patient, it's slow! Don't worry, copying binaries later will be fast!!
@@ -114,6 +124,16 @@ code/multicart $ make copy
asm6809 -B -o multicart.bin multicart.asm
```
+Modifying v0.2 to v0.3
+===
+
+
+
+- To get the new reset feature of v0.3, as of v0.24 software you will need to jumper V-OE pin 12 of the cart fingers (or U3 pin 9) to STM32 pin 29 (PB10). This may change in the future, don't sell your soldering iron!
+- The wire mod above also allows you to play Animaction on VEXTREME!
+- More TBD
+
+
Adding Vectrex Game ROMs (Binaries)
===
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..c419263
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-cayman
\ No newline at end of file
diff --git a/code/ci/release.sh b/code/ci/release.sh
new file mode 100755
index 0000000..83838ee
--- /dev/null
+++ b/code/ci/release.sh
@@ -0,0 +1,91 @@
+#!/bin/bash
+
+# Usage:
+# $ USE_SW= ./release.sh
+# Example: USE_SW=v0.24 ./release.sh
+
+# we are going for the 3 fingered claw approach (try )
+yell() { echo "$0: $*" >&2; }
+die() { yell "$*"; fail; exit 111; }
+try() { "$@" || die "cannot $*"; }
+
+GRN="\033[32m"
+RED="\033[31m"
+NOC="\033[0m"
+
+# Execute in ci/ folder
+STM32_DIR=../veccart
+MENU_DIR=../multicart
+RELEASE_DIR=../releases
+SOURCE_RELEASE=v0.23
+SOURCE_RELEASE_URL=https://github.com/technobly/VEXTREME/releases/download/v0.23/VEXTREME-v0.23.zip
+: ${USE_SW:?"REQUIRED! Usage: USE_VER=v0.24 ./release.sh"}
+
+main() {
+ try rm -rf $RELEASE_DIR/$USE_SW
+ try rm -f $RELEASE_DIR/vextreme-$USE_SW.zip
+ if [ ! -d "$RELEASE_DIR/$SOURCE_RELEASE" ]; then
+ if [ ! -e "$RELEASE_DIR/VEXTREME-v0.23.zip" ]; then
+ cd $RELEASE_DIR
+ curl -L "$SOURCE_RELEASE_URL" > "VEXTREME-v0.23.zip"
+ unzip VEXTREME-v0.23.zip
+ fi
+ fi
+
+ USE_HW=v0.2
+ try cd $STM32_DIR
+ try make clean all USE_HW=$USE_HW -s #&> /dev/null
+ try mkdir -p $RELEASE_DIR
+ try mkdir -p $RELEASE_DIR/$USE_SW
+ try mkdir -p $RELEASE_DIR/$USE_SW/stm32
+ try mkdir -p $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW
+ try cp veccart.bin $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.bin
+ try cp veccart.elf $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.elf
+ try cp veccart.hex $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.hex
+ try cp veccart.list $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.list
+
+ USE_HW=v0.3
+ try make clean all -s USE_HW=$USE_HW #&> /dev/null
+ try mkdir -p $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW
+ try cp veccart.bin $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.bin
+ try cp veccart.elf $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.elf
+ try cp veccart.hex $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.hex
+ try cp veccart.list $RELEASE_DIR/$USE_SW/stm32/hardware-$USE_HW/stm32-sw.$USE_SW.hw.$USE_HW.list
+
+ try cd $MENU_DIR
+ try make clean all #&> /dev/null
+ try mkdir -p $RELEASE_DIR/$USE_SW/VEXTREME
+ try cp multicart.bin $RELEASE_DIR/$USE_SW/VEXTREME/multicart.bin
+ try cp $RELEASE_DIR/$SOURCE_RELEASE/VEXTREME/vec.bin $RELEASE_DIR/$USE_SW/VEXTREME/vec.bin
+ try cp -R $RELEASE_DIR/$SOURCE_RELEASE/VEXTREME/roms $RELEASE_DIR/$USE_SW/VEXTREME/roms
+
+ try cd $RELEASE_DIR
+ try zip -vr VEXTREME-$USE_SW.zip $USE_SW -x "*.DS_Store" #&> /dev/null
+
+ pass
+ return 0;
+}
+
+pass() {
+ echo -e ${GRN}' 8888888b. d8888 .d8888b. .d8888b. '${NOC}
+ echo -e ${GRN}' 888 Y88b d88888 d88P Y88b d88P Y88b '${NOC}
+ echo -e ${GRN}' 888 888 d88P888 Y88b. Y88b. '${NOC}
+ echo -e ${GRN}' 888 d88P d88P 888 "Y888b. "Y888b. '${NOC}
+ echo -e ${GRN}' 8888888P" d88P 888 "Y88b. "Y88b. '${NOC}
+ echo -e ${GRN}' 888 d88P 888 "888 "888 '${NOC}
+ echo -e ${GRN}' 888 d8888888888 Y88b d88P Y88b d88P '${NOC}
+ echo -e ${GRN}' 888 d88P 888 "Y8888P" "Y8888P" '${NOC}
+}
+
+fail() {
+ echo -e ${RED}' 8888888888 d8888 8888888 888 888 '${NOC}
+ echo -e ${RED}' 888 d88888 888 888 888 '${NOC}
+ echo -e ${RED}' 888 d88P888 888 888 888 '${NOC}
+ echo -e ${RED}' 8888888 d88P 888 888 888 888 '${NOC}
+ echo -e ${RED}' 888 d88P 888 888 888 888 '${NOC}
+ echo -e ${RED}' 888 d88P 888 888 888 Y8P '${NOC}
+ echo -e ${RED}' 888 d8888888888 888 888 " '${NOC}
+ echo -e ${RED}' 888 d88P 888 8888888 88888888 888 '${NOC}
+}
+
+main
diff --git a/code/dev/devmode/.gitignore b/code/dev/devmode/.gitignore
new file mode 100644
index 0000000..7e5922f
--- /dev/null
+++ b/code/dev/devmode/.gitignore
@@ -0,0 +1,2 @@
+*.bin
+*.lst
diff --git a/code/dev/devmode/Dockerfile b/code/dev/devmode/Dockerfile
new file mode 100644
index 0000000..8fb7d89
--- /dev/null
+++ b/code/dev/devmode/Dockerfile
@@ -0,0 +1,15 @@
+FROM alpine:3.9.4
+
+RUN apk add --no-cache --virtual .build-deps build-base wget \
+ && wget -O asm6809.tar.gz http://www.6809.org.uk/asm6809/dl/asm6809-2.12.tar.gz \
+ && tar -xvf asm6809.tar.gz -C /tmp \
+ && rm asm6809.tar.gz \
+ && cd /tmp/asm6809-2.12 \
+ && ./configure \
+ && make \
+ && make install \
+ && rm -rf /tmp/asm6809-2.12 \
+ && apk del .build-deps \
+ && apk add --no-cache make
+
+WORKDIR /build
diff --git a/code/dev/devmode/Makefile b/code/dev/devmode/Makefile
new file mode 100644
index 0000000..7d6926d
--- /dev/null
+++ b/code/dev/devmode/Makefile
@@ -0,0 +1,24 @@
+# This uses asm6809 from
+# http://www.6809.org.uk/asm6809/dl/2.3/
+AS = asm6809
+
+default: docker
+
+docker-build: Dockerfile
+ docker build . -t asm6809
+
+all: docker
+
+docker:
+ docker run --rm -v `pwd`:/build -u `id -u ${USER}`:`id -g ${USER}` asm6809 make devmode.bin
+
+devmode.bin: devmode.asm
+ $(AS) -B -o $@ $^
+
+clean:
+ rm -f devmode.bin
+
+copy: led-test.bin
+ sudo mount /dev/sde1 /mnt
+ sudo cp devmode.bin /mnt
+ sudo umount /mnt
diff --git a/code/dev/devmode/devmode.asm b/code/dev/devmode/devmode.asm
new file mode 100755
index 0000000..9a096ba
--- /dev/null
+++ b/code/dev/devmode/devmode.asm
@@ -0,0 +1,366 @@
+; Copyright (C) 2020 Brett Walach
+; --------------------------------------------------------------------------
+; USB Developer Mode
+;
+; * This application demonstrates USB Developer Mode
+; * It will enter Developer Mode automatically right now,
+; * and it's up to you to load this app from a call to RPC ID 11, arg 0
+; * See README.md for more details
+;
+;
+; Original header follows:
+; --------------------------------------------------------------------------
+; Copyright (C) 2015 Jeroen Domburg
+;
+; This library is free software: you can redistribute it and/or modify
+; it under the terms of the GNU Lesser General Public License as published by
+; the Free Software Foundation, either version 3 of the License, or
+; (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public License
+; along with this library. If not, see .
+;
+ include "vectrex.i"
+;***************************************************************************
+; DEFINES SECTION
+;***************************************************************************
+DEVMODE_TEXT_SIZE equ #$F660
+usb_dev_addr equ $ff0
+vusb_addr equ $ffb
+yield_byte1 equ $ffc
+yield_byte2 equ $ffd
+;***************************************************************************
+; USER RAM SECTION ($C880-$CBEA)
+;***************************************************************************
+ bss
+ org $c880
+user_ram
+
+y_pos rmb 1
+x_pos rmb 1
+x_pos_cnt rmb 1
+y_dir rmb 1
+pressed_exit rmb 1
+pressed_run rmb 1
+pressed_none rmb 1
+ramdisk_once rmb 1
+vusb_once rmb 1
+
+last_user_ram rmb 1 ; unused in code
+;***************************************************************************
+; SYSTEM AREA of USER RAM SECTION ($CB00-$CBEA)
+;***************************************************************************
+rpcfn3 equ last_user_ram
+;***************************************************************************
+; HEADER SECTION
+;***************************************************************************
+ code
+ org 0
+ fcb "g GCE ", $80 ; 'g' is copyright sign
+ fdb mute1 ; no sound
+ fcb $F6, $60, $20, -$40
+ fcb "DEV MODE",$80 ; some game information ending with $80
+ fcb 0 ; end of game header
+;***************************************************************************
+; PROGRAM STARTS HERE
+;***************************************************************************
+main
+ jsr rpccopystart3 ; go copy the rpcfn into RAM
+; init dev mode vars
+ lda #0
+ sta y_dir
+ sta y_pos
+ sta x_pos_cnt
+ sta ramdisk_once
+ sta vusb_once
+ sta pressed_exit
+ sta pressed_run
+ sta pressed_none
+ lda #$90
+ sta x_pos
+; init joystic
+ lda #0
+ sta Vec_Joy_Mux_1_X ; 0 disables Joy 1 X
+ sta Vec_Joy_Mux_1_Y ; 0 disables Joy 1 Y
+ sta Vec_Joy_Mux_1_Y ; 0 disables Joy 1 Y
+ sta Vec_Joy_Mux_2_X ; 0 disables Joy 2 X & Y
+ sta Vec_Joy_Mux_2_Y ; | saves a few hundred cycles
+
+;***************************************************************************
+; MAIN LOOP
+;***************************************************************************
+loop
+; Recal video stuff
+ jsr Wait_Recal
+ jsr Intensity_7F
+
+loaddevmode
+ ldd #DEVMODE_TEXT_SIZE ; Set Dev Mode Text Size
+ std Vec_Text_HW ; |
+ lda #5 ; Load Dev Mode
+ sta $7ffe ; |
+ lda #10 ; rpc call initiate VUSB check
+ jmp rpcfn3 ; Goodbye, we won't see you again hopefully!
+
+ jmp loop ; Should never get here
+
+;***************************************************************************
+; RPC function for DEV MODE operation - will be copied to RAM - call as rpcfn3
+;***************************************************************************
+rpcfndat3
+ sta $7fff
+rpcwaitloop3
+ jsr Wait_Recal
+ lda Vec_Loop_Count+1 ; Load the MSB of the counter
+ adda #$30 ; Give it a bit of offset for first start
+ ; so we can see the text initially.
+ sta y_pos ; save it for text movement
+ lda y_pos
+flip_start
+ cmpa #$7f ; y_pos needs to be in reg a
+ beq direction_flip
+ bra no_flip
+
+direction_flip
+ inc y_dir ; used with bita below
+ lda x_pos_cnt ; 0 - 15 counter
+ inca ; |
+ anda #$f ; |
+ sta x_pos_cnt ; |
+no_flip
+move_x_a_bit
+ lda x_pos_cnt
+ ldx #rpcfn3+(y_pos_vals-rpcfndat3) ; relative to ram
+ lda a,x
+ sta x_pos
+up_or_down
+ lda y_dir
+ bita #1
+ beq going_up
+going_down
+ lda #$ff
+ suba y_pos
+ sta y_pos
+going_up
+breath_with_me
+ lda y_pos ; reload y_pos
+ lsra ; count / 16 to slow down fade
+ lsra ; |
+ lsra ; |
+ lsra ; |
+ anda #$f ; Mask off the value for indexing 16 vals
+ ldx #rpcfn3+(intensity_vals-rpcfndat3) ; relative to ram
+ lda a,x
+ suba #$20
+ jsr Intensity_a
+read_buttons
+ ;clr Vec_Btn_State
+ ;jsr Read_Btns_Mask
+ jsr Read_Btns
+ anda #$0F
+ cmpa #$01
+ beq do_button1
+ cmpa #$08
+ beq do_button4
+no_button
+ lda #1
+ sta pressed_none
+ bra button_exit
+
+do_button1
+ lda #1
+ sta pressed_exit
+ sta ramdisk_once ; short circuit these so we start looping
+ sta vusb_once ; |
+ lda #0
+ sta pressed_none
+ bra button_exit
+
+do_button4
+ lda #1
+ sta pressed_run
+ sta ramdisk_once ; short circuit these so we start looping
+ sta vusb_once ; |
+ lda #0
+ sta pressed_none
+button_exit
+check_vusb
+ lda vusb_once ; Have we completed vusb checks?
+ cmpa #1 ; |
+ beq start_ramdisk ; | Yes, proceed to starting the ramdisk
+ lda vusb_addr ; | NO, read VUSB value ($99:high=USB, $66:low=NO-USB,
+ cmpa #$66 ; any other val and the RPC hasn't returned yet)
+ lbeq rpcreadvusb ; keep reading VUSB
+ cmpa #$99 ; Yes, we have VUSB!
+ beq finish_vusb ; | finish vusb checks
+ jmp rpcreadvusb1 ; Else, unknown USB state
+
+finish_vusb
+ inc vusb_once
+start_ramdisk
+ lda ramdisk_once ; Have we loaded the ramdisk yet?
+ cmpa #1 ; |
+ beq ramdisk_loaded ; | Yes, just loop now
+ jmp rpcdevwait ; | No, let's get this ramdisk party started
+
+ramdisk_loaded
+ lda pressed_run
+ cmpa #1
+ beq skip_cart_msg
+ lda pressed_exit
+ cmpa #1
+ beq skip_cart_msg
+
+switch_to_help_msg
+ lda y_dir ; unrolled print_sub, because vec was crashing
+ bita #1
+ beq load_cart_msg
+ ldu #rpcfn3+(help_str-rpcfndat3) ; relative to ram
+ bra show_help_msg
+load_cart_msg
+ ldu #rpcfn3+(usbdevmode_str-rpcfndat3) ; needs to be relative to where it's copied in ram
+show_help_msg
+ lda y_pos
+ ldb x_pos
+ jsr Print_Str_d
+skip_cart_msg
+
+ramdisk_yielded
+ lda yield_byte1 ; Every 1s, the ramdisk will yield
+ cmpa # 'v' ; to the Vectrex
+ bne load_cart ; so we can either let it know to
+ lda yield_byte2 ; keep ramdisk waiting / exit or run
+ cmpa # 'x' ; This byte sequence let's us know to
+ bne load_cart ; Give 1 of the 3 answers in response
+act_on_buttons
+ lda pressed_none
+ cmpa #1
+ lbne rpcwaitloop3
+ lda pressed_run
+ cmpa #1
+ beq rpcdevrun
+ lda pressed_exit
+ cmpa #1
+ beq rpcdevexit
+rpcdevwait
+ lda #1
+ sta ramdisk_once
+ lda #0
+ sta $7ffe
+ lda #10
+ jmp rpcfn3
+
+rpcdevrun
+ lda #4
+ sta $7ffe
+ lda #10
+ jmp rpcfn3
+
+rpcdevexit
+ lda #1
+ sta $7ffe
+ lda #10
+ jmp rpcfn3
+
+load_cart
+ lda $0
+ cmpa # 'g'
+ lbne rpcwaitloop3
+ lda $1
+ cmpa # ' '
+ lbne rpcwaitloop3
+
+ jmp $f000 ; warm boot address to reset the cart.bin that was just loaded
+
+rpcreadvusb
+ ldu #rpcfn3+(pluginusb_str-rpcfndat3) ; relative to ram
+ jsr print_sub
+ lda y_pos
+ anda #$10
+ cmpa #$10
+ bne rpcreadvusb1_exit ; only read the VUSB every 320ms, no need to spam it
+ lda #5
+ sta $7ffe
+ lda #10
+ jmp rpcfn3
+
+rpcreadvusb_exit
+ jmp rpcwaitloop3
+
+rpcreadvusb1
+ ldu #rpcfn3+(unknownusb_str-rpcfndat3) ; relative to ram
+ jsr print_sub
+ lda y_pos
+ anda #$10
+ cmpa #$10
+ bne rpcreadvusb1_exit ; only read the VUSB every 320ms, no need to spam it
+ lda #5
+ sta $7ffe
+ lda #10
+ jmp rpcfn3
+
+rpcreadvusb1_exit
+ jmp rpcwaitloop3
+
+; ====== RAM SUBROUTINES ======
+print_sub
+ lda y_dir
+ bita #1
+ beq print_exit
+ ldu #rpcfn3+(help_str-rpcfndat3) ; relative to ram
+print_exit
+ lda y_pos
+ ldb x_pos
+ jsr Print_Str_d
+ rts
+
+; ====== RAM DATA ======
+usbdevmode_str
+ fcb " LOAD CART.BIN", $80
+pluginusb_str
+ fcb " PLUG IN USB", $80
+unknownusb_str
+ fcb " UNKNOWN USB", $80
+help_str
+ fcb "1: EXIT 4: RUN", $80
+intensity_vals
+ fcb $78,$68,$58,$48,$38,$28,$18,$18,$18,$18,$28,$38,$48,$58,$68,$78
+y_pos_vals
+ fcb $90,$80,$98,$8E,$8A,$9A,$88,$9C,$94,$8C,$92,$96,$86,$84,$82,$9D
+rpcfndatend3
+;***************************************************************************
+; RPC FUNCTION END
+;***************************************************************************
+;***************************************************************************
+; SUBROUTINE SECTION
+;***************************************************************************
+;***************************************************************************
+; RPC3 COPY START - copy DEV MODE function to Vectrex USER RAM
+;***************************************************************************
+rpccopystart3
+ ldx #rpcfndat3
+ ldy #rpcfn3
+rpccopyloop3
+ lda ,x+
+ sta ,y+
+ cmpx #rpcfndatend3
+ bne rpccopyloop3
+ rts
+;***************************************************************************
+; RPC3 COPY END
+;***************************************************************************
+;***************************************************************************
+; DATA SECTION
+;***************************************************************************
+VIBENL fcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+FADE14 fdb $0000,$2DDD,$DDDD,$B000,0,0,0,0
+; No sound
+mute1
+ fdb FADE14
+ fdb VIBENL
+ fcb 0,$80
diff --git a/code/dev/devmode/readme.md b/code/dev/devmode/readme.md
new file mode 100644
index 0000000..61b9e4d
--- /dev/null
+++ b/code/dev/devmode/readme.md
@@ -0,0 +1,23 @@
+Developer Mode (Standalone)
+===
+
+This is a dedicated standalone app for the feature Developer Mode that's built into VEXTREME's menu.
+
+It allows you to enable Developer Mode from your application, and this app is completely silent (no start-up tune)
+
+To use this app, you can place it in the root of VEXTREME/devmode.bin
+
+and launch it with an RPC ID 11 call with argument 0
+
+```
+loadapp
+ lda #0 ; Load system app (hard coded to 0 for now: dev mode)
+ sta $7ffe ; |
+ lda #11 ; rpc call to load a system rom
+ ldx #$f000 ; load x with return jmp address
+ jmp rpcfn2 ; Goodbye, we won't see you again hopefully!
+```
+
+NOTE: There is one teeny tiny problem though... this is all nice to document for posterity but it won't actually work. Sure the app will launch, but Developer Mode can't function properly when the mode is loaded in cartData[] ... it needs to be in menuData[], womp womp. There are special addresses that the mode looks at that the STM32 code updates, and this app won't ever see those get updated because they are happening over in menuData[] and this app is running from cartData[].
+
+Anyhoo it's the thought that counts... if you come up with a solution let's hear about it in the Discord server ;-)
diff --git a/code/dev/devmode/vectrex.i b/code/dev/devmode/vectrex.i
new file mode 100644
index 0000000..d2b3c61
--- /dev/null
+++ b/code/dev/devmode/vectrex.i
@@ -0,0 +1,318 @@
+; this file is part of vectrex frogger, written by Christopher Salomon
+; in March-April 1998
+; all stuff contained here is public domain (?)
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; this file contains includes for vectrex BIOS functions and variables ;
+; it was written by Bruce Tomlin, slighte changed by Christopher Salomon ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+Vec_Snd_Shadow equ $C800 ;Shadow of sound chip registers (15 bytes)
+Vec_Btn_State equ $C80F ;Current state of all joystick buttons
+Vec_Prev_Btns equ $C810 ;Previous state of all joystick buttons
+Vec_Buttons equ $C811 ;Current toggle state of all buttons
+Vec_Button_1_1 equ $C812 ;Current toggle state of stick 1 button 1
+Vec_Button_1_2 equ $C813 ;Current toggle state of stick 1 button 2
+Vec_Button_1_3 equ $C814 ;Current toggle state of stick 1 button 3
+Vec_Button_1_4 equ $C815 ;Current toggle state of stick 1 button 4
+Vec_Button_2_1 equ $C816 ;Current toggle state of stick 2 button 1
+Vec_Button_2_2 equ $C817 ;Current toggle state of stick 2 button 2
+Vec_Button_2_3 equ $C818 ;Current toggle state of stick 2 button 3
+Vec_Button_2_4 equ $C819 ;Current toggle state of stick 2 button 4
+Vec_Joy_Resltn equ $C81A ;Joystick A/D resolution ($80=min $00=max)
+Vec_Joy_1_X equ $C81B ;Joystick 1 left/right
+Vec_Joy_1_Y equ $C81C ;Joystick 1 up/down
+Vec_Joy_2_X equ $C81D ;Joystick 2 left/right
+Vec_Joy_2_Y equ $C81E ;Joystick 2 up/down
+Vec_Joy_Mux equ $C81F ;Joystick enable/mux flags (4 bytes)
+Vec_Joy_Mux_1_X equ $C81F ;Joystick 1 X enable/mux flag (=1)
+Vec_Joy_Mux_1_Y equ $C820 ;Joystick 1 Y enable/mux flag (=3)
+Vec_Joy_Mux_2_X equ $C821 ;Joystick 2 X enable/mux flag (=5)
+Vec_Joy_Mux_2_Y equ $C822 ;Joystick 2 Y enable/mux flag (=7)
+Vec_Misc_Count equ $C823 ;Misc counter/flag byte, zero when not in use
+Vec_0Ref_Enable equ $C824 ;Check0Ref enable flag
+Vec_Loop_Count equ $C825 ;Loop counter word (incremented in Wait_Recal)
+Vec_Brightness equ $C827 ;Default brightness
+Vec_Dot_Dwell equ $C828 ;Dot dwell time?
+Vec_Pattern equ $C829 ;Dot pattern (bits)
+Vec_Text_HW equ $C82A ;Default text height and width
+Vec_Text_Height equ $C82A ;Default text height
+Vec_Text_Width equ $C82B ;Default text width
+Vec_Str_Ptr equ $C82C ;Temporary string pointer for Print_Str
+Vec_Counters equ $C82E ;Six bytes of counters
+Vec_Counter_1 equ $C82E ;First counter byte
+Vec_Counter_2 equ $C82F ;Second counter byte
+Vec_Counter_3 equ $C830 ;Third counter byte
+Vec_Counter_4 equ $C831 ;Fourth counter byte
+Vec_Counter_5 equ $C832 ;Fifth counter byte
+Vec_Counter_6 equ $C833 ;Sixth counter byte
+Vec_RiseRun_Tmp equ $C834 ;Temp storage word for rise/run
+Vec_Angle equ $C836 ;Angle for rise/run and rotation calculations
+Vec_Run_Index equ $C837 ;Index pair for run
+;* $C839 ;Pointer to copyright string during startup
+Vec_Rise_Index equ $C839 ;Index pair for rise
+;* $C83B ;High score cold-start flag (=0 if valid)
+Vec_RiseRun_Len equ $C83B ;length for rise/run
+;* $C83C ;temp byte
+Vec_Rfrsh equ $C83D ;Refresh time (divided by 1.5MHz)
+Vec_Rfrsh_lo equ $C83D ;Refresh time low byte
+Vec_Rfrsh_hi equ $C83E ;Refresh time high byte
+Vec_Music_Work equ $C83F ;Music work buffer (14 bytes, backwards?)
+Vec_Music_Wk_A equ $C842 ; register 10
+;* $C843 ; register 9
+;* $C844 ; register 8
+Vec_Music_Wk_7 equ $C845 ; register 7
+Vec_Music_Wk_6 equ $C846 ; register 6
+Vec_Music_Wk_5 equ $C847 ; register 5
+;* $C848 ; register 4
+;* $C849 ; register 3
+;* $C84A ; register 2
+Vec_Music_Wk_1 equ $C84B ; register 1
+;* $C84C ; register 0
+Vec_Freq_Table equ $C84D ;Pointer to note-to-frequency table (normally $FC8D)
+Vec_Max_Players equ $C84F ;Maximum number of players for Select_Game
+Vec_Max_Games equ $C850 ;Maximum number of games for Select_Game
+Vec_ADSR_Table equ $C84F ;Storage for first music header word (ADSR table)
+Vec_Twang_Table equ $C851 ;Storage for second music header word ('twang' table)
+Vec_Music_Ptr equ $C853 ;Music data pointer
+Vec_Expl_ChanA equ $C853 ;Used by Explosion_Snd - bit for first channel used?
+Vec_Expl_Chans equ $C854 ;Used by Explosion_Snd - bits for all channels used?
+Vec_Music_Chan equ $C855 ;Current sound channel number for Init_Music
+Vec_Music_Flag equ $C856 ;Music active flag ($00=off $01=start $80=on)
+Vec_Duration equ $C857 ;Duration counter for Init_Music
+Vec_Music_Twang equ $C858 ;3 word 'twang' table used by Init_Music
+Vec_Expl_1 equ $C858 ;Four bytes copied from Explosion_Snd's U-reg parameters
+Vec_Expl_2 equ $C859 ;
+Vec_Expl_3 equ $C85A ;
+Vec_Expl_4 equ $C85B ;
+Vec_Expl_Chan equ $C85C ;Used by Explosion_Snd - channel number in use?
+Vec_Expl_ChanB equ $C85D ;Used by Explosion_Snd - bit for second channel used?
+Vec_ADSR_Timers equ $C85E ;ADSR timers for each sound channel (3 bytes)
+Vec_Music_Freq equ $C861 ;Storage for base frequency of each channel (3 words)
+;* $C85E ;Scratch 'score' storage for Display_Option (7 bytes)
+Vec_Expl_Flag equ $C867 ;Explosion_Snd initialization flag?
+;* $C868...$C876 ;Unused?
+Vec_Expl_Timer equ $C877 ;Used by Explosion_Snd
+;* $C878 ;Unused?
+Vec_Num_Players equ $C879 ;Number of players selected in Select_Game
+Vec_Num_Game equ $C87A ;Game number selected in Select_Game
+Vec_Seed_Ptr equ $C87B ;Pointer to 3-byte random number seed (=$C87D)
+Vec_Random_Seed equ $C87D ;Default 3-byte random number seed
+ ;
+;* $C880 - $CBEA is user RAM ;
+ ;
+Vec_Default_Stk equ $CBEA ;Default top-of-stack
+Vec_High_Score equ $CBEB ;High score storage (7 bytes)
+Vec_SWI3_Vector equ $CBF2 ;SWI2/SWI3 interrupt vector (3 bytes)
+Vec_SWI2_Vector equ $CBF2 ;SWI2/SWI3 interrupt vector (3 bytes)
+Vec_FIRQ_Vector equ $CBF5 ;FIRQ interrupt vector (3 bytes)
+Vec_IRQ_Vector equ $CBF8 ;IRQ interrupt vector (3 bytes)
+Vec_SWI_Vector equ $CBFB ;SWI/NMI interrupt vector (3 bytes)
+Vec_NMI_Vector equ $CBFB ;SWI/NMI interrupt vector (3 bytes)
+Vec_Cold_Flag equ $CBFE ;Cold start flag (warm start if = $7321)
+ ;
+VIA_port_b equ $D000 ;VIA port B data I/O register
+;* 0 sample/hold (0=enable mux 1=disable mux)
+;* 1 mux sel 0
+;* 2 mux sel 1
+;* 3 sound BC1
+;* 4 sound BDIR
+;* 5 comparator input
+;* 6 external device (slot pin 35) initialized to input
+;* 7 /RAMP
+VIA_port_a equ $D001 ;VIA port A data I/O register (handshaking)
+VIA_DDR_b equ $D002 ;VIA port B data direction register (0=input 1=output)
+VIA_DDR_a equ $D003 ;VIA port A data direction register (0=input 1=output)
+VIA_t1_cnt_lo equ $D004 ;VIA timer 1 count register lo (scale factor)
+VIA_t1_cnt_hi equ $D005 ;VIA timer 1 count register hi
+VIA_t1_lch_lo equ $D006 ;VIA timer 1 latch register lo
+VIA_t1_lch_hi equ $D007 ;VIA timer 1 latch register hi
+VIA_t2_lo equ $D008 ;VIA timer 2 count/latch register lo (refresh)
+VIA_t2_hi equ $D009 ;VIA timer 2 count/latch register hi
+VIA_shift_reg equ $D00A ;VIA shift register
+VIA_aux_cntl equ $D00B ;VIA auxiliary control register
+;* 0 PA latch enable
+;* 1 PB latch enable
+;* 2 \ 110=output to CB2 under control of phase 2 clock
+;* 3 > shift register control (110 is the only mode used by the Vectrex ROM)
+;* 4 /
+;* 5 0=t2 one shot 1=t2 free running
+;* 6 0=t1 one shot 1=t1 free running
+;* 7 0=t1 disable PB7 output 1=t1 enable PB7 output
+VIA_cntl equ $D00C ;VIA control register
+;* 0 CA1 control CA1 -> SW7 0=IRQ on low 1=IRQ on high
+;* 1 \
+;* 2 > CA2 control CA2 -> /ZERO 110=low 111=high
+;* 3 /
+;* 4 CB1 control CB1 -> NC 0=IRQ on low 1=IRQ on high
+;* 5 \
+;* 6 > CB2 control CB2 -> /BLANK 110=low 111=high
+;* 7 /
+VIA_int_flags equ $D00D ;VIA interrupt flags register
+;* bit cleared by
+;* 0 CA2 interrupt flag reading or writing port A I/O
+;* 1 CA1 interrupt flag reading or writing port A I/O
+;* 2 shift register interrupt flag reading or writing shift register
+;* 3 CB2 interrupt flag reading or writing port B I/O
+;* 4 CB1 interrupt flag reading or writing port A I/O
+;* 5 timer 2 interrupt flag read t2 low or write t2 high
+;* 6 timer 1 interrupt flag read t1 count low or write t1 high
+;* 7 IRQ status flag write logic 0 to IER or IFR bit
+VIA_int_enable equ $D00E ;VIA interrupt enable register
+;* 0 CA2 interrupt enable
+;* 1 CA1 interrupt enable
+;* 2 shift register interrupt enable
+;* 3 CB2 interrupt enable
+;* 4 CB1 interrupt enable
+;* 5 timer 2 interrupt enable
+;* 6 timer 1 interrupt enable
+;* 7 IER set/clear control
+VIA_port_a_nohs equ $D00F ;VIA port A data I/O register (no handshaking)
+
+Cold_Start equ $F000 ;
+Warm_Start equ $F06C ;
+Init_VIA equ $F14C ;
+Init_OS_RAM equ $F164 ;
+Init_OS equ $F18B ;
+Wait_Recal equ $F192 ;
+Set_Refresh equ $F1A2 ;
+DP_to_D0 equ $F1AA ;
+DP_to_C8 equ $F1AF ;
+Read_Btns_Mask equ $F1B4 ;
+Read_Btns equ $F1BA ;
+Joy_Analog equ $F1F5 ;
+Joy_Digital equ $F1F8 ;
+Sound_Byte equ $F256 ;
+Sound_Byte_x equ $F259 ;
+Sound_Byte_raw equ $F25B ;
+Clear_Sound equ $F272 ;
+Sound_Bytes equ $F27D ;
+Sound_Bytes_x equ $F284 ;
+Do_Sound equ $F289 ;
+Do_Sound_x equ $F28C ;
+Intensity_1F equ $F29D ;
+Intensity_3F equ $F2A1 ;
+Intensity_5F equ $F2A5 ;
+Intensity_7F equ $F2A9 ;
+Intensity_a equ $F2AB ;
+Dot_ix_b equ $F2BE ;
+Dot_ix equ $F2C1 ;
+Dot_d equ $F2C3 ;
+Dot_here equ $F2C5 ;
+Dot_List equ $F2D5 ;
+Dot_List_Reset equ $F2DE ;
+Recalibrate equ $F2E6 ;
+Moveto_x_7F equ $F2F2 ;
+Moveto_d_7F equ $F2FC ;
+Moveto_ix_FF equ $F308 ;
+Moveto_ix_7F equ $F30C ;
+Moveto_ix_a equ $F30E ;
+Moveto_ix equ $F310 ;
+Moveto_d equ $F312 ;
+Reset0Ref_D0 equ $F34A ;
+Check0Ref equ $F34F ;
+Reset0Ref equ $F354 ;
+Reset_Pen equ $F35B ;
+Reset0Int equ $F36B ;
+Print_Str_hwyx equ $F373 ;
+Print_Str_yx equ $F378 ;
+Print_Str_d equ $F37A ;
+Print_List_hw equ $F385 ;
+Print_List equ $F38A ;
+Print_List_chk equ $F38C ;
+Print_Ships_x equ $F391 ;
+Print_Ships equ $F393 ;
+Mov_Draw_VLc_a equ $F3AD ;count y x y x ...
+Mov_Draw_VL_b equ $F3B1 ;y x y x ...
+Mov_Draw_VLcs equ $F3B5 ;count scale y x y x ...
+Mov_Draw_VL_ab equ $F3B7 ;y x y x ...
+Mov_Draw_VL_a equ $F3B9 ;y x y x ...
+Mov_Draw_VL equ $F3BC ;y x y x ...
+Mov_Draw_VL_d equ $F3BE ;y x y x ...
+Draw_VLc equ $F3CE ;count y x y x ...
+Draw_VL_b equ $F3D2 ;y x y x ...
+Draw_VLcs equ $F3D6 ;count scale y x y x ...
+Draw_VL_ab equ $F3D8 ;y x y x ...
+Draw_VL_a equ $F3DA ;y x y x ...
+Draw_VL equ $F3DD ;y x y x ...
+Draw_Line_d equ $F3DF ;y x y x ...
+Draw_VLp_FF equ $F404 ;pattern y x pattern y x ... $01
+Draw_VLp_7F equ $F408 ;pattern y x pattern y x ... $01
+Draw_VLp_scale equ $F40C ;scale pattern y x pattern y x ... $01
+Draw_VLp_b equ $F40E ;pattern y x pattern y x ... $01
+Draw_VLp equ $F410 ;pattern y x pattern y x ... $01
+Draw_Pat_VL_a equ $F434 ;y x y x ...
+Draw_Pat_VL equ $F437 ;y x y x ...
+Draw_Pat_VL_d equ $F439 ;y x y x ...
+Draw_VL_mode equ $F46E ;mode y x mode y x ... $01
+Print_Str equ $F495 ;
+Random_3 equ $F511 ;
+Random equ $F517 ;
+Init_Music_Buf equ $F533 ;
+Clear_x_b equ $F53F ;
+Clear_C8_RAM equ $F542 ;never used by GCE carts?
+Clear_x_256 equ $F545 ;
+Clear_x_d equ $F548 ;
+Clear_x_b_80 equ $F550 ;
+Clear_x_b_a equ $F552 ;
+Dec_3_Counters equ $F55A ;
+Dec_6_Counters equ $F55E ;
+Dec_Counters equ $F563 ;
+Delay_3 equ $F56D ;30 cycles
+Delay_2 equ $F571 ;25 cycles
+Delay_1 equ $F575 ;20 cycles
+Delay_0 equ $F579 ;12 cycles
+Delay_b equ $F57A ;5*B + 10 cycles
+Delay_RTS equ $F57D ;5 cycles
+Bitmask_a equ $F57E ;
+Abs_a_b equ $F584 ;
+Abs_b equ $F58B ;
+Rise_Run_Angle equ $F593 ;
+Get_Rise_Idx equ $F5D9 ;
+Get_Run_Idx equ $F5DB ;
+Get_Rise_Run equ $F5EF ;
+Rise_Run_X equ $F5FF ;
+Rise_Run_Y equ $F601 ;
+Rise_Run_Len equ $F603 ;
+Rot_VL_ab equ $F610 ;
+Rot_VL equ $F616 ;
+Rot_VL_Mode_a equ $F61F ;
+Rot_VL_Mode equ $F62B ;
+Rot_VL_dft equ $F637 ;
+Xform_Run_a equ $F65B ;
+Xform_Run equ $F65D ;
+Xform_Rise_a equ $F661 ;
+Xform_Rise equ $F663 ;
+Move_Mem_a_1 equ $F67F ;
+Move_Mem_a equ $F683 ;
+Init_Music_chk equ $F687 ;
+Init_Music equ $F68D ;
+Init_Music_x equ $F692 ;
+Select_Game equ $F7A9 ;
+Clear_Score equ $F84F ;
+Add_Score_a equ $F85E ;
+Add_Score_d equ $F87C ;
+Strip_Zeros equ $F8B7 ;
+Compare_Score equ $F8C7 ;
+New_High_Score equ $F8D8 ;
+Obj_Will_Hit_u equ $F8E5 ;
+Obj_Will_Hit equ $F8F3 ;
+Obj_Hit equ $F8FF ;
+Explosion_Snd equ $F92E ;
+Draw_Grid_VL equ $FF9F ;
+ ;
+music1 equ $FD0D ;
+music2 equ $FD1D ;
+music3 equ $FD81 ;
+music4 equ $FDD3 ;
+music5 equ $FE38 ;
+music6 equ $FE76 ;
+music7 equ $FEC6 ;
+music8 equ $FEF8 ;
+music9 equ $FF26 ;
+musica equ $FF44 ;
+musicb equ $FF62 ;
+musicc equ $FF7A ;
+musicd equ $FF8F ;
+
+;endif
diff --git a/code/dev/ramwrite/.gitignore b/code/dev/ramwrite/.gitignore
new file mode 100644
index 0000000..7e5922f
--- /dev/null
+++ b/code/dev/ramwrite/.gitignore
@@ -0,0 +1,2 @@
+*.bin
+*.lst
diff --git a/code/dev/ramwrite/Dockerfile b/code/dev/ramwrite/Dockerfile
new file mode 100644
index 0000000..8fb7d89
--- /dev/null
+++ b/code/dev/ramwrite/Dockerfile
@@ -0,0 +1,15 @@
+FROM alpine:3.9.4
+
+RUN apk add --no-cache --virtual .build-deps build-base wget \
+ && wget -O asm6809.tar.gz http://www.6809.org.uk/asm6809/dl/asm6809-2.12.tar.gz \
+ && tar -xvf asm6809.tar.gz -C /tmp \
+ && rm asm6809.tar.gz \
+ && cd /tmp/asm6809-2.12 \
+ && ./configure \
+ && make \
+ && make install \
+ && rm -rf /tmp/asm6809-2.12 \
+ && apk del .build-deps \
+ && apk add --no-cache make
+
+WORKDIR /build
diff --git a/code/dev/ramwrite/Makefile b/code/dev/ramwrite/Makefile
new file mode 100644
index 0000000..70b05a1
--- /dev/null
+++ b/code/dev/ramwrite/Makefile
@@ -0,0 +1,24 @@
+# This uses asm6809 from
+# http://www.6809.org.uk/asm6809/dl/2.3/
+AS = asm6809
+
+default: docker
+
+docker-build: Dockerfile
+ docker build . -t asm6809
+
+all: docker
+
+docker:
+ docker run --rm -v `pwd`:/build -u `id -u ${USER}`:`id -g ${USER}` asm6809 make ramwrite.bin
+
+ramwrite.bin: ramwrite.asm
+ $(AS) -B -o $@ $^
+
+clean:
+ rm -f ramwrite.bin
+
+copy: led-test.bin
+ sudo mount /dev/sde1 /mnt
+ sudo cp ramwrite.bin /mnt
+ sudo umount /mnt
diff --git a/code/dev/ramwrite/animaction-ram-vextreme.txt b/code/dev/ramwrite/animaction-ram-vextreme.txt
new file mode 100755
index 0000000..08bde99
--- /dev/null
+++ b/code/dev/ramwrite/animaction-ram-vextreme.txt
@@ -0,0 +1,68 @@
+DUMP FROM VEXTREME
+
+ADDR | 0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F
+==== | ===============================================================================
+2000 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2020 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2040 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2060 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2080 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+20A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+20C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+20E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2100 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2120 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2140 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2160 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2180 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+21A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+21C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+21E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2200 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2220 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2240 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2260 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2280 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+22A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+22C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+22E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2300 | 0000 0000 0720 0000 3000 3000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2320 | 0000 0000 0000 0000 0078 0010 0900 7800 0309 0078 0020 1500 7800 2015 0000 0000
+2340 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2360 | 0000 0000 0000 0000 001D 0000 0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2380 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+23A0 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+23C0 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+23E0 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2400 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2420 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2440 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2460 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2480 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+24A0 | FFEC 007F 0046 0020 2000 8000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+24C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+24E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2500 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2520 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2540 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2560 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2580 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+25A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+25C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+25E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2600 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2620 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2640 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2660 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2680 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+26A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+26C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+26E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2700 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2720 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2740 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2760 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2780 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+27A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+27C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+27E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
diff --git a/code/dev/ramwrite/animaction-ram-vide.txt b/code/dev/ramwrite/animaction-ram-vide.txt
new file mode 100644
index 0000000..60b6fa2
--- /dev/null
+++ b/code/dev/ramwrite/animaction-ram-vide.txt
@@ -0,0 +1,68 @@
+DUMP FROM VIDE
+
+ADDR | 0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F
+==== | ===============================================================================
+2000 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2020 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2040 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2060 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2080 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+20A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+20C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+20E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2100 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2120 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2140 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2160 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2180 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+21A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+21C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+21E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2200 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2220 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2240 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2260 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2280 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+22A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+22C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+22E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2300 | 0001 0000 0720 0000 3031 3031 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2320 | 0000 0000 0000 0000 0078 C810 094D 78EC 0309 6F78 1420 1588 7838 2015 DA00 0000
+2340 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2360 | 0000 0000 0000 0000 001D E100 0000 00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2380 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+23A0 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+23C0 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+23E0 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2400 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2420 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2440 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2460 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+2480 | FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF
+24A0 | FFEC 387F 4846 5220 2031 8000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+24C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+24E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2500 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2520 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2540 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2560 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2580 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+25A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+25C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+25E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2600 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2620 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2640 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2660 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2680 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+26A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+26C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+26E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2700 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2720 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2740 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2760 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+2780 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+27A0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+27C0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+27E0 | 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
diff --git a/code/dev/ramwrite/ramwrite.asm b/code/dev/ramwrite/ramwrite.asm
new file mode 100755
index 0000000..a44583a
--- /dev/null
+++ b/code/dev/ramwrite/ramwrite.asm
@@ -0,0 +1,300 @@
+; Copyright (C) 2020 Brett Walach
+; --------------------------------------------------------------------------
+; RAM WRITE and DUMP
+;
+; * This application demonstrates USB Developer Mode
+; * It will enter Developer Mode automatically right now,
+; * and it's up to you to load this app from a call to RPC ID 11, arg 0
+; * See README.md for more details
+;
+ include "vectrex.i"
+;***************************************************************************
+; DEFINES SECTION
+;***************************************************************************
+TEXT_SIZE equ #$F850
+;***************************************************************************
+; USER RAM SECTION ($C880-$CBEA)
+;***************************************************************************
+ bss
+ org $c880
+user_ram
+mem_check_pass rmb 1
+temp_mem_a rmb 1
+temp_mem_b rmb 1
+show_check_cnt rmb 1
+show_check_true rmb 1
+
+last_user_ram rmb 1 ; unused in code
+;***************************************************************************
+; SYSTEM AREA of USER RAM SECTION
+;***************************************************************************
+rpcfn1 equ last_user_ram
+;***************************************************************************
+; HEADER SECTION
+;***************************************************************************
+ code
+ org 0
+ fcb "g GCE 2020", $80 ; 'g' is copyright sign
+ fdb mute1 ; no sound
+ fcb $F6, $60, $20, -$40
+ fcb "RAM WRITE",$80 ; some game information ending with $80
+ fcb 0 ; end of game header
+;***************************************************************************
+; PROGRAM STARTS HERE
+;***************************************************************************
+main
+ jsr rpccopystart1 ; go copy the rpcfn1 into RAM
+; init variables
+ lda #0
+ sta show_check_true
+ sta show_check_cnt
+ sta temp_mem_a
+ sta temp_mem_b
+ sta Vec_Joy_Mux_1_X ; 0 disables Joy 1 X
+ sta Vec_Joy_Mux_1_Y ; 0 disables Joy 1 Y
+ sta Vec_Joy_Mux_1_Y ; 0 disables Joy 1 Y
+ sta Vec_Joy_Mux_2_X ; 0 disables Joy 2 X & Y
+ sta Vec_Joy_Mux_2_Y ; | saves a few hundred cycles
+ lda #1
+ sta mem_check_pass
+
+;***************************************************************************
+; MAIN LOOP
+;***************************************************************************
+main_loop
+ jsr Wait_Recal ; Recal and set intensity
+ jsr Intensity_5F ; |
+print_something
+ ldd #TEXT_SIZE ; Set Dev Mode Text Size
+ std Vec_Text_HW ; |
+ ldu #help1_str ; | Print help string 1
+ ldd #$2090 ; |
+ jsr Print_Str_d ; |
+ ldu #help2_str ; | Print help string 2
+ ldd #$0090 ; |
+ jsr Print_Str_d ; |
+
+ lda show_check_true ; Check if we recently PASSED/FAILED
+ cmpa #1 ; |
+ bne print_mem_idle ; No, print idle
+ ; Yes, print PASSED/FAILED
+ lda Vec_Loop_Count+1 ; | after 5.12 seconds
+ anda #$3f
+ suba show_check_cnt ; | Make sure we reset the status
+ beq print_mem_idle ; |
+print_mem_status ; |
+ lda mem_check_pass ; Display PASSED or FAILED
+ cmpa #1 ; |
+ bne print_mem_failed ; |
+print_mem_passed
+ ldu #passed_str ; | passed
+ bra print_mem ; |
+print_mem_failed ; |
+ ldu #failed_str ; | failed
+ bra print_mem ; |
+print_mem_idle ; |
+ clra ; Disable show check
+ sta show_check_true ; |
+ ldu #idle_str ; | idle/reset
+print_mem ; |
+ ldd #$D090 ; |
+ jsr Print_Str_d ; |
+
+read_buttons
+ jsr Read_Btns
+ anda #$0F
+ cmpa #$01
+ beq do_button1
+ cmpa #$02
+ beq do_button2
+ cmpa #$04
+ beq do_button3
+ cmpa #$08
+ beq do_button4
+no_button
+ bra main_loop
+do_button1
+ bra ram_write_inc
+do_button2
+ bra ram_write_inc2
+do_button3
+ bra ram_write_99
+do_button4
+ lbra ram_dump
+button_exit
+
+; ------------------------------------------------------------------------------
+; R/W using STA/LDA (incrementing bytes)
+ram_write_inc
+ ldx #$2000 ; Write RAM $2000 ~ $27ff
+ clra ; with 0x00 ~ 0xff, repeating
+ram_write_loop1 ; |
+ sta ,x+ ; |
+ inca ; |
+ cmpx #$2800 ; |
+ bne ram_write_loop1 ; |
+
+ram_read_inc
+ ldx #$2000 ; Read RAM $2000 ~ $27ff
+ clra ; expect 0x00 ~ 0xff, repeating
+ram_read_loop1 ; |
+ sta temp_mem_a ; |
+ ldb ,x+ ; |
+ cmpb temp_mem_a ; |
+ bne mem_check_failed ; | set failed flag
+ ; |
+ inca ; |
+ cmpx #$2800 ; |
+ bne ram_read_loop1 ; |
+ ; |
+ lda #1 ; | set passed flag
+ sta mem_check_pass ; |
+ jmp start_timer ; All done, let's get loopin'
+
+mem_check_failed
+ lda #0
+ sta mem_check_pass
+ jmp start_timer
+
+; ------------------------------------------------------------------------------
+; R/W using STD/LDD (incrementing bytes)
+ram_write_inc2
+ ldx #$2000 ; Write RAM $2000 ~ $27ff
+ clra ; with 0x0000, 0x0101, ~ 0xffff, repeating
+ clrb ; |
+ram_write_loop3 ; |
+ std ,x++ ; |
+ inca ; |
+ incb ; |
+ cmpx #$2800 ; |
+ bne ram_write_loop3 ; |
+
+ram_read_inc2
+ ldx #$2000 ; Read RAM $2000 ~ $27ff
+ clra ; expect 0x0000, 0x0101, ~ 0xffff, repeating
+ clrb ; |
+ram_read_loop3 ; |
+ sta temp_mem_a ; |
+ stb temp_mem_b ; |
+ ldd ,x++ ; |
+ cmpa temp_mem_a ; |
+ bne mem_check_failed ; | set failed flag
+ cmpb temp_mem_b ; |
+ bne mem_check_failed ; | set failed flag
+ ; |
+ inca ; |
+ incb ; |
+ cmpx #$2800 ; |
+ bne ram_read_loop3 ; |
+ ; |
+ lda #1 ; | set passed flag
+ sta mem_check_pass ; |
+ jmp start_timer ; All done, let's get loopin'
+
+; ------------------------------------------------------------------------------
+; R/W using STA/LDA (single byte)
+ram_write_55
+ ldx #$2000 ; Write RAM $2000 ~ $27ff
+ lda #$55 ; with 0x55, repeating
+ bra ram_write_loop2 ; |
+ram_write_99
+ ldx #$2000 ; Write RAM $2000 ~ $27ff
+ lda #$AA ; with 0xAA, repeating
+ram_write_loop2 ; |
+ sta ,x+ ; |
+ cmpx #$2800 ; |
+ bne ram_write_loop2 ; |
+
+ sta temp_mem_a ; | save reg a
+ ldx #$2000 ; Read RAM $2000 ~ $27ff
+ ; expect 0x55 of 0xAA, repeating
+ram_read_loop2 ; |
+ ldb ,x+ ; |
+ cmpb temp_mem_a ; | do we still match reg a?
+ bne mem_check_failed ; | set failed flag
+ ; |
+ cmpx #$2800 ; |
+ bne ram_read_loop2 ; |
+ ; |
+ lda #1 ; | set passed flag
+ sta mem_check_pass ; |
+ jmp start_timer ; All done, let's get loopin'
+
+start_timer
+ lda Vec_Loop_Count+1 ; Load the MSB of the loop counter
+ anda #$3f
+ sta show_check_cnt ; save snapshot of loop timer
+ lda #1 ; enable show check
+ sta show_check_true ; |
+ jmp main_loop
+
+; ------------------------------------------------------------------------------
+
+ram_dump
+ lda #$1f ; Dump RAM $1fe0 ~ $281f to TX output
+ sta $7ff0 ; |
+ lda #$e0 ; |
+ sta $7ff1 ; |
+ lda #$28 ; |
+ sta $7ff2 ; |
+ lda #$1f ; |
+ sta $7ff3 ; |
+ lda #13 ; |
+ ldx #main_loop ; load x with return jmp address to main_loop
+ jmp rpcfn1 ; Y'all come back now, ya hear?
+
+;***************************************************************************
+; RPC function for generic calls - will be copied to RAM - call as rpcfn1
+;***************************************************************************
+rpcfndat1
+ sta $7fff
+rpcwaitloop1
+ lda $0
+ cmpa # 'g'
+ bne rpcwaitloop1
+ lda $1
+ cmpa # ' '
+ bne rpcwaitloop1
+ jmp ,x ; return address in x
+rpcfndatend1
+;***************************************************************************
+; RPC FUNCTION END
+;***************************************************************************
+;***************************************************************************
+; SUBROUTINE SECTION
+;***************************************************************************
+;***************************************************************************
+; RPC1 COPY START - copy RPC function to Vectrex USER RAM
+;***************************************************************************
+rpccopystart1
+ ldx #rpcfndat1
+ ldy #rpcfn1
+rpccopyloop1
+ lda ,x+
+ sta ,y+
+ cmpx #rpcfndatend1
+ bne rpccopyloop1
+ rts
+;***************************************************************************
+; RPC1 COPY END
+;***************************************************************************
+;***************************************************************************
+; DATA SECTION
+;***************************************************************************
+VIBENL fcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+FADE14 fdb $0000,$2DDD,$DDDD,$B000,0,0,0,0
+; No sound
+mute1
+ fdb FADE14
+ fdb VIBENL
+ fcb 0,$80
+help1_str
+ fcb "1:STA INC 2:STD INC", $80
+help2_str
+ fcb "3:STA $99 4:DUMP", $80
+passed_str
+ fcb " PASSED", $80
+failed_str
+ fcb " FAILED", $80
+idle_str
+ fcb " ------", $80
diff --git a/code/dev/ramwrite/ramwrite.txt b/code/dev/ramwrite/ramwrite.txt
new file mode 100644
index 0000000..ffc97aa
--- /dev/null
+++ b/code/dev/ramwrite/ramwrite.txt
@@ -0,0 +1,288 @@
+Before running the RAM Write app, VEXTREME menu fills the unused cart space with 01
+
+Printing a bit before and after the target address, as requested by the RAM Write app :D
+
+ADDR | 0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F
+==== | ===============================================================================
+1fe0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2000 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2020 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2040 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2060 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2080 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+20a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+20c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+20e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2100 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2120 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2140 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2160 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2180 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+21a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+21c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+21e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2200 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2220 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2240 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2260 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2280 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+22a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+22c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+22e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2300 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2320 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2340 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2360 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2380 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+23a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+23c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+23e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2400 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2420 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2440 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2460 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2480 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+24a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+24c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+24e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2500 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2520 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2540 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2560 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2580 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+25a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+25c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+25e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2600 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2620 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2640 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2660 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2680 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+26a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+26c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+26e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2700 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2720 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2740 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2760 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2780 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+27a0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+27c0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+27e0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2800 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+
+
+RAM Write app can increment RAM just fine!
+
+ADDR | 0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F
+==== | ===============================================================================
+1fe0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2000 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2020 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2040 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2060 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2080 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+20a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+20c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+20e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2100 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2120 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2140 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2160 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2180 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+21a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+21c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+21e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2200 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2220 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2240 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2260 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2280 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+22a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+22c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+22e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2300 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2320 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2340 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2360 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2380 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+23a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+23c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+23e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2400 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2420 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2440 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2460 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2480 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+24a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+24c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+24e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2500 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2520 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2540 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2560 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2580 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+25a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+25c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+25e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2600 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2620 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2640 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2660 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2680 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+26a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+26c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+26e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2700 | 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f 1011 1213 1415 1617 1819 1a1b 1c1d 1e1f
+2720 | 2021 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 3435 3637 3839 3a3b 3c3d 3e3f
+2740 | 4041 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051 5253 5455 5657 5859 5a5b 5c5d 5e5f
+2760 | 6061 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273 7475 7677 7879 7a7b 7c7d 7e7f
+2780 | 8081 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293 9495 9697 9899 9a9b 9c9d 9e9f
+27a0 | a0a1 a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1 b2b3 b4b5 b6b7 b8b9 babb bcbd bebf
+27c0 | c0c1 c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1 d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf
+27e0 | e0e1 e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f7 f8f9 fafb fcfd feff
+2800 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+
+
+RAM Write app fills with 0x55 just fine!
+
+ADDR | 0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F
+==== | ===============================================================================
+1fe0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2000 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2020 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2040 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2060 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2080 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+20a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+20c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+20e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2100 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2120 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2140 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2160 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2180 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+21a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+21c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+21e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2200 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2220 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2240 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2260 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2280 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+22a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+22c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+22e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2300 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2320 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2340 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2360 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2380 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+23a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+23c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+23e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2400 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2420 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2440 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2460 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2480 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+24a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+24c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+24e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2500 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2520 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2540 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2560 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2580 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+25a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+25c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+25e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2600 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2620 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2640 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2660 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2680 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+26a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+26c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+26e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2700 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2720 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2740 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2760 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2780 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+27a0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+27c0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+27e0 | 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555 5555
+2800 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+
+
+RAM Write app fills with 0x99 just fine!
+
+ADDR | 0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F
+==== | ===============================================================================
+1fe0 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
+2000 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2020 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2040 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2060 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2080 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+20a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+20c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+20e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2100 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2120 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2140 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2160 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2180 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+21a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+21c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+21e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2200 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2220 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2240 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2260 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2280 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+22a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+22c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+22e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2300 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2320 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2340 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2360 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2380 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+23a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+23c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+23e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2400 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2420 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2440 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2460 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2480 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+24a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+24c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+24e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2500 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2520 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2540 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2560 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2580 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+25a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+25c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+25e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2600 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2620 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2640 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2660 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2680 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+26a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+26c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+26e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2700 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2720 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2740 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2760 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2780 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+27a0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+27c0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+27e0 | 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999
+2800 | 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101 0101
diff --git a/code/dev/ramwrite/readme.md b/code/dev/ramwrite/readme.md
new file mode 100644
index 0000000..f6e1f74
--- /dev/null
+++ b/code/dev/ramwrite/readme.md
@@ -0,0 +1,29 @@
+RAM Write
+===
+
+Just a little app to help test writes to RAM.
+
+To use this app, you can place it in VEXTREME/roms/DEV/ramwrite.bin
+
+and launch it with an RPC ID 13 call with address specified as follows:
+
+$7ff0 - Start Address High Byte
+$7ff1 - Start Address Low Byte
+$7ff2 - End Address High Byte
+$7ff3 - End Address Low Byte
+
+```
+ram_dump
+ lda #$20 ; Dump RAM $2000 ~ $27ff to TX output
+ sta $7ff0 ; |
+ lda #$00 ; |
+ sta $7ff1 ; |
+ lda #$27 ; |
+ sta $7ff2 ; |
+ lda #$ff ; |
+ sta $7ff3 ; |
+ lda #13 ; |
+ ldx #main_loop ; load x with return jmp address to main_loop
+ jmp rpcfn1 ; Y'all come back now, ya hear?
+```
+
diff --git a/code/dev/ramwrite/vectrex.i b/code/dev/ramwrite/vectrex.i
new file mode 100644
index 0000000..d2b3c61
--- /dev/null
+++ b/code/dev/ramwrite/vectrex.i
@@ -0,0 +1,318 @@
+; this file is part of vectrex frogger, written by Christopher Salomon
+; in March-April 1998
+; all stuff contained here is public domain (?)
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; this file contains includes for vectrex BIOS functions and variables ;
+; it was written by Bruce Tomlin, slighte changed by Christopher Salomon ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+Vec_Snd_Shadow equ $C800 ;Shadow of sound chip registers (15 bytes)
+Vec_Btn_State equ $C80F ;Current state of all joystick buttons
+Vec_Prev_Btns equ $C810 ;Previous state of all joystick buttons
+Vec_Buttons equ $C811 ;Current toggle state of all buttons
+Vec_Button_1_1 equ $C812 ;Current toggle state of stick 1 button 1
+Vec_Button_1_2 equ $C813 ;Current toggle state of stick 1 button 2
+Vec_Button_1_3 equ $C814 ;Current toggle state of stick 1 button 3
+Vec_Button_1_4 equ $C815 ;Current toggle state of stick 1 button 4
+Vec_Button_2_1 equ $C816 ;Current toggle state of stick 2 button 1
+Vec_Button_2_2 equ $C817 ;Current toggle state of stick 2 button 2
+Vec_Button_2_3 equ $C818 ;Current toggle state of stick 2 button 3
+Vec_Button_2_4 equ $C819 ;Current toggle state of stick 2 button 4
+Vec_Joy_Resltn equ $C81A ;Joystick A/D resolution ($80=min $00=max)
+Vec_Joy_1_X equ $C81B ;Joystick 1 left/right
+Vec_Joy_1_Y equ $C81C ;Joystick 1 up/down
+Vec_Joy_2_X equ $C81D ;Joystick 2 left/right
+Vec_Joy_2_Y equ $C81E ;Joystick 2 up/down
+Vec_Joy_Mux equ $C81F ;Joystick enable/mux flags (4 bytes)
+Vec_Joy_Mux_1_X equ $C81F ;Joystick 1 X enable/mux flag (=1)
+Vec_Joy_Mux_1_Y equ $C820 ;Joystick 1 Y enable/mux flag (=3)
+Vec_Joy_Mux_2_X equ $C821 ;Joystick 2 X enable/mux flag (=5)
+Vec_Joy_Mux_2_Y equ $C822 ;Joystick 2 Y enable/mux flag (=7)
+Vec_Misc_Count equ $C823 ;Misc counter/flag byte, zero when not in use
+Vec_0Ref_Enable equ $C824 ;Check0Ref enable flag
+Vec_Loop_Count equ $C825 ;Loop counter word (incremented in Wait_Recal)
+Vec_Brightness equ $C827 ;Default brightness
+Vec_Dot_Dwell equ $C828 ;Dot dwell time?
+Vec_Pattern equ $C829 ;Dot pattern (bits)
+Vec_Text_HW equ $C82A ;Default text height and width
+Vec_Text_Height equ $C82A ;Default text height
+Vec_Text_Width equ $C82B ;Default text width
+Vec_Str_Ptr equ $C82C ;Temporary string pointer for Print_Str
+Vec_Counters equ $C82E ;Six bytes of counters
+Vec_Counter_1 equ $C82E ;First counter byte
+Vec_Counter_2 equ $C82F ;Second counter byte
+Vec_Counter_3 equ $C830 ;Third counter byte
+Vec_Counter_4 equ $C831 ;Fourth counter byte
+Vec_Counter_5 equ $C832 ;Fifth counter byte
+Vec_Counter_6 equ $C833 ;Sixth counter byte
+Vec_RiseRun_Tmp equ $C834 ;Temp storage word for rise/run
+Vec_Angle equ $C836 ;Angle for rise/run and rotation calculations
+Vec_Run_Index equ $C837 ;Index pair for run
+;* $C839 ;Pointer to copyright string during startup
+Vec_Rise_Index equ $C839 ;Index pair for rise
+;* $C83B ;High score cold-start flag (=0 if valid)
+Vec_RiseRun_Len equ $C83B ;length for rise/run
+;* $C83C ;temp byte
+Vec_Rfrsh equ $C83D ;Refresh time (divided by 1.5MHz)
+Vec_Rfrsh_lo equ $C83D ;Refresh time low byte
+Vec_Rfrsh_hi equ $C83E ;Refresh time high byte
+Vec_Music_Work equ $C83F ;Music work buffer (14 bytes, backwards?)
+Vec_Music_Wk_A equ $C842 ; register 10
+;* $C843 ; register 9
+;* $C844 ; register 8
+Vec_Music_Wk_7 equ $C845 ; register 7
+Vec_Music_Wk_6 equ $C846 ; register 6
+Vec_Music_Wk_5 equ $C847 ; register 5
+;* $C848 ; register 4
+;* $C849 ; register 3
+;* $C84A ; register 2
+Vec_Music_Wk_1 equ $C84B ; register 1
+;* $C84C ; register 0
+Vec_Freq_Table equ $C84D ;Pointer to note-to-frequency table (normally $FC8D)
+Vec_Max_Players equ $C84F ;Maximum number of players for Select_Game
+Vec_Max_Games equ $C850 ;Maximum number of games for Select_Game
+Vec_ADSR_Table equ $C84F ;Storage for first music header word (ADSR table)
+Vec_Twang_Table equ $C851 ;Storage for second music header word ('twang' table)
+Vec_Music_Ptr equ $C853 ;Music data pointer
+Vec_Expl_ChanA equ $C853 ;Used by Explosion_Snd - bit for first channel used?
+Vec_Expl_Chans equ $C854 ;Used by Explosion_Snd - bits for all channels used?
+Vec_Music_Chan equ $C855 ;Current sound channel number for Init_Music
+Vec_Music_Flag equ $C856 ;Music active flag ($00=off $01=start $80=on)
+Vec_Duration equ $C857 ;Duration counter for Init_Music
+Vec_Music_Twang equ $C858 ;3 word 'twang' table used by Init_Music
+Vec_Expl_1 equ $C858 ;Four bytes copied from Explosion_Snd's U-reg parameters
+Vec_Expl_2 equ $C859 ;
+Vec_Expl_3 equ $C85A ;
+Vec_Expl_4 equ $C85B ;
+Vec_Expl_Chan equ $C85C ;Used by Explosion_Snd - channel number in use?
+Vec_Expl_ChanB equ $C85D ;Used by Explosion_Snd - bit for second channel used?
+Vec_ADSR_Timers equ $C85E ;ADSR timers for each sound channel (3 bytes)
+Vec_Music_Freq equ $C861 ;Storage for base frequency of each channel (3 words)
+;* $C85E ;Scratch 'score' storage for Display_Option (7 bytes)
+Vec_Expl_Flag equ $C867 ;Explosion_Snd initialization flag?
+;* $C868...$C876 ;Unused?
+Vec_Expl_Timer equ $C877 ;Used by Explosion_Snd
+;* $C878 ;Unused?
+Vec_Num_Players equ $C879 ;Number of players selected in Select_Game
+Vec_Num_Game equ $C87A ;Game number selected in Select_Game
+Vec_Seed_Ptr equ $C87B ;Pointer to 3-byte random number seed (=$C87D)
+Vec_Random_Seed equ $C87D ;Default 3-byte random number seed
+ ;
+;* $C880 - $CBEA is user RAM ;
+ ;
+Vec_Default_Stk equ $CBEA ;Default top-of-stack
+Vec_High_Score equ $CBEB ;High score storage (7 bytes)
+Vec_SWI3_Vector equ $CBF2 ;SWI2/SWI3 interrupt vector (3 bytes)
+Vec_SWI2_Vector equ $CBF2 ;SWI2/SWI3 interrupt vector (3 bytes)
+Vec_FIRQ_Vector equ $CBF5 ;FIRQ interrupt vector (3 bytes)
+Vec_IRQ_Vector equ $CBF8 ;IRQ interrupt vector (3 bytes)
+Vec_SWI_Vector equ $CBFB ;SWI/NMI interrupt vector (3 bytes)
+Vec_NMI_Vector equ $CBFB ;SWI/NMI interrupt vector (3 bytes)
+Vec_Cold_Flag equ $CBFE ;Cold start flag (warm start if = $7321)
+ ;
+VIA_port_b equ $D000 ;VIA port B data I/O register
+;* 0 sample/hold (0=enable mux 1=disable mux)
+;* 1 mux sel 0
+;* 2 mux sel 1
+;* 3 sound BC1
+;* 4 sound BDIR
+;* 5 comparator input
+;* 6 external device (slot pin 35) initialized to input
+;* 7 /RAMP
+VIA_port_a equ $D001 ;VIA port A data I/O register (handshaking)
+VIA_DDR_b equ $D002 ;VIA port B data direction register (0=input 1=output)
+VIA_DDR_a equ $D003 ;VIA port A data direction register (0=input 1=output)
+VIA_t1_cnt_lo equ $D004 ;VIA timer 1 count register lo (scale factor)
+VIA_t1_cnt_hi equ $D005 ;VIA timer 1 count register hi
+VIA_t1_lch_lo equ $D006 ;VIA timer 1 latch register lo
+VIA_t1_lch_hi equ $D007 ;VIA timer 1 latch register hi
+VIA_t2_lo equ $D008 ;VIA timer 2 count/latch register lo (refresh)
+VIA_t2_hi equ $D009 ;VIA timer 2 count/latch register hi
+VIA_shift_reg equ $D00A ;VIA shift register
+VIA_aux_cntl equ $D00B ;VIA auxiliary control register
+;* 0 PA latch enable
+;* 1 PB latch enable
+;* 2 \ 110=output to CB2 under control of phase 2 clock
+;* 3 > shift register control (110 is the only mode used by the Vectrex ROM)
+;* 4 /
+;* 5 0=t2 one shot 1=t2 free running
+;* 6 0=t1 one shot 1=t1 free running
+;* 7 0=t1 disable PB7 output 1=t1 enable PB7 output
+VIA_cntl equ $D00C ;VIA control register
+;* 0 CA1 control CA1 -> SW7 0=IRQ on low 1=IRQ on high
+;* 1 \
+;* 2 > CA2 control CA2 -> /ZERO 110=low 111=high
+;* 3 /
+;* 4 CB1 control CB1 -> NC 0=IRQ on low 1=IRQ on high
+;* 5 \
+;* 6 > CB2 control CB2 -> /BLANK 110=low 111=high
+;* 7 /
+VIA_int_flags equ $D00D ;VIA interrupt flags register
+;* bit cleared by
+;* 0 CA2 interrupt flag reading or writing port A I/O
+;* 1 CA1 interrupt flag reading or writing port A I/O
+;* 2 shift register interrupt flag reading or writing shift register
+;* 3 CB2 interrupt flag reading or writing port B I/O
+;* 4 CB1 interrupt flag reading or writing port A I/O
+;* 5 timer 2 interrupt flag read t2 low or write t2 high
+;* 6 timer 1 interrupt flag read t1 count low or write t1 high
+;* 7 IRQ status flag write logic 0 to IER or IFR bit
+VIA_int_enable equ $D00E ;VIA interrupt enable register
+;* 0 CA2 interrupt enable
+;* 1 CA1 interrupt enable
+;* 2 shift register interrupt enable
+;* 3 CB2 interrupt enable
+;* 4 CB1 interrupt enable
+;* 5 timer 2 interrupt enable
+;* 6 timer 1 interrupt enable
+;* 7 IER set/clear control
+VIA_port_a_nohs equ $D00F ;VIA port A data I/O register (no handshaking)
+
+Cold_Start equ $F000 ;
+Warm_Start equ $F06C ;
+Init_VIA equ $F14C ;
+Init_OS_RAM equ $F164 ;
+Init_OS equ $F18B ;
+Wait_Recal equ $F192 ;
+Set_Refresh equ $F1A2 ;
+DP_to_D0 equ $F1AA ;
+DP_to_C8 equ $F1AF ;
+Read_Btns_Mask equ $F1B4 ;
+Read_Btns equ $F1BA ;
+Joy_Analog equ $F1F5 ;
+Joy_Digital equ $F1F8 ;
+Sound_Byte equ $F256 ;
+Sound_Byte_x equ $F259 ;
+Sound_Byte_raw equ $F25B ;
+Clear_Sound equ $F272 ;
+Sound_Bytes equ $F27D ;
+Sound_Bytes_x equ $F284 ;
+Do_Sound equ $F289 ;
+Do_Sound_x equ $F28C ;
+Intensity_1F equ $F29D ;
+Intensity_3F equ $F2A1 ;
+Intensity_5F equ $F2A5 ;
+Intensity_7F equ $F2A9 ;
+Intensity_a equ $F2AB ;
+Dot_ix_b equ $F2BE ;
+Dot_ix equ $F2C1 ;
+Dot_d equ $F2C3 ;
+Dot_here equ $F2C5 ;
+Dot_List equ $F2D5 ;
+Dot_List_Reset equ $F2DE ;
+Recalibrate equ $F2E6 ;
+Moveto_x_7F equ $F2F2 ;
+Moveto_d_7F equ $F2FC ;
+Moveto_ix_FF equ $F308 ;
+Moveto_ix_7F equ $F30C ;
+Moveto_ix_a equ $F30E ;
+Moveto_ix equ $F310 ;
+Moveto_d equ $F312 ;
+Reset0Ref_D0 equ $F34A ;
+Check0Ref equ $F34F ;
+Reset0Ref equ $F354 ;
+Reset_Pen equ $F35B ;
+Reset0Int equ $F36B ;
+Print_Str_hwyx equ $F373 ;
+Print_Str_yx equ $F378 ;
+Print_Str_d equ $F37A ;
+Print_List_hw equ $F385 ;
+Print_List equ $F38A ;
+Print_List_chk equ $F38C ;
+Print_Ships_x equ $F391 ;
+Print_Ships equ $F393 ;
+Mov_Draw_VLc_a equ $F3AD ;count y x y x ...
+Mov_Draw_VL_b equ $F3B1 ;y x y x ...
+Mov_Draw_VLcs equ $F3B5 ;count scale y x y x ...
+Mov_Draw_VL_ab equ $F3B7 ;y x y x ...
+Mov_Draw_VL_a equ $F3B9 ;y x y x ...
+Mov_Draw_VL equ $F3BC ;y x y x ...
+Mov_Draw_VL_d equ $F3BE ;y x y x ...
+Draw_VLc equ $F3CE ;count y x y x ...
+Draw_VL_b equ $F3D2 ;y x y x ...
+Draw_VLcs equ $F3D6 ;count scale y x y x ...
+Draw_VL_ab equ $F3D8 ;y x y x ...
+Draw_VL_a equ $F3DA ;y x y x ...
+Draw_VL equ $F3DD ;y x y x ...
+Draw_Line_d equ $F3DF ;y x y x ...
+Draw_VLp_FF equ $F404 ;pattern y x pattern y x ... $01
+Draw_VLp_7F equ $F408 ;pattern y x pattern y x ... $01
+Draw_VLp_scale equ $F40C ;scale pattern y x pattern y x ... $01
+Draw_VLp_b equ $F40E ;pattern y x pattern y x ... $01
+Draw_VLp equ $F410 ;pattern y x pattern y x ... $01
+Draw_Pat_VL_a equ $F434 ;y x y x ...
+Draw_Pat_VL equ $F437 ;y x y x ...
+Draw_Pat_VL_d equ $F439 ;y x y x ...
+Draw_VL_mode equ $F46E ;mode y x mode y x ... $01
+Print_Str equ $F495 ;
+Random_3 equ $F511 ;
+Random equ $F517 ;
+Init_Music_Buf equ $F533 ;
+Clear_x_b equ $F53F ;
+Clear_C8_RAM equ $F542 ;never used by GCE carts?
+Clear_x_256 equ $F545 ;
+Clear_x_d equ $F548 ;
+Clear_x_b_80 equ $F550 ;
+Clear_x_b_a equ $F552 ;
+Dec_3_Counters equ $F55A ;
+Dec_6_Counters equ $F55E ;
+Dec_Counters equ $F563 ;
+Delay_3 equ $F56D ;30 cycles
+Delay_2 equ $F571 ;25 cycles
+Delay_1 equ $F575 ;20 cycles
+Delay_0 equ $F579 ;12 cycles
+Delay_b equ $F57A ;5*B + 10 cycles
+Delay_RTS equ $F57D ;5 cycles
+Bitmask_a equ $F57E ;
+Abs_a_b equ $F584 ;
+Abs_b equ $F58B ;
+Rise_Run_Angle equ $F593 ;
+Get_Rise_Idx equ $F5D9 ;
+Get_Run_Idx equ $F5DB ;
+Get_Rise_Run equ $F5EF ;
+Rise_Run_X equ $F5FF ;
+Rise_Run_Y equ $F601 ;
+Rise_Run_Len equ $F603 ;
+Rot_VL_ab equ $F610 ;
+Rot_VL equ $F616 ;
+Rot_VL_Mode_a equ $F61F ;
+Rot_VL_Mode equ $F62B ;
+Rot_VL_dft equ $F637 ;
+Xform_Run_a equ $F65B ;
+Xform_Run equ $F65D ;
+Xform_Rise_a equ $F661 ;
+Xform_Rise equ $F663 ;
+Move_Mem_a_1 equ $F67F ;
+Move_Mem_a equ $F683 ;
+Init_Music_chk equ $F687 ;
+Init_Music equ $F68D ;
+Init_Music_x equ $F692 ;
+Select_Game equ $F7A9 ;
+Clear_Score equ $F84F ;
+Add_Score_a equ $F85E ;
+Add_Score_d equ $F87C ;
+Strip_Zeros equ $F8B7 ;
+Compare_Score equ $F8C7 ;
+New_High_Score equ $F8D8 ;
+Obj_Will_Hit_u equ $F8E5 ;
+Obj_Will_Hit equ $F8F3 ;
+Obj_Hit equ $F8FF ;
+Explosion_Snd equ $F92E ;
+Draw_Grid_VL equ $FF9F ;
+ ;
+music1 equ $FD0D ;
+music2 equ $FD1D ;
+music3 equ $FD81 ;
+music4 equ $FDD3 ;
+music5 equ $FE38 ;
+music6 equ $FE76 ;
+music7 equ $FEC6 ;
+music8 equ $FEF8 ;
+music9 equ $FF26 ;
+musica equ $FF44 ;
+musicb equ $FF62 ;
+musicc equ $FF7A ;
+musicd equ $FF8F ;
+
+;endif
diff --git a/code/drawSyncList.asm b/code/drawSyncList.asm
deleted file mode 100644
index 2a5e591..0000000
--- a/code/drawSyncList.asm
+++ /dev/null
@@ -1,84 +0,0 @@
-;***************************************************************************
-; SUBROUTINE SECTION
-;***************************************************************************
-
-;ZERO ing the integrators takes time. Measures at my vectrex show e.g.:
-;If you move the beam with a to x = -127 and y = -127 at diffferent scale values, the time to reach zero:
-;- scale $ff -> zero 110 cycles
-;- scale $7f -> zero 75 cycles
-;- scale $40 -> zero 57 cycles
-;- scale $20 -> zero 53 cycles
-ZERO_DELAY EQU 7 ; delay 7 counter is exactly 111 cycles delay between zero SETTING and zero unsetting (in moveto_d)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;U = address of vectorlist
-;X = (y,x) position of vectorlist (this will be point 0,0), positioning on screen
-;A = scalefactor "Move" (after sync)
-;B = scalefactor "Vector" (vectors in vectorlist)
-;
-; mode, rel y, rel x,
-; mode, rel y, rel x,
-; . . .
-; . . .
-; mode, rel y, rel x,
-; 0x02
-; where mode has the following meaning:
-; negative draw line
-; 0 move to specified endpoint
-; 1 sync (and move to list start and than to place in vectorlist)
-; 2 end
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-draw_synced_list
- pshs a ; remember out different scale factors
- pshs b
- ; first list entry (first will be a sync + moveto_d, so we just stay here!)
- lda ,u+ ; this will be a "1"
-sync
- deca ; test if real sync - or end of list (2)
- bne drawdone ; if end of list -> jump
-; zero integrators
- ldb #$CC ; zero the integrators
- stb goto sync
-; now we should draw a vector
- ldd ,u++ ;Get next coordinate pair
- STA ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ' a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ ??
+ fcb %00000000, %00001000, %00101000, %00101000, %00011110, %00100100, %00010000, %00010000, %00010000, %00001000, %00101010, %00001000, %00000000, %00000000, %00000000, %00000100, %00011100, %00011000, %00111100, %00111100, %00011000, %01111110, %00111100, %01111110, %00111100, %00111100, %00000000, %00000000, %00001000, %00000000, %00010000, %00111000, %00111100, %00011000, %01110000, %00111100, %01111000, %01111100, %01111100, %01111100, %01000010, %00111110, %00111100, %01001000, %01000000, %01100110, %01100010, %00111100, %01111000, %00111000, %01111000, %00111110, %01111110, %01000010, %01000010, %01000010, %01000010, %01000010, %01111110, %00111000, %00100000, %00011100, %00010000, %00000000, %00001000, %00111100, %01000000, %00000000, %00000010, %00111100, %00011000, %00110100, %00100000, %00001000, %00001000, %00100000, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00011100, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00011000, %00001000, %00011000, %00000000, %01100000; forward
+font5a_line2
+ fcb %00000000, %00001000, %00101000, %01111100, %00101000, %01011000, %00101000, %00001000, %00100000, %00000100, %00011100, %00001000, %00000000, %00000000, %00000000, %00001000, %00100110, %00001000, %01000010, %00000010, %00101000, %01000000, %01000000, %00000100, %01000010, %01000010, %00001000, %00001000, %00010000, %01111110, %00001000, %01000100, %01000100, %00100100, %01001000, %01000000, %01000100, %01000000, %01000000, %10000000, %01000010, %00001000, %00000100, %01010000, %01000000, %01011010, %01010010, %01000010, %01000100, %01000100, %01000100, %01000000, %00010000, %01000010, %01000010, %01000010, %00100100, %00100100, %00001000, %00100000, %00010000, %00000100, %00101000, %00000000, %00001000, %00000010, %01111100, %00011100, %00111110, %01000010, %00010000, %01001100, %00111000, %00000000, %00000000, %00100100, %00010000, %01100110, %00101110, %00111100, %01111100, %00111110, %00101100, %00100000, %00111100, %00100010, %01000010, %10000001, %01000010, %01000010, %00111100, %00010000, %00001000, %00001000, %00000000, %01100000; forward
+ fcb %00000000, %00001000, %00000000, %00101000, %00011100, %00101100, %00110010, %00000000, %00100000, %00000100, %00001000, %00111110, %00000000, %00111100, %00000000, %00010000, %00101010, %00001000, %00011100, %00001100, %01001000, %01111100, %01111100, %00001000, %00111100, %00111110, %00000000, %00000000, %00100000, %00000000, %00000100, %00011000, %10011100, %00111100, %01111000, %01000000, %01000100, %01110000, %01111000, %10011100, %01111110, %00001000, %00000100, %01110000, %01000000, %01000010, %01001010, %01000010, %01111000, %01010100, %01111000, %00111100, %00010000, %01000010, %00100100, %01000010, %00011000, %00011000, %00010000, %00100000, %00001000, %00000100, %00000000, %00000000, %00000000, %00111110, %01000010, %00100000, %01000010, %01111110, %00111000, %00110100, %00100100, %00001000, %00001000, %00101000, %00010000, %01011010, %00110010, %01000010, %01000010, %01000010, %00110010, %00011000, %00010000, %00100010, %01000010, %10000001, %00101100, %00110100, %00001000, %00100000, %00001000, %00000100, %00110010, %01110000; forward
+ fcb %00000000, %00000000, %00000000, %01111100, %00001010, %00011010, %01001100, %00000000, %00100000, %00000100, %00011100, %00001000, %00001000, %00000000, %00000000, %00100000, %00110010, %00001000, %00100000, %00000010, %01111100, %00000010, %01000010, %00010000, %01000010, %00000010, %00000000, %00001000, %00010000, %01111110, %00001000, %00000000, %10010100, %01000010, %01000100, %01000000, %01000100, %01000000, %01000000, %10000100, %01000010, %00001000, %01000100, %01001000, %01000000, %01000010, %01000110, %01000010, %01000000, %01001100, %01001000, %00000010, %00010000, %01000010, %00011000, %01011010, %00100100, %00010000, %00100000, %00100000, %00000100, %00000100, %00000000, %00000000, %00000000, %01000110, %01100010, %00100000, %01000110, %01000000, %00010000, %00000100, %00100100, %00001000, %00101000, %00110000, %00010000, %01000010, %00100010, %01000010, %01111100, %00111110, %00100000, %00000100, %00010000, %00100110, %00100100, %01011010, %00110100, %00001000, %00010000, %00010000, %00001000, %00001000, %01001100, %01101000; forward
+ fcb %00000000, %00001000, %00000000, %00101000, %00111100, %00100100, %00110010, %00000000, %00010000, %00001000, %00101010, %00001000, %00010000, %00000000, %00010000, %01000000, %00011100, %00011100, %01111110, %00111100, %00001000, %01111100, %00111100, %00100000, %00111100, %00111100, %00001000, %00010000, %00001000, %00000000, %00010000, %00010000, %01011100, %01000010, %01111000, %00111100, %01111000, %01111100, %01000000, %01111000, %01000010, %00111110, %00111000, %01000100, %01111100, %01000010, %01000010, %00111100, %01000000, %00111010, %01000100, %01111100, %00010000, %00111100, %00010000, %01100110, %01000010, %00010000, %01111110, %00111000, %00000010, %00011100, %00000000, %01111110, %00000000, %00111010, %01011100, %00011100, %00111010, %00111100, %00010000, %00011100, %00100100, %00001000, %00011000, %00101100, %00011000, %01000010, %00100010, %00111100, %01000000, %00000010, %00100000, %00111000, %00011000, %00011010, %00011000, %01100110, %01000010, %00001000, %00111100, %00011000, %00001000, %00011000, %00000000, %01100000; forward
diff --git a/code/led/led-test1/led-test1.asm b/code/led/led-test1/led-test1.asm
new file mode 100644
index 0000000..be30eb2
--- /dev/null
+++ b/code/led/led-test1/led-test1.asm
@@ -0,0 +1,481 @@
+; Copyright (C) 2020 Brett Walach
+; --------------------------------------------------------------------------
+; LED TEST demo v1.1
+;
+; This application demonstrates how to control the addressable LEDs
+; by seeding $7ff0 through $7ff9 with the LED colors, then calling
+; RPC function ID 7 (updateMulti) which writes out the data to all LEDs
+;
+; LED Colors
+; ----------
+; 0 = off
+; 1 = red
+; 2 = orange
+; 3 = yellow
+; 4 = green
+; 5 = cyan
+; 6 = blue
+; 7 = pink
+; 8 = magenta
+; 9 = white (Try not to use this one... it kind of draws a lot of power!)
+;
+; HW and SW Version
+; -----------------
+; Also demonstrates the Hardware and Software Version RPC function ID 9
+; Which reads HW version HI:LO into $7ffc:$7fffd
+; ...and SW verison HI:LO into $7ffe:$7ffff
+; This can be used to know how many LEDs are expected on the VEXTREME PCB this
+; game is running on, or other info that might be useful in a programatic way.
+; This app converts the values to strings to display, but the comparison would
+; be much easier to check for different types of boards and software revisions.
+;
+; Original header follows:
+; --------------------------------------------------------------------------
+; Copyright (C) 2015 Jeroen Domburg
+;
+; This library is free software: you can redistribute it and/or modify
+; it under the terms of the GNU Lesser General Public License as published by
+; the Free Software Foundation, either version 3 of the License, or
+; (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public License
+; along with this library. If not, see .
+;
+ include "vectrex.i"
+;***************************************************************************
+; DEFINES SECTION
+;***************************************************************************
+
+;***************************************************************************
+; USER RAM SECTION ($C880-$CBEA)
+;***************************************************************************
+user_ram equ $c880
+logo_scale equ $c880
+calibrationValue equ $c881
+gameScale equ $c882
+led_color equ $c883
+led_color_cnt equ $c884
+led_num equ $c885 ; counter to know when to switch colors (20ms * 5 = 100ms)
+led_num_inv equ $c886 ; inverse of led_num for sound generation
+led_true equ $c887 ; how many to light up 0 - 10
+ ; Keep next 4 addresses in order
+cart_hw_ver_hi equ $c888 ; HW version vHI.LO saved in $7ffc
+cart_hw_ver_lo equ $c889 ; | $7ffd
+cart_sw_ver_hi equ $c890 ; SW version vHI.LO $7ffe
+cart_sw_ver_lo equ $c891 ; | $7fff
+ ; Keep these in order ^
+hw_ver_str_ram equ $c892 ; reserve 9 bytes, "HW=V0.00",$80
+sw_ver_str_ram equ #hw_ver_str_ram+9 ; reserve 9 bytes, "SW=V0.00",$80
+cart_ver_check equ #sw_ver_str_ram+9 ; Flag to force version check once
+led0_addr equ $7ff0 ; start address of LED0
+ver_addr equ $7ffc ; start address of Version Info (see above)
+;***************************************************************************
+; SYSTEM AREA of USER RAM SECTION ($CB00-$CBEA)
+;***************************************************************************
+rpcfn equ $cb00
+;***************************************************************************
+; HEADER SECTION
+;***************************************************************************
+ org 0
+ fcb "g GCE 2020", $80 ; 'g' is copyright sign
+ fdb vextreme_tune1 ; catchy intro music to get stuck in your head
+ fcb $F6, $60, $20, -$60
+ fcb "LED TEST V1.1",$80 ; some game information ending with $80
+ fcb 0 ; end of game header
+;***************************************************************************
+; PROGRAM STARTS HERE
+;***************************************************************************
+main
+;***************************************************************************
+; RPC COPY START
+;***************************************************************************
+rpccopystart
+ ldx #rpcfndat
+ ldy #rpcfn
+rpccopyloop
+ lda ,x+
+ sta ,y+
+ cmpx #rpcfndatend
+ bne rpccopyloop
+;***************************************************************************
+; RPC COPY END
+;***************************************************************************
+;***************************************************************************
+; LOAD VERSION STRING TEMPLATES IN RAM
+;***************************************************************************
+ver_str_cpy
+ ldx #hw_ver_string
+ ldy #hw_ver_str_ram
+ver_str_cpy_loop
+ lda ,x+
+ sta ,y+
+ cmpx #sw_ver_string+9
+ bne ver_str_cpy_loop
+;***************************************************************************
+; INIT VARIABLES
+;***************************************************************************
+init_vars
+ lda #0
+ sta led_color_cnt
+ lda #1
+ sta cart_ver_check
+ sta led_true
+ sta led_color
+ sta calibrationValue
+ sta gameScale
+ lda #20
+ sta logo_scale
+
+ lda #0 ; 0 disables Joy 1 X
+ sta Vec_Joy_Mux_1_X ; |
+ lda #3 ; 3 enables Joy 1 Y
+ sta Vec_Joy_Mux_1_Y ; |
+ lda #0 ; 0 disables Joy 2 X & Y
+ sta Vec_Joy_Mux_2_X ; | saves a few hundred cycles
+ sta Vec_Joy_Mux_2_Y ; |
+;***************************************************************************
+; CART VERSION UPDATE FUNCTION
+;***************************************************************************
+ver_update_start lda #9 ; rpc call to check cart version saved in $7ff0 - $7ff3
+ jmp rpcfn ; Call, and return to loop
+;***************************************************************************
+; LED UPDATE FUNCTION
+;***************************************************************************
+led_update_start lda led_true ; Is it time to update?
+ cmpa #1 ; |
+ bne led_update_exit ; No, exit LED update
+ clra ; |
+ sta led_true ; Yes, clear flag and start update
+; update LEDs from 0 to led_num as led_color desired, off for remainder up to 9 (10 LEDs)
+led_color_start
+ clrb ; LED index counter
+ lda led_color ; LED desired color
+ ldx #led0_addr ; Load start address for LED0
+led_color_loop
+ cmpb led_num ; Reached 0 - N LEDs yet?
+ beq led_off_start ; Yes, turn off the rest
+ sta ,x+ ; No, Write color to LED0 memory
+ incb ; inc LEDx index counter
+ bra led_color_loop ; Keep writing LEDx color
+led_off_start
+ clra ; LED color that indicates OFF
+led_off_loop
+ cmpb #10 ; Already wrote to last LED9 ?
+ beq led_color_exit ; Yes, all done, exit
+ sta ,x+ ; No, keep writing LEDx off color
+ incb ; inc LEDx index counter
+ bra led_off_loop
+led_color_exit
+; cycle LED color for next time through
+led_change_color_start
+ lda led_color ; LED desired color
+ cmpa #7 ; Reached last LED color?
+ bne led_change_color_next ; No, inc to next color
+led_change_color_reset ;
+ clra ; Yes, wrap back to color 1
+led_change_color_next ; |
+ inca ; |
+ sta led_color ; Save updated LED color
+led_update
+ lda #7 ; rpc call to update multiple LEDs, color saved in $7ff0 - $7ff9
+ jmp rpcfn ; Call
+led_update_exit
+;***************************************************************************
+; MAIN LOOP
+;***************************************************************************
+loop
+; Recal video stuff
+ jsr Wait_Recal
+ jsr Intensity_5F
+;***************************************************************************
+; DRAW VEXTREME LOGO
+;***************************************************************************
+logo_start
+ ldx #_SM_vextreme_logo
+logo_next_part
+ lda logo_scale
+ sta VIA_t1_cnt_lo
+ lda #$CE
+ sta zero 110 cycles
+;- scale $7f -> zero 75 cycles
+;- scale $40 -> zero 57 cycles
+;- scale $20 -> zero 53 cycles
+ZERO_DELAY_P EQU 2 ; delay 7 counter is exactly 111 cycles delay between zero SETTING and zero unsetting (in moveto_d)
+ jsr DP_to_D0
+FONT_LENGTH EQU ((font5a_line2-font5a_line1))
+FONT_START_A EQU font5a_line1 - ' ' ; // space is 1
+FONT_END EQU FONT_START_A+4*FONT_LENGTH
+
+;***************************************************************************
+; sync_Print_Str_d SUBROUTINE
+;***************************************************************************
+sync_Print_Str_d
+; put move position on stack put it so, that we can load "d" directly from stack
+ pshs d
+ STU Vec_Str_Ptr ;Save string pointer
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; POSITION "EXACT" PATCH assuming x pos is midle alligned,
+; if that is a case we can use neg x pos as "opposite" string pos
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ ldd #(%10000010)*256+$CC ; zero the integrators
+ stb shift register control (110 is the only mode used by the Vectrex ROM)
+;* 4 /
+;* 5 0=t2 one shot 1=t2 free running
+;* 6 0=t1 one shot 1=t1 free running
+;* 7 0=t1 disable PB7 output 1=t1 enable PB7 output
+VIA_cntl equ $D00C ;VIA control register
+;* 0 CA1 control CA1 -> SW7 0=IRQ on low 1=IRQ on high
+;* 1 \
+;* 2 > CA2 control CA2 -> /ZERO 110=low 111=high
+;* 3 /
+;* 4 CB1 control CB1 -> NC 0=IRQ on low 1=IRQ on high
+;* 5 \
+;* 6 > CB2 control CB2 -> /BLANK 110=low 111=high
+;* 7 /
+VIA_int_flags equ $D00D ;VIA interrupt flags register
+;* bit cleared by
+;* 0 CA2 interrupt flag reading or writing port A I/O
+;* 1 CA1 interrupt flag reading or writing port A I/O
+;* 2 shift register interrupt flag reading or writing shift register
+;* 3 CB2 interrupt flag reading or writing port B I/O
+;* 4 CB1 interrupt flag reading or writing port A I/O
+;* 5 timer 2 interrupt flag read t2 low or write t2 high
+;* 6 timer 1 interrupt flag read t1 count low or write t1 high
+;* 7 IRQ status flag write logic 0 to IER or IFR bit
+VIA_int_enable equ $D00E ;VIA interrupt enable register
+;* 0 CA2 interrupt enable
+;* 1 CA1 interrupt enable
+;* 2 shift register interrupt enable
+;* 3 CB2 interrupt enable
+;* 4 CB1 interrupt enable
+;* 5 timer 2 interrupt enable
+;* 6 timer 1 interrupt enable
+;* 7 IER set/clear control
+VIA_port_a_nohs equ $D00F ;VIA port A data I/O register (no handshaking)
+
+Cold_Start equ $F000 ;
+Warm_Start equ $F06C ;
+Init_VIA equ $F14C ;
+Init_OS_RAM equ $F164 ;
+Init_OS equ $F18B ;
+Wait_Recal equ $F192 ;
+Set_Refresh equ $F1A2 ;
+DP_to_D0 equ $F1AA ;
+DP_to_C8 equ $F1AF ;
+Read_Btns_Mask equ $F1B4 ;
+Read_Btns equ $F1BA ;
+Joy_Analog equ $F1F5 ;
+Joy_Digital equ $F1F8 ;
+Sound_Byte equ $F256 ;
+Sound_Byte_x equ $F259 ;
+Sound_Byte_raw equ $F25B ;
+Clear_Sound equ $F272 ;
+Sound_Bytes equ $F27D ;
+Sound_Bytes_x equ $F284 ;
+Do_Sound equ $F289 ;
+Do_Sound_x equ $F28C ;
+Intensity_1F equ $F29D ;
+Intensity_3F equ $F2A1 ;
+Intensity_5F equ $F2A5 ;
+Intensity_7F equ $F2A9 ;
+Intensity_a equ $F2AB ;
+Dot_ix_b equ $F2BE ;
+Dot_ix equ $F2C1 ;
+Dot_d equ $F2C3 ;
+Dot_here equ $F2C5 ;
+Dot_List equ $F2D5 ;
+Dot_List_Reset equ $F2DE ;
+Recalibrate equ $F2E6 ;
+Moveto_x_7F equ $F2F2 ;
+Moveto_d_7F equ $F2FC ;
+Moveto_ix_FF equ $F308 ;
+Moveto_ix_7F equ $F30C ;
+Moveto_ix_a equ $F30E ;
+Moveto_ix equ $F310 ;
+Moveto_d equ $F312 ;
+Reset0Ref_D0 equ $F34A ;
+Check0Ref equ $F34F ;
+Reset0Ref equ $F354 ;
+Reset_Pen equ $F35B ;
+Reset0Int equ $F36B ;
+Print_Str_hwyx equ $F373 ;
+Print_Str_yx equ $F378 ;
+Print_Str_d equ $F37A ;
+Print_List_hw equ $F385 ;
+Print_List equ $F38A ;
+Print_List_chk equ $F38C ;
+Print_Ships_x equ $F391 ;
+Print_Ships equ $F393 ;
+Mov_Draw_VLc_a equ $F3AD ;count y x y x ...
+Mov_Draw_VL_b equ $F3B1 ;y x y x ...
+Mov_Draw_VLcs equ $F3B5 ;count scale y x y x ...
+Mov_Draw_VL_ab equ $F3B7 ;y x y x ...
+Mov_Draw_VL_a equ $F3B9 ;y x y x ...
+Mov_Draw_VL equ $F3BC ;y x y x ...
+Mov_Draw_VL_d equ $F3BE ;y x y x ...
+Draw_VLc equ $F3CE ;count y x y x ...
+Draw_VL_b equ $F3D2 ;y x y x ...
+Draw_VLcs equ $F3D6 ;count scale y x y x ...
+Draw_VL_ab equ $F3D8 ;y x y x ...
+Draw_VL_a equ $F3DA ;y x y x ...
+Draw_VL equ $F3DD ;y x y x ...
+Draw_Line_d equ $F3DF ;y x y x ...
+Draw_VLp_FF equ $F404 ;pattern y x pattern y x ... $01
+Draw_VLp_7F equ $F408 ;pattern y x pattern y x ... $01
+Draw_VLp_scale equ $F40C ;scale pattern y x pattern y x ... $01
+Draw_VLp_b equ $F40E ;pattern y x pattern y x ... $01
+Draw_VLp equ $F410 ;pattern y x pattern y x ... $01
+Draw_Pat_VL_a equ $F434 ;y x y x ...
+Draw_Pat_VL equ $F437 ;y x y x ...
+Draw_Pat_VL_d equ $F439 ;y x y x ...
+Draw_VL_mode equ $F46E ;mode y x mode y x ... $01
+Print_Str equ $F495 ;
+Random_3 equ $F511 ;
+Random equ $F517 ;
+Init_Music_Buf equ $F533 ;
+Clear_x_b equ $F53F ;
+Clear_C8_RAM equ $F542 ;never used by GCE carts?
+Clear_x_256 equ $F545 ;
+Clear_x_d equ $F548 ;
+Clear_x_b_80 equ $F550 ;
+Clear_x_b_a equ $F552 ;
+Dec_3_Counters equ $F55A ;
+Dec_6_Counters equ $F55E ;
+Dec_Counters equ $F563 ;
+Delay_3 equ $F56D ;30 cycles
+Delay_2 equ $F571 ;25 cycles
+Delay_1 equ $F575 ;20 cycles
+Delay_0 equ $F579 ;12 cycles
+Delay_b equ $F57A ;5*B + 10 cycles
+Delay_RTS equ $F57D ;5 cycles
+Bitmask_a equ $F57E ;
+Abs_a_b equ $F584 ;
+Abs_b equ $F58B ;
+Rise_Run_Angle equ $F593 ;
+Get_Rise_Idx equ $F5D9 ;
+Get_Run_Idx equ $F5DB ;
+Get_Rise_Run equ $F5EF ;
+Rise_Run_X equ $F5FF ;
+Rise_Run_Y equ $F601 ;
+Rise_Run_Len equ $F603 ;
+Rot_VL_ab equ $F610 ;
+Rot_VL equ $F616 ;
+Rot_VL_Mode_a equ $F61F ;
+Rot_VL_Mode equ $F62B ;
+Rot_VL_dft equ $F637 ;
+Xform_Run_a equ $F65B ;
+Xform_Run equ $F65D ;
+Xform_Rise_a equ $F661 ;
+Xform_Rise equ $F663 ;
+Move_Mem_a_1 equ $F67F ;
+Move_Mem_a equ $F683 ;
+Init_Music_chk equ $F687 ;
+Init_Music equ $F68D ;
+Init_Music_x equ $F692 ;
+Select_Game equ $F7A9 ;
+Clear_Score equ $F84F ;
+Add_Score_a equ $F85E ;
+Add_Score_d equ $F87C ;
+Strip_Zeros equ $F8B7 ;
+Compare_Score equ $F8C7 ;
+New_High_Score equ $F8D8 ;
+Obj_Will_Hit_u equ $F8E5 ;
+Obj_Will_Hit equ $F8F3 ;
+Obj_Hit equ $F8FF ;
+Explosion_Snd equ $F92E ;
+Draw_Grid_VL equ $FF9F ;
+ ;
+music1 equ $FD0D ;
+music2 equ $FD1D ;
+music3 equ $FD81 ;
+music4 equ $FDD3 ;
+music5 equ $FE38 ;
+music6 equ $FE76 ;
+music7 equ $FEC6 ;
+music8 equ $FEF8 ;
+music9 equ $FF26 ;
+musica equ $FF44 ;
+musicb equ $FF62 ;
+musicc equ $FF7A ;
+musicd equ $FF8F ;
+
+;endif
diff --git a/code/led/led-test1/vextremeLogoSM.asm b/code/led/led-test1/vextremeLogoSM.asm
new file mode 100644
index 0000000..1ee324d
--- /dev/null
+++ b/code/led/led-test1/vextremeLogoSM.asm
@@ -0,0 +1,677 @@
+SPRITE_SCALE equ #34
+;/* HIGHEST SCALE FOR SMARTLIST + CONTINUE is 16!
+
+;***************************************************************************
+; ROUTINE SECTION
+;***************************************************************************
+ jsr DP_to_D0
+;***************************************************************************
+ADD_NOPS
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ rts
+ADD_NOPS_NOU
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ rts
+drawSmart ;#isfunction
+ pulu d,pc
+;***************************************************************************
+SM_setScale ;#isfunction
+ stb calibrationValue
+ lda #$82
+ std
+; --------------------------------------------------------------------------
+; LED TEST demo v2.0
+;
+; This application demonstrates how to control the addressable LEDs
+; by seeding $7ff0 through $7ff9 with the LED colors, then calling
+; RPC function ID 7 (updateMulti) which writes out the data to all LEDs
+;
+; Also demonstrates RPC ID 8 for LED brightness control
+;
+; LED Colors
+; ----------
+; 0 = off
+; 1 = red
+; 2 = orange
+; 3 = yellow
+; 4 = green
+; 5 = cyan
+; 6 = blue
+; 7 = pink
+; 8 = magenta
+; 9 = white (Try not to use this one... it kind of draws a lot of power!)
+;
+; LED brightness
+; --------------
+; 0 = off
+; 1..30
+; 31 = max brightness
+;
+; When sending brightness value, first multiply value (0 - 31) by 8,
+; such that sent value in RPC function $7ffe = 0 - 248.
+;
+; Original header follows:
+; --------------------------------------------------------------------------
+; Copyright (C) 2015 Jeroen Domburg
+;
+; This library is free software: you can redistribute it and/or modify
+; it under the terms of the GNU Lesser General Public License as published by
+; the Free Software Foundation, either version 3 of the License, or
+; (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public License
+; along with this library. If not, see .
+;
+ include "vectrex.i"
+;***************************************************************************
+; DEFINES SECTION
+;***************************************************************************
+
+;***************************************************************************
+; USER RAM SECTION ($C880-$CBEA)
+;***************************************************************************
+user_ram equ $c880
+led_color equ $c880
+led_num equ $c881 ; counter to know when to switch colors (20ms * 5 = 100ms)
+led_brightness equ $c882 ; led brightness (0-31 values) << 3 bits (x8)
+led_bright_true equ $c883 ; set if we just updated led_brightness
+led0_addr equ $7ff0 ; start address of LED0
+ledb_addr equ $7ffe ; led brightness RPC value address
+;***************************************************************************
+; SYSTEM AREA of USER RAM SECTION ($CB00-$CBEA)
+;***************************************************************************
+rpcfn equ $cb00
+;***************************************************************************
+; HEADER SECTION
+;***************************************************************************
+ org 0
+ fcb "g GCE 2020", $80 ; 'g' is copyright sign
+ fdb vextreme_tune1 ; catchy intro music to get stuck in your head
+ fcb $F6, $60, $20, -$60
+ fcb "LED TEST V2.0",$80 ; some game information ending with $80
+ fcb 0 ; end of game header
+;***************************************************************************
+; PROGRAM STARTS HERE
+;***************************************************************************
+main
+;***************************************************************************
+; RPC COPY START
+;***************************************************************************
+rpccopystart
+ ldx #rpcfndat
+ ldy #rpcfn
+rpccopyloop
+ lda ,x+
+ sta ,y+
+ cmpx #rpcfndatend
+ bne rpccopyloop
+;***************************************************************************
+; RPC COPY END
+;***************************************************************************
+init_vars
+ lda #1
+ sta led_color
+ sta led_bright_true
+ lda #15
+ sta led_brightness
+
+ lda #0 ; 0 disables Joy 1 X
+ sta Vec_Joy_Mux_1_X ; |
+ lda #0 ; 0 disables Joy 1 Y
+ sta Vec_Joy_Mux_1_Y ; |
+ lda #0 ; 0 disables Joy 2 X & Y
+ sta Vec_Joy_Mux_2_X ; | saves a few hundred cycles
+ sta Vec_Joy_Mux_2_Y ; |
+;***************************************************************************
+; LED UPDATE FUNCTION START
+;***************************************************************************
+; update LED brightness from 0 to led_brightness (max 31), but this value must also be multiplied by 8
+led_brightness_start
+ lda led_brightness ; LED desired brightness
+ lsla ; (0-31) x8
+ lsla ; |
+ lsla ; |
+ ldx #ledb_addr ; Load start address for LED0
+ sta ,x+ ; Write brightness to LEDb memory
+ lda #8 ; rpc call to update LED bightness, saved in $7ffe
+ jmp rpcfn ; Call, this will return to loop
+led_brightness_exit
+; update LEDs from 0 to led_num as led_color desired, off for remainder up to 9 (10 LEDs)
+led_color_start
+ lda #10 ; Update all 10 LEDs
+ sta led_num ; |
+ clrb ; LED index counter
+ lda led_color ; LED desired color
+ ldx #led0_addr ; Load start address for LED0
+led_color_loop
+ cmpb led_num ; Reached 0 - N LEDs yet?
+ beq led_off_start ; Yes, turn off the rest
+ sta ,x+ ; No, Write color to LED0 memory
+ incb ; inc LEDx index counter
+ bra led_color_loop ; Keep writing LEDx color
+led_off_start
+ clra ; LED color that indicates OFF
+led_off_loop
+ cmpb #10 ; Already wrote to last LED9 ?
+ beq led_color_exit ; Yes, all done, exit
+ sta ,x+ ; No, keep writing LEDx off color
+ incb ; inc LEDx index counter
+ bra led_off_loop
+led_color_exit
+led_update
+ lda #7 ; rpc call to update multiple LEDs, color saved in $7ff0 - $7ff9
+ jmp rpcfn ; Call
+led_update_exit
+;***************************************************************************
+; MAIN LOOP
+;***************************************************************************
+loop
+; Recal video stuff
+ jsr Wait_Recal
+ jsr Intensity_1F
+; Input handling
+ jsr Read_Btns
+ anda #$0F ; ignore joy2
+ lsla ; convert to 2-byte index
+ ldu #button_routines
+ leau a,u ;fetch addr of string, page
+ pulu pc
+
+button_routines
+ fdb nobuttons ; 0x00 no buttons
+ fdb button1 ; 0x01 b1
+ fdb button2 ; 0x02 b2
+ fdb nobuttons ; 0x03 b2+b1
+ fdb button3 ; 0x04 b3
+ fdb nobuttons ; 0x05 b3+b1
+ fdb nobuttons ; 0x06 b3+b2
+ fdb nobuttons ; 0x07 b3+b2+b1
+ fdb button4 ; 0x08 b4
+ fdb nobuttons ; 0x09 b4+b1
+ fdb nobuttons ; 0x0A b4+b2
+ fdb nobuttons ; 0x0B b4+b2+b1
+ fdb nobuttons ; 0x0C b4+b3
+ fdb nobuttons ; 0x0D b4+b3+b1
+ fdb nobuttons ; 0x0E b4+b3+b2
+ fdb nobuttons ; 0x0F b4+b3+b2+b1
+
+nobuttons
+ lda led_bright_true ; Did we just update brightness?
+ cmpa #1 ; |
+ bne nobuttons_exit ; No, just loop again
+ clra ; |
+ sta led_bright_true ; Yes, force a color update to refresh the LEDs
+ jmp led_color_start ; |
+nobuttons_exit
+ jmp loop
+
+button1
+ lda led_color
+ cmpa #0
+ beq button1_exit
+ deca
+ sta led_color
+button1_exit
+ jmp led_color_start
+button2
+ lda led_color
+ cmpa #9
+ beq button2_exit
+ inca
+ sta led_color
+button2_exit
+ jmp led_color_start
+button3
+ lda led_brightness
+ cmpa #0
+ beq led_brightness_jump
+ deca
+ sta led_brightness
+ bra led_brightness_jump
+button4
+ lda led_brightness
+ cmpa #31
+ beq led_brightness_jump
+ inca
+ sta led_brightness
+led_brightness_jump
+ lda #1
+ sta led_bright_true
+ jmp led_brightness_start
+
+;***************************************************************************
+; RPC FUNCTION START
+;***************************************************************************
+; Rpc function. Because this makes the cart unavailable, this
+; will copied to SRAM. Call as rpcfn.
+rpcfndat
+ sta $7fff
+rpcwaitloop
+ lda $0
+ cmpa # 'g'
+ bne rpcwaitloop
+ lda $1
+ cmpa # ' '
+ bne rpcwaitloop
+ jmp loop ;start address
+rpcfndatend
+;***************************************************************************
+; RPC FUNCTION END
+;***************************************************************************
+
+;***************************************************************************
+; SUBROUTINE SECTION
+;***************************************************************************
+
+;***************************************************************************
+; DATA SECTION
+;***************************************************************************
+
+; VEXTREME Tune Notes
+CS5 equ $1E
+F5 equ $22
+FS5 equ $23
+GS5 equ $25
+AS5 equ $27
+RST equ $3F
+VIBENL fcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+FADE14 fdb $0000,$2DDD,$DDDD,$B000,0,0,0,0
+; VEXTREME Intro Tune
+vextreme_tune1
+ fdb FADE14
+ fdb VIBENL
+ fcb FS5,8
+ fcb FS5,8
+ fcb FS5,8
+ fcb AS5,16
+ fcb GS5,16
+ fcb FS5,16
+ fcb F5,16
+ fcb CS5,8
+ fcb FS5,8
+ fcb RST,8
+ fcb 0,$80 ; $80 is end marker for music, frequency is not played so 0
diff --git a/code/led/led-test2/readme.md b/code/led/led-test2/readme.md
new file mode 100644
index 0000000..9511c44
--- /dev/null
+++ b/code/led/led-test2/readme.md
@@ -0,0 +1,13 @@
+LED Test v2.0
+===
+
+This app tests the LED controls between Vectrex games and the VEXTREME cart.
+
+There is purposely no video displayed so that the noise from vectors remains silent. This way you can more easily hear the effects of the LEDs and how it relates to issue #46
+
+1. Button 1 - Cycle down through colors, stopping at off (0)
+2. Button 2 - Cycle up through colors, stopping at white (9)
+3. Button 3 - Cycle down through brightness, stopping at off (0)
+4. Button 3 - Cycle up through brightness, stopping at max (31)
+
+:warning: **NOTE: Be careful NOT to leave the cart at MAX brightness with WHITE LEDs because it draws too much current.** :warning:
diff --git a/code/led/led-test2/vectrex.i b/code/led/led-test2/vectrex.i
new file mode 100644
index 0000000..d2b3c61
--- /dev/null
+++ b/code/led/led-test2/vectrex.i
@@ -0,0 +1,318 @@
+; this file is part of vectrex frogger, written by Christopher Salomon
+; in March-April 1998
+; all stuff contained here is public domain (?)
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; this file contains includes for vectrex BIOS functions and variables ;
+; it was written by Bruce Tomlin, slighte changed by Christopher Salomon ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+Vec_Snd_Shadow equ $C800 ;Shadow of sound chip registers (15 bytes)
+Vec_Btn_State equ $C80F ;Current state of all joystick buttons
+Vec_Prev_Btns equ $C810 ;Previous state of all joystick buttons
+Vec_Buttons equ $C811 ;Current toggle state of all buttons
+Vec_Button_1_1 equ $C812 ;Current toggle state of stick 1 button 1
+Vec_Button_1_2 equ $C813 ;Current toggle state of stick 1 button 2
+Vec_Button_1_3 equ $C814 ;Current toggle state of stick 1 button 3
+Vec_Button_1_4 equ $C815 ;Current toggle state of stick 1 button 4
+Vec_Button_2_1 equ $C816 ;Current toggle state of stick 2 button 1
+Vec_Button_2_2 equ $C817 ;Current toggle state of stick 2 button 2
+Vec_Button_2_3 equ $C818 ;Current toggle state of stick 2 button 3
+Vec_Button_2_4 equ $C819 ;Current toggle state of stick 2 button 4
+Vec_Joy_Resltn equ $C81A ;Joystick A/D resolution ($80=min $00=max)
+Vec_Joy_1_X equ $C81B ;Joystick 1 left/right
+Vec_Joy_1_Y equ $C81C ;Joystick 1 up/down
+Vec_Joy_2_X equ $C81D ;Joystick 2 left/right
+Vec_Joy_2_Y equ $C81E ;Joystick 2 up/down
+Vec_Joy_Mux equ $C81F ;Joystick enable/mux flags (4 bytes)
+Vec_Joy_Mux_1_X equ $C81F ;Joystick 1 X enable/mux flag (=1)
+Vec_Joy_Mux_1_Y equ $C820 ;Joystick 1 Y enable/mux flag (=3)
+Vec_Joy_Mux_2_X equ $C821 ;Joystick 2 X enable/mux flag (=5)
+Vec_Joy_Mux_2_Y equ $C822 ;Joystick 2 Y enable/mux flag (=7)
+Vec_Misc_Count equ $C823 ;Misc counter/flag byte, zero when not in use
+Vec_0Ref_Enable equ $C824 ;Check0Ref enable flag
+Vec_Loop_Count equ $C825 ;Loop counter word (incremented in Wait_Recal)
+Vec_Brightness equ $C827 ;Default brightness
+Vec_Dot_Dwell equ $C828 ;Dot dwell time?
+Vec_Pattern equ $C829 ;Dot pattern (bits)
+Vec_Text_HW equ $C82A ;Default text height and width
+Vec_Text_Height equ $C82A ;Default text height
+Vec_Text_Width equ $C82B ;Default text width
+Vec_Str_Ptr equ $C82C ;Temporary string pointer for Print_Str
+Vec_Counters equ $C82E ;Six bytes of counters
+Vec_Counter_1 equ $C82E ;First counter byte
+Vec_Counter_2 equ $C82F ;Second counter byte
+Vec_Counter_3 equ $C830 ;Third counter byte
+Vec_Counter_4 equ $C831 ;Fourth counter byte
+Vec_Counter_5 equ $C832 ;Fifth counter byte
+Vec_Counter_6 equ $C833 ;Sixth counter byte
+Vec_RiseRun_Tmp equ $C834 ;Temp storage word for rise/run
+Vec_Angle equ $C836 ;Angle for rise/run and rotation calculations
+Vec_Run_Index equ $C837 ;Index pair for run
+;* $C839 ;Pointer to copyright string during startup
+Vec_Rise_Index equ $C839 ;Index pair for rise
+;* $C83B ;High score cold-start flag (=0 if valid)
+Vec_RiseRun_Len equ $C83B ;length for rise/run
+;* $C83C ;temp byte
+Vec_Rfrsh equ $C83D ;Refresh time (divided by 1.5MHz)
+Vec_Rfrsh_lo equ $C83D ;Refresh time low byte
+Vec_Rfrsh_hi equ $C83E ;Refresh time high byte
+Vec_Music_Work equ $C83F ;Music work buffer (14 bytes, backwards?)
+Vec_Music_Wk_A equ $C842 ; register 10
+;* $C843 ; register 9
+;* $C844 ; register 8
+Vec_Music_Wk_7 equ $C845 ; register 7
+Vec_Music_Wk_6 equ $C846 ; register 6
+Vec_Music_Wk_5 equ $C847 ; register 5
+;* $C848 ; register 4
+;* $C849 ; register 3
+;* $C84A ; register 2
+Vec_Music_Wk_1 equ $C84B ; register 1
+;* $C84C ; register 0
+Vec_Freq_Table equ $C84D ;Pointer to note-to-frequency table (normally $FC8D)
+Vec_Max_Players equ $C84F ;Maximum number of players for Select_Game
+Vec_Max_Games equ $C850 ;Maximum number of games for Select_Game
+Vec_ADSR_Table equ $C84F ;Storage for first music header word (ADSR table)
+Vec_Twang_Table equ $C851 ;Storage for second music header word ('twang' table)
+Vec_Music_Ptr equ $C853 ;Music data pointer
+Vec_Expl_ChanA equ $C853 ;Used by Explosion_Snd - bit for first channel used?
+Vec_Expl_Chans equ $C854 ;Used by Explosion_Snd - bits for all channels used?
+Vec_Music_Chan equ $C855 ;Current sound channel number for Init_Music
+Vec_Music_Flag equ $C856 ;Music active flag ($00=off $01=start $80=on)
+Vec_Duration equ $C857 ;Duration counter for Init_Music
+Vec_Music_Twang equ $C858 ;3 word 'twang' table used by Init_Music
+Vec_Expl_1 equ $C858 ;Four bytes copied from Explosion_Snd's U-reg parameters
+Vec_Expl_2 equ $C859 ;
+Vec_Expl_3 equ $C85A ;
+Vec_Expl_4 equ $C85B ;
+Vec_Expl_Chan equ $C85C ;Used by Explosion_Snd - channel number in use?
+Vec_Expl_ChanB equ $C85D ;Used by Explosion_Snd - bit for second channel used?
+Vec_ADSR_Timers equ $C85E ;ADSR timers for each sound channel (3 bytes)
+Vec_Music_Freq equ $C861 ;Storage for base frequency of each channel (3 words)
+;* $C85E ;Scratch 'score' storage for Display_Option (7 bytes)
+Vec_Expl_Flag equ $C867 ;Explosion_Snd initialization flag?
+;* $C868...$C876 ;Unused?
+Vec_Expl_Timer equ $C877 ;Used by Explosion_Snd
+;* $C878 ;Unused?
+Vec_Num_Players equ $C879 ;Number of players selected in Select_Game
+Vec_Num_Game equ $C87A ;Game number selected in Select_Game
+Vec_Seed_Ptr equ $C87B ;Pointer to 3-byte random number seed (=$C87D)
+Vec_Random_Seed equ $C87D ;Default 3-byte random number seed
+ ;
+;* $C880 - $CBEA is user RAM ;
+ ;
+Vec_Default_Stk equ $CBEA ;Default top-of-stack
+Vec_High_Score equ $CBEB ;High score storage (7 bytes)
+Vec_SWI3_Vector equ $CBF2 ;SWI2/SWI3 interrupt vector (3 bytes)
+Vec_SWI2_Vector equ $CBF2 ;SWI2/SWI3 interrupt vector (3 bytes)
+Vec_FIRQ_Vector equ $CBF5 ;FIRQ interrupt vector (3 bytes)
+Vec_IRQ_Vector equ $CBF8 ;IRQ interrupt vector (3 bytes)
+Vec_SWI_Vector equ $CBFB ;SWI/NMI interrupt vector (3 bytes)
+Vec_NMI_Vector equ $CBFB ;SWI/NMI interrupt vector (3 bytes)
+Vec_Cold_Flag equ $CBFE ;Cold start flag (warm start if = $7321)
+ ;
+VIA_port_b equ $D000 ;VIA port B data I/O register
+;* 0 sample/hold (0=enable mux 1=disable mux)
+;* 1 mux sel 0
+;* 2 mux sel 1
+;* 3 sound BC1
+;* 4 sound BDIR
+;* 5 comparator input
+;* 6 external device (slot pin 35) initialized to input
+;* 7 /RAMP
+VIA_port_a equ $D001 ;VIA port A data I/O register (handshaking)
+VIA_DDR_b equ $D002 ;VIA port B data direction register (0=input 1=output)
+VIA_DDR_a equ $D003 ;VIA port A data direction register (0=input 1=output)
+VIA_t1_cnt_lo equ $D004 ;VIA timer 1 count register lo (scale factor)
+VIA_t1_cnt_hi equ $D005 ;VIA timer 1 count register hi
+VIA_t1_lch_lo equ $D006 ;VIA timer 1 latch register lo
+VIA_t1_lch_hi equ $D007 ;VIA timer 1 latch register hi
+VIA_t2_lo equ $D008 ;VIA timer 2 count/latch register lo (refresh)
+VIA_t2_hi equ $D009 ;VIA timer 2 count/latch register hi
+VIA_shift_reg equ $D00A ;VIA shift register
+VIA_aux_cntl equ $D00B ;VIA auxiliary control register
+;* 0 PA latch enable
+;* 1 PB latch enable
+;* 2 \ 110=output to CB2 under control of phase 2 clock
+;* 3 > shift register control (110 is the only mode used by the Vectrex ROM)
+;* 4 /
+;* 5 0=t2 one shot 1=t2 free running
+;* 6 0=t1 one shot 1=t1 free running
+;* 7 0=t1 disable PB7 output 1=t1 enable PB7 output
+VIA_cntl equ $D00C ;VIA control register
+;* 0 CA1 control CA1 -> SW7 0=IRQ on low 1=IRQ on high
+;* 1 \
+;* 2 > CA2 control CA2 -> /ZERO 110=low 111=high
+;* 3 /
+;* 4 CB1 control CB1 -> NC 0=IRQ on low 1=IRQ on high
+;* 5 \
+;* 6 > CB2 control CB2 -> /BLANK 110=low 111=high
+;* 7 /
+VIA_int_flags equ $D00D ;VIA interrupt flags register
+;* bit cleared by
+;* 0 CA2 interrupt flag reading or writing port A I/O
+;* 1 CA1 interrupt flag reading or writing port A I/O
+;* 2 shift register interrupt flag reading or writing shift register
+;* 3 CB2 interrupt flag reading or writing port B I/O
+;* 4 CB1 interrupt flag reading or writing port A I/O
+;* 5 timer 2 interrupt flag read t2 low or write t2 high
+;* 6 timer 1 interrupt flag read t1 count low or write t1 high
+;* 7 IRQ status flag write logic 0 to IER or IFR bit
+VIA_int_enable equ $D00E ;VIA interrupt enable register
+;* 0 CA2 interrupt enable
+;* 1 CA1 interrupt enable
+;* 2 shift register interrupt enable
+;* 3 CB2 interrupt enable
+;* 4 CB1 interrupt enable
+;* 5 timer 2 interrupt enable
+;* 6 timer 1 interrupt enable
+;* 7 IER set/clear control
+VIA_port_a_nohs equ $D00F ;VIA port A data I/O register (no handshaking)
+
+Cold_Start equ $F000 ;
+Warm_Start equ $F06C ;
+Init_VIA equ $F14C ;
+Init_OS_RAM equ $F164 ;
+Init_OS equ $F18B ;
+Wait_Recal equ $F192 ;
+Set_Refresh equ $F1A2 ;
+DP_to_D0 equ $F1AA ;
+DP_to_C8 equ $F1AF ;
+Read_Btns_Mask equ $F1B4 ;
+Read_Btns equ $F1BA ;
+Joy_Analog equ $F1F5 ;
+Joy_Digital equ $F1F8 ;
+Sound_Byte equ $F256 ;
+Sound_Byte_x equ $F259 ;
+Sound_Byte_raw equ $F25B ;
+Clear_Sound equ $F272 ;
+Sound_Bytes equ $F27D ;
+Sound_Bytes_x equ $F284 ;
+Do_Sound equ $F289 ;
+Do_Sound_x equ $F28C ;
+Intensity_1F equ $F29D ;
+Intensity_3F equ $F2A1 ;
+Intensity_5F equ $F2A5 ;
+Intensity_7F equ $F2A9 ;
+Intensity_a equ $F2AB ;
+Dot_ix_b equ $F2BE ;
+Dot_ix equ $F2C1 ;
+Dot_d equ $F2C3 ;
+Dot_here equ $F2C5 ;
+Dot_List equ $F2D5 ;
+Dot_List_Reset equ $F2DE ;
+Recalibrate equ $F2E6 ;
+Moveto_x_7F equ $F2F2 ;
+Moveto_d_7F equ $F2FC ;
+Moveto_ix_FF equ $F308 ;
+Moveto_ix_7F equ $F30C ;
+Moveto_ix_a equ $F30E ;
+Moveto_ix equ $F310 ;
+Moveto_d equ $F312 ;
+Reset0Ref_D0 equ $F34A ;
+Check0Ref equ $F34F ;
+Reset0Ref equ $F354 ;
+Reset_Pen equ $F35B ;
+Reset0Int equ $F36B ;
+Print_Str_hwyx equ $F373 ;
+Print_Str_yx equ $F378 ;
+Print_Str_d equ $F37A ;
+Print_List_hw equ $F385 ;
+Print_List equ $F38A ;
+Print_List_chk equ $F38C ;
+Print_Ships_x equ $F391 ;
+Print_Ships equ $F393 ;
+Mov_Draw_VLc_a equ $F3AD ;count y x y x ...
+Mov_Draw_VL_b equ $F3B1 ;y x y x ...
+Mov_Draw_VLcs equ $F3B5 ;count scale y x y x ...
+Mov_Draw_VL_ab equ $F3B7 ;y x y x ...
+Mov_Draw_VL_a equ $F3B9 ;y x y x ...
+Mov_Draw_VL equ $F3BC ;y x y x ...
+Mov_Draw_VL_d equ $F3BE ;y x y x ...
+Draw_VLc equ $F3CE ;count y x y x ...
+Draw_VL_b equ $F3D2 ;y x y x ...
+Draw_VLcs equ $F3D6 ;count scale y x y x ...
+Draw_VL_ab equ $F3D8 ;y x y x ...
+Draw_VL_a equ $F3DA ;y x y x ...
+Draw_VL equ $F3DD ;y x y x ...
+Draw_Line_d equ $F3DF ;y x y x ...
+Draw_VLp_FF equ $F404 ;pattern y x pattern y x ... $01
+Draw_VLp_7F equ $F408 ;pattern y x pattern y x ... $01
+Draw_VLp_scale equ $F40C ;scale pattern y x pattern y x ... $01
+Draw_VLp_b equ $F40E ;pattern y x pattern y x ... $01
+Draw_VLp equ $F410 ;pattern y x pattern y x ... $01
+Draw_Pat_VL_a equ $F434 ;y x y x ...
+Draw_Pat_VL equ $F437 ;y x y x ...
+Draw_Pat_VL_d equ $F439 ;y x y x ...
+Draw_VL_mode equ $F46E ;mode y x mode y x ... $01
+Print_Str equ $F495 ;
+Random_3 equ $F511 ;
+Random equ $F517 ;
+Init_Music_Buf equ $F533 ;
+Clear_x_b equ $F53F ;
+Clear_C8_RAM equ $F542 ;never used by GCE carts?
+Clear_x_256 equ $F545 ;
+Clear_x_d equ $F548 ;
+Clear_x_b_80 equ $F550 ;
+Clear_x_b_a equ $F552 ;
+Dec_3_Counters equ $F55A ;
+Dec_6_Counters equ $F55E ;
+Dec_Counters equ $F563 ;
+Delay_3 equ $F56D ;30 cycles
+Delay_2 equ $F571 ;25 cycles
+Delay_1 equ $F575 ;20 cycles
+Delay_0 equ $F579 ;12 cycles
+Delay_b equ $F57A ;5*B + 10 cycles
+Delay_RTS equ $F57D ;5 cycles
+Bitmask_a equ $F57E ;
+Abs_a_b equ $F584 ;
+Abs_b equ $F58B ;
+Rise_Run_Angle equ $F593 ;
+Get_Rise_Idx equ $F5D9 ;
+Get_Run_Idx equ $F5DB ;
+Get_Rise_Run equ $F5EF ;
+Rise_Run_X equ $F5FF ;
+Rise_Run_Y equ $F601 ;
+Rise_Run_Len equ $F603 ;
+Rot_VL_ab equ $F610 ;
+Rot_VL equ $F616 ;
+Rot_VL_Mode_a equ $F61F ;
+Rot_VL_Mode equ $F62B ;
+Rot_VL_dft equ $F637 ;
+Xform_Run_a equ $F65B ;
+Xform_Run equ $F65D ;
+Xform_Rise_a equ $F661 ;
+Xform_Rise equ $F663 ;
+Move_Mem_a_1 equ $F67F ;
+Move_Mem_a equ $F683 ;
+Init_Music_chk equ $F687 ;
+Init_Music equ $F68D ;
+Init_Music_x equ $F692 ;
+Select_Game equ $F7A9 ;
+Clear_Score equ $F84F ;
+Add_Score_a equ $F85E ;
+Add_Score_d equ $F87C ;
+Strip_Zeros equ $F8B7 ;
+Compare_Score equ $F8C7 ;
+New_High_Score equ $F8D8 ;
+Obj_Will_Hit_u equ $F8E5 ;
+Obj_Will_Hit equ $F8F3 ;
+Obj_Hit equ $F8FF ;
+Explosion_Snd equ $F92E ;
+Draw_Grid_VL equ $FF9F ;
+ ;
+music1 equ $FD0D ;
+music2 equ $FD1D ;
+music3 equ $FD81 ;
+music4 equ $FDD3 ;
+music5 equ $FE38 ;
+music6 equ $FE76 ;
+music7 equ $FEC6 ;
+music8 equ $FEF8 ;
+music9 equ $FF26 ;
+musica equ $FF44 ;
+musicb equ $FF62 ;
+musicc equ $FF7A ;
+musicd equ $FF8F ;
+
+;endif
diff --git a/code/led/michael-simonds/veccy-bird/BIRDVEC.I b/code/led/michael-simonds/veccy-bird/BIRDVEC.I
new file mode 100644
index 0000000..3919370
--- /dev/null
+++ b/code/led/michael-simonds/veccy-bird/BIRDVEC.I
@@ -0,0 +1,69 @@
+
+beak ;Vector Count = 10
+ fcb -23,66
+ fcb -19,-6
+ fcb -1,-45
+ fcb 21,-20
+ fcb 19,17
+ fcb 1,59
+ fcb -11,9
+ fcb -10,-9
+ fcb 0,-54
+ fcb 0,49
+
+
+eyeball ;Vector Count = 2
+ fcb 15,37
+ fcb 11,-3
+
+
+bottom ;Vector Count = 4
+ fcb -27,-57
+ fcb -23,23
+ fcb -3,50
+ fcb 10,15
+
+
+wing_2 ;Vector Count = 6
+ fcb -10,-87
+ fcb 16,15
+ fcb -4,52
+ fcb -26,0
+ fcb -2,-51
+ fcb 16,-16
+
+
+wing_3 ;Vector Count = 6
+ fcb -37,-82
+ fcb -8,36
+ fcb 32,26
+ fcb 14,-10
+ fcb -4,-44
+ fcb -34,-8
+
+
+wing ;Vector Count = 6
+ fcb 20,-81
+ fcb 6,26
+ fcb -18,36
+ fcb -35,-17
+ fcb 7,-37
+ fcb 40,-8
+
+
+eye ;Vector Count = 7
+ fcb 50,29
+ fcb -12,-24
+ fcb -30,3
+ fcb -9,16
+ fcb 0,36
+ fcb 28,-1
+ fcb 23,-30
+
+
+top ;Vector Count = 5
+ fcb -1,59
+ fcb 27,-1
+ fcb 24,-32
+ fcb -2,-48
+ fcb -24,-32
diff --git a/code/led/michael-simonds/veccy-bird/CREDITS.I b/code/led/michael-simonds/veccy-bird/CREDITS.I
new file mode 100644
index 0000000..d62d863
--- /dev/null
+++ b/code/led/michael-simonds/veccy-bird/CREDITS.I
@@ -0,0 +1,64 @@
+;Credits
+;print hardware list format
+; height, width, rel y, rel x, string, 0x80, ;
+; height, width, rel y, rel x, string, 0x80, ;
+; 0x00
+Credit_0
+ fcb -6,55,80,-110
+ db " PROGRAMMING & ART"
+ db $80
+
+ fcb -6,55,35,-110
+ db " INSPIRED BY"
+ db $80
+
+ fcb -6,55,-30,-110
+ db " GREETINGS"
+ db $80
+
+ db $00 ;list terminator
+
+Credit_1
+
+ fcb -4,35,75,-45
+ db "MICHAEL SIMONDS"
+ db $80
+
+
+
+ fcb -4,35,20,-35
+ db "QUACK(ZX81)"
+ db $80
+
+ fcb -4,35,10,-58
+ db "DONG (FLAPPY) NGUYEN"
+ db $80
+
+
+
+ fcb -4,35,-45,-38
+ db "THE EPS CREW"
+ db $80
+
+ fcb -4,35,-55,-60
+ db "VECTOR GAMING FORUMS"
+ db $80
+
+ fcb -4,35,-65,-85
+ db "TUMBER, SALOMON & ALL PIONEERS"
+ db $80
+
+ fcb -4,35,-75,-30
+ db "RICHARD H"
+ db $80
+
+ fcb -4,35,-85,-50
+ db "SARAH BEN AND MAX"
+ db $80
+
+ ; fcb -4,35,-110,-58
+ ;db "VECTREX REGENERATION"
+ ;db $80
+
+
+ db $00 ;list terminator
diff --git a/code/led/michael-simonds/veccy-bird/CREDROLL.I b/code/led/michael-simonds/veccy-bird/CREDROLL.I
new file mode 100644
index 0000000..83f74c4
--- /dev/null
+++ b/code/led/michael-simonds/veccy-bird/CREDROLL.I
@@ -0,0 +1,71 @@
+;code for rolling credits contained in credits.i
+
+check_credit_roll:
+ lda credit_roll_counter_a
+ cmpa #-120
+ ble credit_roll ;check if a is 0....if so dec b, otherwise return
+ lda credit_roll_counter_a
+ deca
+ sta credit_roll_counter_a
+ rts
+
+check_credit_back:
+ lda credit_roll_counter_a
+ cmpa #-120
+ ble return_to_startscreen ;check if a is 0....if so dec b, otherwise return
+ lda credit_roll_counter_a
+ deca
+ sta credit_roll_counter_a
+ rts
+
+return_to_startscreen:
+ lda #127
+ sta credit_roll_counter_a
+ bra startscreen ;ATTENTION - FIX THIS! is this dodgy do we need to retun? is this growing the stack?
+
+credit_roll:
+ lda #127
+ sta credit_roll_counter_a ;reset the credit roll counter that lets us go to the credit roll after a time
+ clra
+ sta credit_intensity
+; lda #2
+; sta tmp_1 ;try alternating the text every frame to stop flicker?
+
+draw_credits:
+; jsr calib ;calibrates
+ jsr Wait_Recal ; BIOS recalibration
+ jsr check_credit_back
+
+ jsr Reset0Ref
+ lda credit_intensity
+ inca
+ cmpa #100
+ bge draw_credits_t
+ sta credit_intensity
+draw_credits_t:
+ jsr Intensity_a ; Sets the intensity of the
+ ;lda tmp_1;
+ ;deca;
+ ;cmpa #1;
+ beq draw_credits_2;
+ jsr Moveto_d
+ ldu #Credit_0
+ jsr Print_List_hw ; Vectrex BIOS print rout
+ lda #2
+ sta tmp_1
+ ;rts;
+draw_credits_2:
+ lda credit_intensity
+ suba #50
+ jsr Intensity_a
+ ldu #Credit_1
+ jsr Print_List_hw
+ jsr Read_Btns
+ cmpa #0
+ beq draw_credits_r ;if button not pressed keep drawing credits
+ lda #127 ;reset counter and return to main screen
+ sta credit_roll_counter_a ;reset counter so we dont get jumped back to the credits screen
+ rts
+draw_credits_r:
+
+ bra draw_credits
\ No newline at end of file
diff --git a/code/led/michael-simonds/veccy-bird/DRAWLOGO.I b/code/led/michael-simonds/veccy-bird/DRAWLOGO.I
new file mode 100644
index 0000000..b9e0a57
--- /dev/null
+++ b/code/led/michael-simonds/veccy-bird/DRAWLOGO.I
@@ -0,0 +1,170 @@
+_DRAW_LINE_D macro
+ local LF3F4 ;defines 'LF3F4' as a local variable
+ sta shift register control (110 is the only mode used by the Vectrex ROM)
+* 4 /
+* 5 0=t2 one shot 1=t2 free running
+* 6 0=t1 one shot 1=t1 free running
+* 7 0=t1 disable PB7 output 1=t1 enable PB7 output
+VIA_cntl EQU $D00C ;VIA control register
+* 0 CA1 control CA1 -> SW7 0=IRQ on low 1=IRQ on high
+* 1 \
+* 2 > CA2 control CA2 -> /ZERO 110=low 111=high
+* 3 /
+* 4 CB1 control CB1 -> NC 0=IRQ on low 1=IRQ on high
+* 5 \
+* 6 > CB2 control CB2 -> /BLANK 110=low 111=high
+* 7 /
+VIA_int_flags EQU $D00D ;VIA interrupt flags register
+* bit cleared by
+* 0 CA2 interrupt flag reading or writing port A I/O
+* 1 CA1 interrupt flag reading or writing port A I/O
+* 2 shift register interrupt flag reading or writing shift register
+* 3 CB2 interrupt flag reading or writing port B I/O
+* 4 CB1 interrupt flag reading or writing port A I/O
+* 5 timer 2 interrupt flag read t2 low or write t2 high
+* 6 timer 1 interrupt flag read t1 count low or write t1 high
+* 7 IRQ status flag write logic 0 to IER or IFR bit
+VIA_int_enable EQU $D00E ;VIA interrupt enable register
+* 0 CA2 interrupt enable
+* 1 CA1 interrupt enable
+* 2 shift register interrupt enable
+* 3 CB2 interrupt enable
+* 4 CB1 interrupt enable
+* 5 timer 2 interrupt enable
+* 6 timer 1 interrupt enable
+* 7 IER set/clear control
+VIA_port_a_nohs EQU $D00F ;VIA port A data I/O register (no handshaking)
+
+Cold_Start EQU $F000 ;
+Warm_Start EQU $F06C ;
+Init_VIA EQU $F14C ;
+Init_OS_RAM EQU $F164 ;
+Init_OS EQU $F18B ;
+Wait_Recal EQU $F192 ;
+Set_Refresh EQU $F1A2 ;
+DP_to_D0 EQU $F1AA ;
+DP_to_C8 EQU $F1AF ;
+Read_Btns_Mask EQU $F1B4 ;
+Read_Btns EQU $F1BA ;
+Joy_Analog EQU $F1F5 ;
+Joy_Digital EQU $F1F8 ;
+Sound_Byte EQU $F256 ;
+Sound_Byte_x EQU $F259 ;
+Sound_Byte_raw EQU $F25B ;
+Clear_Sound EQU $F272 ;
+Sound_Bytes EQU $F27D ;
+Sound_Bytes_x EQU $F284 ;
+Do_Sound EQU $F289 ;
+Do_Sound_x EQU $F28C ;
+Intensity_1F EQU $F29D ;
+Intensity_3F EQU $F2A1 ;
+Intensity_5F EQU $F2A5 ;
+Intensity_7F EQU $F2A9 ;
+Intensity_a EQU $F2AB ;
+Dot_ix_b EQU $F2BE ;
+Dot_ix EQU $F2C1 ;
+Dot_d EQU $F2C3 ;
+Dot_here EQU $F2C5 ;
+Dot_List EQU $F2D5 ;
+Dot_List_Reset EQU $F2DE ;
+Recalibrate EQU $F2E6 ;
+Moveto_x_7F EQU $F2F2 ;
+Moveto_d_7F EQU $F2FC ;
+Moveto_ix_FF EQU $F308 ;
+Moveto_ix_7F EQU $F30C ;
+Moveto_ix_b EQU $F30E ;
+Moveto_ix EQU $F310 ;
+Moveto_d EQU $F312 ;
+Reset0Ref_D0 EQU $F34A ;
+Check0Ref EQU $F34F ;
+Reset0Ref EQU $F354 ;
+Reset_Pen EQU $F35B ;
+Reset0Int EQU $F36B ;
+Print_Str_hwyx EQU $F373 ;
+Print_Str_yx EQU $F378 ;
+Print_Str_d EQU $F37A ;
+Print_List_hw EQU $F385 ;
+Print_List EQU $F38A ;
+Print_List_chk EQU $F38C ;
+Print_Ships_x EQU $F391 ;
+Print_Ships EQU $F393 ;
+Mov_Draw_VLc_a EQU $F3AD ;count y x y x ...
+Mov_Draw_VL_b EQU $F3B1 ;y x y x ...
+Mov_Draw_VLcs EQU $F3B5 ;count scale y x y x ...
+Mov_Draw_VL_ab EQU $F3B7 ;y x y x ...
+Mov_Draw_VL_a EQU $F3B9 ;y x y x ...
+Mov_Draw_VL EQU $F3BC ;y x y x ...
+Mov_Draw_VL_d EQU $F3BE ;y x y x ...
+Draw_VLc EQU $F3CE ;count y x y x ...
+Draw_VL_b EQU $F3D2 ;y x y x ...
+Draw_VLcs EQU $F3D6 ;count scale y x y x ...
+Draw_VL_ab EQU $F3D8 ;y x y x ...
+Draw_VL_a EQU $F3DA ;y x y x ...
+Draw_VL EQU $F3DD ;y x y x ...
+Draw_Line_d EQU $F3DF ;y x y x ...
+Draw_VLp_FF EQU $F404 ;pattern y x pattern y x ... $01
+Draw_VLp_7F EQU $F408 ;pattern y x pattern y x ... $01
+Draw_VLp_scale EQU $F40C ;scale pattern y x pattern y x ... $01
+Draw_VLp_b EQU $F40E ;pattern y x pattern y x ... $01
+Draw_VLp EQU $F410 ;pattern y x pattern y x ... $01
+Draw_Pat_VL_a EQU $F434 ;y x y x ...
+Draw_Pat_VL EQU $F437 ;y x y x ...
+Draw_Pat_VL_d EQU $F439 ;y x y x ...
+Draw_VL_mode EQU $F46E ;mode y x mode y x ... $01
+Print_Str EQU $F495 ;
+Random_3 EQU $F511 ;
+Random EQU $F517 ;
+Init_Music_Buf EQU $F533 ;
+Clear_x_b EQU $F53F ;
+Clear_C8_RAM EQU $F542 ;never used by GCE carts?
+Clear_x_256 EQU $F545 ;
+Clear_x_d EQU $F548 ;
+Clear_x_b_80 EQU $F550 ;
+Clear_x_b_a EQU $F552 ;
+Dec_3_Counters EQU $F55A ;
+Dec_6_Counters EQU $F55E ;
+Dec_Counters EQU $F563 ;
+Delay_3 EQU $F56D ;30 cycles
+Delay_2 EQU $F571 ;25 cycles
+Delay_1 EQU $F575 ;20 cycles
+Delay_0 EQU $F579 ;12 cycles
+Delay_b EQU $F57A ;5*B + 10 cycles
+Delay_RTS EQU $F57D ;5 cycles
+Bitmask_a EQU $F57E ;
+Abs_a_b EQU $F584 ;
+Abs_b EQU $F58B ;
+Rise_Run_Angle EQU $F593 ;
+Get_Rise_Idx EQU $F5D9 ;
+Get_Run_Idx EQU $F5DB ;
+Get_Rise_Run EQU $F5EF ;
+Rise_Run_X EQU $F5FF ;
+Rise_Run_Y EQU $F601 ;
+Rise_Run_Len EQU $F603 ;
+
+Rot_VL_ab EQU $F610 ;
+Rot_VL EQU $F616 ;
+Rot_VL_Mode EQU $F61F ;
+Rot_VL_M_dft EQU $F62B ;
+;Rot_VL_dft EQU $F637 ;
+
+
+;Rot_VL_ab EQU $F610 ;
+;Rot_VL EQU $F616 ;
+;Rot_VL_Mode_a EQU $F61F ;
+;Rot_VL_Mode EQU $F62B ;
+;Rot_VL_dft EQU $F637 ;
+
+Xform_Run_a EQU $F65B ;
+Xform_Run EQU $F65D ;
+Xform_Rise_a EQU $F661 ;
+Xform_Rise EQU $F663 ;
+Move_Mem_a_1 EQU $F67F ;
+Move_Mem_a EQU $F683 ;
+Init_Music_chk EQU $F687 ;
+Init_Music EQU $F68D ;
+Init_Music_x EQU $F692 ;
+Select_Game EQU $F7A9 ;
+Clear_Score EQU $F84F ;
+Add_Score_a EQU $F85E ;
+Add_Score_d EQU $F87C ;
+Strip_Zeros EQU $F8B7 ;
+Compare_Score EQU $F8C7 ;
+New_High_Score EQU $F8D8 ;
+Obj_Will_Hit_u EQU $F8E5 ;
+Obj_Will_Hit EQU $F8F3 ;
+Obj_Hit EQU $F8FF ;
+Explosion_Snd EQU $F92E ;
+Draw_Grid_VL EQU $FF9F ;
+ ;
+music1 EQU $FD0D ;
+music2 EQU $FD1D ;
+music3 EQU $FD81 ;
+music4 EQU $FDD3 ;
+music5 EQU $FE38 ;
+music6 EQU $FE76 ;
+music7 EQU $FEC6 ;
+music8 EQU $FEF8 ;
+music9 EQU $FF26 ;
+musica EQU $FF44 ;
+musicb EQU $FF62 ;
+musicc EQU $FF7A ;
+musicd EQU $FF8F ;
+Char_Table EQU $F9F4
+Char_Table_End EQU $FBD4
+
+ endif
\ No newline at end of file
diff --git a/code/led/michael-simonds/veccy-bird/Veccyb.asm b/code/led/michael-simonds/veccy-bird/Veccyb.asm
new file mode 100644
index 0000000..b1a9106
--- /dev/null
+++ b/code/led/michael-simonds/veccy-bird/Veccyb.asm
@@ -0,0 +1,1336 @@
+; *** Veccy Bird
+;To do
+;Music and or AYFX? - low priority - integrate the YM code - maybe one day
+;By Michael Simonds 2014
+ include "VECTREX.I"
+;Macros
+;next time use macros to save time!!!
+; *** Needed variables
+;does the assembler support DB DW etc? is so we could define these variables easier!? - might be lower case only
+;note $c800 to $c80e are the ram location the bios shadows the sound chip registers and other things, so this must not be used for variables!
+;this is why user ram must start at above $c880
+t_width equ $c880 ;Size for tile width //not used?
+s_speed equ t_width+1 ;Speed of scroll //not used?
+cur_tile equ s_speed+1 ;Current Tile
+cur_offset equ cur_tile+1 ;distance between tiles
+scr_offset equ cur_offset+1 ;scroll offset, we scroll one tile amount then move the level array.
+level_shift equ scr_offset+1 ;shift the level position, so we can repeat a pattern
+b_pipe equ level_shift+1 ;bottom pipe from level array
+t_pipe equ b_pipe+1 ;top pipe from level array
+flap_on equ t_pipe+1 ;0 = not flapping, 1 = flapping animation //not used yet
+bird_x equ flap_on+1 ;bird x (probably always 0 so could of been a constant instead?)
+bird_y equ bird_x+1 ;bird y position
+bird_vel equ bird_y+1 ;velocity in the y of the bird
+bird_vel_count equ bird_vel+1 ;counter so we don't update velocity every frame
+flap_snd_count equ bird_vel_count+1 ;how long a sound is playing - might need more of these?
+point_snd_count equ flap_snd_count+1 ;how long a sound is playing - might need more of these?
+scr_byte1 equ point_snd_count+1 ;score digits 3byte, 1byte per digit (unpacked BDC)
+scr_byte2 equ scr_byte1+1 ;byte 1 is the lower digits
+scr_byte3 equ scr_byte2+1 ;byte3 is now not used as we only go to 50
+scr_txt equ scr_byte3+1 ;4bytes for ascii version of score, 3 for text and 1 for terminator
+game_over_intensity equ scr_txt+4
+game_over_text_scale equ game_over_intensity+1
+dead_flag equ game_over_text_scale+1 ;use this as bool for things like override pipes intensity 1=dead
+bird_attract_move_counter equ dead_flag+1
+tap_intensity equ bird_attract_move_counter+1
+hiscr_byte1 equ tap_intensity+1
+hiscr_byte2 equ hiscr_byte1+1
+hiscr_byte3 equ hiscr_byte2+1 ;byte3 is now not used as we only go to 50
+hiscr_txt equ hiscr_byte3+1 ;4 bytes for score, 1 is terminator of string
+wing_anim_counter equ hiscr_txt+4
+bird_rotation equ wing_anim_counter+1 ;rotation value of bird
+r_beak equ bird_rotation+1 ;storage for rotated bird vectors many bytes! 46
+r_eyeball equ r_beak+20
+r_bottom equ r_eyeball+4
+r_wing equ r_bottom+8
+r_wing_2 equ r_wing+12
+r_wing_3 equ r_wing_2+12
+r_eye equ r_wing_3+12
+r_top equ r_eye+14
+credit_roll_counter_a equ r_top+10 ;how long before we show the credits needs to inc and reset
+credit_length equ credit_roll_counter_a+1
+credit_intensity equ credit_length+1
+tmp_1 equ credit_intensity+1 ;used for anything ?
+tmp_2 equ tmp_1+1 ;used for anything
+; All this below is just for the particle system used on the win screen!
+;emitter1
+particle_1_xy equ tmp_2+1 ; SOME NUMBER OF BYTES FOR PARTICLE XY (stored as 16bit)
+particle_1_vel_xy equ particle_1_xy+64 ; SOME NUMBER OF BYTES FOR PARTICLE VELOCITY XY (stored as 16bit)
+emitter_1_intensity equ particle_1_vel_xy+64 ;1 byte intensity
+emitter_1_y equ emitter_1_intensity+1 ;2 bytes for subpixel
+emitter_1_x equ emitter_1_y+2 ;2 bytes for subpixel
+emitter_1_life equ emitter_1_x+2 ;1 byte
+;emitter2
+particle_2_xy equ emitter_1_life+1 ; SOME NUMBER OF BYTES FOR PARTICLE XY (stored as 16bit)
+particle_2_vel_xy equ particle_2_xy+64 ; SOME NUMBER OF BYTES FOR PARTICLE VELOCITY XY (stored as 16bit)
+emitter_2_intensity equ particle_2_vel_xy+64 ;1 byte intensity
+emitter_2_y equ emitter_2_intensity+1 ;2 bytes for subpixel
+emitter_2_x equ emitter_2_y+2 ;2 bytes for subpixel
+emitter_2_life equ emitter_2_x+2 ;1 byte
+;emitter3
+particle_3_xy equ emitter_2_life+1 ; SOME NUMBER OF BYTES FOR PARTICLE XY (stored as 16bit)
+particle_3_vel_xy equ particle_3_xy+64 ; SOME NUMBER OF BYTES FOR PARTICLE VELOCITY XY (stored as 16bit)
+emitter_3_intensity equ particle_3_vel_xy+64 ;1 byte intensity
+emitter_3_y equ emitter_3_intensity+1 ;2 bytes for subpixel
+emitter_3_x equ emitter_3_y+2 ;2 bytes for subpixel
+emitter_3_life equ emitter_3_x+2 ;1 byte
+emitter_1_on equ emitter_3_life+1 ;should be 1 why 4??
+emitter_2_on equ emitter_1_on+1
+emitter_3_on equ emitter_2_on+1
+prev_part_yx equ emitter_3_on+1 ;2 bytes /temp previous 8bit particle xy pos in 1 word
+emitter_1_pcount equ prev_part_yx+2
+emitter_2_pcount equ emitter_1_pcount+1
+emitter_3_pcount equ emitter_2_pcount+1
+emitter_current_pcount equ emitter_3_pcount+1 ;copy of current pcount of the emitter being updated
+firework_counter equ emitter_current_pcount+1 ;1byte counter
+emitter_1_vel_y equ firework_counter+1
+emitter_1_vel_x equ emitter_1_vel_y+2
+emitter_2_vel_y equ emitter_1_vel_x+2
+emitter_2_vel_x equ emitter_2_vel_y+2
+emitter_3_vel_y equ emitter_2_vel_x+2
+emitter_3_vel_x equ emitter_3_vel_y+2
+rocket_1_on equ emitter_3_vel_x+2
+rocket_2_on equ rocket_1_on+1
+rocket_3_on equ rocket_2_on+1
+sound_flag_1 equ rocket_3_on+1
+sound_flag_2 equ sound_flag_1+1
+sound_flag_3 equ sound_flag_2+1
+sound_explode_flag_1 equ sound_flag_3+1
+sound_explode_flag_2 equ sound_explode_flag_1+1
+sound_explode_flag_3 equ sound_explode_flag_2+1
+led_color equ sound_explode_flag_3+1
+led_true equ led_color+1
+;when I used 3x128bytes for particles I must of ran out of mem and got unexpected bytes set wrong
+;for the emitter, note there are only 874 bytes of safe ram available to the user!!
+;Constants in rom
+BIRDVCOUNT equ 8 ; how often we update bird velocity to increase the acceleration downward
+LOGOX equ 0 ; position of logo
+LOGOY equ 70 ;add # before like #LOGOY when using to get
+LOGOSCALE equ 66
+;***************************************************************************
+; USER RAM SECTION ($C880-$CBEA)
+;***************************************************************************
+rpcfn equ $cb00
+
+ org 0
+; *** Init block
+ fcb $67,$20
+ fcc "GCE 2014"
+ fcb $80
+ fdb musa
+ fdb $f850
+ fdb $30b8
+ fcc "VECCY BIRD"
+ fcb $80,$0
+; *** Start Code
+;boot initialise, anything we need to do only when loading the game for the first time
+boot_init:
+;***************************************************************************
+; RPC COPY START
+;***************************************************************************
+rpccopystart
+ ldx #rpcfndat
+ ldy #rpcfn
+rpccopyloop
+ lda ,x+
+ sta ,y+
+ cmpx #rpcfndatend
+ bne rpccopyloop
+;***************************************************************************
+; RPC COPY END
+;***************************************************************************
+;setup highscores
+ clra
+ sta hiscr_byte1 ;ascii version of the high score
+ sta hiscr_byte2
+; sta hiscr_byte3 ;originally the max score was 999, now its only 50, so no need for a 3rd digit
+ lda #$80
+ sta scr_txt+3 ;terminator
+ lda #32 ;spaces ;reset ascii score
+ sta hiscr_txt
+ sta hiscr_txt+1
+ lda #48 ;0s
+ sta hiscr_txt+2
+ lda #$80 ;string terminator
+ sta hiscr_txt+3
+;copy highscore from memory if required
+ ;lda $C83B ;is highscore valid? will be 0 if cold boot?
+ ;cmpa #0
+ ;beq no_score_copy
+ lda Vec_High_Score+5
+ cmpa #32
+ bne byte1_is_valid
+ lda #48 ;if a space (32) change it to 48 which is 0
+byte1_is_valid:
+ suba #48
+ sta scr_byte1
+ sta hiscr_byte1
+ lda Vec_High_Score+4
+ cmpa #32
+ bne byte2_is_valid
+ lda #48 ;if a space (32) change it to 48 which is 0
+byte2_is_valid:
+ suba #48 ;bring value back to decimal
+ sta scr_byte2
+ sta hiscr_byte2
+ jsr update_hiscr
+no_score_copy:
+;initialise some variables call this after boot and when game ends
+init:
+ lda #31
+ sta scr_offset
+ ;//all set to 0
+ clra ;Set a to 0 (good habit to clr as its faster)
+ sta led_color
+ sta led_true
+ sta level_shift
+ sta flap_snd_count ;set counter for sound length to 0
+ sta point_snd_count ;count to play two sounds for the points
+ sta scr_byte1
+ sta scr_byte2
+; sta scr_byte3
+ sta game_over_intensity
+ sta game_over_text_scale
+ sta dead_flag
+ sta bird_attract_move_counter
+ sta tap_intensity
+ sta wing_anim_counter
+ sta bird_rotation
+ sta emitter_1_on ;0
+ sta emitter_2_on ;0
+ sta emitter_3_on ;0
+ sta rocket_1_on
+ sta rocket_2_on
+ sta rocket_3_on
+ sta sound_flag_1 ;as used for fireworks
+ sta sound_flag_2
+ sta sound_flag_3
+ sta sound_explode_flag_1
+ sta sound_explode_flag_2
+ sta sound_explode_flag_3
+ lda #16 ;max of 16
+ sta emitter_1_pcount
+ sta emitter_2_pcount
+ sta emitter_3_pcount
+ lda #-6
+ ldb #-6
+ std emitter_1_y
+ lda #6
+ ldb #6
+ std emitter_2_y
+ lda #6
+ ldb #-6
+ std emitter_3_y
+; jsr init_emitter_1 ;start emitter
+; jsr init_emitter_2 ;start emitter
+; jsr init_emitter_3 ;start emitter
+ lda #127
+ sta credit_roll_counter_a
+; lda #4 ;debug score forced to start at 40
+; sta scr_byte2
+; debug level position add in to jump to a certain point
+; lda #100
+; sta level_shift
+ lda #32 ;spaces ;reset ascii score
+ sta scr_txt
+ sta scr_txt+1
+ lda #48 ;0s
+ sta scr_txt+2
+ lda #$80 ;string terminator
+ sta scr_txt+3
+ jsr Clear_Sound ;turn off any sounds
+ jsr Read_Btns ;get the state of buttons for comparison to when we do want to check them
+ lda #1
+ sta flap_on ;set flapping anim state on
+ lda #-31
+ sta bird_x
+ clra
+ sta bird_y ;set bird position to middle of screen
+ lda #1
+ sta bird_vel ;inital bird velocity
+ lda #BIRDVCOUNT
+ sta bird_vel_count ;counter for which frame we update velocity down
+startscreen:
+; jsr win_screen ;debug winscreen
+; jsr calib
+ jsr Wait_Recal ; BIOS recalibration
+ jsr bird_attract_mode ;moves bird up and down
+ jsr draw_bird ;56078-27731 = 28347 cycles
+ jsr draw_titles ;56078-34377 = 21701 cycles total!?!! /without reset0ref =55405 (only saves 673)
+ ;drawtitles 56078-38433 = same as normal but final draw vector jsr removed (so 17645 cycles drawing)
+ jsr draw_copyright ;56078 cycles with this text, 48464 without (7600 cycles-ish)
+ jsr draw_tap ;56078 cycles -48875 = 7204 cycles
+ jsr check_credit_roll ;if timer then roll credits
+ jsr Read_Btns
+ cmpa #0
+ beq startscreen ;no button pressed
+ ;if button pressed carry on-->
+game_loop:
+; jsr calib
+
+;***************************************************************************
+; LED UPDATE FUNCTION START
+;***************************************************************************
+ lda led_true ; check for LED update
+ cmpa #1
+ bne led_exit
+
+ clra ; change LED color
+ sta led_true
+ lda led_color
+ cmpa #8
+ bne led_next
+
+ clra ; else reset and inc to 1
+led_next
+ inca
+ sta led_color
+
+ sta $7ffe ; Store in special cart location
+ lda #4 ; rpc call to update LED
+ jmp rpcfn ; Call
+led_exit
+;***************************************************************************
+; LED UPDATE FUNCTION END
+;***************************************************************************
+new_game_loop:
+ jsr Wait_Recal ; BIOS recalibration
+ jsr scroll
+ jsr check_flapsound ;check if sound has stopped playing or not
+ jsr drawlevel
+ jsr move_bird
+ jsr draw_bird
+ jsr check_score
+ jsr check_collision ;must be done after check score because score gets current pipe ;comment to turn off collision
+ lda dead_flag
+ cmpa #1
+ beq goto_init
+ jsr print_score
+ bra game_loop
+
+goto_init:
+ bra init
+
+bird_dead_mode: ;things we do once in this mode
+; jsr calib
+ jsr Wait_Recal ; BIOS recalibration
+ clra
+ sta flap_on ;set flapping animation flag, so no flapping
+ jsr check_if_hiscore
+ jsr Clear_Sound
+ jsr play_deadsound
+bird_dead_mode_r: ;things we repeat
+; jsr calib ;we need to do this again because we loop back to this point
+ jsr Wait_Recal ; BIOS recalibration
+ jsr check_flapsound ;this is now check general sound
+ lda #1
+ sta dead_flag
+ jsr drawlevel
+ jsr bird_dead_pos ;make the bird fall to the ground
+ jsr draw_bird
+ jsr draw_game_over
+ jsr draw_dead_score_text
+ jsr draw_dead_hiscore_text
+ jsr draw_score_name
+ lda game_over_intensity
+ cmpa #100
+ bge bird_dead_mode_allow_buttons
+ bra bird_dead_mode_r ;loop back as buttons not allowed yet
+
+bird_dead_mode_allow_buttons:
+ jsr Read_Btns
+ cmpa #0
+ beq bird_dead_mode_r
+ ;bra win_screen;tempDEBUUUUUG to get to win_screen
+ ;bra init ;reset to start screen ; does this fill up the stack???
+ rts
+
+;calib: ;waste of cycles!!!! so now inlined
+ ; jsr Wait_Recal ; BIOS recalibration
+; rts
+ include "GETNAME.I" ;get_score_name
+check_if_hiscore: ;{
+; lda scr_byte3 ;byte1 is the lower digit
+; cmpa hiscr_byte3 ;check if the 100s are higher than current high score
+; bgt update_hiscr ;if score is greater than
+ lda scr_byte2 ;load 10s
+ cmpa hiscr_byte2 ;compare
+ bgt update_hiscr ;if greater than update score
+ beq check_byte_1 ;if equal to check second byte
+ rts ;otherwise return
+
+check_byte_1:
+ lda scr_byte1 ;load byte1
+ cmpa hiscr_byte1 ;compare
+ bgt update_hiscr ;if greater than update score
+ rts ;score was not higher
+
+update_hiscr: ;copy score to high score
+ lda scr_byte1
+ sta hiscr_byte1
+ adda #48
+ sta hiscr_txt+2
+ sta Vec_High_Score+5 ; highscore format is 7bytes"xxxxxx",$80
+ lda scr_byte2
+ sta hiscr_byte2
+ adda #48
+ sta hiscr_txt+1
+ sta Vec_High_Score+4 ;also copy to vectrex high score
+; lda scr_byte3
+; sta hiscr_byte3
+; adda #48
+; sta hiscr_txt
+ ;strip high score ;remove leading 00s before returning from updating the score
+; lda hiscr_txt
+; cmpa #48
+; bne update_hiscr_r
+; lda #32
+; sta hiscr_txt
+ lda hiscr_txt+1 ;strip highscore
+ cmpa #48
+ bne update_hiscr_r
+ lda #32
+ sta hiscr_txt+1
+ sta Vec_High_Score+4 ;also copy space to vectrex score if required
+update_hiscr_r:
+ rts
+
+;}
+;{ Check if scored
+check_score: ;did we pass through a pipe mid point if so score = +1
+ ldb #1 ;check the pipe of the tile on screen (where the x of the bird is)
+ addb level_shift ;the offset of the level
+ ldx #level
+ lda b,x
+ cmpa #0
+ bne tile_has_height ;if not 0 then find out out
+ bra check_score_rt ;return from check score because there is no pipe
+
+tile_has_height:
+ lda scr_offset ;load the scroll offset
+ cmpa #25 ;are we at this point in the scroll?
+ bne check_score_rt ;if not just return
+ lda #1 ; Update LED
+ sta led_true ; |
+ jsr play_pointsound ;otherwise play sound for score
+;score routine goes here ------ simple 3byte not packed
+ lda scr_byte1 ;load byte storing single figures
+ inca ;increase score by 1
+ cmpa #10 ;is it higher than 9
+ beq inc_digit2 ;if so jump to increase digit 2
+ sta scr_byte1 ;or just store increased value
+ adda #48 ;also add 48 for ascii version
+ sta scr_txt+2 ;save ascii
+ bra strip_score ;no need to increase next digit, so continue to strip digits
+
+inc_digit2:
+ clra
+ sta scr_byte1 ;reset byte1
+ adda #48
+ sta scr_txt+2 ;save ascii byte1 but reversed in memory else it would be 100 instead of 001
+ lda scr_byte2
+ inca
+ cmpa #5
+; beq inc_digit3
+ beq scoremax ;over 5 (50) go to win screen
+ sta scr_byte2
+ adda #48
+ sta scr_txt+1 ;save ascii byte2
+ bra strip_score
+
+;inc_digit3 ;no longer required
+; clra
+; sta scr_byte2
+; adda #48
+; sta scr_txt+1
+; lda scr_byte3
+; inca
+; cmpa #10
+; beq scoremax
+; sta scr_byte3
+; adda #48
+; sta scr_txt
+; bra strip_score
+scoremax:
+ ;if we get here the score must of maxed out to 50
+ ;put in a win screen??
+ ;set final score to 50!
+ sta scr_byte2
+ adda #48
+ sta scr_txt+1 ;save ascii byte2
+ clra
+ sta scr_byte1 ;reset byte1
+ adda #48
+ sta scr_txt+2
+ jsr strip_score
+ jsr update_hiscr
+ jsr win_screen
+strip_score: ;remove leading 00s before returning from updating the score
+ lda scr_txt
+ cmpa #48
+ bne check_score_rt
+ lda #32
+ sta scr_txt
+ lda scr_txt+1
+ cmpa #48
+ bne check_score_rt
+ lda #32
+ sta scr_txt+1
+check_score_rt:
+ rts
+
+;}
+check_collision: ;{
+ ldb #1 ;check the pipe of the 3rd tile
+ addb level_shift ;the offset of the level
+ ldx #level
+ lda b,x
+ cmpa #0
+ bne check_pipe_1 ;if not 0 check pipes
+ rts ;no pipe so don't check
+
+check_pipe_1:
+ cmpa #1
+ bne check_pipe_2
+ ldb bird_y
+ cmpb #95
+ bge bird_dead_mode ;branch if greater then or equal
+ cmpb #53
+ ble bird_dead_mode ;branch if less than or equal
+ rts
+
+check_pipe_2:
+ cmpa #2
+ bne check_pipe_3
+ ldb bird_y ;not sure why but b seems to get trashed so load it again
+ cmpb #65
+ bge bird_dead_mode ;branch if greater then or equal
+ cmpb #23
+ ble bird_dead_mode ;branch if less than or equal
+ rts
+
+check_pipe_3:
+ cmpa #3
+ bne check_pipe_4
+ ldb bird_y ;not sure why but b seems to get trashed so load it again
+ cmpb #35
+ bge bird_dead_mode ;branch if greater then or equal
+ cmpb #-7
+ ble bird_dead_mode ;branch if less than or equal
+ rts
+
+check_pipe_4:
+ cmpa #4
+ bne check_pipe_5
+ ldb bird_y ;not sure why but b seems to get trashed so load it again
+ cmpb #5
+ bge bird_dead_mode ;branch if greater then or equal
+ cmpb #-37
+ ble bird_dead_mode ;branch if less than or equal
+ rts
+
+check_pipe_5:
+ cmpa #5
+ bne check_pipe_6
+ ldb bird_y ;not sure why but b seems to get trashed so load it again
+ cmpb #-25
+ bge bird_dead_mode ;branch if greater then or equal
+ cmpb #-67
+ ble bird_dead_mode ;branch if less than or equal
+ rts
+
+check_pipe_6:
+ cmpa #6
+ bne check_pipe_rt ;We should never get here anyway- if we do something is wrong!! it should of been 0 to 6
+ ldb bird_y ;not sure why but b seems to get trashed so load it again
+ cmpb #-55
+ bge bird_dead_mode ;branch if greater then or equal
+ cmpb #-97
+ ble bird_dead_mode ;branch if less than or equal
+check_pipe_rt:
+ rts
+
+;}
+scroll: ;we scroll one tile distance and then shift the whole level by 1
+ lda scr_offset
+ deca ;reduce offset by 1
+ sta scr_offset
+ bne sc_rt ;if not 0 return else if 0...
+ lda #31 ;reset the scroll
+ sta scr_offset ;store offset
+ lda level_shift ;load the where we start drawing the level offset in memory
+ inca ; increase offset
+ sta level_shift ; store shift
+ cmpa #121 ; check if we want to jump the level back to a certain point
+ bge move_back ; go to reset the shift
+ bra sc_rt
+
+move_back:
+ lda #7 ;This is the position in the level index we are resetting to
+ sta level_shift ;reset the shift
+ ;continue
+sc_rt: ;to return to main
+ rts
+
+drawlevel:
+ lda #-95 ;left side of the screen
+ adda scr_offset ;add scroll offset
+ sta cur_offset
+ ldb #0 ;number of tiles
+ stb cur_tile
+tile:
+ ldb cur_tile
+ addb level_shift
+ ldx #level
+ lda b,x
+ sta b_pipe ;save the level data for drawing the correct height
+ cmpa #0 ;best way to do this?
+ bne draw ;if the tile is not 0, go draw something
+afterdraw:
+ lda cur_tile
+ inca ;load the next tile to draw on screen
+ cmpa #6 ;number of tiles to draw on screen
+ bge endx ;if we got to the end of the screen stop drawing tiles
+ sta cur_tile ;or save the next tile to draw
+ lda cur_offset ;the screen offset of where to draw the tile
+ adda #32 ;next tile starts 32 along the x
+ sta cur_offset ;save the offset
+ bra tile ;draw the next tile
+
+endx:
+ rts
+
+draw:
+ jsr Reset0Ref
+ lda #-127 ;Y position
+ ldb cur_offset ;X position
+ jsr Moveto_d_7F
+ jsr setpipeintensity
+ ;check which pipe we are drawing
+ lda b_pipe
+ cmpa #1
+ beq draw_pipeup_1
+ cmpa #2
+ beq draw_pipeup_2
+ cmpa #3
+ beq draw_pipeup_3
+ cmpa #4
+ beq draw_pipeup_4
+ cmpa #5
+ beq draw_pipeup_5
+ cmpa #6
+ beq draw_pipeup_6
+ ;we should never get to here...if we do
+ ;b_pipe contained something other than we expect (we expect 0 to 6)
+draw_pipeup_1:
+ ldx #pipeup_1 ; vectors
+ bra draw_pipeup_fin
+
+draw_pipeup_2:
+ ldx #pipeup_2 ; vectors
+ bra draw_pipeup_fin
+
+draw_pipeup_3:
+ ldx #pipeup_3 ; vectors
+ bra draw_pipeup_fin
+
+draw_pipeup_4:
+ ldx #pipeup_4 ; vectors
+ bra draw_pipeup_fin
+
+draw_pipeup_5:
+ ldx #pipeup_5 ; vectors
+ bra draw_pipeup_fin
+
+draw_pipeup_6:
+ ldx #pipeup_6 ; vectors
+ bra draw_pipeup_fin
+
+draw_pipeup_fin:
+ lda #8 ; number of vectors in pipe
+ ldb #127 ; Scaling
+ jsr Draw_VL_ab ; Draw
+drawdown:
+ jsr Reset0Ref
+ lda #127
+ ldb cur_offset
+ jsr Moveto_d_7F
+ ;check which pipe we are drawing down
+ lda b_pipe
+ cmpa #1
+ beq draw_pipedown_1
+ cmpa #2
+ beq draw_pipedown_2
+ cmpa #3
+ beq draw_pipedown_3
+ cmpa #4
+ beq draw_pipedown_4
+ cmpa #5
+ beq draw_pipedown_5
+ cmpa #6
+ beq draw_pipedown_6
+ ;we should never get to here...if we do
+ ;b_pipe contained something other than we expect
+draw_pipedown_1:
+ ldx #pipedown_1 ; vectors
+ bra draw_pipedown_fin
+
+draw_pipedown_2:
+ ldx #pipedown_2 ; vectors
+ bra draw_pipedown_fin
+
+draw_pipedown_3:
+ ldx #pipedown_3 ; vectors
+ bra draw_pipedown_fin
+
+draw_pipedown_4:
+ ldx #pipedown_4 ; vectors
+ bra draw_pipedown_fin
+
+draw_pipedown_5:
+ ldx #pipedown_5 ; vectors
+ bra draw_pipedown_fin
+
+draw_pipedown_6:
+ ldx #pipedown_6 ; vectors
+ bra draw_pipedown_fin
+
+draw_pipedown_fin:
+ lda #8 ; number of vectors in pipe
+ ldb #127 ; Scaling
+ jsr Draw_VL_ab ; Draw
+ bra afterdraw
+
+;pipe intensity
+setpipeintensity:
+ lda dead_flag ;check if dead, if so set all the pipes to a low intensity
+ cmpa #1 ;#1 is dead
+ bne setpipe_r
+ lda #40
+ jsr Intensity_a
+ bra setpipeend
+
+setpipe_r ;set pipes to different intensity depending where they are on the screen.
+ lda cur_offset
+ cmpa #40
+ bge setrightfade ;branch if equal or higher
+ cmpa #-40
+ ble setleftfade ;branch if equal or lower
+ lda #100 ;if normal set intensity standard level
+ jsr Intensity_a
+ bra setpipeend ;normal so go to end
+
+setrightfade:
+ lda cur_offset
+ suba #80
+ nega
+ adda #60
+ jsr Intensity_a
+ bra setpipeend
+
+setleftfade:
+ lda cur_offset
+ adda #120
+ jsr Intensity_a
+ ;will carry on to setpipeend
+setpipeend:
+ rts
+
+;end of pipe intensity
+move_bird:
+ lda bird_vel_count
+ deca
+ sta bird_vel_count
+ cmpa #0
+ bne bird_buttons ;if its not time to update velocity skip it
+ lda #BIRDVCOUNT ;reset counter to this CONSTANT VALUE
+ sta bird_vel_count ;this counter decides how quickly we update the velocity
+ lda bird_vel
+ inca
+ cmpa #6 ;are we at max?
+ blt update_bird_vel ;branch if less or equal
+ lda #6 ;else set velocity to max
+ sta bird_vel
+update_bird_vel:
+ sta bird_vel ;save new bird velocity
+bird_buttons:
+ jsr Read_Btns
+ cmpa #0
+ beq update_bird_pos ;no button pressed go to update
+ lda bird_vel ;button pressed so put up velocity
+ adda #-4
+ sta bird_vel
+ jsr play_flapsound
+update_bird_pos:
+ ldb bird_vel
+ negb
+ aslb
+ stb bird_rotation
+ lda bird_y
+ suba bird_vel
+ sta bird_y
+ cmpa #-120 ;check if bird hit bottom of screen
+ ble bird_hit_ground ;less than or equal
+ cmpa #120
+ bge bird_hit_top ;greater than or equal to
+ rts ;return to game loop
+
+bird_hit_top:
+ lda #120
+ sta bird_y ;set y to top of screen
+ lda #0
+ sta bird_vel ;set velocity to 0 to stop bird flying out the top of the screen
+ rts
+
+bird_hit_ground:
+ lda #-120
+ sta bird_y
+ bra bird_dead_mode ; HIT ground - dead!
+
+ rts
+
+dead_bird_hit_top: ;unlikely
+ lda #120
+ sta bird_y ;set y to top of screen
+ lda #0
+ sta bird_vel ;set velocity to 0 to stop bird flying out the top of the screen
+ rts
+
+dead_bird_hit_ground: ;when dead bird hits ground
+ lda #-120 ;we are already in bird_dead_mode so don't want to call it again
+ sta bird_y ;this is why we have another version of this routine
+ rts
+
+bird_dead_pos:
+ lda bird_y
+ cmpa #-116
+ bge bird_dead_pos_update
+ rts
+
+bird_dead_pos_update:
+ ldb bird_vel
+ cmpb #12
+ bge bird_dead_pos_v
+ addb #1
+ stb bird_vel
+bird_dead_pos_v
+ ldb #-15
+ stb bird_rotation
+ lda bird_y
+ suba bird_vel
+ sta bird_y
+ cmpa #-120 ;check if bird hit bottom of screen
+ ble dead_bird_hit_ground ;less than or equal
+ cmpa #120
+ bge dead_bird_hit_top ;greater than or equal to
+ rts ;return to game loop
+
+bird_attract_mode: ;move bird up and down when in attract mode
+ ldb bird_attract_move_counter
+ ldx #bird_attract_move_anim
+ lda b,x
+ sta bird_y
+ incb
+ cmpb #17
+ bge bird_attract_move_reset
+ stb bird_attract_move_counter
+ rts
+
+bird_attract_move_reset:
+ lda #0
+ sta bird_attract_move_counter
+ rts
+
+;///////////////PRINTING TEXT/// should macro this???
+;{
+print_score:
+ jsr Reset0Ref
+ jsr Intensity_5F ; Sets the intensity of the
+ lda #-6
+ ldb #48
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #scr_txt ; address of string
+ lda #120 ; Text position relative Y
+ ldb #-20 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+ include "DRAWLOGO.I" ;contains draw_titles
+print_win:
+ jsr Reset0Ref
+ lda credit_intensity
+ deca
+ sta credit_intensity
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-6
+ ldb #40
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #win_string ; address of string
+ lda #60 ; Text position relative Y
+ ldb #-70 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+draw_copyright:
+ jsr Reset0Ref
+ lda #40
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-4
+ ldb #40
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #copyright_string ; address of string
+ lda #-100 ; Text position relative Y
+ ldb #-75 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+draw_score_name:
+ jsr Reset0Ref
+ lda #100
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-6
+ ldb #60
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ jsr get_score_name ;load scorename into u
+ lda #0 ; Text position relative Y
+ ldb #-80 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+draw_tap:
+ jsr Reset0Ref
+ lda tap_intensity
+ cmpa #120
+ ble draw_tap_r
+ lda #30
+ sta tap_intensity
+draw_tap_r:
+ inca
+ inca
+ sta tap_intensity
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-6
+ ldb #50
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #tap_string ; address of string
+ lda #-30 ; Text position relative Y
+ ldb #-20 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+draw_dead_score_text:
+ jsr Reset0Ref
+ lda #120
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-6
+ ldb #40
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #score_text_string ; address of string
+ lda #-30 ; Text position relative Y
+ ldb #-30 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ ;continue to draw score ascii
+ jsr Reset0Ref
+ lda #120
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-6
+ ldb #40
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #scr_txt ; address of string
+ lda #-30 ; Text position relative Y
+ ldb #0 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+draw_dead_hiscore_text:
+ jsr Reset0Ref
+ lda #120
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-6
+ ldb #40
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #hiscore_text_string ; address of string
+ lda #-50 ; Text position relative Y
+ ldb #-30 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ ;continue to draw hiscore ascii
+ jsr Reset0Ref
+ lda #120
+ jsr Intensity_a ; Sets the intensity of the
+ lda #-6
+ ldb #40
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #hiscr_txt ; address of string
+ lda #-50 ; Text position relative Y
+ ldb #0 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+draw_game_over:
+ jsr Reset0Ref
+ lda game_over_intensity ;fade up
+ cmpa #120
+ bge draw_game_over_r ;greater or equal
+ adda #4 ;increase intensity if required
+ sta game_over_intensity
+draw_game_over_r:
+ jsr Intensity_a ; Sets the intensity of the gameover
+ lda game_over_text_scale ;scale 2
+ cmpa #-10 ;is it at the value we want
+ ble draw_game_over_t ;if less carry on else decrease
+ deca
+ sta game_over_text_scale
+draw_game_over_t
+ ldb #120
+ sta Vec_Text_Height
+ stb Vec_Text_Width
+ ldu #game_over_string ; address of string
+ lda game_over_text_scale ;use the text scale to offset the text a bit
+ nega ;make it positive
+ adda #60 ;add y pos of text
+ ldb #-95 ; Text position relative X
+ jsr Print_Str_d ; Vectrex BIOS print routine
+ rts
+
+ include "CREDROLL.I" ;lets roll the credits - credit_roll
+;}
+;////////////////////SOUND EFFECTS////////////////////////
+;A bit of a mess but it works don't consider this a good example!!
+;{
+check_flapsound: ;check if the sound is still playing or not, if not clear it //messy branching??
+ lda flap_snd_count
+ cmpa #0
+ bne check_f
+ jsr Clear_Sound
+ bra check_f_r
+
+check_f:
+ dec flap_snd_count
+ bra check_f_r_2 ;dont bother checking for point sound 2
+
+check_f_r:
+ lda point_snd_count ;check if old first point sound finished
+ cmpa #1 ;if a sound has finished playing check if we want to play point sound
+ bne check_f_r_2
+ jsr play_pointsound_2 ;if = 1 then play the second sound
+check_f_r_2:
+ rts
+
+play_flapsound:
+ lda #$01 ; Modify Register 1
+; ldb $fc93 ; Tone Frequency = #$0XX
+ ldb #-100 ; Tone Frequency = #$0XX
+ jsr Sound_Byte ; Set register
+ lda #$00 ; Modify Register 0
+; ldb $fc92 ; Tone Frequency = #$Xff
+ ldb #100 ; Tone Frequency = #$Xff
+ jsr Sound_Byte ; Set register
+ lda #$08 ; Modify Register 8
+ ldb #15 ; Volume=15
+ jsr Sound_Byte ; Set register
+ lda #$07 ; Modify Register 7
+ ldb $c807 ; Get previous value for reg 7
+ andb #$fe ; Turn on-or off? Tone on Voice 1
+ andb #$08 ; Turn on Noise on Voice 1
+ jsr Sound_Byte ; Set register
+ lda #5 ; Set soundflag to 10
+ sta flap_snd_count
+ rts ; And return to main program
+
+play_deadsound:
+ lda #$01 ; Modify Register 1
+ ldb $fc33 ; Tone Frequency = #$0XX
+ jsr Sound_Byte ; Set register
+ lda #$00 ; Modify Register 0
+ ldb $fc22 ; Tone Frequency = #$Xff
+ jsr Sound_Byte ; Set register
+ lda #$03 ; Modify Register 3
+ ldb $fc98 ; Tone Frequency = #$Xff
+ jsr Sound_Byte ; Set register
+ lda #$06 ; Modify Register 6
+ ldb $fc77 ; noise
+ jsr Sound_Byte ; Set register
+ lda #$08 ; Modify Register 8
+ ldb #15 ; Volume=15
+ jsr Sound_Byte ; Set register
+ lda #$09 ; Modify Register 9
+ ldb #15 ; Volume=1
+ jsr Sound_Byte ; Set register
+ lda #$10 ; Modify Register 10
+ ldb #15 ; Volume=1
+ jsr Sound_Byte ; Set register
+ lda #$07 ; Modify Register 7
+ ldb #$00
+ ;ldb $c807 ; Get previous value for reg 7
+ ;andb #$fe ; Turn on-or off? Tone on Voice 1
+ ;andb #$08 ; Turn on Noise on Voice 1
+ jsr Sound_Byte ; Set register
+ lda #$08 ;envelope register/on/off - not sure if this is working
+ ldb #$77
+ jsr Sound_Byte
+ lda #$11 ;envelope register period- not sure if this is working fine
+ ldb #$01
+ jsr Sound_Byte
+ lda #$64 ;envelope register period- not sure if this is working corse
+ ldb #$0F
+ jsr Sound_Byte
+ lda #$13 ;envelope register - not sure if this is working
+ ldb #$0f
+ jsr Sound_Byte
+ lda #5 ; Set soundflag to 10
+ sta flap_snd_count
+ rts ; And return to main program
+
+;Point sound/////
+play_pointsound:
+ lda #$01 ; Modify Register 1
+ ldb $fc20 ; Tone Frequency = #$0XX
+ jsr Sound_Byte ; Set register
+ lda #$00 ; Modify Register 0
+ ldb $fc27 ; Tone Frequency = #$Xff
+ jsr Sound_Byte ; Set register
+ lda #$08 ; Modify Register 8
+ ldb #15 ; Volume=15
+ jsr Sound_Byte ; Set register
+ lda #$07 ; Modify Register 7
+ ldb $c807 ; Get previous value for reg 7
+ andb #$fe ; Turn on Tone on Voice 1
+ orb #$08 ; Turn on Noise on Voice 1
+ jsr Sound_Byte ; Set register
+ ;lda #$13 ;envelope register - not sure if this is working
+ ;ldb #12
+ ;jsr Sound_Byte
+ lda #2 ; Set soundflag to 10
+ sta flap_snd_count
+ lda #1
+ sta point_snd_count ;once is is 0 we will play another higher note
+ rts ; And return to main program
+
+play_pointsound_2:
+ lda #$01 ; Modify Register 1
+ ldb $fc20 ; Tone Frequency = #$0XX
+ jsr Sound_Byte ; Set register
+ lda #$00 ; Modify Register 0
+ ldb $fc90 ; Tone Frequency = #$Xff
+ jsr Sound_Byte ; Set register
+ lda #$08 ; Modify Register 8
+ ldb #12 ; Volume=15
+ jsr Sound_Byte ; Set register
+ lda #$07 ; Modify Register 7
+ ldb $c807 ; Get previous value for reg 7
+ andb #$fe ; Turn on Tone on Voice 1
+ orb #$08 ; Turn on Noise on Voice 1
+ jsr Sound_Byte ; Set register
+; lda #$13 ;envelope register - not sure if this is working
+; ldb #100
+; jsr Sound_Byte
+ lda #3 ; Set soundflag to 10
+ sta flap_snd_count
+ lda #0
+ sta point_snd_count ;reset this bool flag its not really a count
+ rts ; And return to main program
+
+;}
+;////////////////Print Debug Commented out when not req//////////////////////////
+;print_debug:
+; jsr Reset0Ref
+; jsr Intensity_5F ;Sets the intensity of the
+;
+; ldu #debug_string ;address of string
+; lda #$10 ; Text position relative Y
+; ldb #-$50 ; Text position relative X
+; jsr Print_Str_d ; Vectrex BIOS print routine
+; rts
+;DRAW THE BIRD
+draw_bird: ;{
+ ;rotate bird vectors
+ ldx #beak ; Load the vector list
+ ldb #45 ; Number of vectors for the WHOLE BIRD AND WING ANIMS!! add up all the vectors n-1
+ lda bird_rotation ; Rotation angle
+ ldu #r_beak ; Save to ram location
+ jsr Rot_VL_ab ; Rotates the coordinates using Bios routine
+ lda #100
+ jsr Intensity_a
+ jsr dr_beak
+dr_beak:
+ jsr Reset0Ref
+ lda bird_y
+ ldb bird_x
+ jsr Moveto_d_7F
+ ldx #r_beak ;vectors
+ lda #9 ;number of vectors
+ ldb #16 ;Scaling
+ jsr Mov_Draw_VL_ab ;Draw
+dr_eyeball:
+ jsr Reset0Ref
+ lda bird_y
+ ldb bird_x
+ jsr Moveto_d_7F
+ ldx #r_eyeball ; vectors
+ lda #1 ; number of vectors
+ ldb #16 ; Scaling
+ jsr Mov_Draw_VL_ab ; Draw
+dr_bottom:
+ jsr Reset0Ref
+ lda bird_y
+ ldb bird_x
+ jsr Moveto_d_7F
+ ldx #r_bottom ; vectors
+ lda #3 ; number of vectors
+ ldb #16 ; Scaling
+ jsr Mov_Draw_VL_ab ; Draw
+dr_wing:
+ jsr Reset0Ref
+ lda bird_y
+ ldb bird_x
+ jsr Moveto_d_7F
+ ;which wing to draw using wing_anim_counter, count to say 12 compare every 4 or something - depending on speed required
+ lda flap_on ;check if flap is on
+ cmpa #0 ;if its not 0
+ bne flapping ;carry on flapping
+ sta wing_anim_counter ;else it is 0, so force the 0 value in the wing anim counter so it doesnt move
+flapping:
+ lda wing_anim_counter
+ cmpa #6 ;at this value change wing animation
+ bge dr_wing_2
+ ldx #r_wing ;vectors
+ bra dr_wing_final
+
+dr_wing_2:
+ cmpa #12 ;at this value change wing animation
+ bge dr_wing_3
+ ldx #r_wing_2
+ bra dr_wing_final
+
+dr_wing_3
+ cmpa #18 ;at this value change wing animation
+ bge dr_wing_reset
+ ldx #r_wing_3
+ bra dr_wing_final
+
+dr_wing_reset
+ ldb #0
+ stb wing_anim_counter
+dr_wing_final:
+ inc wing_anim_counter
+ lda #5 ; number of vectors
+ ldb #16 ; Scaling
+ jsr Mov_Draw_VL_ab ; Draw
+dr_eye:
+ jsr Reset0Ref
+ lda bird_y
+ ldb bird_x
+ jsr Moveto_d_7F
+ ldx #r_eye ; vectors
+ lda #6 ; number of vectors
+ ldb #16 ; Scaling
+ jsr Mov_Draw_VL_ab ; Draw
+dr_top:
+ jsr Reset0Ref
+ lda bird_y
+ ldb bird_x
+ jsr Moveto_d_7F
+ ldx #r_top ; vectors
+ lda #4 ; number of vectors
+ ldb #16 ; Scaling
+ jsr Mov_Draw_VL_ab ; Draw
+ rts ;Final return from drawing bird
+
+ ;Final return from drawing bird
+ ;}
+ include "WINSCREEN.I" ;all code for winscreen
+ include "PARTICLES.I" ;contains particle code
+ ;Level Data 6 tiles per screen, note 2nd and last fcb statement are the same to allow looping forever if required
+ ;0 means no pipe any other number 1 to 6 is different height of pipe
+level ;{
+ fcb 0,0,0,0,0,0
+ fcb 2,0,0,3,0,0 ;7jumpback to here using 7
+ fcb 4,0,0,5,0,0 ;13
+ fcb 2,0,0,1,0,0 ;19
+ fcb 2,0,0,2,0,0 ;25
+ fcb 3,0,4,0,5,0 ;31
+ fcb 3,0,2,0,4,0 ;37
+ fcb 5,0,6,0,4,0 ;43
+ fcb 2,0,4,0,4,0 ;49
+ fcb 3,0,2,0,1,0 ;55
+ fcb 2,0,1,0,3,0 ;61
+ fcb 2,0,1,0,2,0 ;67
+ fcb 3,0,4,0,5,0 ;73
+ fcb 6,0,0,4,0,0 ;79
+ fcb 2,0,3,0,4,0 ;85
+ fcb 3,0,0,6,0,0 ;91
+ fcb 0,1,0,0,6,0 ;97
+ fcb 0,3,0,5,0,0 ;103
+ fcb 0,2,0,3,0,0 ;109
+ fcb 0,2,0,0,4,0 ;115
+ fcb 2,0,0,3,0,0 ;121 (121 is the max... as its the starting digit of the line... so 121+7=127)
+;}
+bird_attract_move_anim
+ fcb 0,1,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0
+;pipe vectors
+ include "PIPEVEC.I"
+;bird graphics
+ include "BIRDVEC.I"
+;scrname
+ include "SCRNAME.I"
+ include "CREDITS.I"
+;veccy logo data
+ include "VECLOGO2.I"
+;debug_string:
+; db "DEBUG" ; only capital letters
+; db $80 ; $80 is end of string
+win_string:
+ db "YOURE THE BEST! AROUND!" ; only capital letters
+ db $80 ; $80 is end of string
+title_string:
+ db "VECCY BIRD" ; only capital letters
+ db $80 ; $80 is end of string
+tap_string:
+ db "TAP" ; only capital letters
+ db $80 ; $80 is end of string
+game_over_string:
+ db "GAME OVER" ; only capital letters
+ db $80 ; $80 is end of string
+score_text_string:
+ db "SCORE" ; only capital letters
+ db $80 ; $80 is end of string
+hiscore_text_string:
+ db "BEST" ; only capital letters
+ db $80 ; $80 is end of string
+copyright_string:
+ db $67
+ db "MICHAEL SIMONDS 2014 V1.5" ; only capital letters
+ db $80 ; $80 is end of string
+musa ; Start music that plays nothing
+ fdb $fee8
+ fdb $fbe6
+ fcb $0,$80
+ fcb $0,$80
+;***************************************************************************
+; RPC FUNCTION START
+;***************************************************************************
+; Rpc function. Because this makes the cart unavailable, this
+; will copied to SRAM. Call as rpcfn.
+rpcfndat
+ sta $7fff
+rpcwaitloop
+ lda $0
+ cmpa # 'g'
+ bne rpcwaitloop
+ lda $1
+ cmpa # ' '
+ bne rpcwaitloop
+ jmp new_game_loop ; original game start address
+rpcfndatend
+;***************************************************************************
+; RPC FUNCTION END
+;***************************************************************************
diff --git a/code/led/michael-simonds/veccy-bird/WINSCREEN.I b/code/led/michael-simonds/veccy-bird/WINSCREEN.I
new file mode 100644
index 0000000..c64764b
--- /dev/null
+++ b/code/led/michael-simonds/veccy-bird/WINSCREEN.I
@@ -0,0 +1,498 @@
+FIREWORK_GRAVITY equ 16
+
+win_screen:
+
+ jsr Clear_Sound
+ lda #$07 ;Modify Register 7 mixer
+ ldb #%00111111 ;set mixer to all channels off
+ jsr Sound_Byte ;Set register
+ lda #127
+ std firework_counter
+ lda #127
+ sta credit_intensity
+
+win_screen_2:
+; jsr calib
+ jsr Wait_Recal ; BIOS recalibration
+ lda credit_intensity
+ cmpa #0
+ beq skip_print_win
+ jsr print_win
+skip_print_win:
+; clra
+; sta bird_x
+; sta bird_y
+; lda #1
+; sta flap_on
+; inc bird_rotation
+; jsr draw_bird
+; jsr Do_Sound
+ jsr up_rocket_sound
+ jsr up_explode_sound
+ jsr rocket_fireworks
+ jsr update_emitters
+ jsr update_rockets
+ bra win_screen_2; loop forever
+
+rocket_fireworks:
+ lda firework_counter
+ cmpa #0
+ bne fw_counter_dec
+ jsr Random
+ anda #%011111 ;use mask to get lower number
+ ;lda #6
+ sta firework_counter ;reset counter to random value
+;check f slot - use a emitter/rocket not being used
+ lda rocket_1_on
+ cmpa #0
+ bne check_f_slot_2
+ lda emitter_1_on
+ cmpa #0
+ bne check_f_slot_2
+ jsr fire_rocket_1
+ lda firework_counter ;adds a slight delay
+ adda #3 ;by adding 5 if a rocket has been fired
+ sta firework_counter ;ok?
+ bra fw_counter_dec
+check_f_slot_2:
+ lda rocket_2_on
+ cmpa #0
+ bne check_f_slot_3
+ lda emitter_2_on
+ cmpa #0
+ bne check_f_slot_3
+ jsr fire_rocket_2
+ lda firework_counter ;adds a slight delay
+ adda #3 ;by adding 5 if a rocket has been fired
+ sta firework_counter ;ok?
+ bra fw_counter_dec
+check_f_slot_3:
+ lda rocket_3_on
+ cmpa #0
+ bne fw_counter_dec
+ lda emitter_3_on
+ cmpa #0
+ bne fw_counter_dec
+ jsr fire_rocket_3
+ ;rts
+fw_counter_dec:
+ dec firework_counter ;decrease counter
+ rts
+
+fire_rocket_1: ;{ reusing particle emitter
+ lda #1
+ sta rocket_1_on
+ lda #-127 ;start pos 16bit
+ ldb #0
+ std emitter_1_y
+ lda #0
+ ldb #0
+ std emitter_1_x
+ lda #5 ;start vel 16bit * 2
+ ldb #80
+ std emitter_1_vel_y
+ jsr Random
+ anda #%0000011 ;use mask to get lower number
+ suba #1 ;subtract to get some neg values
+ asra
+ ldb #13
+ std emitter_1_vel_x
+ jsr play_rocketsound_1
+ rts
+;}
+fire_rocket_2: ;{ reusing particle emitter
+ lda #1
+ sta rocket_2_on
+ lda #-127 ;start pos 16bit
+ ldb #0
+ std emitter_2_y
+ lda #0
+ ldb #0
+ std emitter_2_x
+ lda #5 ;start vel 16bit * 2
+ ldb #81
+ std emitter_2_vel_y
+ jsr Random
+ anda #%0000011 ;use mask to get lower number
+ suba #1 ;subtract to get some neg values
+ asra
+ ldb #12
+ std emitter_2_vel_x
+ jsr play_rocketsound_2
+ rts
+;}
+fire_rocket_3: ;{ reusing particle emitter
+ lda #1
+ sta rocket_3_on
+ lda #-127 ;start pos 16bit
+ ldb #0
+ std emitter_3_y
+ lda #0
+ ldb #0
+ std emitter_3_x
+ lda #5 ;start vel 16bit * 2
+ ldb #84
+ std emitter_3_vel_y
+ jsr Random
+ anda #%0000011 ;use mask to get lower number
+ suba #1 ;subtract to get some neg values
+ asra
+ ldb #16
+ std emitter_3_vel_x
+ jsr play_rocketsound_3
+ rts
+;}
+
+update_rockets:
+ lda #127 ;move this to the move d? dot draw?
+ jsr Intensity_a
+ lda #127
+ sta VIA_t1_cnt_lo ;store scale factor
+;check rocket 1
+ lda emitter_1_vel_y ;check if high bit is 0 if so blowup
+ cmpa #0
+ bne check_rocket_2 ;if not 0 update rocket
+ lda #0 ;explode firework
+ sta rocket_1_on ;turn rocket off
+ lda #1
+ sta emitter_1_on
+ sta emitter_1_vel_y ;set this high so it doesnt try explode again
+ lda #16 ;max of 16
+ sta emitter_1_pcount
+ jsr init_emitter_1 ;start emitter
+ jsr play_explodesound_1
+; ldu #explode_sound
+; jsr Explosion_Snd
+check_rocket_2:
+ lda emitter_2_vel_y ;check if high bit is 0 if so blowup
+ cmpa #0
+ bne check_rocket_3 ;if not 0 update rocket
+ lda #0 ;explode firework
+ sta rocket_2_on ;turn rocket off
+ lda #1
+ sta emitter_2_on
+ sta emitter_2_vel_y ;set this high so it doesnt try explode again
+ lda #16 ;max of 16
+ sta emitter_2_pcount
+ jsr init_emitter_2 ;start emitter
+ jsr play_explodesound_2
+check_rocket_3:
+ lda emitter_3_vel_y ;check if high bit is 0 if so blowup
+ cmpa #0
+ bne up_rock_1 ;if not 0 update rocket
+ lda #0 ;explode firework
+ sta rocket_3_on ;turn rocket off
+ lda #1
+ sta emitter_3_on
+ sta emitter_3_vel_y ;set this high so it doesnt try explode again
+ lda #16 ;max of 16
+ sta emitter_3_pcount
+ jsr init_emitter_3 ;start emitter
+ jsr play_explodesound_3
+ rts ;return?
+up_rock_1:
+ lda rocket_1_on
+ cmpa #0
+ beq up_rock_2 ;if off skip
+ ldd emitter_1_vel_y
+ subd #FIREWORK_GRAVITY ;gravity
+ std emitter_1_vel_y
+ addd emitter_1_y
+ std emitter_1_y
+ ldd emitter_1_vel_x
+ addd emitter_1_x
+ std emitter_1_x
+ jsr Reset0Ref
+ lda emitter_1_y ;highbyte y
+ ldb emitter_1_x ;highbyte x
+ jsr Dot_d
+up_rock_2:
+ lda rocket_2_on
+ cmpa #0
+ beq up_rock_3 ;if off skip
+ ldd emitter_2_vel_y
+ subd #FIREWORK_GRAVITY ;gravity
+ std emitter_2_vel_y
+ addd emitter_2_y
+ std emitter_2_y
+ ldd emitter_2_vel_x
+ addd emitter_2_x
+ std emitter_2_x
+ jsr Reset0Ref
+ lda emitter_2_y ;highbyte y
+ ldb emitter_2_x ;highbyte x
+ jsr Dot_d
+up_rock_3:
+ lda rocket_3_on
+ cmpa #0
+ beq up_rock_rt ;if off skip
+ ldd emitter_3_vel_y
+ subd #FIREWORK_GRAVITY ;gravity
+ std emitter_3_vel_y
+ addd emitter_3_y
+ std emitter_3_y
+ ldd emitter_3_vel_x
+ addd emitter_3_x
+ std emitter_3_x
+ jsr Reset0Ref
+ lda emitter_3_y ;highbyte y
+ ldb emitter_3_x ;highbyte x
+ jsr Dot_d
+up_rock_rt:
+ rts
+
+
+up_rocket_sound:
+
+check_r_sound_1:
+ lda sound_flag_1
+ cmpa #1
+ beq do_sound_1
+ bra check_r_sound_2
+do_sound_1
+ lda Vec_ADSR_Timers
+ deca
+ cmpa #0
+ beq fin_sound_1
+ sta Vec_ADSR_Timers
+ ldx #r_soundfx
+ lda #$08; Modify Register 9 (vol)
+ ldb Vec_ADSR_Timers
+ ldb b,x
+ jsr Sound_Byte
+ bra check_r_sound_2
+fin_sound_1:
+ lda #0
+ sta Vec_ADSR_Timers
+ sta sound_flag_1
+
+check_r_sound_2:
+ lda sound_flag_2
+ cmpa #1
+ beq do_sound_2
+ rts
+do_sound_2
+ lda Vec_ADSR_Timers+1
+ deca
+ cmpa #0
+ beq fin_sound_2
+ sta Vec_ADSR_Timers+1
+ ldx #r_soundfx
+ lda #$09; Modify Register 9 (vol)
+ ldb Vec_ADSR_Timers+1
+ ldb b,x
+ jsr Sound_Byte
+ bra check_r_sound_3
+fin_sound_2:
+ lda #0
+ sta Vec_ADSR_Timers+1
+ sta sound_flag_2
+check_r_sound_3:
+ lda sound_flag_3
+ cmpa #1
+ beq do_sound_3
+ rts
+do_sound_3
+ lda Vec_ADSR_Timers+2
+ deca
+ cmpa #0
+ beq fin_sound_3
+ sta Vec_ADSR_Timers+2
+ ldx #r_soundfx
+ lda #$10; Modify Register 9 (vol)
+ ldb Vec_ADSR_Timers+2
+ ldb b,x
+ jsr Sound_Byte
+ rts ;return
+fin_sound_3:
+ lda #0
+ sta Vec_ADSR_Timers+2
+ sta sound_flag_3
+ rts ;return
+
+;check explode sound
+up_explode_sound:
+
+check_e_sound_1:
+ lda sound_explode_flag_1
+ cmpa #1
+ beq do_e_sound_1
+ bra check_e_sound_2
+do_e_sound_1:
+ lda Vec_ADSR_Timers
+ deca
+ cmpa #0
+ beq fin_e_sound_1
+ sta Vec_ADSR_Timers
+ ldx #r_explodefx
+ lda #$08; Modify Register 9 (vol)
+ ldb Vec_ADSR_Timers
+ ldb b,x
+ jsr Sound_Byte
+ bra check_e_sound_2
+fin_e_sound_1:
+ lda #0
+ sta Vec_ADSR_Timers
+ sta sound_explode_flag_1
+check_e_sound_2:
+ lda sound_explode_flag_2
+ cmpa #1
+ beq do_e_sound_2
+ bra check_e_sound_3
+do_e_sound_2:
+ lda Vec_ADSR_Timers+1
+ deca
+ cmpa #0
+ beq fin_e_sound_2
+ sta Vec_ADSR_Timers+1
+ ldx #r_explodefx
+ lda #$09; Modify Register 9 (vol)
+ ldb Vec_ADSR_Timers+1
+ ldb b,x
+ jsr Sound_Byte
+ bra check_e_sound_3
+fin_e_sound_2:
+ lda #0
+ sta Vec_ADSR_Timers+1
+ sta sound_explode_flag_2
+
+
+check_e_sound_3:
+ lda sound_explode_flag_3
+ cmpa #1
+ beq do_e_sound_3
+ ;bra check_e_sound_4
+ rts
+do_e_sound_3:
+ lda Vec_ADSR_Timers+2
+ deca
+ cmpa #0
+ beq fin_e_sound_3
+ sta Vec_ADSR_Timers+2
+ ldx #r_explodefx
+ lda #$A; Modify Register 9 (vol)
+ ldb Vec_ADSR_Timers+2
+ ldb b,x
+ jsr Sound_Byte
+ ;jsr print_win
+ ;bra check_e_sound_4
+ rts
+fin_e_sound_3:
+ lda #0
+ sta Vec_ADSR_Timers+2
+ sta sound_explode_flag_3
+
+ rts
+
+
+play_rocketsound_1:
+ lda #$08 ;Modify Register 8
+ ldb #0 ;Volume=10
+ jsr Sound_Byte ;Set register
+ lda #$07 ;Modify Register 7 mixer
+ ldb $c807 ;Get previous value for register 7
+ andb #%00110111
+ ;orb #%00001000
+ jsr Sound_Byte ;Set register
+ lda #24 ; Set sound count to 10
+ sta Vec_ADSR_Timers ;first byte of 3 normally used for bios - we borrow it user +1 +2 for the other bytes!
+ lda #1
+ sta sound_flag_1 ;set sound to on
+ rts
+
+play_rocketsound_2:
+ lda #$09 ;Modify Register 8
+ ldb #0 ;Volume=10
+ jsr Sound_Byte ;Set register
+ lda #$07 ;Modify Register 7 mixer
+ ldb $c807 ;Get previous value for register 7
+ andb #%00101111
+ ;orb #%00001000
+ jsr Sound_Byte ;Set register
+ lda #24 ; Set sound count to 10
+ sta Vec_ADSR_Timers+1 ;first byte of 3 normally used for bios - we borrow it user +1 +2 for the other bytes!
+ lda #1
+ sta sound_flag_2 ;set sound to on
+ rts
+
+play_rocketsound_3:
+ lda #$10 ;Modify Register 8
+ ldb #0 ;Volume=10
+ jsr Sound_Byte ;Set register
+ lda #$07 ;Modify Register 7 mixer
+ ldb $c807 ;Get previous value for register 7
+ andb #%00011111
+ ;orb #%00001000
+ jsr Sound_Byte ;Set register
+ lda #24 ; Set sound count to 10
+ sta Vec_ADSR_Timers+2 ;first byte of 3 normally used for bios - we borrow it user +1 +2 for the other bytes!
+ lda #1
+ sta sound_flag_3 ;set sound to on
+ rts
+
+play_explodesound_1:
+ lda #$06 ;Modify Register 6 noise frew
+ ldb #13 ;noise period
+ jsr Sound_Byte ;Set register
+
+ lda #$08 ;Modify Register 8
+ ldb #15 ;Volume=10
+ jsr Sound_Byte ;Set register
+ lda #$07 ;Modify Register 7 mixer
+ ldb $c807 ;Get previous value for register 7
+ andb #%00110111
+ ;orb #%00001000
+ jsr Sound_Byte ;Set register
+ lda #36 ; Set sound count to 10
+ sta Vec_ADSR_Timers ;first byte of 3 normally used for bios - we borrow it user +1 +2 for the other bytes!
+ lda #1
+ sta sound_explode_flag_1 ;set sound to on
+ rts
+
+play_explodesound_2:
+ lda #$06 ;Modify Register 6 noise frew
+ ldb #11 ;noise period
+ jsr Sound_Byte ;Set register
+
+ lda #$09 ;Modify Register 8
+ ldb #15 ;Volume=10
+ jsr Sound_Byte ;Set register
+ lda #$07 ;Modify Register 7 mixer
+ ldb $c807 ;Get previous value for register 7
+ andb #%00101111
+ ;orb #%00001000
+ jsr Sound_Byte ;Set register
+ lda #36 ; Set sound count to 10
+ sta Vec_ADSR_Timers+1 ;first byte of 3 normally used for bios - we borrow it user +1 +2 for the other bytes!
+ lda #1
+ sta sound_explode_flag_2 ;set sound to on
+ rts
+
+play_explodesound_3:
+ lda #$06 ;Modify Register 6 noise frew
+ ldb #12 ;noise period
+ jsr Sound_Byte ;Set register
+
+ lda #$A ;Modify Register 10
+ ldb #14 ;Volume=10
+ jsr Sound_Byte ;Set register
+ lda #$07 ;Modify Register 7 mixer
+ ldb $c807 ;Get previous value for register 7
+ andb #%00011111
+ ;orb #%00001000
+ ;ldb #%00000000
+ jsr Sound_Byte ;Set register
+ lda #36 ; Set sound count to 10
+ sta Vec_ADSR_Timers+2 ;first byte of 3 normally used for bios - we borrow it user +1 +2 for the other bytes!
+ lda #1
+ sta sound_explode_flag_3 ;set sound to on
+ rts
+
+
+
+r_soundfx:
+ ;dont set volume above 15, as 16 turns on hardware envelopes !
+ fcb 0,0,3,4,5,6,7,8,9,8,8,10,11,10,10,8,7,6,5,7,6,5,4,2,1,0
+
+r_explodefx:
+ fcb 0,0,1,1,2,3,1,2,4,6,1,2,3,8,9,0,1,3,5,9,10,8,9,10,0,5,10,15,5,10,13,15,12,10,15,15
\ No newline at end of file
diff --git a/code/led/michael-simonds/veccy-bird/origin.txt b/code/led/michael-simonds/veccy-bird/origin.txt
new file mode 100644
index 0000000..dfdbbc4
--- /dev/null
+++ b/code/led/michael-simonds/veccy-bird/origin.txt
@@ -0,0 +1 @@
+https://www.dropbox.com/s/lzhby5yhxiazjdw/Veccy_Bird_V1_5.zip
\ No newline at end of file
diff --git a/code/led/michael-simonds/veccy-bird/veccy-bird-v1.5-led.bin b/code/led/michael-simonds/veccy-bird/veccy-bird-v1.5-led.bin
new file mode 100644
index 0000000..95c0fb3
Binary files /dev/null and b/code/led/michael-simonds/veccy-bird/veccy-bird-v1.5-led.bin differ
diff --git a/code/multicart/.gitignore b/code/multicart/.gitignore
index daec013..7e5922f 100644
--- a/code/multicart/.gitignore
+++ b/code/multicart/.gitignore
@@ -1,2 +1,2 @@
-multicart.bin
-multicart.lst
+*.bin
+*.lst
diff --git a/code/multicart/multicart.asm b/code/multicart/multicart.asm
index 2a36674..1293296 100644
--- a/code/multicart/multicart.asm
+++ b/code/multicart/multicart.asm
@@ -1,3 +1,13 @@
+; Copyright (C) 2020 Brett Walach
+; --------------------------------------------------------------------------
+; VEXTREME Menu
+;
+; This application demonstrates performs all menu functions for VEXTREME.
+;
+; Assembler manual: https://www.6809.org.uk/asm6809/doc/asm6809.shtml
+;
+; Original header follows:
+; --------------------------------------------------------------------------
; Copyright (C) 2015 Jeroen Domburg
;
; This library is free software: you can redistribute it and/or modify
@@ -25,63 +35,185 @@ PAGE_POS_X equ #-10
PAGE_POS_Y equ #-70
BUTTONS_POS_X equ #-120
BUTTONS_POS_Y equ #-80
+
+DEVMODE_TEXT_SIZE equ #$F660
+usb_dev_addr equ $ff0 ; used for sys_opt.usb_dev[9]
+high_score_flag_rd equ $fe0 ; (menuData[] read: IDLE:0x66, LOAD2VEC:0x77)
+high_score_flag_wr equ $7fe0 ; (parmRam[] write: IDLE:0x66, SAVE2STM:0x88)
+vusb_addr equ $ffb
+yield_byte1 equ $ffc
+yield_byte2 equ $ffd
;***************************************************************************
; USER RAM SECTION ($C880-$CBEA)
;***************************************************************************
-user_ram equ $c880
-page equ $c880
-cursor equ $c881
-curpos equ $c882
-waitjs equ $c883
-lastpage equ $c884
-logo_scale equ $c885
-logo_dir equ $c886
-page_label equ $c887
-page_label_end equ $c888
-calibrationValue equ $c889
-gameScale equ $c890
+ bss
+ org $c880
+user_ram
+page rmb 1
+cursor rmb 1
+curpos rmb 1
+waitjs rmb 1
+lastpage rmb 1
+logo_scale rmb 1
+logo_dir rmb 1
+page_label rmb 1
+page_label_end rmb 1
+calibrationValue rmb 1
+gameScale rmb 1
+jump_to_buttons rmb 1
+start_dev_mode rmb 1
+romnumber rmb 1
+
+y_pos rmb 1
+x_pos rmb 1
+x_pos_cnt rmb 1
+y_dir rmb 1
+pressed_exit rmb 1
+pressed_run rmb 1
+pressed_none rmb 1
+ramdisk_once rmb 1
+vusb_once rmb 1
+
+last_user_ram rmb 1 ; unused in code
+
;***************************************************************************
-; VECTREX RAM SECTION ($C800-$CFFF)
+; SYSTEM AREA of USER RAM SECTION ($CB00-$CBEA)
;***************************************************************************
-rpcfn equ $cb00
+rpcfn1 equ last_user_ram
+rpcfn2 equ rpcfn1+(rpcfndatend1-rpcfndat1)
+rpcfn3 equ rpcfn1+(rpcfndatend2-rpcfndat1)
;***************************************************************************
; HEADER SECTION
;***************************************************************************
+ code
org 0
- fcb "g GCE 2019", $80 ; 'g' is copyright sign
+ fcb "g GCE 2020", $80 ; 'g' is copyright sign
fdb vextreme_tune1 ; catchy intro music to get stuck in your head
fcb $F6, $60, $20, -$42
fcb "VEXTREME",$80 ; some game information ending with $80
+ fcb $FC, $40, -$20, -$32
+ fcb "HW=11.22",$80 ; HW version info
+ fcb $FC, $40, -$30, -$32
+ fcb "SW=33.44",$80 ; SW version info
fcb 0 ; end of game header
;***************************************************************************
; CODE SECTION
;***************************************************************************
; here the cartridge program starts off
main
-rpccopystart
- ldx #rpcfndat
- ldy #rpcfn
-rpccopyloop
- lda ,x+
- sta ,y+
- cmpx #rpcfndatend
- bne rpccopyloop
-init_vars
+; TODO: we are running out of RAM, so conditionally copy the big ones when needed later
+ jsr rpccopystart1 ; go copy the rpcfn into RAM
+ jsr rpccopystart2 ; copy the LED routine
+ jsr rpccopystart3 ; and finally the Dev Mode (hope we have RAM left)
+initVars
; init menu var
jsr init_page_cursor
; init vextreme logo vars
+ lda #0
+ sta jump_to_buttons
lda #1
sta logo_dir
+ sta calibrationValue
+ sta gameScale
lda #20
sta logo_scale
+; init dev mode vars
+ lda #0
+ sta y_dir
+ sta y_pos
+ sta x_pos_cnt
+ sta ramdisk_once
+ sta vusb_once
+ sta pressed_exit
+ sta pressed_run
+ sta pressed_none
+ sta start_dev_mode
+ lda #$90
+ sta x_pos
+; init joystick
lda #1
- sta calibrationValue
- lda #1
- sta gameScale
-loop
+ sta Vec_Joy_Mux_1_X
+ lda #3
+ sta Vec_Joy_Mux_1_Y
+ lda #0
+ sta Vec_Joy_Mux_2_X ; 0 disables Joy 2 X & Y
+ sta Vec_Joy_Mux_2_Y ; | saves a few hundred cycles
+load_dev_mode
+ lda #1 ; Load just one byte
+ sta $7ffe ; |
+ lda #9 ; From sysData[9], aka sys_opt.usb_dev
+ sta $7ffd ; |
+ lda #12 ; rpc call to read sys_opt.usb_dev into $ff0
+ ldx #check_dev_mode ; load x with return jmp address
+ jmp rpcfn2 ; Call
+check_dev_mode ;
+ lda usb_dev_addr ; Load sys_opt.usb_dev
+ cmpa #0 ; Is USB_DEV_DISABLED ?
+ beq check_hs_clear ; Yes, continue normally
+ lda #1 ; No, enable Dev Mode
+ sta start_dev_mode ; |
+ bra loop_led ; and skip over high score stuff for speed
+
+check_hs_clear
+ ldd #$7321 ; Check cold start flag
+ cmpd Vec_Cold_Flag ; |
+ beq skip_hs_clear ; | skip if warm boot
+ lda #$66 ; and only set to idle on cold start
+ sta high_score_flag_wr ; | (s/b $66 already, but doesn't hurt to double check)
+skip_hs_clear
+
+load_hs_flag1
+ lda #1 ; Load just one byte
+ sta $7ffe ; |
+ lda #$e0 ; From parmRam[0xe0]
+ sta $7ffd ; |
+ lda #16 ; rpc call to load high_score_flag into $fe0
+ ldx #check_hs_flag1 ; load x with return jmp address
+ jmp rpcfn2 ; Call
+check_hs_flag1 ;
+ lda high_score_flag_rd ; Check high score flag
+ cmpa #$88 ; Is it SAVE2STM:0x88 ?
+ bne hs_exit ; No, skip saving high score to STM32, don't set to 0x66
+store_hs_in_parmram ;
+ ldd $cbeb ; Save high score
+ sta $7f00 ; |
+ stb $7f01 ; |
+ ldd $cbed ; |
+ sta $7f02 ; |
+ stb $7f03 ; |
+ ldd $cbef ; |
+ sta $7f04 ; |
+ stb $7f05 ; |
+ lda #14 ; rpc call to saveHighScore()
+ ldx #hs_return ; Load return point for jump instruction
+ jmp rpcfn2 ; Call
+hs_return ;
+ lda #$66 ; Set back to IDLE:0x66 after saving to STM32
+ sta high_score_flag_wr ; |
+hs_exit ;
+
+loop_led
+; Rainbow Step LEDs
+ lda #4 ; LED step rate
+ sta $7ffe ; Store in parmRam[254]
+ lda #5 ; rpc call to rainbowStep()
+ ldx #loop_main ; load x with return jmp address
+ jmp rpcfn2 ; Call
+loop_main
; Recal video stuff
jsr Wait_Recal
jsr Intensity_5F
+; Is Dev Mode enabled?
+ lda start_dev_mode
+ cmpa #1
+ lbeq loaddevmode
+; Jump to button read routine first time through, so we can skip logo drawing if 2 & 3 held
+ lda jump_to_buttons
+ cmpa #1
+ beq drawLogo
+ lda #1
+ sta jump_to_buttons
+ jmp check_buttons
; display vextreme logo
drawLogo
ldx #_SM_vextreme_logo
@@ -107,18 +239,11 @@ logoZoomDone
std Vec_Text_HW
lda #$80
sta /dev/null 2>&1
+
+# define a symbol MAKE_OS for the current operating system
+# WINDOWS | LINUX | OSX
+ifeq ($(OS),Windows_NT)
+ MAKE_OS = WINDOWS
+ ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
+ CPU=AMD64
+ endif
+ ifeq ($(PROCESSOR_ARCHITECTURE),x86)
+ CPU=IA32
+ endif
+else
+ UNAME_S := $(shell uname -s)
+ ifeq ($(UNAME_S),Linux)
+ MAKE_OS=LINUX
+ endif
+ ifeq ($(UNAME_S),Darwin)
+ MAKE_OS=OSX
+ endif
+endif
+
+# HW Version Info
+# USAGE: make clean all USE_HW=v0.2 for v0.2 VEXTREME build
+# USAGE: make clean all USE_HW=v0.3 for v0.3 VEXTREME build
+ifndef HW_VER_VAL
+HW_VER_VAL?=255
+endif
+ifeq ($(USE_HW),v0.1)
+HW_VER_VAL = 1
+HW_VER_ARGS="USE_HW=v0.1"
+else ifeq ($(USE_HW),v0.2)
+HW_VER_VAL = 2
+HW_VER_ARGS="USE_HW=v0.2"
+else ifeq ($(USE_HW),v0.3)
+HW_VER_VAL = 3
+HW_VER_ARGS="USE_HW=v0.3"
+endif
+CFLAGS += -DHW_VER=$(HW_VER_VAL)
+ASFLAGS += -DHW_VER=$(HW_VER_VAL)
+
BINARY=veccart
OBJS=main.o menu.o romemu.o msc.o xprintf.o usb_msc.o ff_diskio.o \
- fatfs/ff.o fatfs/option/unicode.o flash.o led.o delay.o
+ fatfs/ff.o fatfs/option/unicode.o flash.o led.o delay.o \
+ highscore.o
LIBNAME = opencm3_stm32f4
ARCH_FLAGS = -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -mcpu=cortex-m4 -DSTM32F4
@@ -8,20 +54,22 @@ ARCH_FLAGS = -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -mcpu=cortex-m4 -DSTM32F
PREFIX = arm-none-eabi
CC = $(PREFIX)-gcc
LD = $(PREFIX)-gcc
-OBJCOPY = $(PREFIX)-objcopy
-OBJDUMP = $(PREFIX)-objdump
+OBJCOPY = $(PREFIX)-objcopy
+OBJDUMP = $(PREFIX)-objdump
+
# Uncomment this line if you want to use the installed (not local) library.
#TOOLCHAIN_DIR = `dirname \`which $(CC)\``/../$(PREFIX)
TOOLCHAIN_DIR=../libopencm3
CFLAGS += -O3 -g -Wextra -Wshadow -Wimplicit-function-declaration -Wredundant-decls \
-Wmissing-prototypes -Wstrict-prototypes -fno-common -ffunction-sections -fdata-sections \
-MD -Wall -Wundef -I$(TOOLCHAIN_DIR)/include $(ARCH_FLAGS)
+ASFLAGS += $(ARCH_FLAGS)
LDSCRIPT = stm32f411rct6.ld
#../libopencm3/lib/lib$(LIBNAME).ld
LDFLAGS += --static -nostartfiles -L$(TOOLCHAIN_DIR)/lib \
- -T$(LDSCRIPT) -Wl,--gc-sections -mthumb $(CFLAGS) -lm \
+ -Xlinker -Map=$(BINARY).map -T$(LDSCRIPT) -Wl,--gc-sections -mthumb $(CFLAGS) -lm \
-Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group -l$(LIBNAME)
#include libopencm3/ld/Makefile.linker
@@ -34,12 +82,12 @@ LDFLAGS += --static -nostartfiles -L$(TOOLCHAIN_DIR)/lib \
# Specify release version like so
# make flash-bin VER=v0.1
flash-release:
- dfu-util -a 0 -d 0483:df11 -s 0x08000000:leave -D ../releases/$(VER)/stm32/veccart.bin
+ dfu-util -a 0 -d 0483:df11 -s 0x08000000 -D ../releases/$(VER)/stm32/veccart.bin
# Specify bin like so
# make flash-bin BIN=../releases/v0.1/stm32/veccart.bin
flash-bin:
- dfu-util -a 0 -d 0483:df11 -s 0x08000000:leave -D $(BIN)
+ dfu-util -a 0 -d 0483:df11 -s 0x08000000 -D $(BIN)
all: docker
@@ -47,7 +95,11 @@ docker-build: Dockerfile
docker build . -t stm32-build
docker:
- docker run --rm -t -v `pwd`:/build/veccart -u `id -u ${USER}`:`id -g ${USER}` stm32-build make images
+ docker run --rm -t -v `pwd`:/build/veccart -u `id -u ${USER}`:`id -g ${USER}` stm32-build make images $(HW_VER_ARGS)
+
+bash:
+ docker run --rm -it -v `pwd`:/build/veccart -u `id -u ${USER}`:`id -g ${USER}` stm32-build bash
+
images: $(BINARY).images
flash: $(BINARY).flash
@@ -59,24 +111,32 @@ rom.o: rom.inc rom.c rom.h
@#echo "*** $* images generated ***"
%.bin: %.elf
- $(OBJCOPY) -Obinary $(*).elf $(*).bin
+ $(VERBOSE)$(OBJCOPY) -Obinary $(*).elf $(*).bin
%.hex: %.elf
- $(OBJCOPY) -Oihex $(*).elf $(*).hex
+ $(VERBOSE)$(OBJCOPY) -Oihex $(*).elf $(*).hex
%.srec: %.elf
- $(OBJCOPY) -Osrec $(*).elf $(*).srec
+ $(VERBOSE)$(OBJCOPY) -Osrec $(*).elf $(*).srec
%.list: %.elf
- $(OBJDUMP) -S $(*).elf > $(*).list
+ $(VERBOSE)$(OBJDUMP) -S $(*).elf > $(*).list
-%.elf: $(OBJS) $(LDSCRIPT)
+%.elf: $(OBJS) $(LDSCRIPT) multicart.ld
$(LD) -o $(*).elf $(OBJS) $(LDFLAGS)
$(PREFIX)-size $(*).elf
%.o: %.c Makefile
$(CC) $(CFLAGS) -o $@ -c $<
+multicart.bin:
+ make -C ../multicart/ docker-build
+ make -C ../multicart/
+ cp ../multicart/multicart.bin .
+
+multicart.ld: multicart.bin
+ cat $< | hexdump -v -e '"BYTE(0x" 1/1 "%02X" ")\n"' > $@
+
clean:
rm -f $(OBJS)
rm -f *.elf
@@ -84,12 +144,9 @@ clean:
rm -f *.hex
rm -f *.srec
rm -f *.list
- find . -name '*.d' -delete
-
-#%.flash: %.hex
-# stm32flash -w "$(*).hex" -b 460800 -i -rts,dtr,-dtr -v -g 0x0 /dev/ttyUSB0
+ rm -rf *.d
%.flash: %.bin
- dfu-util -a 0 -d 0483:df11 -s 0x08000000:leave -D $(*).bin
+ dfu-util -a 0 -d 0483:df11 -s 0x08000000 -D $(*).bin
.PHONY: images clean flash dummy
diff --git a/code/veccart/delay.c b/code/veccart/delay.c
index dc37d56..c8414d6 100644
--- a/code/veccart/delay.c
+++ b/code/veccart/delay.c
@@ -1,20 +1,27 @@
-// #include
-#include
+#define CM3_ASSERT_VERBOSE
+#include
+#include
#include "delay.h"
+#include "xprintf.h"
-volatile uint32_t sysTimerMs;
+#ifdef NDEBUG
+ #error "asserts disabled, waaaaa!!"
+#endif
-// Called when systick fires
-void sys_tick_handler(void) {
- sysTimerMs++;
- // xprintf("sysTimerMs: %u\n", sysTimerMs);
+__attribute__((__noreturn__))
+void cm3_assert_failed_verbose(const char *file, int line,
+ const char *func, const char *assert_expr) {
+ xprintf("[%s:%d,%s] assert failed:(%s)\n",
+ file, line, func, assert_expr);
+ while(1); // die forever
}
void delay(uint32_t wait) {
- uint32_t start = sysTimerMs;
- while (sysTimerMs - start <= wait);
+ cm3_assert(wait < (0xFFFFFFFF / 120000)); // delay must be less than ~35.8s
+ uint32_t start = dwt_read_cycle_counter() / 120000;
+ while (millis() - start <= wait);
}
uint32_t millis(void) {
- return sysTimerMs;
+ return dwt_read_cycle_counter() / 120000;
}
\ No newline at end of file
diff --git a/code/veccart/delay.h b/code/veccart/delay.h
index 1c9c074..842cadc 100644
--- a/code/veccart/delay.h
+++ b/code/veccart/delay.h
@@ -1,7 +1,8 @@
#ifndef DELAY_H
#define DELAY_H
-void sys_tick_handler(void);
+#include
+
void delay(uint32_t wait);
uint32_t millis(void);
diff --git a/code/veccart/fatfs/ff.c b/code/veccart/fatfs/ff.c
index 30d2e71..bd3a7f9 100644
--- a/code/veccart/fatfs/ff.c
+++ b/code/veccart/fatfs/ff.c
@@ -751,7 +751,7 @@ FRESULT sync_fs ( /* FR_OK: successful, FR_DISK_ERR: failed */
/* Get sector# from cluster# */
/*-----------------------------------------------------------------------*/
/* Hidden API for hacks and disk tools */
-
+static
DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
FATFS* fs, /* File system object */
DWORD clst /* Cluster# to be converted */
@@ -769,7 +769,7 @@ DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
/* FAT access - Read value of a FAT entry */
/*-----------------------------------------------------------------------*/
/* Hidden API for hacks and disk tools */
-
+static
DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */
FATFS* fs, /* File system object */
DWORD clst /* FAT index number (cluster number) to get the value */
@@ -825,6 +825,7 @@ DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluste
/* Hidden API for hacks and disk tools */
#if !_FS_READONLY
+static
FRESULT put_fat (
FATFS* fs, /* File system object */
DWORD clst, /* FAT index number (cluster number) to be changed */
@@ -1327,6 +1328,7 @@ void fit_lfn (
/* Create numbered name */
/*-----------------------------------------------------------------------*/
#if _USE_LFN
+__attribute__((unused))
static
void gen_numname (
BYTE* dst, /* Pointer to the buffer to store numbered SFN */
diff --git a/code/veccart/fatfs/ffconf.h b/code/veccart/fatfs/ffconf.h
index 16dfd39..59c11a3 100644
--- a/code/veccart/fatfs/ffconf.h
+++ b/code/veccart/fatfs/ffconf.h
@@ -16,7 +16,7 @@
/ data transfer. */
-#define _FS_READONLY 1
+#define _FS_READONLY 0
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
@@ -33,7 +33,7 @@
/ 3: f_lseek() function is removed in addition to 2. */
-#define _USE_STRFUNC 0
+#define _USE_STRFUNC 1
/* This option switches string functions, f_gets(), f_putc(), f_puts() and
/ f_printf().
/
@@ -69,7 +69,7 @@
/ Locale and Namespace Configurations
/---------------------------------------------------------------------------*/
-#define _CODE_PAGE 1252
+#define _CODE_PAGE 437
/* This option specifies the OEM code page to be used on the target system.
/ Incorrect setting of the code page can cause a file open failure.
/
diff --git a/code/veccart/ff_diskio.c b/code/veccart/ff_diskio.c
index 9a4364f..8ab12fe 100644
--- a/code/veccart/ff_diskio.c
+++ b/code/veccart/ff_diskio.c
@@ -23,10 +23,13 @@
/*-----------------------------------------------------------------------*/
DSTATUS disk_status (
- BYTE pdrv /* Physical drive nmuber to identify the drive */
+ BYTE pdrv /* Physical drive number to identify the drive */
)
{
- return 0; //SPI is always available
+ // unused for now
+ (void) pdrv;
+
+ return 0; // SPI is always available
}
@@ -36,9 +39,12 @@ DSTATUS disk_status (
/*-----------------------------------------------------------------------*/
DSTATUS disk_initialize (
- BYTE pdrv /* Physical drive nmuber to identify the drive */
+ BYTE pdrv /* Physical drive number to identify the drive */
)
{
+ // unused for now
+ (void) pdrv;
+
flashInit();
return 0;
}
@@ -56,7 +62,10 @@ DRESULT disk_read (
UINT count /* Number of sectors to read */
)
{
- int i;
+ // unused for now
+ (void) pdrv;
+
+ unsigned int i;
for (i=0; i 255)
+ {
+ return RES_PARERR;
+ }
-//Not implemented for now. WARNING: If this is ever needed for the SPI flash, flashTick should
-//also be called every 100mS or else the final sector cache never gets written!
+ unsigned int i;
+ for (i=0; i15) {
- xprintf("Auto writeback after timeout\n");
flashDoWriteback();
+ xprintf("Auto writeback after timeout\n");
+
+ // We arrive here after each file copied to the cart or when the mounted drive is ejected.
}
}
@@ -60,7 +62,8 @@ static void flashCs(int i) {
if (i) gpio_set(GPIOA, GPIO15); else gpio_clear(GPIOA, GPIO15);
}
-static void flashEraseChip() {
+__attribute__((unused))
+static void flashEraseChip(void) {
int status;
xprintf("Erasing chip...\n");
//Send write enable
@@ -84,6 +87,12 @@ static void flashEraseChip() {
}
void flashInit(void) {
+ static bool flash_init = false; // only allow flash to be initialized once
+ if (flash_init) {
+ return;
+ }
+ flash_init = true;
+
int id, mf;
gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO15);
gpio_mode_setup(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE,
@@ -206,7 +215,7 @@ int flashWriteBlk(uint32_t lba, const uint8_t *copy_from) {
// xprintf("Write lba %d (addr %x blkaddr %x)\n", lba, addr, blkaddr);
- if (blkaddr!=flashBlkAddr) {
+ if (blkaddr != (uint32_t)flashBlkAddr) {
//Write back data in block cache, if any
flashDoWriteback();
gpio_set(GPIOB, GPIO0); //turn on LED
diff --git a/code/veccart/highscore.c b/code/veccart/highscore.c
new file mode 100644
index 0000000..fbc164c
--- /dev/null
+++ b/code/veccart/highscore.c
@@ -0,0 +1,449 @@
+/*
+ * Copyright (C) 2020
+ *
+ * This library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library. If not, see .
+ */
+// Includes
+#include
+#include
+#include
+#include
+
+#include "flash.h"
+#include "xprintf.h"
+#include "fatfs/ff.h"
+
+#include "highscore.h"
+
+/**
+ * Set DEBUG_HIGHSCORE to 1 to enable highscore.c debugging, 0 to disable.
+ */
+#define DEBUG_HIGHSCORE (0)
+
+#if (DEBUG_HIGHSCORE == 1)
+ #define HS_XPRINTF(F, ...) xprintf(F, ##__VA_ARGS__)
+#else
+ #define HS_XPRINTF(F, ...)
+#endif
+
+// Externs
+
+// Globals
+
+static FIL fileHighScore; // Highscore file pointer
+static FRESULT fResult; // Highscore file return results
+
+// Local variables
+static GameFileRecord activeGameData;
+
+// Global variables
+GameFileRecord * pActiveGameData = &activeGameData;
+
+// Local functions
+static int highScoreGetFileNameSize(const unsigned char * pString);
+
+/**
+ * Open High score file locted on flash file system. If it doesn't exist
+ * create the file.
+ */
+FRESULT highScoreOpenFile(void)
+{
+ fResult = f_open(&fileHighScore, "/hs.bin", FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
+
+ return fResult;
+}
+
+/**
+ * Search for the game by name in the highscore file, and if it exists,
+ * read the game record associated with the name and store it in the
+ * location pointed to by the second parameter (pGameRecord).
+ *
+ * @param[in] - pGameName - Points to a 0x80 terminated game name
+ * @param[out] - pGameRecord - Location to store game data record, or NULL
+ * to store in out active game location
+ *
+ * @return - HIGH_SCORE_SUCCESS or error code for failure
+ * pGameRecord = Game record is stored here on success
+ * fileHighScore->fptr = EOF or start of record for the game
+ */
+HighScoreRetVal highScoreGet(const unsigned char * pGameName, GameFileRecord * pGameRecord)
+{
+ int retVal = HIGH_SCORE_GAME_NOT_FOUND;
+ unsigned int bytesRead = 0;
+ bool exit = false;
+
+ /**
+ * Check for invalid parameter for game name
+ */
+ if (pGameName == NULL)
+ {
+ HS_XPRINTF("ERROR: no game name pointer passed!\n");
+ return (HIGH_SCORE_GAME_NAME_INVALID_PTR);
+ }
+
+ /**
+ * Check to make sure file was opened successfully
+ */
+ if (fResult != FR_OK)
+ {
+ // Try again!
+ HS_XPRINTF("ERROR: retrying hs.bin file open!\n");
+ fResult = highScoreOpenFile();
+ if (fResult != FR_OK) {
+ return (HIGH_SCORE_FILE_OPEN_FAIL);
+ }
+ }
+
+ /**
+ * Calculate size of the 0x80 terminated string passed into function
+ */
+ int gameNameSize = highScoreGetFileNameSize(pGameName);
+
+ /**
+ * Return failure if name of game is 0
+ */
+ if (gameNameSize == 0)
+ {
+ HS_XPRINTF("ERROR: zero size game name!\n");
+ return (HIGH_SCORE_GAME_NAME_SIZE_ZERO);
+ }
+
+ /**
+ * Exit if the game name passed to this function is larger than we allow
+ */
+ if (gameNameSize > (MAX_GAME_NAME_SIZE - 1))
+ {
+ HS_XPRINTF("ERROR: game name too long!\n");
+ return (HIGH_SCORE_GAME_NAME_TOO_LONG);
+ }
+
+ /**
+ * Set game record pointer to the active local game data pointer
+ * if user passed in NULL
+ */
+ if (pGameRecord == NULL)
+ {
+ pGameRecord = pActiveGameData;
+ }
+
+ /**
+ * Move file pointer to beginning of the file
+ */
+ f_lseek(&fileHighScore, 0);
+
+ /**
+ * Search for game in file
+ */
+ do
+ {
+ /**
+ * Read a high score record from file
+ */
+ fResult = f_read(&fileHighScore, pGameRecord, sizeof(GameFileRecord), &bytesRead);
+
+ /**
+ * Exit if EOF or another read issue
+ */
+ if ((fResult != FR_OK) || (bytesRead == 0))
+ {
+ HS_XPRINTF("ERROR: f_read(): %u bytesRead: %u\n", fResult, bytesRead);
+ exit = true;
+ }
+
+ /**
+ * Compare passed in game name to game name read from file
+ */
+ if (!exit)
+ {
+ if (0 == strncmp((char *)pGameName, (char *)pGameRecord->name, gameNameSize))
+ {
+ /**
+ * Move file pointer back to the beginning of the record for the
+ * game, to prepare writing of the new high score if it is beat.
+ */
+ f_lseek(&fileHighScore, f_tell(&fileHighScore) - sizeof(GameFileRecord));
+
+ /**
+ * Found matching game
+ */
+ exit = true;
+ retVal = HIGH_SCORE_SUCCESS;
+ }
+ }
+ } while (!exit);
+
+ return retVal;
+}
+
+/**
+ * Initialize a game record to the defaults and add the name pointed to by pGameName
+ * @param[in] - pGameName - Pointer to the game name in the ROM - 0x80 terminated
+ * @param[in] - pGameRecord - Pointer to a game record, or NULL (If NULL, use active)
+ *
+ * @return - HIGH_SCORE_SUCCESS, or error code
+ */
+HighScoreRetVal highScoreSetGameRecordToDefaults(const unsigned char * pGameName, GameFileRecord * pGameRecord)
+{
+ int retVal = HIGH_SCORE_SUCCESS;
+ char defaultScore[] = {' ', ' ', ' ', ' ', ' ', '0', '\0'};
+
+ /**
+ * Check for invalid parameter for game name
+ */
+ if (pGameName == NULL)
+ {
+ HS_XPRINTF("ERROR: no game name pointer passed!\n");
+ return (HIGH_SCORE_GAME_NAME_INVALID_PTR);
+ }
+
+ /**
+ * Set game record pointer to the active local game data pointer
+ * if user passed in NULL
+ */
+ if (pGameRecord == NULL)
+ {
+ pGameRecord = pActiveGameData;
+ }
+
+ /**
+ * Calculate size of the 0x80 terminated string passed into function
+ */
+ int gameNameSize = highScoreGetFileNameSize(pGameName);
+ HS_XPRINTF("INFO: game name size: %d\n", gameNameSize);
+
+ /**
+ * Return failure if name of game is 0
+ */
+ if (gameNameSize == 0)
+ {
+ HS_XPRINTF("ERROR: zero size game name!\n");
+ return (HIGH_SCORE_GAME_NAME_SIZE_ZERO);
+ }
+
+ /**
+ * Exit if the game name passed to this function is larger than we allow
+ */
+ if (gameNameSize > (MAX_GAME_NAME_SIZE - 1))
+ {
+ HS_XPRINTF("ERROR: game name too long!\n");
+ return (HIGH_SCORE_GAME_NAME_TOO_LONG);
+ }
+
+ /**
+ * Initialize the high score to default of zero
+ */
+ strncpy((char *)pGameRecord->maxScore, defaultScore, sizeof(defaultScore));
+ HS_XPRINTF("INFO: defaultScore size: %d\n", sizeof(defaultScore));
+
+ /**
+ * Move name into active game record name field, followed by a NULL byte
+ */
+ HS_XPRINTF("Creating game high score record for: ");
+ int count = 0;
+ for (count = 0; (count < MAX_GAME_NAME_SIZE) && (count < gameNameSize); count++)
+ {
+ pGameRecord->name[count] = pGameName[count];
+ HS_XPRINTF("%c", pGameName[count]);
+ }
+ HS_XPRINTF("\n");
+
+ /**
+ * NULL terminate the string for storing in our game records
+ */
+
+ for (; count < MAX_GAME_NAME_SIZE; count++)
+ {
+ pGameRecord->name[count] = '\0';
+ }
+
+ return retVal;
+}
+
+/**
+ * Return the size of the games name string, excluding the trailing 0x80
+ *
+ * param[in] - pString - 0x80 terminated game name string as found in
+ * cartridge.
+ *
+ * TODO - Update to grab the second portion of the string. Look up to 0x80 0x00
+ * then back up to get both strings
+ */
+static int highScoreGetFileNameSize(const unsigned char * pString)
+{
+ int count = 0;
+ // Iterate to (MAX_GAME_NAME_SIZE - 1) since Vectrex doesn't null terminate
+ for (count = 0; count < (MAX_GAME_NAME_SIZE - 1); count++)
+ {
+ if (pString[count] == 0x80)
+ {
+ return count;
+ }
+ }
+ return MAX_GAME_NAME_SIZE;
+}
+
+/**
+ * If the score pointed to by pScore is larger than the current maximum
+ * score stored in the active game data record, then update it and
+ * write it to the high score file.
+ *
+ * @param[in] - Pointer to 0x80 terminated high score
+ */
+void highScoreSave(unsigned char * pScore)
+{
+ int i = 0;
+
+ /**
+ * Compare this new high score to see if it is greater
+ * than the overall high score for this game stored in
+ * the highScore file.
+ */
+ HighScoreCompare compare_ret_val = highScoreCompare(pActiveGameData->maxScore, pScore);
+ HS_XPRINTF("highScoreCompare result: %d\n", compare_ret_val);
+
+ /**
+ * If the new score in pScore is greater than the current max score we read from
+ * the file, then we need to update the active game data record with the new
+ * high score so it will be saved to the file.
+ */
+ if (compare_ret_val == HIGH_SCORE1_LESS_SCORE2)
+ {
+ /**
+ * Print the "New high score! [GAME_NAME:SCORE]"
+ */
+ xprintf("New high score! [");
+ for (int count = 0; count < MAX_GAME_NAME_SIZE; count++)
+ {
+ if (pActiveGameData->name[count] == '\0') {
+ break;
+ }
+ xprintf("%c", pActiveGameData->name[count]);
+ }
+ xprintf(":");
+
+ /**
+ * Move new high score into global current game record
+ */
+ for (i = 0; i < (MAX_GAME_SCORE_SIZE - 1); i++)
+ {
+ pActiveGameData->maxScore[i] = pScore[i];
+ if (pScore[i] != ' ') {
+ xprintf("%c", pScore[i]);
+ }
+ }
+ xprintf("]\n");
+
+ /**
+ * Add '\0' to end of string
+ */
+ pActiveGameData->maxScore[i] = '\0';
+
+ /**
+ * Write the updated game record to the file
+ * Note: The write pointer should be correct, either the end
+ * of the file for a new game, or the beginning of the game
+ * record where the update needs to happen.
+ */
+ HighScoreRetVal store_ret_val = highScoreStore(pActiveGameData);
+ HS_XPRINTF("highScoreStore result: %d\n", store_ret_val);
+ (void) store_ret_val;
+ }
+}
+
+/**
+ * Store the game record into the fileHighScore at the current write
+ * pointer.
+ *
+ * @param[in] - Pointer to the game record to store
+ *
+ * @return - HIGH_SCORE_SUCCESS or HIGH_SCORE_WRITE_FAIL
+ */
+HighScoreRetVal highScoreStore(GameFileRecord * pGameRecord)
+{
+ unsigned int bytesWrote = 0;
+
+ /**
+ * Set game record pointer to the active local game data pointer
+ * if user passed in NULL
+ */
+ if (pGameRecord == NULL)
+ {
+ pGameRecord = pActiveGameData;
+ }
+
+ if (pGameRecord->name[0] == 0x00)
+ {
+ return HIGH_SCORE_INVALID_NAME;
+ }
+
+ /**
+ * Store a high score record to the file
+ */
+ fResult = f_write(&fileHighScore, pGameRecord, sizeof(GameFileRecord), &bytesWrote);
+
+ if ( (bytesWrote < sizeof(GameFileRecord)) || (fResult != FR_OK) )
+ {
+ return HIGH_SCORE_WRITE_FAIL;
+ }
+
+ /**
+ * Flush the file data
+ */
+ f_sync(&fileHighScore);
+
+ /**
+ * Flush record to flash device
+ */
+ flashDoWriteback();
+
+ return HIGH_SCORE_SUCCESS;
+}
+
+/**
+ * Compare two scores in string BCD format with preceding
+ * spaces as kept by the vectrex.
+ * Note: A maximum of six bytes are compared.
+ *
+ * @param[in] - pScore1 - Pointer to first score
+ * @param[in] - pScore2 - Pointer to second score
+ *
+ * @return - HIGH_SCORES_EQUAL, HIGH_SCORE1_LESS_SCORE2,
+ * HIGH_SCORE2_LESS_SCORE1
+ *
+ */
+HighScoreCompare highScoreCompare(const unsigned char * pScore1, const unsigned char * pScore2)
+{
+ HighScoreCompare retVal = HIGH_SCORES_EQUAL;
+
+ int i = 0;
+ for (i = 0; i < (MAX_GAME_SCORE_SIZE - 1); i++)
+ {
+ if (pScore1[i] < pScore2[i])
+ {
+ HS_XPRINTF("INFO: new high score!\n");
+ retVal = HIGH_SCORE1_LESS_SCORE2;
+ break;
+ }
+ else if (pScore2[i] < pScore1[i])
+ {
+ HS_XPRINTF("INFO: stored score > new score\n");
+ retVal = HIGH_SCORE2_LESS_SCORE1;
+ break;
+ }
+ }
+ if (retVal == HIGH_SCORES_EQUAL) {
+ HS_XPRINTF("INFO: stored score == new score\n");
+ }
+ return (retVal);
+}
diff --git a/code/veccart/highscore.h b/code/veccart/highscore.h
new file mode 100644
index 0000000..a555e8f
--- /dev/null
+++ b/code/veccart/highscore.h
@@ -0,0 +1,57 @@
+#ifndef HIGHSCORE_H
+#define HIGHSCORE_H
+
+// Includes
+#include "fatfs/ff.h"
+
+// Constants
+#define MAX_GAME_NAME_SIZE (40 + 1) // Max of 40 ASCII characters + NULL
+#define MAX_GAME_SCORE_SIZE (6 + 1) // Max of 6 ASCII characters + NULL
+
+typedef enum
+{
+ HIGH_SCORE_SUCCESS = 0,
+ HIGH_SCORE_FILE_OPEN_FAIL = 1,
+ HIGH_SCORE_GAME_NOT_FOUND = 2,
+ HIGH_SCORE_GAME_NAME_TOO_LONG = 3,
+ UNUSED1 = 4,
+ HIGH_SCORE_GAME_NAME_SIZE_ZERO = 5,
+ HIGH_SCORE_GAME_NAME_INVALID_PTR = 6,
+ UNUSED2 = 5,
+ HIGH_SCORE_WRITE_FAIL = 7,
+ HIGH_SCORE_INVALID_NAME = 8,
+ HIGH_SCORE_FAIL = 0xFFFFFFFF // 32-bit -1
+} HighScoreRetVal;
+
+typedef enum
+{
+ HIGH_SCORES_EQUAL = 6,
+ HIGH_SCORE1_LESS_SCORE2 = 7,
+ HIGH_SCORE2_LESS_SCORE1 = 8
+} HighScoreCompare;
+
+// Sructures
+
+// A fame file record is exactly 48 bytes
+typedef struct
+{
+ unsigned char name[MAX_GAME_NAME_SIZE]; // NULL terminated name string
+ unsigned char maxScore[MAX_GAME_SCORE_SIZE]; // NULL terminated high score string
+} __attribute__((packed))GameFileRecord;
+
+
+// The format of the highscore file will be:
+// GameName, HighScore
+// GameName will be the same format used in a ROM game cartridge: ASCII bytes followed by NULL
+// HighScore will also the same format used at location 0xCBEB: 6 ACII bytes followed by NULL
+// The file can hold as many games as we have space on the file system
+
+// Prototypes
+FRESULT highScoreOpenFile(void);
+HighScoreRetVal highScoreGet(const unsigned char * pGame, GameFileRecord * pGameRecord);
+HighScoreRetVal highScoreSetGameRecordToDefaults(const unsigned char * pGame, GameFileRecord * pGameRecord);
+void highScoreSave(unsigned char * pScore);
+HighScoreCompare highScoreCompare(const unsigned char * pScore1, const unsigned char * pScore2);
+HighScoreRetVal highScoreStore(GameFileRecord * pGameRecord);
+#endif // HIGHSCORE_H
+
diff --git a/code/veccart/led.c b/code/veccart/led.c
index c71349c..8f477e2 100644
--- a/code/veccart/led.c
+++ b/code/veccart/led.c
@@ -6,6 +6,9 @@
#include
#include "xprintf.h"
#include "delay.h"
+#include "sys.h"
+
+extern system_options sys_opt;
// APA102-2020 Driver - SPI2 Hardware
// CS - 33 - PB12 - SPI2_NSS - NA v0.2 HW (currently V-HALT)
@@ -110,6 +113,80 @@ void rainbowCycle(uint8_t wait) {
}
}
+#if 1
+void rainbowStep(uint8_t step) {
+ (void) step;
+ static const uint8_t STEP_SIZE = 8;
+ static const uint32_t c[6] = {
+ 0xFF0000, // red
+ 0xFFFF00, // yellow
+ 0x00FF00, // green
+ 0x00FFFF, // cyan
+ 0x0000FF, // blue
+ 0xFF00FF, // magenta
+ };
+ uint8_t *p;
+ static uint16_t n = 0;
+ static uint8_t w = 0, j = 0;
+ if (j < (6 * STEP_SIZE)) {
+ j++;
+ } else {
+ j = 0;
+ }
+ for (n = 0; n < numLEDs; n++) {
+ w = ((j / (STEP_SIZE / 2)) + n) % 6;
+ p = &pixels[n * 3];
+ if (sys_opt.hw_ver < 0x001e && sys_opt.rgb_type == RGB_TYPE_4) {
+ if (n <= 2 || n == 4 || n == 6 || n == 8) {
+ p[rOffset] = 0;
+ p[gOffset] = 0;
+ p[bOffset] = 0;
+ continue;
+ }
+ }
+ p[rOffset] = (uint8_t)(c[w] >> 16);
+ p[gOffset] = (uint8_t)(c[w] >> 8);
+ p[bOffset] = (uint8_t)c[w];
+ }
+ ledsUpdate();
+}
+#else
+// Designed to step through a distributed rainbow equally distributed across the LEDs
+void rainbowStep(uint8_t step) {
+ static uint16_t n = 0;
+ static uint8_t w = 0, j = 0;
+ uint8_t *p;
+ j += step;
+ for (n = 0; n < numLEDs; n++) {
+ w = ((n * 256 / numLEDs) + j) & 255;
+ p = &pixels[n * 3];
+ if (sys_opt.hw_ver < 0x001e && sys_opt.rgb_type == RGB_TYPE_4) {
+ if (n <= 2 || n == 4 || n == 6 || n == 8) {
+ p[rOffset] = 0;
+ p[gOffset] = 0;
+ p[bOffset] = 0;
+ continue;
+ }
+ }
+ if (w < 85) {
+ p[rOffset] = w * 3;
+ p[gOffset] = 255 - w;
+ p[bOffset] = 0;
+ } else if (w < 170) {
+ w -= 85;
+ p[rOffset] = 255 - w * 3;
+ p[gOffset] = 0;
+ p[bOffset] = w * 3;
+ } else {
+ w -= 170;
+ p[rOffset] = 0;
+ p[gOffset] = w * 3;
+ p[bOffset] = 255 - w * 3;
+ }
+ }
+ ledsUpdate();
+}
+#endif
// Wipe a color across all LEDs with a particular direction and speed/delay
void colorWipe(bool dir, uint32_t c, uint8_t wait) {
int i;
@@ -161,14 +238,14 @@ uint32_t colorWheel(uint8_t WheelPos) {
// Effective range is 2 - 8, 4 is default for 16 pixels. Play with this.
// Color - 32-bit packed RGB color value. All pixels will be this color.
// knightRider(cycles, speed, width, color);
-void knightRider(uint16_t cycles, uint16_t speed, uint8_t width, uint16_t first, uint16_t last, uint32_t color) {
+void __attribute__((optimize("O0"))) knightRider(uint16_t cycles, uint16_t speed, uint8_t width, uint16_t first, uint16_t last, uint32_t color) {
uint32_t old_val[last+1]; // up to 256 lights!
// Larson time baby!
for (int i = 0; i < cycles; i++) {
for (int count = first+1; count0; x--) {
+ for (int x = count; x>0; x--) {
old_val[x-1] = dimColor(old_val[x-1], width);
ledsSetPixelColor(x-1, old_val[x-1]);
}
@@ -200,7 +277,7 @@ void theaterChaseRainbow(int wait) {
// revolution of the color wheel (range 65536) along the length
// of the strip (ledsNumPixels() steps):
int hue = firstPixelHue + c * 65536L / ledsNumPixels();
- uint32_t color = ledsGamma32(ledsColorHSV(hue)); // hue -> RGB
+ uint32_t color = ledsGamma32(ledsColorHSV2(hue, 255, 255)); // hue -> RGB
ledsSetPixelColor(c, color); // Set pixel 'c' to value 'color'
}
ledsUpdate(); // Update strip with new contents
@@ -346,7 +423,6 @@ void ledsUpdate() {
uint8_t *ptr = pixels, i; // -> LED data
uint16_t n = numLEDs; // Counter
- uint16_t b16 = (uint16_t)brightness; // Type-convert for fixed-point math
//__disable_irq(); // If 100% focus on SPI clocking required
@@ -355,19 +431,12 @@ void ledsUpdate() {
for (i=0; i<4; i++) {
spi_xfer(SPI2, 0x00); // 4 byte start-frame marker
}
- if (brightness) { // Scale pixel brightness on output
- do { // For each pixel...
- spi_xfer(SPI2, 0xFF); // Pixel start
- for (i=0; i<3; i++) {
- spi_xfer(SPI2, (*ptr++ * b16) >> 8); // Scale, write RGB
- }
- } while (--n);
- } else { // Full brightness (no scaling)
- do { // For each pixel...
- spi_xfer(SPI2, 0xFF); // Pixel start
- for(i=0; i<3; i++) spi_xfer(SPI2, *ptr++); // Write R,G,B
- } while(--n);
- }
+ do { // For each pixel...
+ spi_xfer(SPI2, (0xE0 + brightness)); // Factor in brightness value
+ for (i=0; i<3; i++) {
+ spi_xfer(SPI2, *ptr++); // Write R,G,B
+ }
+ } while(--n);
// Four end-frame bytes are seemingly indistinguishable from a white
// pixel, and empirical testing suggests it can be left out...but it's
@@ -382,21 +451,12 @@ void ledsUpdate() {
for (i=0; i<4; i++) {
leds_sw_spi_out(0); // Start-frame marker
}
- if (brightness) { // Scale pixel brightness on output
- do { // For each pixel...
- leds_sw_spi_out(0xFF); // Pixel start
- for (i=0; i<3; i++) {
- leds_sw_spi_out((*ptr++ * b16) >> 8); // Scale, write
- }
- } while(--n);
- } else { // Full brightness (no scaling)
- do { // For each pixel...
- leds_sw_spi_out(0xFF); // Pixel start
- for (i=0; i<3; i++) {
- leds_sw_spi_out(*ptr++); // R,G,B
- }
- } while(--n);
- }
+ do { // For each pixel...
+ leds_sw_spi_out(0xE0 + brightness); // Factor in brightness value
+ for (i=0; i<3; i++) {
+ leds_sw_spi_out(*ptr++); // R,G,B
+ }
+ } while(--n);
for (i=0; i<4; i++) {
leds_sw_spi_out(0xFF); // End-frame marker (see note above)
}
@@ -411,6 +471,15 @@ void ledsClear() { // Write 0s (off) to full pixel buffer
// Set pixel color, separate R,G,B values (0-255 ea.)
void ledsSetPixelColorRGB(uint16_t n, uint8_t r, uint8_t g, uint8_t b) {
+ if (sys_opt.hw_ver < 0x1e && sys_opt.rgb_type == RGB_TYPE_4) {
+ if (n <= 2 || n == 4 || n == 6 || n == 8) {
+ uint8_t *p = &pixels[n * 3];
+ p[rOffset] = 0;
+ p[gOffset] = 0;
+ p[bOffset] = 0;
+ return;
+ }
+ }
if (n < numLEDs) {
uint8_t *p = &pixels[n * 3];
p[rOffset] = r;
@@ -421,6 +490,15 @@ void ledsSetPixelColorRGB(uint16_t n, uint8_t r, uint8_t g, uint8_t b) {
// Set pixel color, 'packed' RGB value (0x000000 - 0xFFFFFF)
void ledsSetPixelColor(uint16_t n, uint32_t c) {
+ if (sys_opt.hw_ver < 0x1e && sys_opt.rgb_type == RGB_TYPE_4) {
+ if (n <= 2 || n == 4 || n == 6 || n == 8) {
+ uint8_t *p = &pixels[n * 3];
+ p[rOffset] = 0;
+ p[gOffset] = 0;
+ p[bOffset] = 0;
+ return;
+ }
+ }
if (n < numLEDs) {
uint8_t *p = &pixels[n * 3];
p[rOffset] = (uint8_t)(c >> 16);
@@ -450,24 +528,18 @@ uint16_t ledsNumPixels() { // Ret. strip length
}
// Set global strip brightness. This does not have an immediate effect;
-// must be followed by a call to show(). Not a fan of this...for various
-// reasons I think it's better handled in one's sketch, but it's here for
-// parity with the NeoPixel library. Good news is that brightness setting
-// in this library is 'non destructive' -- it's applied as color data is
-// being issued to the strip, not during setPixel(), and also means that
-// getPixelColor() returns the exact value originally stored.
+// must be followed by a call to show(). Good news is that brightness setting
+// in this library is 'non destructive' -- it's applied as global data
+// being issued to the upper byte of each pixel, not during setPixel(),
+// and also means that getPixelColor() returns the exact value originally stored.
void ledsSetBrightness(uint8_t b) {
- // Stored brightness value is different than what's passed. This
- // optimizes the actual scaling math later, allowing a fast 8x8-bit
- // multiply and taking the MSB. 'brightness' is a uint8_t, adding 1
- // here may (intentionally) roll over...so 0 = max brightness (color
- // values are interpreted literally; no scaling), 1 = min brightness
- // (off), 255 = just below max brightness.
- brightness = b + 1;
+ // global brightness value is 5 bits in the MSB of each 32-bit pixel data
+ // 111xxxxx RRRRRRRR GGGGGGGG BBBBBBBB, where xxxxx is 0 - 31 brightness
+ brightness = b >> 3;
}
uint8_t ledsGetBrightness() {
- return brightness - 1; // Reverse above operation
+ return brightness << 3; // Reverse above operation
}
// Return pointer to the library's pixel data buffer. Use carefully,
@@ -589,7 +661,7 @@ uint32_t ledsGamma32(uint32_t x) {
// of an RGB value, but this seems exceedingly rare and if it's
// encountered in reality they can mask values going in or coming out.
for (uint8_t i=0; i<4; i++) {
- y[i] = ledsGamma8(y[i]);
+ y[i] = _LedsGammaTable[y[i]]; // 0-255 in, 0-255 out
}
return x; // Packed 32-bit return
}
diff --git a/code/veccart/led.h b/code/veccart/led.h
index fe2d7f0..baba94b 100644
--- a/code/veccart/led.h
+++ b/code/veccart/led.h
@@ -33,6 +33,20 @@
#define RGB_BRG (1 | (2 << 2) | (0 << 4))
#define RGB_BGR (2 | (1 << 2) | (0 << 4))
+// Addressable LED Preset Colors
+static const uint32_t colors[10] = {
+ 0, // off
+ 0xFF0000, // red
+ 0xFF9900, // orange
+ 0xFFFF00, // yellow
+ 0x00FF00, // green
+ 0x00FFFF, // cyan
+ 0x0000FF, // blue
+ 0x7700FF, // pink
+ 0xFF00FF, // magenta
+ 0xFFFFFF // white
+};
+
/* 8-bit gamma-correction table.
Copy & paste this snippet into a Python REPL to regenerate:
import math
@@ -63,6 +77,7 @@ static const uint8_t _LedsGammaTable[256] = {
uint32_t Wheel(uint8_t WheelPos);
void rainbow(uint8_t wait);
void rainbowCycle(uint8_t wait);
+void rainbowStep(uint8_t step);
void colorWipe(bool dir, uint32_t c, uint8_t wait);
uint32_t dimColor(uint32_t color, uint8_t width);
uint32_t colorWheel(uint8_t WheelPos);
@@ -93,14 +108,6 @@ uint8_t *ledsGetPixels(void); // Return pixel data pointe
* colors. Makes color transitions appear more perceptially correct.
*/
uint32_t ledsColorHSV2(uint16_t hue, uint8_t sat, uint8_t val);
-static uint32_t ledsColorHSV(uint32_t x) {
- return ledsColorHSV2(x, 255, 255); // sat = 255, val = 255
-}
-
-static uint8_t ledsGamma8(uint8_t x) {
- return _LedsGammaTable[x]; // 0-255 in, 0-255 out
-}
-
uint32_t ledsGamma32(uint32_t x);
#endif // _ADAFRUIT_DOT_STAR_H_
diff --git a/code/veccart/main.c b/code/veccart/main.c
index 6e1f568..918ef4e 100755
--- a/code/veccart/main.c
+++ b/code/veccart/main.c
@@ -1,58 +1,82 @@
-/*
- * Copyright (C) 2015 Jeroen Domburg
- *
- * This library is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library. If not, see .
- */
+/***************************************************************************
+ Copyright (C) 2020 Brett Walach
+ --------------------------------------------------------------------------
+ VEXTREME main.c
+
+ The magic starts here!
+
+ Original header follows:
+ --------------------------------------------------------------------------
+ Copyright (C) 2015 Jeroen Domburg
+
+ This library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this library. If not, see .
+ *************************************************************************/
#include
#include
#include
#include
-#include
#include
#include
#include
#include
+#include
#include
#include
+#include "sys.h"
#include "led.h"
#include "delay.h"
#include "main.h"
#include "menu.h"
#include "msc.h"
+#include "highscore.h"
+// #include "flash.h"
//#include "rom.h"
#include "xprintf.h"
#include "fatfs/ff.h"
+// Externs
+extern GameFileRecord* pActiveGameData;
+extern char multicart_start;
+extern char multicart_end;
//Memory for the menu ROM and the running cartridge.
//We keep both in memory so we can quickly exchange them when a reset has been detected.
const int menuIndex = 0xfff; // fixed location in multicart.bin
char menuData[8*1024];
-char *romData=menuData;
+char devmodeData[2*1024];
+char* romData = menuData;
unsigned char parmRam[256];
char menuDir[_MAX_LFN + 1];
+static bool isItemAFile = false; // Default to being a directory and not a file
union cart_and_listing {
- char cartData[64*1024];
dir_listing listing;
+ char cartData[64*1024];
};
union cart_and_listing c_and_l;
+char* cartData = c_and_l.cartData;
+
+system_options sys_opt;
+char* sysData = (char*)&sys_opt;
+uint8_t checkDevMode = 0;
+
+FILINFO cart_file_info;
/*
//Pinning:
@@ -66,6 +90,8 @@ USBPWR - PA9
#define SYSCFG_MEMRMP MMIO32(SYSCFG_BASE + 0x00)
+// Local functions
+static void doStartRom(void);
void uart_output_func(unsigned char c){
uint32_t reg;
@@ -75,32 +101,117 @@ void uart_output_func(unsigned char c){
USART_DR(USART1) = (uint16_t) c & 0xff;
}
-//Asm function
+// Asm function
extern void romemu(void);
-//Load a ROM into cartridge memory
+// Load a ROM into cartridge memory
+void loadMenu() {
+ bool use_embedded_menu = (f_stat("/multicart.bin", &cart_file_info) != FR_OK);
+
+ loadRomWithHighScore("/multicart.bin", false, use_embedded_menu);
+}
+
void loadRom(char *fn) {
+ loadRomWithHighScore(fn, false, false); // by default, do not load high score mode
+}
+
+void loadRomWithHighScore(char *fn, bool load_hs_mode, bool use_embedded_menu) {
FIL f;
- FRESULT fr;
- UINT r=0;
+ FRESULT fr = FR_NO_FILE; // assume no file, so we can test if we ever opened the file later
+ UINT r = 0;
int n;
- if (romData==c_and_l.cartData)
- n=sizeof(c_and_l.cartData);
- else
- n=sizeof(menuData);
- fr=f_open(&f, fn, FA_READ);
- if (fr) {
- xprintf("Error opening file: %d\n", fr);
+ UINT x;
+ if (romData == c_and_l.cartData) {
+ // loaded cart data
+ n = sizeof(c_and_l.cartData);
} else {
- xprintf("Opened file: %s\n", fn);
+ // loaded menu data
+ n = sizeof(menuData);
+ }
+ if (romData == menuData && use_embedded_menu == true) {
+ xprintf("Copying %lu bytes of menu data... ", &multicart_end - &multicart_start);
+ memcpy(menuData, &multicart_start, &multicart_end - &multicart_start);
+ xprintf("OK!\n");
+ } else {
+ fr = f_open(&f, fn, FA_READ);
+ if (fr) {
+ xprintf("Error opening file: %d\n", fr);
+ } else {
+ xprintf("Opened file: %s\n", fn);
+ }
+ f_read(&f, romData, 64*1024, &r);
+ xprintf("Read %d bytes of rom data.\n", r);
}
- f_read(&f, romData, 64*1024, &r);
- if (n>32*1024 && r<=32*1024) {
+ // It's a game and it's <= 32KB
+ if (n > 32*1024 && r <= 32*1024) {
+ // pad with 0x01 for Mine Storm II and Polar Rescue (and any
+ // other buggy game that reads outside its program space)
+ for (x = r; x < 32*1024; x++) {
+ romData[x] = 0x01;
+ }
+ xprintf("Padded remaining %d bytes of rom data with 0x01\n", x - r);
//Duplicate bank to upper bank
- for (n=0; n<32*1024; n++) romData[n+32*1024]=romData[n];
+ for (n = 0; n < 32*1024; n++) {
+ romData[n+32*1024] = romData[n];
+ }
+
+ if (load_hs_mode) {
+ // Search for game in highscore file and if it exists read it into
+ // the active game high score record. If the game doesn't exist,
+ // then setup record to default values for high score and add the name.
+ // A NULL as the second param will use the default active pointer.
+ HighScoreRetVal hs_ret_val = highScoreGet((const unsigned char *)&romData[0x11], NULL);
+ if (hs_ret_val != HIGH_SCORE_SUCCESS) {
+ xprintf("highScoreGet failure: %d, creating default high score for: %s\n", hs_ret_val, fn);
+ // Set the active game record to defaults and change name to the current
+ // game we are loading. This will prepare it to be stored once we
+ // acquire a new high score from the game ROM running.
+ hs_ret_val = highScoreSetGameRecordToDefaults((const unsigned char *)&romData[0x11], NULL);
+ if (hs_ret_val != HIGH_SCORE_SUCCESS) {
+ xprintf("highScoreSetGameRecordToDefaults failure: %d\n", hs_ret_val);
+ }
+ } else {
+ xprintf("highScoreGet success\n");
+ }
+
+ // Store high score towards the end of the menu data
+ menuData[0x0ff0] = pActiveGameData->maxScore[0];
+ menuData[0x0ff1] = pActiveGameData->maxScore[1];
+ menuData[0x0ff2] = pActiveGameData->maxScore[2];
+ menuData[0x0ff3] = pActiveGameData->maxScore[3];
+ menuData[0x0ff4] = pActiveGameData->maxScore[4];
+ menuData[0x0ff5] = pActiveGameData->maxScore[5];
+ menuData[0x0ff6] = 0x80;
+ parmRam[0xe0] = 0x77; // High Score flag (IDLE:0x66, LOAD2VEC:0x77, SAVE2STM:0x88)
+
+ // Don't start game yet, stay in menu so that the VEXTREME menu
+ // can read and store the high score
+ romData = menuData;
+ } // end if (load_hs_mode)
+ }
+ // It's the menu, patch in the HW/SW versions
+ else if (romData == menuData) {
+ char* ptr1 = strstr(menuData, "11");
+ char* ptr2 = strstr(menuData, "22");
+ char* ptr3 = strstr(menuData, "33");
+ char* ptr4 = strstr(menuData, "44");
+ if (ptr1 && ptr2 && ptr3 && ptr4) {
+ *ptr1++ = 'V';
+ *ptr1 = '0' + (sys_opt.hw_ver >> 8) % 10;
+ *ptr2++ = '0' + (sys_opt.hw_ver & 0xFF) / 10;
+ *ptr2 = '0' + (sys_opt.hw_ver & 0xFF) % 10;
+ *ptr3++ = 'V';
+ *ptr3 = '0' + (sys_opt.sw_ver >> 8) % 10;
+ *ptr4++ = '0' + (sys_opt.sw_ver & 0xFF) / 10;
+ *ptr4 = '0' + (sys_opt.sw_ver & 0xFF) % 10;
+ }
+ if (load_hs_mode) {
+ parmRam[0xe0] = 0x66; // High Score flag (IDLE:0x66, LOAD2VEC:0x77, SAVE2STM:0x88)
+ }
+ }
+ if (fr != FR_NO_FILE) {
+ f_close(&f);
}
- xprintf("Read %d bytes of rom data.\n", r);
- f_close(&f);
}
//Stream data, for the Bad Apple demo
@@ -121,8 +232,9 @@ void loadStreamData(int addr, int len) {
}
void doUpDir() {
- if (strcmp(menuDir, "/roms") != 0)
- doChangeDir("..");
+ if (strcmp(menuDir, "/roms") != 0) {
+ doChangeDir("..");
+ }
}
void doChangeDir(char* dirname) {
@@ -143,7 +255,10 @@ void doChangeDir(char* dirname) {
xprintf("Done listing for : %s\n", menuDir);
}
-//User has made a selection in the cart menu (chose the i'th item) so now we have to load the cartridge.
+/**
+ * User has made a selection in the cart menu (chose the i'th item)
+ * so now we have to load the ROM or Directory
+ */
void doChangeRom(char* basedir, int i) {
char buff[300];
@@ -153,51 +268,313 @@ void doChangeRom(char* basedir, int i) {
file_entry f = c_and_l.listing.f_entry[i];
if (f.is_dir) {
+ isItemAFile = false;
doChangeDir(f.fname);
- } else { /* It is a file. */
+ } else {
+ isItemAFile = true;
xprintf("Adding filename [%s] to path\n", f.fname);
xsprintf(buff, "%s/%s", basedir, f.fname);
romData=c_and_l.cartData;
xprintf("Going to read rom image %s\n", buff);
- loadRom(buff);
+ loadRomWithHighScore(buff, true, false);
+ }
+}
+
+/**
+ * Point romData to the cartData or menuData based on what was last loaded
+ * in doChangeRom() and return.
+ */
+static void doStartRom(void) {
+ if (isItemAFile == true) {
+ romData = c_and_l.cartData;
+ } else {
+ romData = menuData;
+ }
+}
+
+void updateAll() {
+ uint16_t i = ledsNumPixels();
+ while (i > 0) { // color index
+ ledsSetPixelColor(--i, colors[(int)parmRam[254]]);
+ }
+ ledsUpdate();
+}
+
+void updateOne() {
+ // led index , color index
+ ledsSetPixelColor((int)parmRam[253], colors[(int)parmRam[254]]);
+ ledsUpdate();
+}
+
+void updateMulti() {
+ // uint16_t i = ledsNumPixels();
+ for (uint16_t i = 0; i < ledsNumPixels(); i++) {
+ // xprintf("LED%d = %d\n", i, (int)parmRam[0xf0 + i]);
+ ledsSetPixelColor(i, colors[(int)parmRam[0xf0 + i]]); // 0xf0 = LED0, 0xf9 = LED9
+ }
+ // xprintf("\n");
+ ledsUpdate();
+}
+
+void doLedOn(int on) {
+ if (on) {
+ gpio_set(GPIOB, GPIO0);
+ } else {
+ gpio_clear(GPIOB, GPIO0);
+ }
+}
+
+// This function to be used by games (cartData)
+// Load HW/SW versions so that the menu can access and display them
+// Warning: This permanently alters the last 4 bytes of 32K ROM game data!
+void loadVersions() {
+ c_and_l.cartData[0x7ffc] = sys_opt.hw_ver >> 8;
+ c_and_l.cartData[0x7ffd] = sys_opt.hw_ver & 0xFF;
+ c_and_l.cartData[0x7ffe] = sys_opt.sw_ver >> 8;
+ c_and_l.cartData[0x7fff] = sys_opt.sw_ver & 0xFF;
+}
+
+// This function to be used by the Menu (multcart.asm)
+// Load sys_opt data starting at address specified, up to 15 bytes specified by size.
+// addr = $7ffd
+// size = $7ffe
+// data returned in $ff0 ~ $ff0+size
+void loadSysOpt() {
+ int addr = (int)parmRam[0xfd];
+ int size = (int)parmRam[0xfe];
+ if (size > 15) size = 15; // limited to 15 for now
+ for (int i = 0; i < size; i++) {
+ menuData[0xff0 + i] = sysData[addr + i];
+ // xprintf("sysData[%x]=%u,checkDevMode=%d\n", addr + i, sysData[addr + i], checkDevMode);
}
}
-//Handle an RPC event
+// This function to be used by the Menu (multcart.asm)
+// Load parmRam data starting at address specified, up to 15 bytes specified by size.
+// addr = $7ffd
+// size = $7ffe
+// data returned in $fe0 ~ $fe0+size
+void loadParmRam() {
+ int addr = (int)parmRam[0xfd];
+ int size = (int)parmRam[0xfe];
+ if (size > 16) size = 16; // limited to 15 for now
+ for (int i = 0; i < size; i++) {
+ menuData[0xfe0 + i] = parmRam[addr + i];
+ // xprintf("parmRam[%x]=%u\n", addr + i, sysData[addr + i]);
+ }
+}
+
+// This function to be used by games (cartData)
+// Dump the data in hex bytes from starting address to ending address specified
+// $7ff0 - Start Address High Byte
+// $7ff1 - Start Address Low Byte
+// $7ff2 - End Address High Byte
+// $7ff3 - End Address Low Byte
+// data output on TX pin in table format, use with RAM WRITE app for debugging
+void dumpMemory() {
+ // int start_addr = 0x1fe0; // hard code if desired
+ // int end_addr = 0x281f; // hard code if desired
+ int start_addr = ((int)parmRam[0xf0] << 8) + (int)parmRam[0xf1];
+ int end_addr = ((int)parmRam[0xf2] << 8) + (int)parmRam[0xf3];
+ int current_addr = start_addr;
+ xprintf("ADDR | 0001 0203 0405 0607 0809 0A0B 0C0D 0E0F 1011 1213 1415 1617 1819 1A1B 1C1D 1E1F\n");
+ xprintf("==== | ===============================================================================\n");
+ while ( current_addr <= end_addr ) {
+ xprintf("%04x | ", current_addr);
+ for (int byte = 0; byte < 32; byte++) {
+ if (current_addr + byte > end_addr) break;
+ xprintf("%02x", cartData[current_addr + byte]);
+ if (((byte+1) % 2) == 0 && byte != 31) {
+ xprintf(" ");
+ }
+ }
+ xprintf("\n");
+ current_addr += 32;
+ }
+}
+
+void loadApp() {
+ switch((int)parmRam[0xfe]) {
+ case 0:
+ romData = c_and_l.cartData;
+ xprintf("Launching /devmode.bin\n");
+ loadRom("/devmode.bin");
+ break;
+ default:
+ break;
+ }
+}
+
+void ledsCyan() {
+ uint16_t i = ledsNumPixels();
+ while (i > 0) {
+ ledsSetPixelColor(--i, colors[5]);
+ }
+ ledsUpdate();
+}
+
+void ledsMagenta() {
+ uint16_t i = ledsNumPixels();
+ while (i > 0) {
+ ledsSetPixelColor(--i, colors[8]);
+ }
+ ledsUpdate();
+}
+
+void ledsOff() {
+ ledsClear();
+ ledsUpdate();
+}
+
+static FATFS FatFs;
+FIL cart_file;
+void doRamDisk() {
+ /**
+ * Normally address 0,1 is 'g',' ' which is the game 'copyright' and 'space'.
+ * We want to let the Vectrex know it's time to make one RPCFN call when 0,1 == 'v','x'
+ * and make sure we put it back to 'g',' ' in case the Vectrex gets reset.
+ * FIXME: change the place where this is done
+ * The vectrex should also make sure it only makes one call to RPCFN 10 for each
+ * operation required (START DEV MODE, EXIT DEV MODE, RUN CART.BIN).
+ */
+ menuData[0xffc] = 0x01; // make sure we are blocking the RPCFN yield bytes again
+ menuData[0xffd] = 0x01; // This will get overwritten when the cart.bin or menu loads
+ menuData[0x0] = 0x01; // |
+ menuData[0x1] = 0x01; // |
+
+ switch ((int)parmRam[254]) {
+ case 0: /*xprintf("WAIT DEV\n");*/ sys_opt.usb_dev = USB_DEV_WAIT; break;
+ case 1: xprintf("EXIT DEV\n"); sys_opt.usb_dev = USB_DEV_EXIT; break;
+ case 4: xprintf("RUN DEV\n"); sys_opt.usb_dev = USB_DEV_RUN; break;
+ case 5:
+ if (gpio_get(GPIOA, GPIO9)) {
+ menuData[0xffb] = 0x99; // HIGH:0x99
+ } else {
+ menuData[0xffb] = 0x66; // LOW:0x66
+ }
+ // xprintf("VUSB: %x\n", menuData[0xffb]);
+ sys_opt.usb_dev = USB_DEV_CHECK;
+ break;
+ default: xprintf("UNKNOWN DEV\n"); sys_opt.usb_dev = USB_DEV_DISABLED; return; break;
+ }
+
+ // attempt to close this if it's open, don't worry this is safe
+ // FRESULT f_close_res;
+ f_close(&cart_file);
+ // xprintf("f_close result: %d\n", f_close_res);
+
+ int ramdisk_ret = 0;
+ if (sys_opt.usb_dev != USB_DEV_DISABLED && sys_opt.usb_dev != USB_DEV_CHECK) {
+ ramdisk_ret = ramdiskmain(RAMDISK_NON_BLOCKING);
+ }
+ if (ramdisk_ret == 0 &&
+ (sys_opt.usb_dev == USB_DEV_WAIT ||
+ sys_opt.usb_dev == USB_DEV_DISABLED ||
+ sys_opt.usb_dev == USB_DEV_CHECK)) {
+ menuData[0xffc] = 'v'; // tell the Vectrex time to make one RPCFN call (wait/exit/run)
+ menuData[0xffd] = 'x';
+ return;
+ } else {
+ // handle errors, if we add some in ramdiskmain()
+ }
+
+ // remount the file system to pick up any changes
+ // FRESULT f_mount_res;
+ f_mount(&FatFs, "", 0);
+ // xprintf("f_mount result: %d\n", f_mount_res);
+
+ if (sys_opt.usb_dev == USB_DEV_RUN || sys_opt.usb_dev == USB_DEV_EJECT) {
+ if (sys_opt.usb_dev == USB_DEV_RUN) xprintf("Vectrex asked to run\n");
+ else if (sys_opt.usb_dev == USB_DEV_EJECT) xprintf("USB host ejected device\n");
+ if (f_stat("/cart.bin", &cart_file_info) == FR_OK) {
+ xprintf("Loading /cart.bin ...\n");
+ if (f_open(&cart_file, "/cart.bin", FA_READ) == FR_OK) {
+ romData=c_and_l.cartData; // Explicitly setting this here so we know WTF is going on in the background
+ loadRom("/cart.bin");
+ sys_opt.usb_dev = USB_DEV_RUN;
+ }
+ } else {
+ xprintf("Sorry, didn't find /cart.bin\n");
+ sys_opt.usb_dev = USB_DEV_DISABLED;
+
+ (void) highScoreOpenFile(); // Create/Open highscore file
+ romData=menuData; // Explicitly setting this here so we know WTF is going on in the background
+ loadMenu();
+ loadListing(menuDir, &c_and_l.listing, menuIndex+1 , menuIndex+1+0x200, romData);
+ }
+ } else if (sys_opt.usb_dev == USB_DEV_EXIT) {
+ xprintf("Exiting Developer mode\n");
+ if (f_stat("/cart.bin", &cart_file_info) == FR_OK) {
+ xprintf("Deleting /cart.bin ...\n");
+ // FRESULT f_unlink_res;
+ f_unlink("/cart.bin");
+ // xprintf("f_unlink result: %d\n", f_unlink_res);
+ }
+
+ (void) highScoreOpenFile(); // Create/Open highscore file
+ sys_opt.usb_dev = USB_DEV_DISABLED;
+ romData=menuData; // Explicitly setting this here so we know WTF is going on in the background
+ loadMenu();
+ loadListing(menuDir, &c_and_l.listing, menuIndex+1 , menuIndex+1+0x200, romData);
+ }
+
+ menuData[0] = 'g'; // Fixup the copyright bytes now that we are exiting
+ menuData[1] = ' '; // |
+}
+
+// Handle an RPC event
void doHandleEvent(int data) {
- // xprintf("Event: %d. arg1: 0x%x\n", data, (int)parmRam[254]);
- if (data==1) doChangeRom(menuDir, (int)parmRam[254]);
- if (data==2) loadStreamData(0x4000, 1024+512);
- if (data==3) doUpDir();
- // xprintf("Event handled. Resuming.\n");
+ // xprintf("[E:%d,A:%02X]\n", data, (int)parmRam[254]);
+ switch (data) {
+ default:
+ case 0: break;
+ case 1: doChangeRom(menuDir, (int)parmRam[254]); break; // Starts changing ROM
+ case 2: loadStreamData(0x4000, 1024+512); break;
+ case 3: doUpDir(); break;
+ case 4: updateAll(); break;
+ case 5: rainbowStep((int)parmRam[254]); break;
+ case 6: updateOne(); break;
+ case 7: updateMulti(); break;
+ case 8: ledsSetBrightness((int)parmRam[254]); break;
+ case 9: loadVersions(); break;
+ case 10: doRamDisk(); break;
+ case 11: loadApp(); break;
+ case 12: loadSysOpt(); break;
+ case 13: dumpMemory(); break;
+ case 14: highScoreSave(&parmRam[0]); break;
+ case 15: doStartRom(); break; // Finishes changing ROM
+ case 16: loadParmRam(); break;
+ }
}
void doDbgHook(int adr, int data) {
xprintf("R %x %x\n", adr, data);
}
-static FATFS FatFs;
+void doLog(int data) {
+ xprintf("%x\n", data);
+}
int main(void) {
void (*runptr)(void)=romemu;
- const struct rcc_clock_scale hse_8mhz_3v3_120MHz = { /* 120MHz */
- .pllm = 8,
- .plln = 240,
- .pllp = 2,
- .pllq = 5,
- .pllr = 0,
- .pll_source = RCC_CFGR_PLLSRC_HSE_CLK,
- .hpre = RCC_CFGR_HPRE_DIV_NONE,
- .ppre1 = RCC_CFGR_PPRE_DIV_4,
- .ppre2 = RCC_CFGR_PPRE_DIV_2,
- .voltage_scale = PWR_SCALE1,
- .flash_config = FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS,
- .ahb_frequency = 120000000,
- .apb1_frequency = 30000000,
- .apb2_frequency = 60000000,
- };
+ const struct rcc_clock_scale hse_8mhz_3v3_120MHz = { /* 120MHz */
+ .pllm = 8,
+ .plln = 240,
+ .pllp = 2,
+ .pllq = 5,
+ .pllr = 0,
+ .pll_source = RCC_CFGR_PLLSRC_HSE_CLK,
+ .hpre = RCC_CFGR_HPRE_DIV_NONE,
+ .ppre1 = RCC_CFGR_PPRE_DIV_4,
+ .ppre2 = RCC_CFGR_PPRE_DIV_2,
+ .voltage_scale = PWR_SCALE1,
+ .flash_config = FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS,
+ .ahb_frequency = 120000000,
+ .apb1_frequency = 30000000,
+ .apb2_frequency = 60000000,
+ };
rcc_clock_setup_pll(&hse_8mhz_3v3_120MHz);
rcc_periph_clock_enable(RCC_GPIOA);
@@ -244,33 +621,58 @@ int main(void) {
gpio_mode_setup(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE,
GPIO1|GPIO15);
- // SysTick setup (calls sys_tick_handler() every 1ms), also required for delay/millis
- systick_set_reload(120000);
- systick_set_clocksource(STK_CSR_CLKSOURCE_AHB);
- systick_counter_enable();
- systick_interrupt_enable();
-
- xprintf("Inited.\n");
-
- // Test Addressable LEDs
- // Addressable RGB LEDs
- uint32_t colors[] = {
- 0, // off
- 0xFF0000, // red
- 0xFF9900, // orange
- 0xFFFF00, // yellow
- 0x00FF00, // green
- 0x00FFFF, // cyan
- 0x0000FF, // blue
- 0x7700FF, // pink
- 0xFF00FF, // magenta
- 0xFFFFFF // white
- };
- ledsInitSW(10, GPIOB, GPIO14, GPIOB, GPIO13, RGB_BGR);
- ledsSetBrightness(150); // be careful not to set this too high when using white, those LEDs draw some power!!
- uint32_t start = millis();
- while (millis() - start <= 2000UL) {
- rainbowCycle(10);
+ // dwt_enable_cycle_counter required for delay/millis
+ // used instead of systick_handler to prevent interrupts from disrupting romemu.S loop
+ dwt_enable_cycle_counter();
+
+#if HW_VER == 255
+ #error "USE_HW hardware version not specified, please specify e.g. USE_HW=v0.2 or USE_HW=v0.3"
+#endif
+
+ // TODO: load new options from VEXTREME/options.txt in key=val format
+ sys_opt.size = sizeof(sys_opt);
+ sys_opt.ver = 1;
+// #if (HW_VER == 1)
+// sys_opt.hw_ver = 0x000A; // v0.10
+// #elif (HW_VER == 2)
+// sys_opt.hw_ver = 0x0014; // v0.20
+// #elif (HW_VER == 3)
+// sys_opt.hw_ver = 0x001e; // v0.30
+// #endif
+ // For now, this is hard coded to determine LED operation, nothing more.
+ // TODO: uncomment above for system hw_ver, and add .led_hw_ver for LED initialization.
+ sys_opt.hw_ver = 0x0014; // v0.20
+ sys_opt.sw_ver = 0x0018; // v0.24
+ sys_opt.rgb_type = RGB_TYPE_10;
+ sys_opt.usb_dev = USB_DEV_DISABLED;
+
+ xprintf("\n");
+ xprintf("[ VEXTREME booted ]\n");
+ xprintf(" HW v%01d.%02d | SW v%01d.%02d\n", sys_opt.hw_ver >> 8, sys_opt.hw_ver & 0xFF, sys_opt.sw_ver >> 8, sys_opt.sw_ver & 0xFF);
+ xprintf(" LED TYPE: ");
+ // HW version < 0.30
+ if (sys_opt.hw_ver < 0x001e) {
+ // xprintf("HW VER < 0.30\n");
+ if (sys_opt.rgb_type == RGB_TYPE_10) {
+ xprintf("RGB_TYPE_10\n");
+ ledsInitSW(10, GPIOB, GPIO14, GPIOB, GPIO13, RGB_BGR);
+ ledsSetBrightness(50); // be careful not to set this too high when using white, those LEDs draw some power!!
+ } else if (sys_opt.rgb_type == RGB_TYPE_4) {
+ xprintf("RGB_TYPE_4\n");
+ ledsInitSW(10, GPIOB, GPIO14, GPIOB, GPIO13, RGB_BGR);
+ ledsSetBrightness(255); // we will be limiting to 4, it's ok to crank them all of the way up!
+ } else if (sys_opt.rgb_type == RGB_TYPE_NONE) {
+ xprintf("RGB_TYPE_NONE\n");
+ ledsInitSW(10, GPIOB, GPIO14, GPIOB, GPIO13, RGB_BGR);
+ ledsSetBrightness(0); // sleeper cart, you'll never see it coming _._
+ }
+ }
+ // HW version >= 0.30
+ else if (sys_opt.hw_ver >= 0x001e) { // >= 0.30
+ // xprintf("HW VER >= 0.30\n");
+ xprintf("type ignored, we only have 4!\n");
+ ledsInitSW(4, GPIOB, GPIO14, GPIOB, GPIO13, RGB_BGR);
+ ledsSetBrightness(255); // we will be limiting to 4, it's ok to crank them all of the way up!
}
#if 0 // TEST LED CODE START
@@ -290,17 +692,17 @@ int main(void) {
rainbowCycle(10);
ledsClear();
- knightRider(6, 64, 4, 2, 8, 0xFF7700); // Cycles, Speed, Width, First, Last, RGB Color (original orange-red)
- knightRider(3, 32, 4, 2, 8, 0xFF00FF); // Cycles, Speed, Width, First, Last, RGB Color (purple)
- knightRider(3, 32, 4, 2, 8, 0x0000FF); // Cycles, Speed, Width, First, Last, RGB Color (blue)
- knightRider(3, 32, 5, 2, 8, 0x00FF00); // Cycles, Speed, Width, First, Last, RGB Color (green)
- knightRider(3, 32, 5, 2, 8, 0xFFFF00); // Cycles, Speed, Width, First, Last, RGB Color (yellow)
- knightRider(3, 32, 7, 2, 8, 0x00FFFF); // Cycles, Speed, Width, First, Last, RGB Color (cyan)
- knightRider(3, 32, 7, 2, 8, 0xFFFFFF); // Cycles, Speed, Width, First, Last, RGB Color (white)
+ knightRider(6, 64, 4, 3, 9, 0xFF7700); // Cycles, Speed, Width, First, Last, RGB Color (original orange-red)
+ knightRider(3, 32, 4, 3, 9, 0xFF00FF); // Cycles, Speed, Width, First, Last, RGB Color (purple)
+ knightRider(3, 32, 4, 3, 9, 0x0000FF); // Cycles, Speed, Width, First, Last, RGB Color (blue)
+ knightRider(3, 32, 5, 3, 9, 0x00FF00); // Cycles, Speed, Width, First, Last, RGB Color (green)
+ knightRider(3, 32, 5, 3, 9, 0xFFFF00); // Cycles, Speed, Width, First, Last, RGB Color (yellow)
+ knightRider(3, 32, 7, 3, 9, 0x00FFFF); // Cycles, Speed, Width, First, Last, RGB Color (cyan)
+ knightRider(3, 32, 7, 3, 9, 0xFFFFFF); // Cycles, Speed, Width, First, Last, RGB Color (white)
// Iterate through a whole rainbow of colors
for(uint8_t j=0; j<252; j+=7) {
- knightRider(1, 16, 2, 0, 8, colorWheel(j)); // Cycles, Speed, Width, RGB Color
+ knightRider(1, 16, 2, 0, 10, colorWheel(j)); // Cycles, Speed, Width, RGB Color
}
ledsClear();
@@ -313,26 +715,49 @@ int main(void) {
}
#endif // TEST LED CODE END
- //If USB power pin is high, boot into USB disk mode
+ // If USB power pin is high, boot into USB disk mode
if (gpio_get(GPIOA, GPIO9)) {
- xprintf("USB dev mode.\n");
- ramdiskmain();
- } else {
- // disable this or it will delay our ROM emulation!
- systick_interrupt_disable();
+ xprintf("[ Starting RAMDISK ]\n");
+ ramdiskmain(RAMDISK_BLOCKING);
+ }
- //Load the menu game
- strncpy(menuDir, "/roms", sizeof(menuDir));
- f_mount(&FatFs, "", 0);
- loadRom("/multicart.bin");
- loadListing(menuDir, &c_and_l.listing, menuIndex+1 , menuIndex+1+0x200, romData);
+ // Give the cart some color, but after the USB process so we don't load down weak USB sources
+ rainbowStep(4);
- //Go emulate a ROM.
- SYSCFG_MEMRMP=0x3; //mak ram at 0
- runptr=(char*)(((int)runptr&0x1ffff)|1); //map to lower mem
- xprintf("Gonna start romemu at %08x\n", romemu);
- runptr();
+ xprintf("[ Starting ROM Emulation ]\n");
+ // Load the menu game
+ strncpy(menuDir, "/roms", sizeof(menuDir));
+
+ // FRESULT f_mount_res;
+ f_mount(&FatFs, "", 0);
+ // xprintf("f_mount result: %d\n", f_mount_res);
+
+ // Create/Open highscore file
+ // Ignore return value for now
+ (void) highScoreOpenFile();
+
+ // Load the Menu
+ romData=menuData; // Explicitly setting this here so we know WTF is going on in the background
+ loadMenu();
+ loadListing(menuDir, &c_and_l.listing, menuIndex+1 , menuIndex+1+0x200, romData);
+ sys_opt.usb_dev = USB_DEV_DISABLED;
+
+ // Load cart.bin and jump straight into Developer Mode if it exists
+ if (f_stat("/cart.bin", &cart_file_info) == FR_OK) {
+ xprintf("Loading /cart.bin ...\n");
+ if (f_open(&cart_file, "/cart.bin", FA_READ) == FR_OK) {
+ romData=c_and_l.cartData; // Explicitly setting this here so we know WTF is going on in the background
+ loadRom("/cart.bin");
+ sys_opt.usb_dev = USB_DEV_RUN;
+ checkDevMode = 0;
+ }
}
+ // Go emulate a ROM.
+ SYSCFG_MEMRMP=0x3; //mak ram at 0
+ runptr=(void*)(((int)runptr&0x1ffff)|1); //map to lower mem
+ xprintf("Gonna start romemu at %08x\n", romemu);
+ runptr();
+
return 0;
}
diff --git a/code/veccart/main.h b/code/veccart/main.h
index 26d373b..f8e38f8 100644
--- a/code/veccart/main.h
+++ b/code/veccart/main.h
@@ -2,12 +2,28 @@
#define MAIN_H
void uart_output_func(unsigned char c);
+void loadMenu(void);
void loadRom(char *fn);
+void loadRomWithHighScore(char *fn, bool load_hs_mode, bool use_embedded_menu);
void loadStreamData(int addr, int len);
void doUpDir(void);
void doChangeDir(char* dirname);
void doChangeRom(char* basedir, int i);
void doHandleEvent(int data);
void doDbgHook(int adr, int data);
+void doLog(int data);
+void updateAll(void);
+void updateOne(void);
+void updateMulti(void);
+void loadVersions(void);
+void doRamDisk(void);
+void loadApp(void);
+void doLedOn(int on);
+void ledsCyan(void);
+void ledsMagenta(void);
+void ledsOff(void);
+void loadSysOpt(void);
+void dumpMemory(void);
+void loadParmRam(void);
#endif
diff --git a/code/veccart/menu.c b/code/veccart/menu.c
index 8e2e89c..6393ab5 100644
--- a/code/veccart/menu.c
+++ b/code/veccart/menu.c
@@ -1,4 +1,6 @@
+#define _GNU_SOURCE // required for strcasestr
#include
+#include
#include
#include "menu.h"
@@ -9,7 +11,7 @@
//Get a listing of the roms in the 'roms/' directory and
//poke them into the menu cartridge space
void loadListing(char *fdir, dir_listing *listing, const int fnptrs, const int strptrs, char *romData) {
- char buff[30];
+ char buff[sizeof(listing->f_entry->fname)];
char *name;
int ptrpos = fnptrs; // fixed location in multicart.bin for 512 filename pointers (from &ptrpos ~ &strpos)
@@ -30,15 +32,16 @@ void loadListing(char *fdir, dir_listing *listing, const int fnptrs, const int s
is_dir=f_entry->is_dir;
- //xprintf("Found file %s (%d), file %d\n", name, is_dir, idx);
+ // xprintf("Found file %s (%d), file %d\n", name, is_dir, idx);
romData[ptrpos++]=strpos>>8;
romData[ptrpos++]=strpos&0xff;
// remove extensions
- removeExtension(name, ".bin");
- removeExtension(name, ".BIN");
- removeExtension(name, ".vec");
- removeExtension(name, ".VEC");
+ const char* extList[2] = { ".bin", ".vec" };
+ int is_game = checkExtension(name, extList, 2, true); // check and modify
+ if (!is_game && !is_dir) {
+ continue; // If not a game, don't list it in the menu
+ }
i = is_dir ? (MENU_TEXT_LEN-2) : MENU_TEXT_LEN;
if (is_dir) romData[strpos++]='<';
@@ -64,11 +67,15 @@ void loadListing(char *fdir, dir_listing *listing, const int fnptrs, const int s
xprintf("Done.\n");
}
-int removeExtension(char* filename, char* extension) {
- char* ptr = strstr(filename,extension);
- if (ptr) {
- *ptr = 0;
- return 1;
+int checkExtension(char* filename, const char** extlist, int size, bool modify) {
+ for (int i = 0; i < size; i++ ) {
+ char* ptr = strcasestr(filename, extlist[i]);
+ if (ptr) {
+ if (modify) {
+ *ptr = 0;
+ }
+ return 1;
+ }
}
return 0;
}
@@ -117,10 +124,20 @@ void sortDirectory(char *fdir, dir_listing *listing) {
}
is_dir = (fi.fattrib & AM_DIR) ? 1 : 0;
+
+
if (fi.lfname[0]=='.') continue; // ignore MacOS dotfiles
name=fi.lfname;
if (name==NULL || name[0]==0) name=fi.fname; //use short name if no long name available
+ // check extensions and ignore all non case insensitive .bin/.vec files
+ const char* extList[2] = { ".bin", ".vec" };
+ int is_game = checkExtension(name, extList, 2, false); // check only
+ if (!is_game && !is_dir) {
+ continue; // If not a game or directory, don't list it in the menu
+ }
+
+ // add file/dir to listing
f_entry->is_dir = is_dir;
strcpy(f_entry->fname, name);
idx++;
diff --git a/code/veccart/menu.h b/code/veccart/menu.h
index 357d738..f71167c 100644
--- a/code/veccart/menu.h
+++ b/code/veccart/menu.h
@@ -3,7 +3,7 @@
#include "fatfs/ff.h"
-#define MENU_TEXT_LEN 20
+#define MENU_TEXT_LEN 16
typedef struct {
int is_dir;
@@ -15,8 +15,8 @@ typedef struct {
file_entry f_entry[80];
} dir_listing;
-int removeExtension(char* filename, char* extension);
-void sortDirectory(char *fdir, dir_listing *listing);
+int checkExtension(char* filename, const char** extlist, int size, bool modify);
+void sortDirectory(char *fdir, dir_listing *listing);
void loadListing(char *fdir, dir_listing *listing, const int fnptrs, const int strptrs, char *romData);
#endif
diff --git a/code/veccart/msc.c b/code/veccart/msc.c
index 3416c51..140d26e 100644
--- a/code/veccart/msc.c
+++ b/code/veccart/msc.c
@@ -23,13 +23,17 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
-#include
+#include
#include "flash.h"
#include "xprintf.h"
#include "delay.h"
+#include "sys.h"
+extern system_options sys_opt;
#include "msc.h"
@@ -94,7 +98,7 @@ static const struct usb_config_descriptor config_descr = {
.bConfigurationValue = 1,
.iConfiguration = 0,
.bmAttributes = 0x80,
- .bMaxPower = 0x32,
+ .bMaxPower = 0xFA, // Set USB power to 500mA (was set to 100mA)
.interface = ifaces,
};
@@ -104,37 +108,104 @@ static const char *usb_strings[] = {
"0000",
};
-
static usbd_device *msc_dev;
/* Buffer to be used for control requests. */
static uint8_t usbd_control_buffer[128];
+static uint8_t lastUsbDev = 0;
+static bool ramdisk_init = false; // only init once
+uint32_t nonBlockingRamdiskTimer = 0; // disabled by default
+uint32_t nonBlockingRamdiskTimeout = 950UL;
+int ramdiskmain(int blocking) {
+ if (!ramdisk_init) {
+ ramdisk_init = true;
+ rcc_periph_clock_enable(RCC_GPIOA);
+ rcc_periph_clock_enable(RCC_OTGFS);
+ // gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO11 | GPIO12);
+ gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO11);
+ gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO12);
+ gpio_set_af(GPIOA, GPIO_AF10, GPIO11 | GPIO12);
+ flashInit();
+ msc_dev = usbd_init(&otgfs_usb_driver, &dev_descr, &config_descr,
+ usb_strings, 3,
+ usbd_control_buffer, sizeof(usbd_control_buffer));
+ // OTG_FS_GCCFG &= ~OTG_GCCFG_VBUSBSEN;
+ // OTG_FS_GCCFG |= OTG_GCCFG_NOVBUSSENS;
+ usb_msc_init(msc_dev, 0x82, 64, 0x01, 64, "GPL3", "VEXTREME",
+ "0", (16*1024*2)-16, flashReadBlk, flashWriteBlk);
+ }
-int ramdiskmain(void) {
-// rcc_clock_setup_hse_3v3(&hse_8mhz_3v3[CLOCK_3V3_120MHZ]);
-
- rcc_periph_clock_enable(RCC_GPIOA);
- rcc_periph_clock_enable(RCC_OTGFS);
-
- gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE,
- GPIO9 | GPIO11 | GPIO12);
- gpio_set_af(GPIOA, GPIO_AF10, GPIO9 | GPIO11 | GPIO12);
-
- flashInit();
-
- msc_dev = usbd_init(&otgfs_usb_driver, &dev_descr, &config_descr,
- usb_strings, 3,
- usbd_control_buffer, sizeof(usbd_control_buffer));
+ if (blocking == RAMDISK_NON_BLOCKING) {
+ if (lastUsbDev != sys_opt.usb_dev && sys_opt.usb_dev == USB_DEV_WAIT) {
+ xprintf("Connecting USB\n");
+ usbd_disconnect(msc_dev, 0); // Re-connect USB, if disconnected
+ }
+ nonBlockingRamdiskTimeout = 1000UL;
+ } else {
+ xprintf("Connecting USB\n");
+ usbd_disconnect(msc_dev, 0); // Re-connect USB, if disconnected
+ }
- usb_msc_init(msc_dev, 0x82, 64, 0x01, 64, "GPL3", "VEXTREME",
- "0", (16*1024*2)-16, flashReadBlk, flashWriteBlk);
+ // Disable VBUS sense
+ // OTG_FS_GCCFG &= ~OTG_GCCFG_VBUSBSEN;
+ // OTG_FS_GCCFG |= OTG_GCCFG_NOVBUSSENS;
+ // Enable VBUS sense
+ // OTG_FS_GCCFG &= ~OTG_GCCFG_NOVBUSSENS;
+ // OTG_FS_GCCFG |= OTG_GCCFG_VBUSBSEN;
- uint32_t lastFlashTick = millis();
- while(1) {
+ bool exit = false;
+ if (blocking == RAMDISK_NON_BLOCKING) nonBlockingRamdiskTimer = millis();
+ uint32_t lastFlashTick = 0;
+ uint32_t exitTimer = 0; // disabled by default
+ while (!exit) {
usbd_poll(msc_dev);
if (millis() - lastFlashTick >= 20UL) {
lastFlashTick = millis();
flashTick();
+
+ // TODO: Every 20ms here check a new GPIO that detects when the Vectrex
+ // is powered on. Use this to exit the ramdisk when sys_opt.usb_dev == USB_DEV_DISABLED
+ // Use case: "Forgetful Developer"
+ // Vectrex off, plug in USB, forget to compile/flash cart.bin/eject USB,
+ // Power on Vectrex without unplugging USB, USB will unmount automatically.
+ }
+
+ // Host ejected USB, or Vectrex exited Dev Mode or wants to run cart.bin again
+ // at any rate, let's bail from this loop soon!
+ if (!exitTimer && (sys_opt.usb_dev == USB_DEV_EJECT ||
+ sys_opt.usb_dev == USB_DEV_EXIT ||
+ sys_opt.usb_dev == USB_DEV_RUN)) {
+
+ nonBlockingRamdiskTimer = 0;
+ exitTimer = millis();
+ }
+
+ // Give USB / flash some time to finish up, then exit
+ if (exitTimer && (millis() - exitTimer >= 1000UL)) {
+ exitTimer = 0; // disable again
+
+ xprintf("Disconnecting USB\n");
+
+ // Disable VBUS sense
+ // OTG_FS_GCCFG &= ~OTG_GCCFG_VBUSBSEN;
+ // OTG_FS_GCCFG |= OTG_GCCFG_NOVBUSSENS;
+
+ // Enable VBUS sense
+ // OTG_FS_GCCFG &= ~OTG_GCCFG_NOVBUSSENS;
+ // OTG_FS_GCCFG |= OTG_GCCFG_VBUSBSEN;
+
+ usbd_disconnect(msc_dev, 1); // Disconnect USB
+ exit = true;
+ }
+
+ // Yield to Vectrex
+ if (nonBlockingRamdiskTimer && (millis() - nonBlockingRamdiskTimer >= nonBlockingRamdiskTimeout)) {
+ nonBlockingRamdiskTimer = 0; // disable again
+ // xprintf("Y2V\n");
+ exit = true;
}
}
+
+ lastUsbDev = sys_opt.usb_dev;
+ return 0;
}
diff --git a/code/veccart/msc.h b/code/veccart/msc.h
index 796f86f..c1e9618 100644
--- a/code/veccart/msc.h
+++ b/code/veccart/msc.h
@@ -1,6 +1,11 @@
#ifndef MSC_H
#define MSC_H
-int ramdiskmain(void);
+enum RAMDISK_TYPE {
+ RAMDISK_NON_BLOCKING,
+ RAMDISK_BLOCKING
+};
+
+int ramdiskmain(int blocking);
#endif
diff --git a/code/veccart/romemu.S b/code/veccart/romemu.S
index 05146e0..8bcfcc6 100644
--- a/code/veccart/romemu.S
+++ b/code/veccart/romemu.S
@@ -2,132 +2,321 @@
.syntax unified
.global menuData
-.global cartData
.global romData
.global parmRam
.global doHandleEvent
.global doDbgHook
.global readcnt
+.global sysData // usb_dev is offset of 9 bytes
+.global checkDevMode
.section .data
.global romemu
-//Main rom emulation code
+// Main rom emulation code
+
+#if HW_VER == 255
+ #error "USE_HW hardware version not specified, please specify e.g. USE_HW=v0.2 or USE_HW=v0.3"
+#endif
romemu:
-// mov r0,#'R'
-// ldr r1,=0x40011004
-// str r0,[r1]
-
- ldr r1,=0x40020800 //gpioc idr offset
- ldr r0,=romData //ROM data array
- ldr r2,[r0]
- ldr r3,=0x40020000 //gpioa bsrr offset
- ldr r4,=0x40020400 //gpiob idr offset
- ldr r8,=0 //cycle count since last event
+initonce:
+ ldr r8,=0 // Cycle count since last event
+initloop:
+ // Initialization
+ ldr r1,=0x40020800 // GPIOC base (idr offset = 0x10 = input)
+ ldr r0,=romData // Load ROM data array addr in scratch r0
+ ldr r2,[r0] // romData pointer deferenced,
+ // do not clobber r2 unless returning through initloop
+ ldr r3,=0x40020000 // GPIOA base (bsrr offset = 0x18 = output)
+ ldr r4,=0x40020400 // GPIOB base (idr offset = 0x10 = input)
+ // r5 is another scratch register for data
+ // r6 is another scratch register for data manipulation
+ ldr r7,=0xfffe // reset vector constant
+ ldr r9,=0x40011004 // USART1_DR for quick addr pointer to Serial Debugging TX
+ // USART1_SR = 0x40011000
+
wloop:
-//wait for NCART to become active
- ldr r0,[r4, 0x10]
- lsls r0,#(31-15) //shift bit 15 into sign flag
- bmi wloop //bit 15 set? Loop if so
-//Check for a write
- ldr r0,[r4, 0x10]
- lsls r0,#(31-1) //shift bit 1 into sign flag
- bpl write //bit 1 clear? Is write!
+ // Check for 6809 reset vector (0xFFFE)
+ // FIXME: Currently on v0.2, we are not reading A15 for MSB, but rather PB6.
+ // This works though, because PB6 stays HIGH, but it might break down
+ // with games that toggle PB6. Not sure what PB6 will do if LOW, when
+ // the Vectrex is reset. Change this for v0.3 hardware so A15 is on PC15,
+ // unless something like Bad Apple or Voom uses PB6, although in testing
+ // it doesn't seem like it. Bad Apple can be reset now with this method.
+ ldr r0,[r1, 0x10] // Load addr pins
+ cmp r0,r7 // Compare to 6809 reset vector
+ bne clearcount // Matched? clearcount if not
+
+#if (HW_VER < 3)
+// ===========================================================
+ add r8,#1 // Increase reset vector count
+ cmp r8,#0x700000 // 8 cycles * 0x170000 is about 100ms
+ // 0x700000 is is more like 700ms (quick tap resets game, long tap back to menu)
+ // Found that no-buzz Vectrex has a min 300ms reset pulse, so 700ms is about right.
+ bne put_menu_back // Keep the increased count, but exit without returning to menu
+ b ledscyan // Make all LEDs CYAN to help indicate when the cart swaps, then jump to initloop
+
+put_menu_back:
+ cmp r8,#0x710000
+ blo resetexit
+ bne waitreset
+
+ // Reset vector detected for 700ms, exchange the rom and menu data
+ ldr r0,=romData
+ ldr r2,=menuData
+ str r2,[r0]
+ mov r0,# 'g' // Restore copyright bytes just in case we got reset in Dev Mode
+ strb r0,[r2, #0] // |
+ mov r0,# ' ' // |
+ strb r0,[r2, #1] // |
+
+#elif (HW_VER >= 3)
+// -----------------------------------------------------------
+ ldr r0,[r4, 0x10] // Load addr pins (for /CE)
+ lsls r0,#(31-15) // Shift bit 15 into sign flag
+ bpl clearcount // Bit 15 clear? clearcount if so
+ lsls r0,#5 // Shift bit 10 into sign flag (for /OE which is /E)
+ bmi resetexit // Bit 10 high? skip this one (no countinc or clearcount)
+
+countinc:
+ add r8,#1 // Increase reset vector count
+
+ // DEBUG code to turn RED LED on
+ //mov r5,#0x00000001 // Just set LED(GPIO0) in BSRRL(set) and ensure BSRRH(reset) is clear
+ //str r5,[r4, 0x18] // Output to GPIOB_BSRR
+
+check_put_menu_back:
+ cmp r8,#0x1000
+ bne check_put_cart_back
- //Handle read: load address, get byte, send to Vectrex
- ldr r0,[r1, 0x10] //load addr pins
- eor r0, r0, #0x8000 //invert software-controlled line: it is high per default
+ ldr r0,=checkDevMode // Have we checked Dev Mode yet? We care about this on first boot.
+ ldrb r5,[r0] // |
+ cmp r5,#2 // No, fall through to check if we are in Dev Mode
+ beq put_menu_back // Yes, swap the menu
+ add r5,#1 // Increase checkDevMode count (allow two resets on cold boot:
+ str r5,[r0] // 1 initial turn on, and 2 user pressing reset to get to the cart.bin faster)
- ldrb r5,[r0, r2] //load corresponding byte in rom
- orr.w r5,r5,#0xff0000 //set shit
- str r5,[r3, 0x18] //output
+ ldr r0,=sysData // Is Dev Mode active at first power up?
+ ldr r0,[r0] // | dereference sysData pointer
+ ldrb r5,[r0, #9] // | usb_dev is 1 byte at offset 9
+ cmp r5,#0 // | DISABLED = 0
+ bne skip_put_menu_back // Yes, skip menu swap
-// b dbg
+put_menu_back:
+ ldr r0,=romData // Reset vector detected for more than 300ms, set romData to menuData
+ ldr r2,=menuData // |
+ str r2,[r0] // |
+ mov r0,# 'g' // Restore copyright bytes just in case we got reset in Dev Mode
+ strb r0,[r2, #0] // |
+ mov r0,# ' ' // |
+ strb r0,[r2, #1] // |
- add r8,#1 //increase read count
+skip_put_menu_back:
- cmp r0,#4 //is this a read of the copyright?
- bne wloop
+check_put_cart_back:
+ cmp r8,#0x200000 // This is set to about 700ms
+ // quick tap < 700ms resets to the Menu, long tap >= 700ms resets to the Game
+ // Most Vectrex should have 250-300ms minimum reset delay, so 700ms is about right.
+ bne put_cart_back // Keep the increased count, but exit without returning to menu
+ b ledscyan // Make all LEDs CYAN to help indicate when the cart swaps, then jump to initloop
- //According to my emu, the ROM reads a random header about 19296 times. Seems like
- //Vectrexes with a GCE logo read it more often than my MB-branded one... hope this
- //number holds up then.
- // Note: this was resetting prematurely on GCE vectri with #0x10000
- cmp r8,#0x80000
- blo wloop
+put_cart_back:
+ cmp r8,#0x210000
+ blo resetexit
+ bne waitreset
- //Header read when the game has been running for a while. Hmm, cart probably is reset...
- //Exchange the rom and menu data
- ldr r0,=romData
- ldr r2,=menuData
- str r2,[r0]
+ // DEBUG code to turn RED LED off
+ //mov r5,#0x00010000 // Just clear LED(GPIO0) in BSRRH(clear) and ensure BSRRL(set) is clear
+ //str r5,[r4, 0x18] // Output to GPIOB_BSRR
- mov r8,#0
- b wloop
+ // Reset vector detected for more than 700ms, set romData to cartData
+ ldr r0,=romData
+ ldr r2,=cartData
+ ldr r2,[r2] // dereference cartData pointer
+ str r2,[r0]
+#endif // HW_VER == 3
+// ===========================================================
+
+waitreset:
+ ldr r0,[r1, 0x10] // Load addr pins
+ cmp r0,r7 // Compare to 6809 reset vector
+ beq waitreset // Wait for reset vector to clear
+ and r8,#0 // clear count to reset counter
+ b ledsrainbow // set the LEDs back to rainbow and jump back to initloop
+
+clearcount:
+ and r8,#0
+resetexit:
+
+ // Wait for /CE (A15) to become active
+ ldr r0,[r4, 0x10]
+ lsls r0,#(31-15) // Shift bit 15 into sign flag
+ bmi wloop // Bit 15 set? Loop if so
+
+ // Check for a write
+ ldr r0,[r4, 0x10]
+ lsls r0,#(31-1) // Shift bit 1 into sign flag
+ bpl write // Bit 1 clear? Is write!
+
+ // Handle read: load address, get byte, send to Vectrex
+ ldr r0,[r1, 0x10] // Load addr pins
+ eor r0, r0, #0x8000 // Invert software-controlled line: it is high per default
+
+ // IF WE CLOBBER R2, RELOAD IT
+ //ldr r6,=romData // Load ROM data array addr in scratch r0
+ //ldr r2,[r6] // romData pointer deferenced in r2
+ ldrb r5,[r0, r2] // Load corresponding byte in rom
+ orr.w r5,r5,#0xff0000 // Set shit (this clears 0-7, but then the set register overrides the cleared bits)
+ str r5,[r3, 0x18] // Output
+
+ b wloop
write:
- //The Vec writes to the cart. Seemingly, we need to do something
- ldr r6,[r3, 0] //load input/output defs of portA
- mov r7,r6 //Save old values
- lsr r6,#16 //Nuke bottom 16 bits...
- lsl r6,#16 //...by shifting them out and zeroes back.
- str r6,[r3, 0] //Set bottom 8 pins of gpioa to input
- ldr r0,[r1, 0x10] //load addr word from gpioc
- ubfx r0,r0,#0,#15 //and with 0x7fff
-
- //We need to delay a while because the written data is only stable
- //in the 2nd half of the cycle.
- mov r6,#10
+ // The Vec writes to the cart. Seemingly, we need to do something
+ ldr r6,[r3, 0] // Load input/output defs of portA
+ mov r7,r6 // Save old values
+ lsr r6,#16 // Nuke bottom 16 bits...
+ lsl r6,#16 // ...by shifting them out and zeroes back.
+ str r6,[r3, 0] // Set bottom 8 pins of gpioa to input
+ ldr r0,[r1, 0x10] // Load addr word from gpioc
+ ubfx r0,r0,#0,#15 // and with 0x7fff
+
+#if (HW_VER < 3)
+// ===========================================================
+// We need to delay a while because the written data is only stable in the 2nd half of the cycle.
+// FIXME: This will become a problem with more code added below.
+ mov r6,#10 // <- Oscillator frequency dependent magic number here!!
+waitdataloop: // Wait a bit
+ subs r6,#1 // |
+ bne waitdataloop // |
+
+#elif (HW_VER >= 3)
+// -----------------------------------------------------------
+// Wait until the /E goes low (data valid), REQUIRES v0.3 HW
waitdataloop:
- subs r6,#1
- bne waitdataloop
-
- ldr r5,[r3, 0x10] //load data
- and r5,#0xff
- str r7,[r3, 0] //restore bottom half of gpioa to output
-
-//From here on:
-//r0 is addr
-//r5 is data
-
- //addr 0 = serial port addr
- cmp r0,#0
- beq outserial
-
- //See if it is a write to xxFF
- and r0,#0xff
- cmp r0,#0xff
- beq handleevent
- //Nope, it is probably a parameter.
- ldr r7,=parmRam
- strb r5,[r7, r0]
- b wrdone
+ ldr r6,[r4, 0x10] // Load addr pins (for /E)
+ lsls r6,#(31-10) // Shift bit 10 into sign flag (for /OE which is /E)
+ bmi waitdataloop // Bit 10 high? wait for low if so
-outserial:
- //output byte to ser port
- ldr r0,=0x40011004
- str r5,[r0]
+#endif // HW_VER == 3
+// ===========================================================
+
+ ldr r5,[r3, 0x10] // Load data
+ and r5,#0xff
+ str r7,[r3, 0] // Restore bottom half of gpioa to output
+
+ // From here on:
+ // r0 is addr
+ // r5 is data
+ // Writes to 0x7f00-0x7ffe are to set parameter values for a future event (rpc function ID)
+ // Writes to 0x7fff are the rpc function ID's and kick off the function
+ // Writes to 0x0000 will have the data byte immediately forwarded to the serial TX pin for debugging
+ // ------------------------------------------------------------------------
+ // Is it a write to addr #$0000 = serial port addr
+ // TODO: avoid addr 0 because Polar Rescue writes there occassionally
+ // avoid addr 1 because the Bad Apple player writes there a lot!
+ // cmp r0,#0
+ // beq outserial
+
+ // See if it is a write to 7Fxx (this is extra insurance against odd Polar Rescue writes)
+ lsr r9,r0,#8
+ cmp r9,#0x7f
+ bne writecart // If not, must be a general cart RAM write
+
+ // See if it is a write to xxFF
+ and r0,#0xff
+ cmp r0,#0xff
+ beq handleevent
+ // Nope, it is probably a parameter (0x7ff0 ~ 0x7ffe)
+ ldr r7,=parmRam
+ strb r5,[r7, r0]
+
+ writecart:
+ lsr r9,r0,#8 // See if it is a write to 2000 - 27ff
+ cmp r9,#0x20 // | TODO: Make this range two variables
+ blo wrdone // below the range we want, bail
+ cmp r9,#0x27 // |
+ bhi wrdone // above the range we want, bail
+
+ ldr r9,=cartData // Write to cartData[r0] = r5
+ ldr r9,[r9] // |
+ strb r5,[r9, r0] // |
+ // fall through to wrdone
+
+#if (HW_VER < 3)
+// ===========================================================
+// Wait until the /wr line goes high again
+wrdone:
+ ldr r0,[r4, 0x10] // Load inputs
+ lsls r0,#(31-1) // Shift bit 1 into sign flag
+ bmi initloop // bit 1 set? Return if so (was jumping back to wloop, but seemed
+ // to not return to menu unless registers re-init with initloop jump
+ // when playing Polar Rescue, after sub launches and Write to cart occur)
+ b wrdone // Wr still is low
- //Wait till the /wr line goes high again.
+#elif (HW_VER >= 3)
+// -----------------------------------------------------------
+// Wait until the /E goes high again, REQUIRES v0.3 HW
wrdone:
- ldr r0,[r4, 0x10] //Load inputs
- lsls r0,#(31-1) //shift bit 1 into sign flag
- bmi wloop //bit 1 set? Return if so
- b wrdone //Wr still is low.
+ ldr r6,[r4, 0x10] // Load addr pins (for /E)
+ lsls r6,#(31-10) // Shift bit 10 into sign flag (for /OE which is /E)
+ bpl wrdone // Bit 10 low? wait for high if so
+ b initloop // otherwise all done here
+#endif // HW_VER == 3
+// ===========================================================
+
+// This sub-routine is after wrdone, and lets the parameter write fall through to wrdone
+// to save a few instructions on average and force more cycles to be wasted only when using serial
+outserial:
+ // Output byte to serial port (TX pin on debugging header)
+ ldr r0,=0x40011004
+ str r5,[r0]
+ b wrdone
dbg:
- mov r1,r5
- ldr r2,=doDbgHook
- blx r2
- b romemu
+ mov r1,r5
+ ldr r2,=doDbgHook
+ blx r2
+ b initloop
-handleevent:
- mov r0,r5
- ldr r1,=doHandleEvent
- blx r1
- b romemu
+ledscyan:
+ ldr r1,=ledsCyan
+ blx r1
+ b initloop
+
+ledsmagenta:
+ ldr r1,=ledsMagenta
+ blx r1
+ b initloop
+
+ledsrainbow:
+ mov r1,#4
+ ldr r2,=rainbowStep
+ blx r2
+ b initloop
+ledsoff:
+ ldr r1,=ledsOff
+ blx r1
+ b initloop
+
+logR5:
+ mov r0,r5
+ ldr r1,=doLog
+ blx r1
+ b initloop
+
+dumpmem:
+ ldr r1,=dumpMemory
+ blx r1
+ b initloop
+
+handleevent:
+ mov r0,r5
+ ldr r1,=doHandleEvent
+ blx r1
+ b initloop
diff --git a/code/veccart/stm32f411rct6.ld b/code/veccart/stm32f411rct6.ld
index d6461b9..df2a267 100644
--- a/code/veccart/stm32f411rct6.ld
+++ b/code/veccart/stm32f411rct6.ld
@@ -7,3 +7,17 @@ ram (rwx) : ORIGIN = 0x20000400, LENGTH = 127K
}
/* Include the common ld script. */
INCLUDE cortex-m-generic.ld
+
+SECTIONS {
+ .text : {
+
+ /* ... */
+
+ multicart_start = .;
+ INCLUDE "multicart.ld" ;
+ multicart_end = .;
+
+ /* ... */
+ }
+}
+
diff --git a/code/veccart/sys.h b/code/veccart/sys.h
new file mode 100644
index 0000000..4c47dd2
--- /dev/null
+++ b/code/veccart/sys.h
@@ -0,0 +1,31 @@
+#ifndef SYSTEM_H
+#define SYSTEM_H
+#include
+
+enum RGB_TYPE {
+ RGB_TYPE_NONE = 0,
+ RGB_TYPE_10 = 1,
+ RGB_TYPE_4 = 2,
+};
+
+enum USB_DEV {
+ USB_DEV_DISABLED = 0, // Disable Developer Mode, erase cart.bin
+ USB_DEV_CHECK = 1, // Check for USB to be plugged in
+ USB_DEV_EXIT = 2, // Exit Developer Mode, erase cart.bin
+ USB_DEV_WAIT = 3, // Start the ramdisk for the first time, wait for (cart.bin/exit/run)
+ USB_DEV_EJECT = 4, // USB host ejected the USB device
+ USB_DEV_RUN = 5, // Look for cart.bin and load, or disable
+};
+
+typedef struct {
+ uint16_t size; // size of this struct
+ uint16_t ver; // system_options version
+ uint16_t hw_ver; // 0x0014 = 0.20
+ uint16_t sw_ver; // 0x0016 = 0.22
+ uint8_t rgb_type; // RGB_TYPE
+ uint8_t usb_dev; // USB_DEV
+ uint8_t reserved[128-10];
+} system_options;
+static_assert(sizeof(system_options)==128, "system_options should be 128 bytes, check the reserved field.");
+
+#endif
\ No newline at end of file
diff --git a/code/veccart/usb_msc.c b/code/veccart/usb_msc.c
index 6b7698a..dd7948a 100644
--- a/code/veccart/usb_msc.c
+++ b/code/veccart/usb_msc.c
@@ -27,6 +27,8 @@
#include "usb_private.h"
#include "xprintf.h"
+#include "sys.h"
+extern system_options sys_opt;
/* Definitions of Mass Storage Class from:
*
@@ -38,159 +40,159 @@
*/
/* Command Block Wrapper */
-#define CBW_SIGNATURE 0x43425355
-#define CBW_STATUS_SUCCESS 0
-#define CBW_STATUS_FAILED 1
-#define CBW_STATUS_PHASE_ERROR 2
+#define CBW_SIGNATURE 0x43425355
+#define CBW_STATUS_SUCCESS 0
+#define CBW_STATUS_FAILED 1
+#define CBW_STATUS_PHASE_ERROR 2
/* Command Status Wrapper */
-#define CSW_SIGNATURE 0x53425355
-#define CSW_STATUS_SUCCESS 0
-#define CSW_STATUS_FAILED 1
-#define CSW_STATUS_PHASE_ERROR 2
+#define CSW_SIGNATURE 0x53425355
+#define CSW_STATUS_SUCCESS 0
+#define CSW_STATUS_FAILED 1
+#define CSW_STATUS_PHASE_ERROR 2
/* Implemented SCSI Commands */
-#define SCSI_TEST_UNIT_READY 0x00
-#define SCSI_REQUEST_SENSE 0x03
-#define SCSI_FORMAT_UNIT 0x04
-#define SCSI_READ_6 0x08
-#define SCSI_WRITE_6 0x0A
-#define SCSI_INQUIRY 0x12
-#define SCSI_MODE_SENSE_6 0x1A
-#define SCSI_SEND_DIAGNOSTIC 0x1D
-#define SCSI_READ_CAPACITY 0x25
-#define SCSI_READ_10 0x28
+#define SCSI_TEST_UNIT_READY 0x00
+#define SCSI_REQUEST_SENSE 0x03
+#define SCSI_FORMAT_UNIT 0x04
+#define SCSI_READ_6 0x08
+#define SCSI_WRITE_6 0x0A
+#define SCSI_INQUIRY 0x12
+#define SCSI_MODE_SENSE_6 0x1A
+#define SCSI_SEND_DIAGNOSTIC 0x1D
+#define SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E
+#define SCSI_READ_FORMAT_CAPACITIES 0x23
+#define SCSI_READ_CAPACITY 0x25
+#define SCSI_READ_10 0x28
+#define SCSI_WRITE_10 0x2A
/* Required SCSI Commands */
/* Optional SCSI Commands */
-#define SCSI_REPORT_LUNS 0xA0
-#define SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E
-#define SCSI_MODE_SELECT_6 0x15
-#define SCSI_MODE_SELECT_10 0x55
-#define SCSI_MODE_SENSE_10 0x5A
-#define SCSI_READ_12 0xA8
-#define SCSI_READ_FORMAT_CAPACITIES 0x23
-#define SCSI_READ_TOC_PMA_ATIP 0x43
-#define SCSI_START_STOP_UNIT 0x1B
-#define SCSI_SYNCHRONIZE_CACHE 0x35
-#define SCSI_VERIFY 0x2F
-#define SCSI_WRITE_10 0x2A
-#define SCSI_WRITE_12 0xAA
+#define SCSI_REPORT_LUNS 0xA0
+#define SCSI_MODE_SELECT_6 0x15
+#define SCSI_MODE_SELECT_10 0x55
+#define SCSI_MODE_SENSE_10 0x5A
+#define SCSI_READ_12 0xA8
+#define SCSI_READ_TOC_PMA_ATIP 0x43
+#define SCSI_START_STOP_UNIT 0x1B
+#define SCSI_SYNCHRONIZE_CACHE 0x35
+#define SCSI_VERIFY 0x2F
+#define SCSI_WRITE_12 0xAA
/* The sense codes */
enum sbc_sense_key {
- SBC_SENSE_KEY_NO_SENSE = 0x00,
- SBC_SENSE_KEY_RECOVERED_ERROR = 0x01,
- SBC_SENSE_KEY_NOT_READY = 0x02,
- SBC_SENSE_KEY_MEDIUM_ERROR = 0x03,
- SBC_SENSE_KEY_HARDWARE_ERROR = 0x04,
- SBC_SENSE_KEY_ILLEGAL_REQUEST = 0x05,
- SBC_SENSE_KEY_UNIT_ATTENTION = 0x06,
- SBC_SENSE_KEY_DATA_PROTECT = 0x07,
- SBC_SENSE_KEY_BLANK_CHECK = 0x08,
- SBC_SENSE_KEY_VENDOR_SPECIFIC = 0x09,
- SBC_SENSE_KEY_COPY_ABORTED = 0x0A,
- SBC_SENSE_KEY_ABORTED_COMMAND = 0x0B,
- SBC_SENSE_KEY_VOLUME_OVERFLOW = 0x0D,
- SBC_SENSE_KEY_MISCOMPARE = 0x0E
+ SBC_SENSE_KEY_NO_SENSE = 0x00,
+ SBC_SENSE_KEY_RECOVERED_ERROR = 0x01,
+ SBC_SENSE_KEY_NOT_READY = 0x02,
+ SBC_SENSE_KEY_MEDIUM_ERROR = 0x03,
+ SBC_SENSE_KEY_HARDWARE_ERROR = 0x04,
+ SBC_SENSE_KEY_ILLEGAL_REQUEST = 0x05,
+ SBC_SENSE_KEY_UNIT_ATTENTION = 0x06,
+ SBC_SENSE_KEY_DATA_PROTECT = 0x07,
+ SBC_SENSE_KEY_BLANK_CHECK = 0x08,
+ SBC_SENSE_KEY_VENDOR_SPECIFIC = 0x09,
+ SBC_SENSE_KEY_COPY_ABORTED = 0x0A,
+ SBC_SENSE_KEY_ABORTED_COMMAND = 0x0B,
+ SBC_SENSE_KEY_VOLUME_OVERFLOW = 0x0D,
+ SBC_SENSE_KEY_MISCOMPARE = 0x0E
};
enum sbc_asc {
- SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION = 0x00,
- SBC_ASC_PERIPHERAL_DEVICE_WRITE_FAULT = 0x03,
- SBC_ASC_LOGICAL_UNIT_NOT_READY = 0x04,
- SBC_ASC_UNRECOVERED_READ_ERROR = 0x11,
- SBC_ASC_INVALID_COMMAND_OPERATION_CODE = 0x20,
- SBC_ASC_LBA_OUT_OF_RANGE = 0x21,
- SBC_ASC_INVALID_FIELD_IN_CDB = 0x24,
- SBC_ASC_WRITE_PROTECTED = 0x27,
- SBC_ASC_NOT_READY_TO_READY_CHANGE = 0x28,
- SBC_ASC_FORMAT_ERROR = 0x31,
- SBC_ASC_MEDIUM_NOT_PRESENT = 0x3A
+ SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION = 0x00,
+ SBC_ASC_PERIPHERAL_DEVICE_WRITE_FAULT = 0x03,
+ SBC_ASC_LOGICAL_UNIT_NOT_READY = 0x04,
+ SBC_ASC_UNRECOVERED_READ_ERROR = 0x11,
+ SBC_ASC_INVALID_COMMAND_OPERATION_CODE = 0x20,
+ SBC_ASC_LBA_OUT_OF_RANGE = 0x21,
+ SBC_ASC_INVALID_FIELD_IN_CDB = 0x24,
+ SBC_ASC_WRITE_PROTECTED = 0x27,
+ SBC_ASC_NOT_READY_TO_READY_CHANGE = 0x28,
+ SBC_ASC_FORMAT_ERROR = 0x31,
+ SBC_ASC_MEDIUM_NOT_PRESENT = 0x3A
};
enum sbc_ascq {
- SBC_ASCQ_NA = 0x00,
- SBC_ASCQ_FORMAT_COMMAND_FAILED = 0x01,
- SBC_ASCQ_INITIALIZING_COMMAND_REQUIRED = 0x02,
- SBC_ASCQ_OPERATION_IN_PROGRESS = 0x07
+ SBC_ASCQ_NA = 0x00,
+ SBC_ASCQ_FORMAT_COMMAND_FAILED = 0x01,
+ SBC_ASCQ_INITIALIZING_COMMAND_REQUIRED = 0x02,
+ SBC_ASCQ_OPERATION_IN_PROGRESS = 0x07
};
enum trans_event {
- EVENT_CBW_VALID,
- EVENT_NEED_STATUS
+ EVENT_CBW_VALID,
+ EVENT_NEED_STATUS
};
struct usb_msc_cbw {
- uint32_t dCBWSignature;
- uint32_t dCBWTag;
- uint32_t dCBWDataTransferLength;
- uint8_t bmCBWFlags;
- uint8_t bCBWLUN;
- uint8_t bCBWCBLength;
- uint8_t CBWCB[16];
+ uint32_t dCBWSignature;
+ uint32_t dCBWTag;
+ uint32_t dCBWDataTransferLength;
+ uint8_t bmCBWFlags;
+ uint8_t bCBWLUN;
+ uint8_t bCBWCBLength;
+ uint8_t CBWCB[16];
} __attribute__((packed));
struct usb_msc_csw {
- uint32_t dCSWSignature;
- uint32_t dCSWTag;
- uint32_t dCSWDataResidue;
- uint8_t bCSWStatus;
+ uint32_t dCSWSignature;
+ uint32_t dCSWTag;
+ uint32_t dCSWDataResidue;
+ uint8_t bCSWStatus;
} __attribute__((packed));
struct sbc_sense_info {
- uint8_t key;
- uint8_t asc;
- uint8_t ascq;
+ uint8_t key;
+ uint8_t asc;
+ uint8_t ascq;
};
struct usb_msc_trans {
- uint8_t cbw_cnt; /* Read until 31 bytes */
- union {
- struct usb_msc_cbw cbw;
- uint8_t buf[1];
- } cbw;
-
- uint32_t bytes_to_read;
- uint32_t bytes_to_write;
- uint32_t byte_count; /* Either read until equal to bytes_to_read or
- write until equal to bytes_to_write. */
- uint32_t lba_start;
- uint32_t block_count;
- uint32_t current_block;
-
- uint8_t msd_buf[512];
-
- bool csw_valid;
- uint8_t csw_sent; /* Write until 13 bytes */
- union {
- struct usb_msc_csw csw;
- uint8_t buf[1];
- } csw;
+ uint8_t cbw_cnt; /* Read until 31 bytes */
+ union {
+ struct usb_msc_cbw cbw;
+ uint8_t buf[1];
+ } cbw;
+
+ uint32_t bytes_to_read;
+ uint32_t bytes_to_write;
+ uint32_t byte_count; /* Either read until equal to bytes_to_read or
+ write until equal to bytes_to_write. */
+ uint32_t lba_start;
+ uint32_t block_count;
+ uint32_t current_block;
+
+ uint8_t msd_buf[512];
+
+ bool csw_valid;
+ uint8_t csw_sent; /* Write until 13 bytes */
+ union {
+ struct usb_msc_csw csw;
+ uint8_t buf[1];
+ } csw;
};
struct _usbd_mass_storage {
- usbd_device *usbd_dev;
- uint8_t ep_in;
- uint8_t ep_in_size;
- uint8_t ep_out;
- uint8_t ep_out_size;
+ usbd_device *usbd_dev;
+ uint8_t ep_in;
+ uint8_t ep_in_size;
+ uint8_t ep_out;
+ uint8_t ep_out_size;
- const char *vendor_id;
- const char *product_id;
- const char *product_revision_level;
- uint32_t block_count;
+ const char *vendor_id;
+ const char *product_id;
+ const char *product_revision_level;
+ uint32_t block_count;
- int (*read_block)(uint32_t lba, uint8_t *copy_to);
- int (*write_block)(uint32_t lba, const uint8_t *copy_from);
+ int (*read_block)(uint32_t lba, uint8_t *copy_to);
+ int (*write_block)(uint32_t lba, const uint8_t *copy_from);
- void (*lock)(void);
- void (*unlock)(void);
+ void (*lock)(void);
+ void (*unlock)(void);
- struct usb_msc_trans trans;
- struct sbc_sense_info sense;
+ struct usb_msc_trans trans;
+ struct sbc_sense_info sense;
};
static usbd_mass_storage _mass_storage;
@@ -198,340 +200,457 @@ static usbd_mass_storage _mass_storage;
/*-- SCSI Base Responses -----------------------------------------------------*/
static const uint8_t _spc3_inquiry_response[36] = {
- 0x00, /* Byte 0: Peripheral Qualifier = 0, Peripheral Device Type = 0 */
- 0x80, /* Byte 1: RMB = 1, Reserved = 0 */
- 0x04, /* Byte 2: Version = 0 */
- 0x02, /* Byte 3: Obsolete = 0, NormACA = 0, HiSup = 0, Response Data Format = 2 */
- 0x20, /* Byte 4: Additional Length (n-4) = 31 + 4 */
- 0x00, /* Byte 5: SCCS = 0, ACC = 0, TPGS = 0, 3PC = 0, Reserved = 0, Protect = 0 */
- 0x00, /* Byte 6: BQue = 0, EncServ = 0, VS = 0, MultiP = 0, MChngr = 0, Obsolete = 0, Addr16 = 0 */
- 0x00, /* Byte 7: Obsolete = 0, Wbus16 = 0, Sync = 0, Linked = 0, CmdQue = 0, VS = 0 */
- /* Byte 8 - Byte 15: Vendor Identification */
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- /* Byte 16 - Byte 31: Product Identification */
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- /* Byte 32 - Byte 35: Product Revision Level */
- 0x20, 0x20, 0x20, 0x20
+ 0x00, /* Byte 0: Peripheral Qualifier = 0, Peripheral Device Type = 0 */
+ 0x80, /* Byte 1: RMB = 1, Reserved = 0 */
+ 0x04, /* Byte 2: Version = 0 */
+ 0x02, /* Byte 3: Obsolete = 0, NormACA = 0, HiSup = 0, Response Data Format = 2 */
+ 0x20, /* Byte 4: Additional Length (n-4) = 31 + 4 */
+ 0x00, /* Byte 5: SCCS = 0, ACC = 0, TPGS = 0, 3PC = 0, Reserved = 0, Protect = 0 */
+ 0x00, /* Byte 6: BQue = 0, EncServ = 0, VS = 0, MultiP = 0, MChngr = 0, Obsolete = 0, Addr16 = 0 */
+ 0x00, /* Byte 7: Obsolete = 0, Wbus16 = 0, Sync = 0, Linked = 0, CmdQue = 0, VS = 0 */
+ /* Byte 8 - Byte 15: Vendor Identification */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ /* Byte 16 - Byte 31: Product Identification */
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ /* Byte 32 - Byte 35: Product Revision Level */
+ 0x20, 0x20, 0x20, 0x20
};
static const uint8_t _spc3_request_sense[18] = {
- 0x70, /* Byte 0: VALID = 0, Response Code = 112 */
- 0x00, /* Byte 1: Obsolete = 0 */
- 0x00, /* Byte 2: Filemark = 0, EOM = 0, ILI = 0, Reserved = 0, Sense Key = 0 */
- /* Byte 3 - Byte 6: Information = 0 */
- 0, 0, 0, 0,
- 0x0a, /* Byte 7: Additional Sense Length = 10 */
- /* Byte 8 - Byte 11: Command Specific Info = 0 */
- 0, 0, 0, 0,
- 0x00, /* Byte 12: Additional Sense Code (ASC) = 0 */
- 0x00, /* Byte 13: Additional Sense Code Qualifier (ASCQ) = 0 */
- 0x00, /* Byte 14: Field Replaceable Unit Code (FRUC) = 0 */
- 0x00, /* Byte 15: SKSV = 0, SenseKeySpecific[0] = 0 */
- 0x00, /* Byte 16: SenseKeySpecific[0] = 0 */
- 0x00 /* Byte 17: SenseKeySpecific[0] = 0 */
+ 0x70, /* Byte 0: VALID = 0, Response Code = 112 */
+ 0x00, /* Byte 1: Obsolete = 0 */
+ 0x00, /* Byte 2: Filemark = 0, EOM = 0, ILI = 0, Reserved = 0, Sense Key = 0 */
+ /* Byte 3 - Byte 6: Information = 0 */
+ 0, 0, 0, 0,
+ 0x0a, /* Byte 7: Additional Sense Length = 10 */
+ /* Byte 8 - Byte 11: Command Specific Info = 0 */
+ 0, 0, 0, 0,
+ 0x00, /* Byte 12: Additional Sense Code (ASC) = 0 */
+ 0x00, /* Byte 13: Additional Sense Code Qualifier (ASCQ) = 0 */
+ 0x00, /* Byte 14: Field Replaceable Unit Code (FRUC) = 0 */
+ 0x00, /* Byte 15: SKSV = 0, SenseKeySpecific[0] = 0 */
+ 0x00, /* Byte 16: SenseKeySpecific[0] = 0 */
+ 0x00 /* Byte 17: SenseKeySpecific[0] = 0 */
};
/*-- SCSI Layer --------------------------------------------------------------*/
static void set_sbc_status(usbd_mass_storage *ms,
- enum sbc_sense_key key,
- enum sbc_asc asc,
- enum sbc_ascq ascq)
+ enum sbc_sense_key key,
+ enum sbc_asc asc,
+ enum sbc_ascq ascq)
{
- ms->sense.key = (uint8_t) key;
- ms->sense.asc = (uint8_t) asc;
- ms->sense.ascq = (uint8_t) ascq;
+ ms->sense.key = (uint8_t) key;
+ ms->sense.asc = (uint8_t) asc;
+ ms->sense.ascq = (uint8_t) ascq;
}
static void set_sbc_status_good(usbd_mass_storage *ms)
{
- set_sbc_status(ms,
- SBC_SENSE_KEY_NO_SENSE,
- SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION,
- SBC_ASCQ_NA);
+ set_sbc_status(ms,
+ SBC_SENSE_KEY_NO_SENSE,
+ SBC_ASC_NO_ADDITIONAL_SENSE_INFORMATION,
+ SBC_ASCQ_NA);
}
static uint8_t *get_cbw_buf(struct usb_msc_trans *trans)
{
- return &trans->cbw.cbw.CBWCB[0];
+ return &trans->cbw.cbw.CBWCB[0];
}
static void scsi_read_6(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- if (EVENT_CBW_VALID == event) {
- uint8_t *buf;
+ if (EVENT_CBW_VALID == event) {
+ uint8_t *buf;
- buf = get_cbw_buf(trans);
+ buf = get_cbw_buf(trans);
- trans->lba_start = (buf[2] << 8) | buf[3];
- trans->block_count = buf[4];
- trans->current_block = 0;
+ trans->lba_start = (buf[2] << 8) | buf[3];
+ trans->block_count = buf[4];
+ trans->current_block = 0;
- /* TODO: Check the lba & block_count for range. */
+ /* TODO: Check the lba & block_count for range. */
- /* both are in terms of 512 byte blocks, so shift by 9 */
- trans->bytes_to_write = trans->block_count << 9;
+ /* both are in terms of 512 byte blocks, so shift by 9 */
+ trans->bytes_to_write = trans->block_count << 9;
- set_sbc_status_good(ms);
- }
+ set_sbc_status_good(ms);
+ }
}
static void scsi_write_6(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- (void) ms;
+ (void) ms;
- if (EVENT_CBW_VALID == event) {
- uint8_t *buf;
+ if (EVENT_CBW_VALID == event) {
+ uint8_t *buf;
- buf = get_cbw_buf(trans);
+ buf = get_cbw_buf(trans);
- trans->lba_start = ((0x1f & buf[1]) << 16) | (buf[2] << 8) | buf[3];
- trans->block_count = buf[4];
- trans->current_block = 0;
+ trans->lba_start = ((0x1f & buf[1]) << 16) | (buf[2] << 8) | buf[3];
+ trans->block_count = buf[4];
+ trans->current_block = 0;
- trans->bytes_to_read = trans->block_count << 9;
- }
+ trans->bytes_to_read = trans->block_count << 9;
+ }
}
static void scsi_write_10(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- (void) ms;
+ (void) ms;
- if (EVENT_CBW_VALID == event) {
- uint8_t *buf;
+ if (EVENT_CBW_VALID == event) {
+ uint8_t *buf;
- buf = get_cbw_buf(trans);
+ buf = get_cbw_buf(trans);
- trans->lba_start = (buf[2] << 24) | (buf[3] << 16) |
- (buf[4] << 8) | buf[5];
- trans->block_count = (buf[7] << 8) | buf[8];
- trans->current_block = 0;
+ trans->lba_start = (buf[2] << 24) | (buf[3] << 16) |
+ (buf[4] << 8) | buf[5];
+ trans->block_count = (buf[7] << 8) | buf[8];
+ trans->current_block = 0;
- trans->bytes_to_read = trans->block_count << 9;
-// xprintf("scsi_write_10: %d bytes\n", trans->bytes_to_read);
- }
+ trans->bytes_to_read = trans->block_count << 9;
+// xprintf("scsi_write_10: %d bytes\n", trans->bytes_to_read);
+ }
}
static void scsi_read_10(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- if (EVENT_CBW_VALID == event) {
- uint8_t *buf;
+ if (EVENT_CBW_VALID == event) {
+ uint8_t *buf;
- buf = get_cbw_buf(trans);
+ buf = get_cbw_buf(trans);
- trans->lba_start = (buf[2] << 24) | (buf[3] << 16) | (buf[4] << 8) | buf[5];
- trans->block_count = (buf[7] << 8) | buf[8];
+ trans->lba_start = (buf[2] << 24) | (buf[3] << 16) | (buf[4] << 8) | buf[5];
+ trans->block_count = (buf[7] << 8) | buf[8];
- /* TODO: Check the lba & block_count for range. */
+ /* TODO: Check the lba & block_count for range. */
- /* both are in terms of 512 byte blocks, so shift by 9 */
- trans->bytes_to_write = trans->block_count << 9;
+ /* both are in terms of 512 byte blocks, so shift by 9 */
+ trans->bytes_to_write = trans->block_count << 9;
- set_sbc_status_good(ms);
- }
+ set_sbc_status_good(ms);
+ }
}
static void scsi_read_capacity(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- if (EVENT_CBW_VALID == event) {
- trans->msd_buf[0] = ms->block_count >> 24;
- trans->msd_buf[1] = 0xff & (ms->block_count >> 16);
- trans->msd_buf[2] = 0xff & (ms->block_count >> 8);
- trans->msd_buf[3] = 0xff & ms->block_count;
-
- /* Block size: 512 */
- trans->msd_buf[4] = 0;
- trans->msd_buf[5] = 0;
- trans->msd_buf[6] = 2;
- trans->msd_buf[7] = 0;
- trans->bytes_to_write = 8;
- set_sbc_status_good(ms);
- }
+ if (EVENT_CBW_VALID == event) {
+ trans->msd_buf[0] = ms->block_count >> 24;
+ trans->msd_buf[1] = 0xff & (ms->block_count >> 16);
+ trans->msd_buf[2] = 0xff & (ms->block_count >> 8);
+ trans->msd_buf[3] = 0xff & ms->block_count;
+
+ /* Block size: 512 */
+ trans->msd_buf[4] = 0;
+ trans->msd_buf[5] = 0;
+ trans->msd_buf[6] = 2;
+ trans->msd_buf[7] = 0;
+ trans->bytes_to_write = 8;
+ set_sbc_status_good(ms);
+ }
}
static void scsi_format_unit(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- if (EVENT_CBW_VALID == event) {
- uint32_t i;
+ if (EVENT_CBW_VALID == event) {
+ uint32_t i;
- memset(trans->msd_buf, 0, 512);
+ memset(trans->msd_buf, 0, 512);
- for (i = 0; i < ms->block_count; i++) {
- (*ms->write_block)(i, trans->msd_buf);
- }
+ for (i = 0; i < ms->block_count; i++) {
+ (*ms->write_block)(i, trans->msd_buf);
+ }
- set_sbc_status_good(ms);
- }
+ set_sbc_status_good(ms);
+ }
}
static void scsi_request_sense(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- if (EVENT_CBW_VALID == event) {
- uint8_t *buf;
+ if (EVENT_CBW_VALID == event) {
+ uint8_t *buf;
- buf = &trans->cbw.cbw.CBWCB[0];
+ buf = &trans->cbw.cbw.CBWCB[0];
- trans->bytes_to_write = buf[4]; /* allocation length */
- memcpy(trans->msd_buf, _spc3_request_sense, sizeof(_spc3_request_sense));
+ trans->bytes_to_write = buf[4]; /* allocation length */
+ memcpy(trans->msd_buf, _spc3_request_sense, sizeof(_spc3_request_sense));
- trans->msd_buf[2] = ms->sense.key;
- trans->msd_buf[12] = ms->sense.asc;
- trans->msd_buf[13] = ms->sense.ascq;
- }
+ trans->msd_buf[2] = ms->sense.key;
+ trans->msd_buf[12] = ms->sense.asc;
+ trans->msd_buf[13] = ms->sense.ascq;
+ }
}
static void scsi_mode_sense_6(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- (void) ms;
+ (void) ms;
- if (EVENT_CBW_VALID == event) {
+ if (EVENT_CBW_VALID == event) {
#if 0
- uint8_t *buf;
- uint8_t page_code;
- uint8_t allocation_length;
+ uint8_t *buf;
+ uint8_t page_code;
+ uint8_t allocation_length;
- buf = &trans->cbw.cbw.CBWCB[0];
- page_code = buf[2];
- allocation_length = buf[4];
+ buf = &trans->cbw.cbw.CBWCB[0];
+ page_code = buf[2];
+ allocation_length = buf[4];
- if (0x1C == page_code) { /* Informational Exceptions */
+ if (0x1C == page_code) { /* Informational Exceptions */
#endif
- trans->bytes_to_write = 4;
+ trans->bytes_to_write = 4;
- trans->msd_buf[0] = 3; /* Num bytes that follow */
- trans->msd_buf[1] = 0; /* Medium Type */
- trans->msd_buf[2] = 0; /* Device specific param */
- trans->csw.csw.dCSWDataResidue = 4;
+ trans->msd_buf[0] = 3; /* Num bytes that follow */
+ trans->msd_buf[1] = 0; /* Medium Type */
+ trans->msd_buf[2] = 0; /* Device specific param */
+ trans->csw.csw.dCSWDataResidue = 4;
#if 0
- } else if (0x01 == page_code) { /* Error recovery */
- } else if (0x3F == page_code) { /* All */
- } else {
- /* Error */
- trans->csw.csw.bCSWStatus = CSW_STATUS_FAILED;
- set_sbc_status(ms,
- SBC_SENSE_KEY_ILLEGAL_REQUEST,
- SBC_ASC_INVALID_FIELD_IN_CDB,
- SBC_ASCQ_NA);
- }
+ } else if (0x01 == page_code) { /* Error recovery */
+ } else if (0x3F == page_code) { /* All */
+ } else {
+ /* Error */
+ trans->csw.csw.bCSWStatus = CSW_STATUS_FAILED;
+ set_sbc_status(ms,
+ SBC_SENSE_KEY_ILLEGAL_REQUEST,
+ SBC_ASC_INVALID_FIELD_IN_CDB,
+ SBC_ASCQ_NA);
+ }
#endif
- }
+ }
}
+// https://medium.com/@ly.lee/stm32-blue-pill-usb-bootloader-how-i-fixed-the-usb-storage-serial-dfu-and-webusb-interfaces-36d7fe245b5c
+// https://github.com/lupyuen/bluepill-bootloader/blob/master/src/msc.c#L438-L549
+//////////////////MODIFIED THIS/////////////////////////////////////////////////////
+// Inquiry Page 0x00 - Supported VPD Pages (Section 5.4.18). From https://github.com/LonelyWolf/stm32/blob/master/cube-usb-msc/msc/usbd_msc_scsi.c
+#define LENGTH_INQUIRY_PAGE00 6 // Previously 7
+static const uint8_t MSC_Page00_Inquiry_Data[LENGTH_INQUIRY_PAGE00] = {
+ 0x00, // PERIPHERAL QUALIFIER and PERIPHERAL DEVICE TYPE
+ 0x00, // Page Code
+ 0x00, // Reserved
+ (LENGTH_INQUIRY_PAGE00 - 4), // Page Length
+ 0x00, // Supported: Page 0x00 - Supported VPD Pages (Section 5.4.18)
+ 0x80, // Supported: Page 0x80 - Unit Serial Number (Section 5.4.19)
+ // 0x83 // Supported: Page 0x83 - Device Identification (Section 5.4.11)
+};
+
+// Inquiry Page 0x80 - Unit Serial Number (Section 5.4.19)
+#define LENGTH_INQUIRY_PAGE80 0x0c // Predefined.
+#define LENGTH_SERIAL_NUMBER 0x08 // Predefined.
+static const uint8_t MSC_Page80_Inquiry_Data[LENGTH_INQUIRY_PAGE80] = {
+ 0x00, // PERIPHERAL QUALIFIER and PERIPHERAL DEVICE TYPE
+ 0x80, // Page Code
+ 0x00, // Reserved
+ (LENGTH_INQUIRY_PAGE80 - 4), // Page Length: 8 bytes
+ // Serial number in ASCII (8 bytes) starts here. Padded with spaces.
+ '1', '2', '3', '4',
+ '5', '6', '7', '8',
+};
+
+#ifdef NOTUSED
+// Inquiry Page 0x83 - Device Identification (Section 5.4.11)
+#define LENGTH_INQUIRY_PAGE83 7
+static const uint8_t MSC_Page83_Inquiry_Data[LENGTH_INQUIRY_PAGE83] = {
+ 0x00, // PERIPHERAL QUALIFIER and PERIPHERAL DEVICE TYPE
+ 0x83, // Page Code
+ 0x00, // Reserved
+ (LENGTH_INQUIRY_PAGE83 - 4), // Page Length
+};
+#endif // NOTUSED
+
static void scsi_inquiry(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- if (EVENT_CBW_VALID == event) {
- uint8_t evpd;
- uint8_t *buf;
-
- buf = get_cbw_buf(trans);
- evpd = 1 & buf[1];
-
- if (0 == evpd) {
- size_t len;
- trans->bytes_to_write = sizeof(_spc3_inquiry_response);
- memcpy(trans->msd_buf, _spc3_inquiry_response, sizeof(_spc3_inquiry_response));
-
- len = strlen(ms->vendor_id);
- len = MIN(len, 8);
- memcpy(&trans->msd_buf[8], ms->vendor_id, len);
-
- len = strlen(ms->product_id);
- len = MIN(len, 16);
- memcpy(&trans->msd_buf[16], ms->product_id, len);
-
- len = strlen(ms->product_revision_level);
- len = MIN(len, 4);
- memcpy(&trans->msd_buf[32], ms->product_revision_level, len);
-
- trans->csw.csw.dCSWDataResidue = sizeof(_spc3_inquiry_response);
-
- set_sbc_status_good(ms);
- } else {
- /* TODO: Add VPD 0x83 support */
- /* TODO: Add VPD 0x00 support */
- }
- }
+ if (EVENT_CBW_VALID == event) {
+ uint8_t evpd;
+ uint8_t *buf;
+
+ buf = get_cbw_buf(trans);
+ evpd = 1 & buf[1];
+
+ if (0 == evpd) {
+ size_t len;
+ trans->bytes_to_write = sizeof(_spc3_inquiry_response);
+ memcpy(trans->msd_buf, _spc3_inquiry_response, sizeof(_spc3_inquiry_response));
+
+ len = strlen(ms->vendor_id);
+ len = MIN(len, 8);
+ memcpy(&trans->msd_buf[8], ms->vendor_id, len);
+
+ len = strlen(ms->product_id);
+ len = MIN(len, 16);
+ memcpy(&trans->msd_buf[16], ms->product_id, len);
+
+ len = strlen(ms->product_revision_level);
+ len = MIN(len, 4);
+ memcpy(&trans->msd_buf[32], ms->product_revision_level, len);
+
+ trans->csw.csw.dCSWDataResidue = sizeof(_spc3_inquiry_response);
+
+ set_sbc_status_good(ms);
+ } else {
+ // According to SCSI specs: When the EVPD bit is set to one, the PAGE CODE field specifies which page of vital product data information the device servers hall return (see 5.4).
+ // Page 0x00 - Supported VPD Pages (Section 5.4.18)
+ // Page 0x80 - Unit Serial Number (Section 5.4.19)
+ // TODO: Page 0x83 - Device Identification (Section 5.4.11)
+ const uint8_t page_code = buf[2];
+ switch (page_code) {
+ case 0x0: { // Page 0x00 - Supported VPD Pages (Section 5.4.18)
+ uint8_t *pPage = (uint8_t *)MSC_Page00_Inquiry_Data;
+ size_t len = LENGTH_INQUIRY_PAGE00;
+
+ trans->bytes_to_write = len;
+ memcpy(trans->msd_buf, pPage, len);
+ trans->csw.csw.dCSWDataResidue = len;
+ set_sbc_status_good(ms);
+ break;
+ }
+ case 0x80: { // Page 0x80 - Unit Serial Number (Section 5.4.19)
+ uint8_t *pPage = (uint8_t *)MSC_Page80_Inquiry_Data;
+ size_t len = LENGTH_INQUIRY_PAGE80;
+
+ trans->bytes_to_write = len;
+ memcpy(trans->msd_buf, pPage, len);
+ trans->csw.csw.dCSWDataResidue = len;
+ set_sbc_status_good(ms);
+ break;
+ }
+#ifdef NOTUSED
+ case 0x83: { // Page 0x83 - Device Identification (Section 5.4.11)
+ uint8_t *pPage = (uint8_t *)MSC_Page83_Inquiry_Data;
+ size_t len = LENGTH_INQUIRY_PAGE83;
+
+ trans->bytes_to_write = len;
+ memcpy(trans->msd_buf, pPage, len);
+ trans->csw.csw.dCSWDataResidue = len;
+ set_sbc_status_good(ms);
+ break;
+ }
+#endif // NOTUSED
+ default:
+ xprintf("scsi_inquiry page_code error %x\n", page_code);
+ }
+ }
+ }
}
+////////////////////////////////////////////////////////////////////////////////////
+
+// https://medium.com/@ly.lee/stm32-blue-pill-usb-bootloader-how-i-fixed-the-usb-storage-serial-dfu-and-webusb-interfaces-36d7fe245b5c
+// https://github.com/lupyuen/bluepill-bootloader/blob/master/src/msc.c#L551-L572
+//////////////////ADDED THIS/////////////////////////////////////////////////////
+// From https://habr.com/company/thirdpin/blog/304924/
+static void scsi_read_format_capacities(usbd_mass_storage *ms, struct usb_msc_trans *trans, enum trans_event event)
+{
+ if (EVENT_CBW_VALID == event) {
+
+ trans->msd_buf[3] = 0x08;
+ trans->msd_buf[4] = ms->block_count >> 24;
+ trans->msd_buf[5] = 0xff & (ms->block_count >> 16);
+ trans->msd_buf[6] = 0xff & (ms->block_count >> 8);
+ trans->msd_buf[7] = 0xff & ms->block_count;
+
+ trans->msd_buf[8] = 0x02;
+ trans->msd_buf[9] = 0;
+ trans->msd_buf[10] = 0x02;
+ trans->msd_buf[11] = 0;
+ trans->bytes_to_write = 12; // Was 9.
+ set_sbc_status_good(ms);
+ }
+}
+/////////////////////////////////////////////////////////////////////////////////
static void scsi_command(usbd_mass_storage *ms,
- struct usb_msc_trans *trans,
- enum trans_event event)
+ struct usb_msc_trans *trans,
+ enum trans_event event)
{
- if (EVENT_CBW_VALID == event) {
- /* Setup the default success */
- trans->csw_sent = 0;
- trans->csw.csw.dCSWSignature = CSW_SIGNATURE;
- trans->csw.csw.dCSWTag = trans->cbw.cbw.dCBWTag;
- trans->csw.csw.dCSWDataResidue = 0;
- trans->csw.csw.bCSWStatus = CSW_STATUS_SUCCESS;
-
- trans->bytes_to_write = 0;
- trans->bytes_to_read = 0;
- trans->byte_count = 0;
- }
-
- switch (trans->cbw.cbw.CBWCB[0]) {
- case SCSI_TEST_UNIT_READY:
- case SCSI_SEND_DIAGNOSTIC:
- /* Do nothing, just send the success. */
- set_sbc_status_good(ms);
- break;
- case SCSI_FORMAT_UNIT:
- scsi_format_unit(ms, trans, event);
- break;
- case SCSI_REQUEST_SENSE:
- scsi_request_sense(ms, trans, event);
- break;
- case SCSI_MODE_SENSE_6:
- scsi_mode_sense_6(ms, trans, event);
- break;
- case SCSI_READ_6:
- scsi_read_6(ms, trans, event);
- break;
- case SCSI_INQUIRY:
- scsi_inquiry(ms, trans, event);
- break;
- case SCSI_READ_CAPACITY:
- scsi_read_capacity(ms, trans, event);
- break;
- case SCSI_READ_10:
- scsi_read_10(ms, trans, event);
- break;
- case SCSI_WRITE_6:
- scsi_write_6(ms, trans, event);
- break;
- case SCSI_WRITE_10:
- scsi_write_10(ms, trans, event);
- break;
- default:
- set_sbc_status(ms, SBC_SENSE_KEY_ILLEGAL_REQUEST,
- SBC_ASC_INVALID_COMMAND_OPERATION_CODE,
- SBC_ASCQ_NA);
-
- trans->bytes_to_write = 0;
- trans->bytes_to_read = 0;
- trans->csw.csw.bCSWStatus = CSW_STATUS_FAILED;
- break;
- }
+ if (EVENT_CBW_VALID == event) {
+ /* Setup the default success */
+ trans->csw_sent = 0;
+ trans->csw.csw.dCSWSignature = CSW_SIGNATURE;
+ trans->csw.csw.dCSWTag = trans->cbw.cbw.dCBWTag;
+ trans->csw.csw.dCSWDataResidue = 0;
+ trans->csw.csw.bCSWStatus = CSW_STATUS_SUCCESS;
+
+ trans->bytes_to_write = 0;
+ trans->bytes_to_read = 0;
+ trans->byte_count = 0;
+ }
+
+ xprintf("scsi_command: %02X\n", trans->cbw.cbw.CBWCB[0]);
+ switch (trans->cbw.cbw.CBWCB[0]) {
+ case SCSI_TEST_UNIT_READY:
+ case SCSI_SEND_DIAGNOSTIC:
+ /* Do nothing, just send the success. */
+ set_sbc_status_good(ms);
+ break;
+ case SCSI_FORMAT_UNIT:
+ scsi_format_unit(ms, trans, event);
+ break;
+ case SCSI_REQUEST_SENSE:
+ scsi_request_sense(ms, trans, event);
+ break;
+ case SCSI_MODE_SENSE_6:
+ scsi_mode_sense_6(ms, trans, event);
+ break;
+ case SCSI_READ_6:
+ scsi_read_6(ms, trans, event);
+ break;
+ case SCSI_INQUIRY:
+ scsi_inquiry(ms, trans, event);
+ break;
+ case SCSI_READ_CAPACITY:
+ scsi_read_capacity(ms, trans, event);
+ break;
+ case SCSI_READ_10:
+ scsi_read_10(ms, trans, event);
+ break;
+ case SCSI_WRITE_6:
+ scsi_write_6(ms, trans, event);
+ break;
+ case SCSI_WRITE_10:
+ scsi_write_10(ms, trans, event);
+ break;
+//////////////////ADDED THIS/////////////////////////////////////////////////////
+// Windows will send these commands...
+ case SCSI_READ_FORMAT_CAPACITIES:
+ scsi_read_format_capacities(ms, trans, event);
+ break;
+ case SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL:
+ set_sbc_status_good(ms);
+ break;
+/////////////////////////////////////////////////////////////////////////////////
+ default:
+ set_sbc_status(ms, SBC_SENSE_KEY_ILLEGAL_REQUEST,
+ SBC_ASC_INVALID_COMMAND_OPERATION_CODE,
+ SBC_ASCQ_NA);
+
+ trans->bytes_to_write = 0;
+ trans->bytes_to_read = 0;
+ trans->csw.csw.bCSWStatus = CSW_STATUS_FAILED;
+ break;
+ }
+
+ if (trans->cbw.cbw.CBWCB[0] == SCSI_START_STOP_UNIT) {
+ sys_opt.usb_dev = USB_DEV_EJECT; // EXIT USB MODE, WE GOT EJECTED!
+ }
}
/*-- USB Mass Storage Layer --------------------------------------------------*/
@@ -540,238 +659,241 @@ static void scsi_command(usbd_mass_storage *ms,
//aka data from host to dev
static void msc_data_rx_cb(usbd_device *usbd_dev, uint8_t ep)
{
- usbd_mass_storage *ms;
- struct usb_msc_trans *trans;
- int len, max_len, left;
- void *p;
-
- ms = &_mass_storage;
- trans = &ms->trans;
-
-// xprintf("msc_data_rx_cb: byte_count %d bytes_to_read %d bytes_to_write %d\n", trans->byte_count, trans->bytes_to_read, trans->bytes_to_write);
-
- /* RX only */
- left = sizeof(struct usb_msc_cbw) - trans->cbw_cnt;
-// xprintf("msc_data_rx_cb: left %d\n", left);
- if (0 < left) {
- max_len = MIN(ms->ep_out_size, left);
- p = &trans->cbw.buf[0x1ff & trans->cbw_cnt];
- len = usbd_ep_read_packet(usbd_dev, ep, p, max_len);
- trans->cbw_cnt += len;
-
- if (sizeof(struct usb_msc_cbw) == trans->cbw_cnt) {
- scsi_command(ms, trans, EVENT_CBW_VALID);
- if (trans->byte_count < trans->bytes_to_read) {
- /* We must wait until there is something to
- * read again. */
- return;
- }
- }
- }
-
- if (trans->byte_count < trans->bytes_to_read) {
- if (0 < trans->block_count) {
- if ((0 == trans->byte_count) && (NULL != ms->lock)){
- (*ms->lock)();
- }
- }
-
- left = trans->bytes_to_read - trans->byte_count;
- max_len = MIN(ms->ep_out_size, left);
- p = &trans->msd_buf[0x1ff & trans->byte_count];
- len = usbd_ep_read_packet(usbd_dev, ep, p, max_len);
- trans->byte_count += len;
-
- if (0 < trans->block_count) {
- if (0 == (0x1ff & trans->byte_count)) {
- uint32_t lba;
-
- lba = trans->lba_start + trans->current_block;
- if (0 != (*ms->write_block)(lba, trans->msd_buf)) {
- /* Error */
- }
- trans->current_block++;
- }
- }
-
+ usbd_mass_storage *ms;
+ struct usb_msc_trans *trans;
+ int len, max_len, left;
+ void *p;
+
+ ms = &_mass_storage;
+ trans = &ms->trans;
+
+// xprintf("msc_data_rx_cb: byte_count %d bytes_to_read %d bytes_to_write %d\n", trans->byte_count, trans->bytes_to_read, trans->bytes_to_write);
+
+ /* RX only */
+ left = sizeof(struct usb_msc_cbw) - trans->cbw_cnt;
+// xprintf("msc_data_rx_cb: left %d\n", left);
+ if (0 < left) {
+ max_len = MIN(ms->ep_out_size, left);
+ p = &trans->cbw.buf[0x1ff & trans->cbw_cnt];
+ len = usbd_ep_read_packet(usbd_dev, ep, p, max_len);
+ trans->cbw_cnt += len;
+
+ if (sizeof(struct usb_msc_cbw) == trans->cbw_cnt) {
+ scsi_command(ms, trans, EVENT_CBW_VALID);
+ if (trans->byte_count < trans->bytes_to_read) {
+ /* We must wait until there is something to
+ * read again. */
+ return;
+ }
+ }
+ }
+
+ if (trans->byte_count < trans->bytes_to_read) {
+ if (0 < trans->block_count) {
+ if ((0 == trans->byte_count) && (NULL != ms->lock)){
+ (*ms->lock)();
+ }
+ }
+
+ left = trans->bytes_to_read - trans->byte_count;
+ max_len = MIN(ms->ep_out_size, left);
+ p = &trans->msd_buf[0x1ff & trans->byte_count];
+ len = usbd_ep_read_packet(usbd_dev, ep, p, max_len);
+ trans->byte_count += len;
+
+ if (0 < trans->block_count) {
+ if (0 == (0x1ff & trans->byte_count)) {
+ uint32_t lba;
+
+ lba = trans->lba_start + trans->current_block;
+ if (0 != (*ms->write_block)(lba, trans->msd_buf)) {
+ /* Error */
+ }
+ trans->current_block++;
+ }
+ }
+
+// From https://habr.com/company/thirdpin/blog/304924/
//Dirty copy/paste
- if (false == trans->csw_valid) {
- scsi_command(ms, trans, EVENT_NEED_STATUS);
- trans->csw_valid = true;
- }
- left = sizeof(struct usb_msc_csw) - trans->csw_sent;
- if (0 < left) {
-// xprintf("Sending CSW\n");
- max_len = MIN(ms->ep_out_size, left);
- p = &trans->csw.buf[trans->csw_sent];
- len = usbd_ep_write_packet(usbd_dev, ms->ep_in, p, max_len);
- trans->csw_sent += len;
- }
+ if (false == trans->csw_valid) {
+ scsi_command(ms, trans, EVENT_NEED_STATUS);
+ trans->csw_valid = true;
+ }
+ left = sizeof(struct usb_msc_csw) - trans->csw_sent;
+ if (0 < left) {
+// xprintf("Sending CSW\n");
+ max_len = MIN(ms->ep_out_size, left);
+ p = &trans->csw.buf[trans->csw_sent];
+ len = usbd_ep_write_packet(usbd_dev, ms->ep_in, p, max_len);
+ trans->csw_sent += len;
+ }
//End c/p
- } else if (trans->byte_count < trans->bytes_to_write) {
- if (0 < trans->block_count) {
- if ((0 == trans->byte_count) && (NULL != ms->lock)) {
- (*ms->lock)();
- }
-
- if (0 == (0x1ff & trans->byte_count)) {
- uint32_t lba;
-
- lba = trans->lba_start + trans->current_block;
- if (0 != (*ms->read_block)(lba, trans->msd_buf)) {
- /* Error */
- }
- trans->current_block++;
- }
- }
-
- left = trans->bytes_to_write - trans->byte_count;
- max_len = MIN(ms->ep_out_size, left);
- p = &trans->msd_buf[0x1ff & trans->byte_count];
- len = usbd_ep_write_packet(usbd_dev, ms->ep_in, p, max_len);
- trans->byte_count += len;
- } else {
- if (0 < trans->block_count) {
- if (trans->current_block == trans->block_count) {
- uint32_t lba;
-
- lba = trans->lba_start + trans->current_block;
- if (0 != (*ms->write_block)(lba, trans->msd_buf)) {
- /* Error */
- }
-
- trans->current_block = 0;
- if (NULL != ms->unlock){
- (*ms->unlock)();
- }
- }
- }
- if (false == trans->csw_valid) {
- scsi_command(ms, trans, EVENT_NEED_STATUS);
- trans->csw_valid = true;
- }
- left = sizeof(struct usb_msc_csw) - trans->csw_sent;
- if (0 < left) {
-// xprintf("Sending CSW\n");
- max_len = MIN(ms->ep_out_size, left);
- p = &trans->csw.buf[trans->csw_sent];
- len = usbd_ep_write_packet(usbd_dev, ms->ep_in, p, max_len);
- trans->csw_sent += len;
- }
- }
+ } else if (trans->byte_count < trans->bytes_to_write) {
+ if (0 < trans->block_count) {
+ if ((0 == trans->byte_count) && (NULL != ms->lock)) {
+ (*ms->lock)();
+ }
+
+ if (0 == (0x1ff & trans->byte_count)) {
+ uint32_t lba;
+
+ lba = trans->lba_start + trans->current_block;
+ if (0 != (*ms->read_block)(lba, trans->msd_buf)) {
+ /* Error */
+ }
+ trans->current_block++;
+ }
+ }
+
+ left = trans->bytes_to_write - trans->byte_count;
+ max_len = MIN(ms->ep_out_size, left);
+ p = &trans->msd_buf[0x1ff & trans->byte_count];
+ len = usbd_ep_write_packet(usbd_dev, ms->ep_in, p, max_len);
+ trans->byte_count += len;
+ } else {
+ if (0 < trans->block_count) {
+ if (trans->current_block == trans->block_count) {
+ uint32_t lba;
+
+ lba = trans->lba_start + trans->current_block;
+ if (0 != (*ms->write_block)(lba, trans->msd_buf)) {
+ /* Error */
+ }
+
+ trans->current_block = 0;
+ if (NULL != ms->unlock){
+ (*ms->unlock)();
+ }
+ }
+ }
+ if (false == trans->csw_valid) {
+ scsi_command(ms, trans, EVENT_NEED_STATUS);
+ trans->csw_valid = true;
+ }
+ left = sizeof(struct usb_msc_csw) - trans->csw_sent;
+ if (0 < left) {
+// xprintf("Sending CSW\n");
+ max_len = MIN(ms->ep_out_size, left);
+ p = &trans->csw.buf[trans->csw_sent];
+ len = usbd_ep_write_packet(usbd_dev, ms->ep_in, p, max_len);
+ trans->csw_sent += len;
+ }
+ }
}
/** @brief Handle the USB 'IN' requests. */
//aka the data from the dev to the host
static void msc_data_tx_cb(usbd_device *usbd_dev, uint8_t ep)
{
- usbd_mass_storage *ms;
- struct usb_msc_trans *trans;
- int len, max_len, left;
- void *p;
-
- ms = &_mass_storage;
- trans = &ms->trans;
-
-// xprintf("msc_data_tx_cb: byte_count %d bytes_to_read %d bytes_to_write %d\n", trans->byte_count, trans->bytes_to_read, trans->bytes_to_write);
-
- if (trans->byte_count < trans->bytes_to_write) {
- if (0 < trans->block_count) {
- if (0 == (0x1ff & trans->byte_count)) {
- uint32_t lba;
-
- lba = trans->lba_start + trans->current_block;
- if (0 != (*ms->read_block)(lba, trans->msd_buf)) {
- /* Error */
- }
- trans->current_block++;
- }
- }
-
- left = trans->bytes_to_write - trans->byte_count;
- max_len = MIN(ms->ep_out_size, left);
- p = &trans->msd_buf[0x1ff & trans->byte_count];
- len = usbd_ep_write_packet(usbd_dev, ep, p, max_len);
- trans->byte_count += len;
- } else {
- if (0 < trans->block_count) {
- if (trans->current_block == trans->block_count) {
- trans->current_block = 0;
- if (NULL != ms->unlock){
- (*ms->unlock)();
- }
- }
- }
- if (false == trans->csw_valid) {
- scsi_command(ms, trans, EVENT_NEED_STATUS);
- trans->csw_valid = true;
- }
-
- left = sizeof(struct usb_msc_csw) - trans->csw_sent;
- if (0 < left) {
-// xprintf("Sending CSW\n");
- max_len = MIN(ms->ep_out_size, left);
- p = &trans->csw.buf[trans->csw_sent];
- len = usbd_ep_write_packet(usbd_dev, ep, p, max_len);
- trans->csw_sent += len;
- } else if (sizeof(struct usb_msc_csw) == trans->csw_sent) {
- /* End of transaction */
- trans->lba_start = 0xffffffff;
- trans->block_count = 0;
- trans->current_block = 0;
- trans->cbw_cnt = 0;
- trans->bytes_to_read = 0;
- trans->bytes_to_write = 0;
- trans->byte_count = 0;
- trans->csw_sent = 0;
- trans->csw_valid = false;
- }
- }
+ usbd_mass_storage *ms;
+ struct usb_msc_trans *trans;
+ int len, max_len, left;
+ void *p;
+
+ ms = &_mass_storage;
+ trans = &ms->trans;
+
+// xprintf("msc_data_tx_cb: byte_count %d bytes_to_read %d bytes_to_write %d\n", trans->byte_count, trans->bytes_to_read, trans->bytes_to_write);
+
+ if (trans->byte_count < trans->bytes_to_write) {
+ if (0 < trans->block_count) {
+ if (0 == (0x1ff & trans->byte_count)) {
+ uint32_t lba;
+
+ lba = trans->lba_start + trans->current_block;
+ if (0 != (*ms->read_block)(lba, trans->msd_buf)) {
+ /* Error */
+ }
+ trans->current_block++;
+ }
+ }
+
+ left = trans->bytes_to_write - trans->byte_count;
+ max_len = MIN(ms->ep_out_size, left);
+ p = &trans->msd_buf[0x1ff & trans->byte_count];
+ len = usbd_ep_write_packet(usbd_dev, ep, p, max_len);
+ trans->byte_count += len;
+ } else {
+ if (0 < trans->block_count) {
+ if (trans->current_block == trans->block_count) {
+ trans->current_block = 0;
+ if (NULL != ms->unlock){
+ (*ms->unlock)();
+ }
+ }
+ }
+ if (false == trans->csw_valid) {
+ scsi_command(ms, trans, EVENT_NEED_STATUS);
+ trans->csw_valid = true;
+ }
+
+ left = sizeof(struct usb_msc_csw) - trans->csw_sent;
+ if (0 < left) {
+// xprintf("Sending CSW\n");
+ max_len = MIN(ms->ep_out_size, left);
+ p = &trans->csw.buf[trans->csw_sent];
+ len = usbd_ep_write_packet(usbd_dev, ep, p, max_len);
+ trans->csw_sent += len;
+ } else if (sizeof(struct usb_msc_csw) == trans->csw_sent) {
+ /* End of transaction */
+ trans->lba_start = 0xffffffff;
+ trans->block_count = 0;
+ trans->current_block = 0;
+ trans->cbw_cnt = 0;
+ trans->bytes_to_read = 0;
+ trans->bytes_to_write = 0;
+ trans->byte_count = 0;
+ trans->csw_sent = 0;
+ trans->csw_valid = false;
+ }
+ }
}
/** @brief Handle various control requests related to the msc storage
- * interface.
+ * interface.
*/
static int msc_control_request(usbd_device *usbd_dev,
- struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
- void (**complete)(usbd_device *usbd_dev, struct usb_setup_data *req))
+ struct usb_setup_data *req, uint8_t **buf, uint16_t *len,
+ void (**complete)(usbd_device *usbd_dev, struct usb_setup_data *req))
{
- (void)complete;
- (void)usbd_dev;
-
- switch (req->bRequest) {
- case USB_MSC_REQ_BULK_ONLY_RESET:
- /* Do any special reset code here. */
- return USBD_REQ_HANDLED;
- case USB_MSC_REQ_GET_MAX_LUN:
- /* Return the number of LUNs. We use 0. */
- *buf[0] = 0;
- *len = 1;
- return USBD_REQ_HANDLED;
- }
-
- return USBD_REQ_NOTSUPP;
+ (void)complete;
+ (void)usbd_dev;
+
+ switch (req->bRequest) {
+ case USB_MSC_REQ_BULK_ONLY_RESET:
+ /* Do any special reset code here. */
+ return USBD_REQ_HANDLED;
+ case USB_MSC_REQ_GET_MAX_LUN:
+ /* Return the number of LUNs. We use 0. */
+ *buf[0] = 0;
+ *len = 1;
+ return USBD_REQ_HANDLED;
+ }
+
+// https://medium.com/@ly.lee/stm32-blue-pill-usb-bootloader-how-i-fixed-the-usb-storage-serial-dfu-and-webusb-interfaces-36d7fe245b5c
+// https://github.com/lupyuen/bluepill-bootloader/blob/master/src/msc.c#L887
+ return USBD_REQ_NEXT_CALLBACK; // Previously USBD_REQ_NOTSUPP. Allow unknown requests to fall to next callback e.g. CDC.
}
/** @brief Setup the endpoints to be bulk & register the callbacks. */
static void msc_set_config(usbd_device *usbd_dev, uint16_t wValue)
{
- usbd_mass_storage *ms = &_mass_storage;
+ usbd_mass_storage *ms = &_mass_storage;
- (void)wValue;
+ (void)wValue;
- usbd_ep_setup(usbd_dev, ms->ep_in, USB_ENDPOINT_ATTR_BULK,
- ms->ep_in_size, msc_data_tx_cb);
- usbd_ep_setup(usbd_dev, ms->ep_out, USB_ENDPOINT_ATTR_BULK,
- ms->ep_out_size, msc_data_rx_cb);
+ usbd_ep_setup(usbd_dev, ms->ep_in, USB_ENDPOINT_ATTR_BULK,
+ ms->ep_in_size, msc_data_tx_cb);
+ usbd_ep_setup(usbd_dev, ms->ep_out, USB_ENDPOINT_ATTR_BULK,
+ ms->ep_out_size, msc_data_rx_cb);
- usbd_register_control_callback(
- usbd_dev,
- USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
- USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
- msc_control_request);
+ usbd_register_control_callback(
+ usbd_dev,
+ USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
+ USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT,
+ (usbd_control_callback) msc_control_request);
}
/** @addtogroup usb_msc */
@@ -789,54 +911,54 @@ static void msc_set_config(usbd_device *usbd_dev, uint16_t wValue)
@param[in] vendor_id The SCSI vendor ID to return. Maximum used length is 8.
@param[in] product_id The SCSI product ID to return. Maximum used length is 16.
@param[in] product_revision_level The SCSI product revision level to return.
- Maximum used length is 4.
+ Maximum used length is 4.
@param[in] block_count The number of 512-byte blocks available.
@param[in] read_block The function called when the host requests to read a LBA
- block. Must _NOT_ be NULL.
+ block. Must _NOT_ be NULL.
@param[in] write_block The function called when the host requests to write a
- LBA block. Must _NOT_ be NULL.
+ LBA block. Must _NOT_ be NULL.
@return Pointer to the usbd_mass_storage struct.
*/
usbd_mass_storage *usb_msc_init(usbd_device *usbd_dev,
- uint8_t ep_in, uint8_t ep_in_size,
- uint8_t ep_out, uint8_t ep_out_size,
- const char *vendor_id,
- const char *product_id,
- const char *product_revision_level,
- const uint32_t block_count,
- int (*read_block)(uint32_t lba, uint8_t *copy_to),
- int (*write_block)(uint32_t lba, const uint8_t *copy_from))
+ uint8_t ep_in, uint8_t ep_in_size,
+ uint8_t ep_out, uint8_t ep_out_size,
+ const char *vendor_id,
+ const char *product_id,
+ const char *product_revision_level,
+ const uint32_t block_count,
+ int (*read_block)(uint32_t lba, uint8_t *copy_to),
+ int (*write_block)(uint32_t lba, const uint8_t *copy_from))
{
- _mass_storage.usbd_dev = usbd_dev;
- _mass_storage.ep_in = ep_in;
- _mass_storage.ep_in_size = ep_in_size;
- _mass_storage.ep_out = ep_out;
- _mass_storage.ep_out_size = ep_out_size;
- _mass_storage.vendor_id = vendor_id;
- _mass_storage.product_id = product_id;
- _mass_storage.product_revision_level = product_revision_level;
- _mass_storage.block_count = block_count - 1;
- _mass_storage.read_block = read_block;
- _mass_storage.write_block = write_block;
- _mass_storage.lock = NULL;
- _mass_storage.unlock = NULL;
-
- _mass_storage.trans.lba_start = 0xffffffff;
- _mass_storage.trans.block_count = 0;
- _mass_storage.trans.current_block = 0;
- _mass_storage.trans.cbw_cnt = 0;
- _mass_storage.trans.bytes_to_read = 0;
- _mass_storage.trans.bytes_to_write = 0;
- _mass_storage.trans.byte_count = 0;
- _mass_storage.trans.csw_valid = false;
- _mass_storage.trans.csw_sent = 0;
-
- set_sbc_status_good(&_mass_storage);
-
- usbd_register_set_config_callback(usbd_dev, msc_set_config);
-
- return &_mass_storage;
+ _mass_storage.usbd_dev = usbd_dev;
+ _mass_storage.ep_in = ep_in;
+ _mass_storage.ep_in_size = ep_in_size;
+ _mass_storage.ep_out = ep_out;
+ _mass_storage.ep_out_size = ep_out_size;
+ _mass_storage.vendor_id = vendor_id;
+ _mass_storage.product_id = product_id;
+ _mass_storage.product_revision_level = product_revision_level;
+ _mass_storage.block_count = block_count - 1;
+ _mass_storage.read_block = read_block;
+ _mass_storage.write_block = write_block;
+ _mass_storage.lock = NULL;
+ _mass_storage.unlock = NULL;
+
+ _mass_storage.trans.lba_start = 0xffffffff;
+ _mass_storage.trans.block_count = 0;
+ _mass_storage.trans.current_block = 0;
+ _mass_storage.trans.cbw_cnt = 0;
+ _mass_storage.trans.bytes_to_read = 0;
+ _mass_storage.trans.bytes_to_write = 0;
+ _mass_storage.trans.byte_count = 0;
+ _mass_storage.trans.csw_valid = false;
+ _mass_storage.trans.csw_sent = 0;
+
+ set_sbc_status_good(&_mass_storage);
+
+ usbd_register_set_config_callback(usbd_dev, msc_set_config);
+
+ return &_mass_storage;
}
/** @} */
diff --git a/code/vextremeLogo.asm b/code/vextremeLogo.asm
deleted file mode 100644
index 4de32f7..0000000
--- a/code/vextremeLogo.asm
+++ /dev/null
@@ -1,123 +0,0 @@
-vextreme_logo
- fcb $01, +$28, -$63 ; sync and move to y, x
- fcb $00, +$00, -$63 ; additional sync move to y, x
- fcb $00, +$00, -$63 ; additional sync move to y, x
- fcb $00, +$00, -$62 ; additional sync move to y, x
- fcb $FF, -$50, +$48 ; draw, y, x
- fcb $FF, +$50, +$43 ; draw, y, x
- fcb $FF, +$00, -$1A ; draw, y, x
- fcb $FF, -$30, -$2E ; draw, y, x
- fcb $FF, +$08, -$08 ; draw, y, x
- fcb $FF, +$28, +$28 ; draw, y, x
- fcb $FF, +$00, -$63 ; draw, y, x
- fcb $01, +$28, -$63 ; sync and move to y, x
- fcb $00, +$00, -$63 ; additional sync move to y, x
- fcb $00, +$00, -$35 ; additional sync move to y, x
- fcb $FF, -$50, +$00 ; draw, y, x
- fcb $FF, +$00, +$56 ; draw, y, x
- fcb $FF, +$17, -$13 ; draw, y, x
- fcb $FF, +$00, -$28 ; draw, y, x
- fcb $FF, +$05, +$00 ; draw, y, x
- fcb $FF, +$00, +$12 ; draw, y, x
- fcb $FF, +$14, +$12 ; draw, y, x
- fcb $FF, +$00, -$24 ; draw, y, x
- fcb $FF, +$04, +$00 ; draw, y, x
- fcb $FF, +$00, +$24 ; draw, y, x
- fcb $FF, +$1C, +$17 ; draw, y, x
- fcb $FF, +$00, -$56 ; draw, y, x
- fcb $01, +$28, -$63 ; sync and move to y, x
- fcb $00, +$00, -$3E ; additional sync move to y, x
- fcb $FF, -$28, +$24 ; draw, y, x
- fcb $FF, -$28, -$24 ; draw, y, x
- fcb $FF, +$00, +$1B ; draw, y, x
- fcb $FF, +$1C, +$1B ; draw, y, x
- fcb $FF, -$05, +$09 ; draw, y, x
- fcb $FF, -$17, -$16 ; draw, y, x
- fcb $FF, +$00, +$3A ; draw, y, x
- fcb $FF, +$28, -$1F ; draw, y, x
- fcb $FF, +$28, +$1F ; draw, y, x
- fcb $FF, +$00, -$1B ; draw, y, x
- fcb $FF, -$20, -$1B ; draw, y, x
- fcb $FF, +$04, -$04 ; draw, y, x
- fcb $FF, +$1C, +$12 ; draw, y, x
- fcb $FF, +$00, -$3B ; draw, y, x
- fcb $01, +$28, -$39 ; sync and move to y, x
- fcb $FF, -$28, +$00 ; draw, y, x
- fcb $FF, +$0C, +$1B ; draw, y, x
- fcb $FF, -$34, +$00 ; draw, y, x
- fcb $FF, +$00, +$1E ; draw, y, x
- fcb $FF, +$34, +$00 ; draw, y, x
- fcb $FF, -$0C, +$15 ; draw, y, x
- fcb $FF, +$28, +$00 ; draw, y, x
- fcb $FF, +$00, -$4E ; draw, y, x
- fcb $01, -$28, +$1A ; sync and move to y, x
- fcb $FF, +$00, +$28 ; draw, y, x
- fcb $FF, +$1C, -$16 ; draw, y, x
- fcb $FF, +$00, +$09 ; draw, y, x
- fcb $FF, -$1C, +$16 ; draw, y, x
- fcb $FF, +$00, +$20 ; draw, y, x
- fcb $FF, +$13, -$0E ; draw, y, x
- fcb $FF, +$0D, +$0E ; draw, y, x
- fcb $FF, +$1D, +$00 ; draw, y, x
- fcb $FF, +$13, -$0E ; draw, y, x
- fcb $FF, +$00, -$43 ; draw, y, x
- fcb $FF, -$50, +$00 ; draw, y, x
- fcb $01, +$08, +$54 ; sync and move to y, x
- fcb $FF, -$08, +$00 ; draw, y, x
- fcb $FF, -$03, -$04 ; draw, y, x
- fcb $FF, +$00, -$08 ; draw, y, x
- fcb $FF, +$03, -$06 ; draw, y, x
- fcb $FF, +$08, +$00 ; draw, y, x
- fcb $FF, +$04, +$06 ; draw, y, x
- fcb $FF, +$00, +$08 ; draw, y, x
- fcb $FF, -$04, +$04 ; draw, y, x
- fcb $01, +$28, +$63 ; sync and move to y, x
- fcb $00, +$00, +$11 ; additional sync move to y, x
- fcb $FF, -$50, +$00 ; draw, y, x
- fcb $FF, +$00, +$55 ; draw, y, x
- fcb $FF, +$00, +$00 ; draw, y, x
- fcb $FF, +$17, -$11 ; draw, y, x
- fcb $FF, +$00, -$28 ; draw, y, x
- fcb $FF, +$05, +$00 ; draw, y, x
- fcb $FF, +$00, +$11 ; draw, y, x
- fcb $FF, +$14, +$0D ; draw, y, x
- fcb $FF, +$00, -$1E ; draw, y, x
- fcb $FF, +$04, +$00 ; draw, y, x
- fcb $FF, +$00, +$23 ; draw, y, x
- fcb $FF, +$1C, +$16 ; draw, y, x
- fcb $FF, +$00, -$55 ; draw, y, x
- fcb $01, +$28, +$63 ; sync and move to y, x
- fcb $00, +$00, +$63 ; additional sync move to y, x
- fcb $00, +$00, +$12 ; additional sync move to y, x
- fcb $FF, -$50, -$0F ; draw, y, x
- fcb $FF, +$00, +$1B ; draw, y, x
- fcb $FF, +$20, +$05 ; draw, y, x
- fcb $FF, +$00, +$09 ; draw, y, x
- fcb $FF, -$20, -$05 ; draw, y, x
- fcb $FF, +$00, +$1B ; draw, y, x
- fcb $FF, +$20, +$05 ; draw, y, x
- fcb $FF, +$00, +$09 ; draw, y, x
- fcb $FF, -$20, -$05 ; draw, y, x
- fcb $FF, +$00, +$20 ; draw, y, x
- fcb $FF, +$50, -$0E ; draw, y, x
- fcb $FF, +$00, -$0D ; draw, y, x
- fcb $FF, -$1C, -$16 ; draw, y, x
- fcb $FF, +$1C, -$1C ; draw, y, x
- fcb $FF, +$00, -$0C ; draw, y, x
- fcb $01, +$28, +$63 ; sync and move to y, x
- fcb $00, +$00, +$63 ; additional sync move to y, x
- fcb $00, +$00, +$63 ; additional sync move to y, x
- fcb $00, +$00, +$0C ; additional sync move to y, x
- fcb $FF, -$50, +$00 ; draw, y, x
- fcb $FF, +$00, +$51 ; draw, y, x
- fcb $FF, +$17, -$12 ; draw, y, x
- fcb $FF, +$00, -$28 ; draw, y, x
- fcb $FF, +$05, +$00 ; draw, y, x
- fcb $FF, +$00, +$12 ; draw, y, x
- fcb $FF, +$14, +$0D ; draw, y, x
- fcb $FF, +$00, -$1F ; draw, y, x
- fcb $FF, +$04, +$00 ; draw, y, x
- fcb $FF, +$00, +$24 ; draw, y, x
- fcb $FF, +$1C, +$16 ; draw, y, x
- fcb $FF, +$00, -$51 ; draw, y, x
- fcb $02 ; endmarker
diff --git a/docs/datasheets/stm32f411 reference manual.pdf b/docs/datasheets/stm32f411 reference manual.pdf
new file mode 100644
index 0000000..480d757
Binary files /dev/null and b/docs/datasheets/stm32f411 reference manual.pdf differ
diff --git a/docs/developer-mode.md b/docs/developer-mode.md
new file mode 100644
index 0000000..b300707
--- /dev/null
+++ b/docs/developer-mode.md
@@ -0,0 +1,30 @@
+# Developer Mode (DM)
+
+## Overview
+
+This mode allows a single game to be flashed to VEXTREME via USB and immediately run. To update the game, simply press reset, let the VEXTREME drive re-mount and you are ready to flash again. Usually this connection time is impercievable since you reset VEXTREME, and then have to go press compile & flash. This feature is already supported by Vide, as implemented for VecFever, but you may implement support easily in any development toolchain. For this feature to work in Vide, you must copy [this README.TXT](https://www.dropbox.com/s/i8ykyks87n8ihxq/README.TXT?dl=1) to the root of your VEXTREME.
+
+# Entering Developer Mode
+
+- Press button 2 & 3 together at any time during the VEXTREME Menu to enter DM, or hold them down when starting the Menu. NOTE: they must be pressed at the same time, not 2 then 3 or vice versa.
+- The Developer Mode wait screen will prompt you to "PLUG IN USB" if you have USB unplugged.
+- After plugging it in, it will show "LOAD CART.BIN" prompting you to put a cart.bin file in the root of the drive e.g. VEXTREME/cart.bin.
+- If the Vectrex is off, and USB plugged in, the USB drive will mount as usual. You may add a cart.bin however you wish, and then if you Eject the drive it will detect the cart.bin and load it. As soon as you turn your Vectrex on, it will boot the cart.bin ROM. You may press reset to skip the cold boot sequence and warm reset the cart.bin (v0.3 HW only, or v0.2 with mods)
+- DM is considered "active" when a cart.bin is present.
+- If you reset the Vectrex while DM is active, it will automatically return to DM mode without needing to press buttons 2 & 3. This is the preferred way to re-enter DM after running cart.bin, to get ready to flash another cart.bin.
+
+# Developer Mode Menu
+
+- The splash screen for DM will show one of 4 messages:
+ - "PLUG IN USB" (pretty obvious you need to plug in USB)
+ - "UNKNOWN USB" (you should never see this, but it's there for debugging weird issues)
+ - "LOAD CART.BIN" (USB is plugged in and we are waiting for a cart.bin and the eject sequence. Currently you must eject, not use safely remove hardware. Windows users, go to File Explorer and Eject the drive. TODO: add a timeout for Windows users in the future that detects safe removal process)
+ - "1: EXIT 4: RUN" (this just helps you remember what button to press to EXIT developer mode and delete cart.bin or RUN the cart.bin if present. If no cart.bin present it will just return to the VEXTREME Menu. USB does not need to be connected to EXIT or RUN)
+- The splash screen was specifically designed to be a bit less bright, and randomly move the text LEFT/RIGHT/UP/DOWN for even screen wear. Do not calibrate your screen brightness in this mode.
+- If you accidentally press RESET after connecting USB, you might see Mine Storm load. Just press RESET again and you should recover.
+
+# Exiting Developer Mode
+
+- DM can be "disabled" by removing cart.bin manually, or through the DM menu button 1: Exit.
+- Pressing 4: RUN from the DM menu does not disable it.
+- Powering off the Vectrex with cart.bin present does not disable Developer Mode.
\ No newline at end of file
diff --git a/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - leds.jpg b/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - leds.jpg
new file mode 100644
index 0000000..421593e
Binary files /dev/null and b/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - leds.jpg differ
diff --git a/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - top.jpg b/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - top.jpg
index 421593e..2879c9a 100644
Binary files a/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - top.jpg and b/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - top.jpg differ
diff --git a/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - top2.jpg b/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - top2.jpg
deleted file mode 100644
index 2879c9a..0000000
Binary files a/hall-of-fame/05 - Filippo Maggioni - v0.2/v0.2 - top2.jpg and /dev/null differ
diff --git a/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - bot.jpg b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - bot.jpg
new file mode 100644
index 0000000..3ff27f2
Binary files /dev/null and b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - bot.jpg differ
diff --git a/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - leds.jpg b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - leds.jpg
new file mode 100644
index 0000000..f739149
Binary files /dev/null and b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - leds.jpg differ
diff --git a/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - menu.jpg b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - menu.jpg
new file mode 100644
index 0000000..01e004e
Binary files /dev/null and b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - menu.jpg differ
diff --git a/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - top.jpg b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - top.jpg
new file mode 100644
index 0000000..a5273eb
Binary files /dev/null and b/hall-of-fame/06 - Barry Shilmover - v0.2/v0.2 - top.jpg differ
diff --git a/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - cart.jpg b/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - cart.jpg
new file mode 100644
index 0000000..7621a5c
Binary files /dev/null and b/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - cart.jpg differ
diff --git a/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - top and bot.jpg b/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - top and bot.jpg
new file mode 100644
index 0000000..5d2c4ad
Binary files /dev/null and b/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - top and bot.jpg differ
diff --git a/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - top.jpg b/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - top.jpg
new file mode 100644
index 0000000..e9e7eaa
Binary files /dev/null and b/hall-of-fame/07 - Heather Kent - v0.2/v0.2 - top.jpg differ
diff --git a/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - bot.jpg b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - bot.jpg
new file mode 100644
index 0000000..c2f4692
Binary files /dev/null and b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - bot.jpg differ
diff --git a/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - leds.jpg b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - leds.jpg
new file mode 100644
index 0000000..3e4bcca
Binary files /dev/null and b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - leds.jpg differ
diff --git a/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - menu.jpg b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - menu.jpg
new file mode 100644
index 0000000..93c4da4
Binary files /dev/null and b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - menu.jpg differ
diff --git a/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - top.jpg b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - top.jpg
new file mode 100644
index 0000000..e3d8e14
Binary files /dev/null and b/hall-of-fame/08 - Martin Lawes - v0.2/v0.2 - top.jpg differ
diff --git a/hall-of-fame/09 - Bill MacDonald/v0.2 - bot.png b/hall-of-fame/09 - Bill MacDonald/v0.2 - bot.png
new file mode 100644
index 0000000..ef1ecff
Binary files /dev/null and b/hall-of-fame/09 - Bill MacDonald/v0.2 - bot.png differ
diff --git a/hall-of-fame/09 - Bill MacDonald/v0.2 - menu.png b/hall-of-fame/09 - Bill MacDonald/v0.2 - menu.png
new file mode 100644
index 0000000..b9a2845
Binary files /dev/null and b/hall-of-fame/09 - Bill MacDonald/v0.2 - menu.png differ
diff --git a/hall-of-fame/09 - Bill MacDonald/v0.2 - top.png b/hall-of-fame/09 - Bill MacDonald/v0.2 - top.png
new file mode 100644
index 0000000..b51293a
Binary files /dev/null and b/hall-of-fame/09 - Bill MacDonald/v0.2 - top.png differ
diff --git a/hardware/libs/veccart-rescue.dcm b/hardware/libs/veccart-rescue.dcm
new file mode 100644
index 0000000..5f3ed79
--- /dev/null
+++ b/hardware/libs/veccart-rescue.dcm
@@ -0,0 +1,3 @@
+EESchema-DOCLIB Version 2.0
+#
+#End Doc Library
diff --git a/hardware/libs/veccart.pretty/LED-APA102-2020_6_REV_2.kicad_mod b/hardware/libs/veccart.pretty/LED-APA102-2020_6_REV_2.kicad_mod
new file mode 100644
index 0000000..15065ed
--- /dev/null
+++ b/hardware/libs/veccart.pretty/LED-APA102-2020_6_REV_2.kicad_mod
@@ -0,0 +1,48 @@
+(module LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8)
+ (descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
+ (tags "LED RGB SPI")
+ (attr smd)
+ (fp_text reference REF** (at 0.1 2.3) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value LED-APA102-2020_6_REV_2 (at 0 -2) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 0.5 -1.4) (end 1.5 -1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 0.5 -1.58) (end 0.5 -1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.5 -1.58) (end 0.5 -1.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.5 -1.4) (end -0.5 -1.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 0.5 1.58) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.5 1.58) (end 0.5 1.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
+ (fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
+ (pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask))
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask))
+ (pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask))
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask))
+ (pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask))
+ (pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask))
+ (model ${KISYS3DMOD}/LED_SMD.3dshapes/LED-APA102-2020.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ (model "${KIPRJMOD}/libs/APA102 2020 LED.step"
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 0.9))
+ (rotate (xyz 90 180 180))
+ )
+)
diff --git a/hardware/libs/veccart.pretty/Mounting_Hole_D3.7mm.kicad_mod b/hardware/libs/veccart.pretty/Mounting_Hole_D3.7mm.kicad_mod
new file mode 100644
index 0000000..b826fa2
--- /dev/null
+++ b/hardware/libs/veccart.pretty/Mounting_Hole_D3.7mm.kicad_mod
@@ -0,0 +1,14 @@
+(module Mounting_Hole_D3.7mm locked (layer F.Cu) (tedit 5EE1C40B)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference hole3 (at 0 -3.048 -180) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D3.7mm (at 0 3 -180) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (pad "" np_thru_hole circle (at 0 0) (size 3.7 3.7) (drill 3.7) (layers *.Cu *.Mask))
+)
diff --git a/hardware/libs/veccart.pretty/Mounting_Hole_D4.2mm.kicad_mod b/hardware/libs/veccart.pretty/Mounting_Hole_D4.2mm.kicad_mod
new file mode 100644
index 0000000..326d6bc
--- /dev/null
+++ b/hardware/libs/veccart.pretty/Mounting_Hole_D4.2mm.kicad_mod
@@ -0,0 +1,14 @@
+(module Mounting_Hole_D4.2mm (layer F.Cu) (tedit 5EE1C450)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference REF** (at 0 2.9) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D4.2mm (at 0 -2.8) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (pad "" np_thru_hole circle (at 0 0) (size 4.2 4.2) (drill 4.2) (layers *.Cu *.Mask))
+)
diff --git a/hardware/libs/veccart.pretty/Mounting_Hole_D5.2mm.kicad_mod b/hardware/libs/veccart.pretty/Mounting_Hole_D5.2mm.kicad_mod
new file mode 100644
index 0000000..cd453cc
--- /dev/null
+++ b/hardware/libs/veccart.pretty/Mounting_Hole_D5.2mm.kicad_mod
@@ -0,0 +1,14 @@
+(module Mounting_Hole_D5.2mm locked (layer F.Cu) (tedit 5EE1C438)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference hole2 (at 0 -3.048) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D5.2mm (at 0 3) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (pad "" np_thru_hole circle (at 0 0) (size 5.2 5.2) (drill 5.2) (layers *.Cu *.Mask))
+)
diff --git a/hardware/libs/veccart.pretty/vectrex-edge-connector-thinner-no-soldermask.kicad_mod b/hardware/libs/veccart.pretty/vectrex-edge-connector-thinner-no-soldermask.kicad_mod
new file mode 100644
index 0000000..e6d5f1e
--- /dev/null
+++ b/hardware/libs/veccart.pretty/vectrex-edge-connector-thinner-no-soldermask.kicad_mod
@@ -0,0 +1,52 @@
+(module vectrex-edge-connector-thinner-no-soldermask (layer F.Cu) (tedit 5EE1C275)
+ (fp_text reference CON1 (at -17.526 5.588 180) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value vectrex-edge-connector (at -13.186 -6.426 180) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user 2 (at -21.59 5.588 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user 36 (at 21.59 5.588 180) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_poly (pts (xy 24 3.4) (xy -24 3.4) (xy -24 -5.6) (xy 24 -5.6)) (layer F.Mask) (width 0.1))
+ (fp_poly (pts (xy 24 3.4) (xy -24 3.4) (xy -24 -5.6) (xy 24 -5.6)) (layer B.Mask) (width 0.1))
+ (pad 1 smd oval (at -21.59 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 2 smd oval (at -21.59 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 4 smd oval (at -19.05 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 6 smd oval (at -16.51 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 8 smd oval (at -13.97 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 10 smd oval (at -11.43 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 12 smd oval (at -8.89 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 14 smd oval (at -6.35 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 16 smd oval (at -3.81 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 18 smd oval (at -1.27 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 20 smd oval (at 1.27 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 22 smd oval (at 3.81 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 24 smd oval (at 6.35 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 26 smd oval (at 8.89 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 28 smd oval (at 11.43 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 30 smd oval (at 13.97 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 32 smd oval (at 16.51 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 34 smd oval (at 19.05 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 36 smd oval (at 21.59 0) (size 1.52 8.8) (layers F.Cu F.Mask))
+ (pad 3 smd oval (at -19.05 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 5 smd oval (at -16.51 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 7 smd oval (at -13.97 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 9 smd oval (at -11.43 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 11 smd oval (at -8.89 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 13 smd oval (at -6.35 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 15 smd oval (at -3.81 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 17 smd oval (at -1.27 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 19 smd oval (at 1.27 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 21 smd oval (at 3.81 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 23 smd oval (at 6.35 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 25 smd oval (at 8.89 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 27 smd oval (at 11.43 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 29 smd oval (at 13.97 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 31 smd oval (at 16.51 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 33 smd oval (at 19.05 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+ (pad 35 smd oval (at 21.59 0) (size 1.52 8.8) (layers B.Cu B.Mask))
+)
diff --git a/hardware/veccart-cache.lib b/hardware/veccart-cache.lib
index 479dc45..3ac5e9b 100644
--- a/hardware/veccart-cache.lib
+++ b/hardware/veccart-cache.lib
@@ -212,6 +212,9 @@ F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
SolderJumper*Open*
+ Jumper*
+ TestPoint*2Pads*
+ TestPoint*Bridge*
$ENDFPLIST
DRAW
C -40 0 20 0 1 0 N
@@ -234,9 +237,9 @@ $FPLIST
LED_THT:*
$ENDFPLIST
DRAW
-P 2 0 1 8 -50 -50 -50 50 N
+P 2 0 1 10 -50 -50 -50 50 N
P 2 0 1 0 -50 0 50 0 N
-P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N
+P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N
P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N
P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N
X K 1 -150 0 100 R 50 50 1 1 P
@@ -268,14 +271,14 @@ F0 "D" 0 100 50 H V C CNN
F1 "Diode_MBR0520" 0 -100 50 H V C CNN
F2 "Diode_SMD:D_SOD-123" 0 -175 50 H I C CNN
F3 "" 0 0 50 H I C CNN
-ALIAS MBR0520LT MBR0520 MBR0530 MBR0540 MBR0550 MBR0560 MBR0570 MBR0580 BAT42W-V BAT43W-V PMEG6010CEH
+ALIAS MBR0520LT MBR0520 MBR0530 MBR0540 MBR0550 MBR0560 MBR0570 MBR0580 BAT42W-V BAT43W-V
$FPLIST
D*SOD?123*
$ENDFPLIST
DRAW
P 2 0 1 0 50 0 -50 0 N
-P 4 0 1 8 50 50 50 -50 -50 0 50 50 N
-P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 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
@@ -503,11 +506,11 @@ X GND 1 0 0 0 D 50 50 1 1 W N
ENDDRAW
ENDDEF
#
-# veccart-rescue_+5V
+# veccart-rescue_+5V-veccart-rescue
#
-DEF veccart-rescue_+5V #PWR 0 0 Y Y 1 F P
+DEF veccart-rescue_+5V-veccart-rescue #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
-F1 "veccart-rescue_+5V" 0 140 50 H V C CNN
+F1 "veccart-rescue_+5V-veccart-rescue" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
@@ -518,11 +521,11 @@ X +5V 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
-# veccart-rescue_GND
+# veccart-rescue_GND-veccart-rescue
#
-DEF veccart-rescue_GND #PWR 0 0 Y Y 1 F P
+DEF veccart-rescue_GND-veccart-rescue #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN
-F1 "veccart-rescue_GND" 0 -150 50 H V C CNN
+F1 "veccart-rescue_GND-veccart-rescue" 0 -150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
@@ -531,11 +534,11 @@ X GND 1 0 0 0 D 50 50 1 1 W N
ENDDRAW
ENDDEF
#
-# veccart-rescue_vectrex-edge-connector
+# veccart-rescue_vectrex-edge-connector-veccart-rescue
#
-DEF veccart-rescue_vectrex-edge-connector CON 0 40 Y Y 1 F N
+DEF veccart-rescue_vectrex-edge-connector-veccart-rescue CON 0 40 Y Y 1 F N
F0 "CON" 400 -1600 60 H V C CNN
-F1 "veccart-rescue_vectrex-edge-connector" -800 1950 60 H V C CNN
+F1 "veccart-rescue_vectrex-edge-connector-veccart-rescue" -800 1950 60 H V C CNN
F2 "" 0 700 60 H I C CNN
F3 "" 0 700 60 H I C CNN
DRAW
diff --git a/hardware/veccart.kicad_pcb b/hardware/veccart.kicad_pcb
index f99a83b..6e009f7 100644
--- a/hardware/veccart.kicad_pcb
+++ b/hardware/veccart.kicad_pcb
@@ -1,8 +1,8 @@
-(kicad_pcb (version 20171130) (host pcbnew "(5.1.4-0)")
+(kicad_pcb (version 20171130) (host pcbnew "(5.1.6-0)")
(general
(thickness 1.6)
- (drawings 26)
+ (drawings 32)
(tracks 1237)
(zones 0)
(modules 49)
@@ -20,10 +20,10 @@
(0 F.Cu signal)
(31 B.Cu signal)
(33 F.Adhes user hide)
- (34 B.Paste user)
+ (34 B.Paste user hide)
(35 F.Paste user hide)
- (36 B.SilkS user)
- (37 F.SilkS user)
+ (36 B.SilkS user hide)
+ (37 F.SilkS user hide)
(38 B.Mask user)
(39 F.Mask user)
(40 Dwgs.User user hide)
@@ -322,291 +322,7 @@
(uvia_drill 0.3302)
)
- (module veccart:USB_C_Receptacle_HRO_TYPE-C-31-M-12 (layer B.Cu) (tedit 5DE45F70) (tstamp 5DE58C58)
- (at 141.7 72.8)
- (descr "USB Type-C receptacle for USB 2.0 and PD, http://www.krhro.com/uploads/soft/180320/1-1P320120243.pdf")
- (tags "usb usb-c 2.0 pd")
- (path /5D00696D)
- (attr smd)
- (fp_text reference J1 (at -5.8 3.7) (layer B.SilkS)
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_text value USB_C_Receptacle_USB2.0 (at 0 -5.1) (layer B.Fab)
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_line (start -4.47 3.65) (end 4.47 3.65) (layer B.Fab) (width 0.1))
- (fp_line (start -4.47 3.65) (end -4.47 -3.65) (layer B.Fab) (width 0.1))
- (fp_line (start -4.47 -3.65) (end 4.47 -3.65) (layer B.Fab) (width 0.1))
- (fp_line (start 4.47 3.65) (end 4.47 -3.65) (layer B.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer B.Fab)
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_line (start -5.32 5.27) (end 5.32 5.27) (layer B.CrtYd) (width 0.05))
- (fp_line (start -5.32 -4.15) (end 5.32 -4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start -5.32 5.27) (end -5.32 -4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 5.32 5.27) (end 5.32 -4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 4.7 1.9) (end 4.7 -0.1) (layer B.SilkS) (width 0.12))
- (fp_line (start -4.7 1.9) (end -4.7 -0.1) (layer B.SilkS) (width 0.12))
- (pad B1 smd rect (at 3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 2 GND))
- (pad A9 smd rect (at 2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 16 USB-IN))
- (pad B9 smd rect (at -2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 16 USB-IN))
- (pad B12 smd rect (at -3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 2 GND))
- (pad A1 smd rect (at -3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 2 GND))
- (pad A4 smd rect (at -2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 16 USB-IN))
- (pad B4 smd rect (at 2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 16 USB-IN))
- (pad A12 smd rect (at 3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
- (net 2 GND))
- (pad B8 smd rect (at -1.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 76 "Net-(J1-PadB8)"))
- (pad A5 smd rect (at -1.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 64 "Net-(J1-PadA5)"))
- (pad B7 smd rect (at -0.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 63 "Net-(J1-PadA7)"))
- (pad A7 smd rect (at 0.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 63 "Net-(J1-PadA7)"))
- (pad B6 smd rect (at 0.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 62 "Net-(J1-PadA6)"))
- (pad A8 smd rect (at 1.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 75 "Net-(J1-PadA8)"))
- (pad B5 smd rect (at 1.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 65 "Net-(J1-PadB5)"))
- (pad A6 smd rect (at -0.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
- (net 62 "Net-(J1-PadA6)"))
- (pad S1 thru_hole oval (at 4.32 3.13) (size 1 2.1) (drill oval 0.6 1.7) (layers *.Cu *.Mask)
- (net 2 GND))
- (pad S1 thru_hole oval (at -4.32 3.13) (size 1 2.1) (drill oval 0.6 1.7) (layers *.Cu *.Mask)
- (net 2 GND))
- (pad "" np_thru_hole circle (at -2.89 2.6) (size 0.65 0.65) (drill 0.65) (layers *.Cu *.Mask))
- (pad S1 thru_hole oval (at -4.32 -1.05) (size 1 1.6) (drill oval 0.6 1.2) (layers *.Cu *.Mask)
- (net 2 GND))
- (pad "" np_thru_hole circle (at 2.89 2.6) (size 0.65 0.65) (drill 0.65) (layers *.Cu *.Mask))
- (pad S1 thru_hole oval (at 4.32 -1.05) (size 1 1.6) (drill oval 0.6 1.2) (layers *.Cu *.Mask)
- (net 2 GND))
- (model ${KISYS3DMOD}/Connector_USB.3dshapes/USB_C_Receptacle_HRO_TYPE-C-31-M-12.wrl
- (at (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- (model "${KIPRJMOD}/libs/HRO TYPE-C-31-M-12.step"
- (offset (xyz -4.47 -3.66 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 90 180 180))
- )
- )
-
- (module veccart:vectrex-edge-connector-thinner (layer F.Cu) (tedit 5DE444BE) (tstamp 5DE58B37)
- (at 141.688408 130.599981 180)
- (path /59F1631A)
- (fp_text reference CON1 (at -17.526 5.588 180) (layer F.SilkS) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text value vectrex-edge-connector (at -13.186 -6.426 180) (layer F.Fab) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text user 2 (at -21.59 5.588 180) (layer F.SilkS)
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text user 36 (at 21.59 5.588 180) (layer F.SilkS)
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (pad 1 smd oval (at -21.59 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 3 V-HALT))
- (pad 2 smd oval (at -21.59 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 45 C_VCC))
- (pad 4 smd oval (at -19.05 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 45 C_VCC))
- (pad 6 smd oval (at -16.51 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 30 C_A8))
- (pad 8 smd oval (at -13.97 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 31 C_A9))
- (pad 10 smd oval (at -11.43 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 32 C_A11))
- (pad 12 smd oval (at -8.89 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 4 V-OE))
- (pad 14 smd oval (at -6.35 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 33 C_A10))
- (pad 16 smd oval (at -3.81 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 5 V-CE))
- (pad 18 smd oval (at -1.27 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 8 C_D7))
- (pad 20 smd oval (at 1.27 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 9 C_D6))
- (pad 22 smd oval (at 3.81 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 10 C_D5))
- (pad 24 smd oval (at 6.35 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 11 C_D4))
- (pad 26 smd oval (at 8.89 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 12 C_D3))
- (pad 28 smd oval (at 11.43 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 2 GND))
- (pad 30 smd oval (at 13.97 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 6 V-RW))
- (pad 32 smd oval (at 16.51 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 56 V-CART))
- (pad 34 smd oval (at 19.05 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 57 V-NMI))
- (pad 36 smd oval (at 21.59 0 180) (size 1.52 8.89) (layers F.Cu F.Mask)
- (net 58 V-IRQ))
- (pad 3 smd oval (at -19.05 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 34 C_A7))
- (pad 5 smd oval (at -16.51 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 35 C_A6))
- (pad 7 smd oval (at -13.97 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 36 C_A5))
- (pad 9 smd oval (at -11.43 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 37 C_A4))
- (pad 11 smd oval (at -8.89 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 38 C_A3))
- (pad 13 smd oval (at -6.35 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 39 C_A2))
- (pad 15 smd oval (at -3.81 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 40 C_A1))
- (pad 17 smd oval (at -1.27 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 41 C_A0))
- (pad 19 smd oval (at 1.27 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 13 C_D0))
- (pad 21 smd oval (at 3.81 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 14 C_D1))
- (pad 23 smd oval (at 6.35 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 15 C_D2))
- (pad 25 smd oval (at 8.89 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 2 GND))
- (pad 27 smd oval (at 11.43 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 2 GND))
- (pad 29 smd oval (at 13.97 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 42 C_A12))
- (pad 31 smd oval (at 16.51 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 43 C_A13))
- (pad 33 smd oval (at 19.05 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 44 C_A14))
- (pad 35 smd oval (at 21.59 0 180) (size 1.52 8.89) (layers B.Cu B.Mask)
- (net 7 V-PB6))
- )
-
- (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5DE58BB4)
- (at 150.9 74.9 270)
- (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
- (tags "capacitor handsolder")
- (path /5DEB0479)
- (attr smd)
- (fp_text reference C13 (at 2.6 -0.6) (layer B.SilkS)
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_text value 47u (at 0 -1.65 270) (layer B.Fab)
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_text user %R (at 0 0 270) (layer B.Fab)
- (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
- )
- (pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
- (net 1 +5V))
- (pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
- (net 2 GND))
- (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl
- (at (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (module veccart:Mounting_Hole_D3.6mm locked (layer F.Cu) (tedit 5DE41E35) (tstamp 5DE58C23)
- (at 121.688396 117.598872 270)
- (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
- (tags "solder Pin_ press fit")
- (fp_text reference hole3 (at 0 -3.048 90) (layer F.SilkS) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text value Mounting_Hole_D3.6mm (at 0 3 90) (layer F.Fab) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
- (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
- (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
- (pad "" np_thru_hole circle (at 0 0 270) (size 3.6 3.6) (drill 3.6) (layers *.Cu *.Mask))
- )
-
- (module veccart:Mounting_Hole_D3.6mm locked (layer F.Cu) (tedit 5DE41E35) (tstamp 5DE58B93)
- (at 161.688397 117.598872 270)
- (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
- (tags "solder Pin_ press fit")
- (fp_text reference hole1 (at 0 -3.048 270) (layer F.SilkS) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text value Mounting_Hole_D3.6mm (at 0 3 270) (layer F.Fab) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
- (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
- (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
- (pad "" np_thru_hole circle (at 0 0 270) (size 3.6 3.6) (drill 3.6) (layers *.Cu *.Mask))
- )
-
- (module veccart:Mounting_Hole_D5.1mm locked (layer F.Cu) (tedit 5DE41E60) (tstamp 5DE58F11)
- (at 141.688396 117.598872 270)
- (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
- (tags "solder Pin_ press fit")
- (fp_text reference hole2 (at 0 -3.048 270) (layer F.SilkS) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text value Mounting_Hole_D5.1mm (at 0 3 270) (layer F.Fab) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
- (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
- (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
- (pad "" np_thru_hole circle (at 0 0 270) (size 5.1 5.1) (drill 5.1) (layers *.Cu *.Mask))
- )
-
- (module veccart:Mounting_Hole_D4.1mm locked (layer F.Cu) (tedit 5DE41DEA) (tstamp 5DE58C0E)
- (at 153.688396 87.598872 270)
- (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
- (tags "solder Pin_ press fit")
- (fp_text reference hole4 (at 0 -3.048 270) (layer F.SilkS) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text value Mounting_Hole_D4.1mm (at 0 3 270) (layer F.Fab) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
- (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
- (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
- (pad "" np_thru_hole circle (at 0 0 270) (size 4.1 4.1) (drill 4.1) (layers *.Cu *.Mask))
- )
-
- (module veccart:Mounting_Hole_D4.1mm locked (layer F.Cu) (tedit 5DE41DEA) (tstamp 5DE58BF3)
- (at 129.688396 87.598872 270)
- (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
- (tags "solder Pin_ press fit")
- (fp_text reference hole5 (at 0 -3.048 270) (layer F.SilkS) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_text value Mounting_Hole_D4.1mm (at 0 3 270) (layer F.Fab) hide
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
- (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
- (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
- (pad "" np_thru_hole circle (at 0 0 270) (size 4.1 4.1) (drill 4.1) (layers *.Cu *.Mask))
- )
-
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58D71)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58D71)
(at 162.69 91 270)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -618,6 +334,12 @@
(fp_text value APA102-2020 (at 0 -2 90) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9 90) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -630,27 +352,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0 90) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9 90) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 80 SDAT))
- (pad 5 smd rect (at 0.85 0 270) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 79 SCLK))
(pad 3 smd rect (at -0.85 0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 78 "Net-(D4-Pad3)"))
- (pad 2 smd rect (at -0.85 0 270) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 77 "Net-(D4-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -666,7 +382,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58CC3)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58CC3)
(at 162.69 85 270)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -678,6 +394,12 @@
(fp_text value APA102-2020 (at 0 -2 90) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9 90) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -690,27 +412,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0 90) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9 90) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 78 "Net-(D4-Pad3)"))
- (pad 5 smd rect (at 0.85 0 270) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 77 "Net-(D4-Pad2)"))
(pad 3 smd rect (at -0.85 0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 81 "Net-(D5-Pad3)"))
- (pad 2 smd rect (at -0.85 0 270) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 82 "Net-(D5-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -726,7 +442,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58D1A)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58D1A)
(at 162.69 79 270)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -738,6 +454,12 @@
(fp_text value APA102-2020 (at 0 -2 90) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9 90) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0 90) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -750,27 +472,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0 90) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9 90) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 81 "Net-(D5-Pad3)"))
- (pad 5 smd rect (at 0.85 0 270) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 82 "Net-(D5-Pad2)"))
(pad 3 smd rect (at -0.85 0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 83 "Net-(D6-Pad3)"))
- (pad 2 smd rect (at -0.85 0 270) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 84 "Net-(D6-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9 270) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -786,7 +502,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58DC8)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58DC8)
(at 162.7 73.01)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -798,6 +514,12 @@
(fp_text value APA102-2020 (at 0 -2) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -810,27 +532,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 83 "Net-(D6-Pad3)"))
- (pad 5 smd rect (at 0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 84 "Net-(D6-Pad2)"))
(pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 86 "Net-(D7-Pad3)"))
- (pad 2 smd rect (at -0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 85 "Net-(D7-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -846,7 +562,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58ECD)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58ECD)
(at 156.7 73.01)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -858,6 +574,12 @@
(fp_text value APA102-2020 (at 0 -2) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -870,27 +592,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 86 "Net-(D7-Pad3)"))
- (pad 5 smd rect (at 0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 85 "Net-(D7-Pad2)"))
(pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 87 SDAT_CONT))
- (pad 2 smd rect (at -0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 88 SCLK_CONT))
(pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -906,7 +622,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58E1F)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58E1F)
(at 150.7 73.01)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -918,6 +634,12 @@
(fp_text value APA102-2020 (at 0 -2) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -930,27 +652,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 87 SDAT_CONT))
- (pad 5 smd rect (at 0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 88 SCLK_CONT))
(pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 90 "Net-(D10-Pad4)"))
- (pad 2 smd rect (at -0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 89 "Net-(D10-Pad5)"))
(pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -966,7 +682,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58E76)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58E76)
(at 141.7 73.01)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -978,6 +694,12 @@
(fp_text value APA102-2020 (at 0 -2) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -990,27 +712,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 90 "Net-(D10-Pad4)"))
- (pad 5 smd rect (at 0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 89 "Net-(D10-Pad5)"))
(pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 91 "Net-(D10-Pad3)"))
- (pad 2 smd rect (at -0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 92 "Net-(D10-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -1026,7 +742,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58A7D)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58A7D)
(at 132.7 73.01)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -1038,6 +754,12 @@
(fp_text value APA102-2020 (at 0 -2) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -1050,27 +772,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 91 "Net-(D10-Pad3)"))
- (pad 5 smd rect (at 0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 92 "Net-(D10-Pad2)"))
(pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 94 "Net-(D11-Pad3)"))
- (pad 2 smd rect (at -0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 93 "Net-(D11-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -1086,7 +802,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58A26)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58A26)
(at 126.7 73.01)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -1098,6 +814,12 @@
(fp_text value APA102-2020 (at 0 -2) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -1110,27 +832,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 94 "Net-(D11-Pad3)"))
- (pad 5 smd rect (at 0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 93 "Net-(D11-Pad2)"))
(pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 95 "Net-(D12-Pad3)"))
- (pad 2 smd rect (at -0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 96 "Net-(D12-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -1146,7 +862,7 @@
)
)
- (module veccart:LED-APA102-2020_6 (layer F.Cu) (tedit 5DE43098) (tstamp 5DE58AD4)
+ (module veccart:LED-APA102-2020_6_REV_2 (layer F.Cu) (tedit 5EE2F5B8) (tstamp 5DE58AD4)
(at 120.7 73.01)
(descr http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf)
(tags "LED RGB SPI")
@@ -1158,6 +874,12 @@
(fp_text value APA102-2020 (at 0 -2) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
+ (effects (font (size 0.6 0.6) (thickness 0.1)))
+ )
+ (fp_text user %R (at 0 0) (layer F.Fab)
+ (effects (font (size 0.3 0.3) (thickness 0.07)))
+ )
(fp_line (start 1.5 1.4) (end 0.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -0.5 1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -0.5 -1.4) (layer F.CrtYd) (width 0.05))
@@ -1170,27 +892,21 @@
(fp_line (start -0.5 1.4) (end -0.5 1.58) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.5 -1.4) (end -1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -0.5 1) (layer F.Fab) (width 0.1))
- (fp_text user %R (at 0 0) (layer F.Fab)
- (effects (font (size 0.3 0.3) (thickness 0.07)))
- )
(fp_line (start -1.2 1.4) (end -0.5 1.4) (layer F.SilkS) (width 0.12))
(fp_line (start 1.5 -1.4) (end 1.5 1.4) (layer F.CrtYd) (width 0.05))
(fp_line (start -1 0.5) (end -1 -1) (layer F.Fab) (width 0.1))
(fp_line (start 1 1) (end -0.5 1) (layer F.Fab) (width 0.1))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.1))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.1))
- (fp_text user 1 (at -1.7 -0.9) (layer F.SilkS)
- (effects (font (size 0.6 0.6) (thickness 0.1)))
- )
(pad 6 smd rect (at 0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 2 GND))
(pad 4 smd rect (at 0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 95 "Net-(D12-Pad3)"))
- (pad 5 smd rect (at 0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 5 smd rect (at 0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 96 "Net-(D12-Pad2)"))
(pad 3 smd rect (at -0.85 0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 98 "Net-(D13-Pad3)"))
- (pad 2 smd rect (at -0.85 0) (size 0.8 0.3) (layers F.Cu F.Paste F.Mask)
+ (pad 2 smd rect (at -0.85 0) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 97 "Net-(D13-Pad2)"))
(pad 1 smd rect (at -0.85 -0.9) (size 0.8 0.5) (layers F.Cu F.Paste F.Mask)
(net 1 +5V))
@@ -1206,742 +922,835 @@
)
)
- (module Symbol:KiCad-Logo2_5mm_SilkScreen (layer B.Cu) (tedit 0) (tstamp 5DE5895D)
- (at 128.7 79.9 180)
- (descr "KiCad Logo")
- (tags "Logo KiCad")
- (attr virtual)
- (fp_text reference REF** (at 0 5.08) (layer B.SilkS) hide
+ (module veccart:Mounting_Hole_D5.2mm locked (layer F.Cu) (tedit 5EE1C438) (tstamp 5DE58F11)
+ (at 141.7 117.6 270)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference hole2 (at 0 -3.048 270) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D5.2mm (at 0 3 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (pad "" np_thru_hole circle (at 0 0 270) (size 5.2 5.2) (drill 5.2) (layers *.Cu *.Mask))
+ )
+
+ (module veccart:Mounting_Hole_D4.2mm locked (layer F.Cu) (tedit 5EE1C450) (tstamp 5DE58C0E)
+ (at 153.7 87.6 270)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference hole4 (at 0 -3.048 270) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D4.2mm (at 0 3 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (pad "" np_thru_hole circle (at 0 0 270) (size 4.2 4.2) (drill 4.2) (layers *.Cu *.Mask))
+ )
+
+ (module veccart:Mounting_Hole_D4.2mm locked (layer F.Cu) (tedit 5EE1C450) (tstamp 5DE58BF3)
+ (at 129.7 87.6 270)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference hole5 (at 0 -3.048 270) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D4.2mm (at 0 3 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (pad "" np_thru_hole circle (at 0 0 270) (size 4.2 4.2) (drill 4.2) (layers *.Cu *.Mask))
+ )
+
+ (module veccart:Mounting_Hole_D3.7mm locked (layer F.Cu) (tedit 5EE1C40B) (tstamp 5DE58C23)
+ (at 121.7 117.6 270)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference hole3 (at 0 -3.048 90) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D3.7mm (at 0 3 90) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (pad "" np_thru_hole circle (at 0 0 270) (size 3.7 3.7) (drill 3.7) (layers *.Cu *.Mask))
+ )
+
+ (module veccart:Mounting_Hole_D3.7mm locked (layer F.Cu) (tedit 5EE1C40B) (tstamp 5DE58B93)
+ (at 161.7 117.6 270)
+ (descr "solder Pin_ diameter 1.0mm, hole diameter 1.0mm (press fit), length 10.0mm")
+ (tags "solder Pin_ press fit")
+ (fp_text reference hole1 (at 0 -3.048 270) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value Mounting_Hole_D3.7mm (at 0 3 270) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_circle (center 0 0) (end 1 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 0.5 0) (layer F.Fab) (width 0.12))
+ (fp_circle (center 0 0) (end 1.5 0) (layer F.CrtYd) (width 0.05))
+ (pad "" np_thru_hole circle (at 0 0 270) (size 3.7 3.7) (drill 3.7) (layers *.Cu *.Mask))
+ )
+
+ (module veccart:vectrex-edge-connector-thinner-no-soldermask (layer F.Cu) (tedit 5EE1C275) (tstamp 5DE58B37)
+ (at 141.7 131.2 180)
+ (path /59F1631A)
+ (fp_text reference CON1 (at -17.526 5.588) (layer F.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text value vectrex-edge-connector (at -13.186 -6.426) (layer F.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_poly (pts (xy 24 3.4) (xy -24 3.4) (xy -24 -5.6) (xy 24 -5.6)) (layer B.Mask) (width 0.1))
+ (fp_poly (pts (xy 24 3.4) (xy -24 3.4) (xy -24 -5.6) (xy 24 -5.6)) (layer F.Mask) (width 0.1))
+ (fp_text user 36 (at 21.59 5.588) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (fp_text user 2 (at -21.59 5.588) (layer F.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (pad 35 smd oval (at 21.59 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 7 V-PB6))
+ (pad 33 smd oval (at 19.05 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 44 C_A14))
+ (pad 31 smd oval (at 16.51 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 43 C_A13))
+ (pad 29 smd oval (at 13.97 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 42 C_A12))
+ (pad 27 smd oval (at 11.43 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 2 GND))
+ (pad 25 smd oval (at 8.89 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 2 GND))
+ (pad 23 smd oval (at 6.35 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 15 C_D2))
+ (pad 21 smd oval (at 3.81 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 14 C_D1))
+ (pad 19 smd oval (at 1.27 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 13 C_D0))
+ (pad 17 smd oval (at -1.27 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 41 C_A0))
+ (pad 15 smd oval (at -3.81 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 40 C_A1))
+ (pad 13 smd oval (at -6.35 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 39 C_A2))
+ (pad 11 smd oval (at -8.89 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 38 C_A3))
+ (pad 9 smd oval (at -11.43 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 37 C_A4))
+ (pad 7 smd oval (at -13.97 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 36 C_A5))
+ (pad 5 smd oval (at -16.51 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 35 C_A6))
+ (pad 3 smd oval (at -19.05 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 34 C_A7))
+ (pad 36 smd oval (at 21.59 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 58 V-IRQ))
+ (pad 34 smd oval (at 19.05 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 57 V-NMI))
+ (pad 32 smd oval (at 16.51 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 56 V-CART))
+ (pad 30 smd oval (at 13.97 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 6 V-RW))
+ (pad 28 smd oval (at 11.43 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 2 GND))
+ (pad 26 smd oval (at 8.89 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 12 C_D3))
+ (pad 24 smd oval (at 6.35 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 11 C_D4))
+ (pad 22 smd oval (at 3.81 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 10 C_D5))
+ (pad 20 smd oval (at 1.27 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 9 C_D6))
+ (pad 18 smd oval (at -1.27 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 8 C_D7))
+ (pad 16 smd oval (at -3.81 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 5 V-CE))
+ (pad 14 smd oval (at -6.35 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 33 C_A10))
+ (pad 12 smd oval (at -8.89 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 4 V-OE))
+ (pad 10 smd oval (at -11.43 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 32 C_A11))
+ (pad 8 smd oval (at -13.97 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 31 C_A9))
+ (pad 6 smd oval (at -16.51 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 30 C_A8))
+ (pad 4 smd oval (at -19.05 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 45 C_VCC))
+ (pad 2 smd oval (at -21.59 0 180) (size 1.52 8.8) (layers F.Cu F.Mask)
+ (net 45 C_VCC))
+ (pad 1 smd oval (at -21.59 0 180) (size 1.52 8.8) (layers B.Cu B.Mask)
+ (net 3 V-HALT))
+ )
+
+ (module veccart:USB_C_Receptacle_HRO_TYPE-C-31-M-12 (layer B.Cu) (tedit 5DE45F70) (tstamp 5DE58C58)
+ (at 141.7 72.8)
+ (descr "USB Type-C receptacle for USB 2.0 and PD, http://www.krhro.com/uploads/soft/180320/1-1P320120243.pdf")
+ (tags "usb usb-c 2.0 pd")
+ (path /5D00696D)
+ (attr smd)
+ (fp_text reference J1 (at -5.8 3.7) (layer B.SilkS)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_text value KiCad-Logo2_5mm_SilkScreen (at 0 -5.08) (layer B.Fab) hide
+ (fp_text value USB_C_Receptacle_USB2.0 (at 0 -5.1) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_poly (pts (xy -2.9464 2.510946) (xy -2.935535 2.397007) (xy -2.903918 2.289384) (xy -2.853015 2.190385)
- (xy -2.784293 2.102316) (xy -2.699219 2.027484) (xy -2.602232 1.969616) (xy -2.495964 1.929995)
- (xy -2.38895 1.911427) (xy -2.2833 1.912566) (xy -2.181125 1.93207) (xy -2.084534 1.968594)
- (xy -1.995638 2.020795) (xy -1.916546 2.087327) (xy -1.849369 2.166848) (xy -1.796217 2.258013)
- (xy -1.759199 2.359477) (xy -1.740427 2.469898) (xy -1.738489 2.519794) (xy -1.738489 2.607733)
- (xy -1.68656 2.607733) (xy -1.650253 2.604889) (xy -1.623355 2.593089) (xy -1.596249 2.569351)
- (xy -1.557867 2.530969) (xy -1.557867 0.339398) (xy -1.557876 0.077261) (xy -1.557908 -0.163241)
- (xy -1.557972 -0.383048) (xy -1.558076 -0.583101) (xy -1.558227 -0.764344) (xy -1.558434 -0.927716)
- (xy -1.558706 -1.07416) (xy -1.55905 -1.204617) (xy -1.559474 -1.320029) (xy -1.559987 -1.421338)
- (xy -1.560597 -1.509484) (xy -1.561312 -1.58541) (xy -1.56214 -1.650057) (xy -1.563089 -1.704367)
- (xy -1.564167 -1.74928) (xy -1.565383 -1.78574) (xy -1.566745 -1.814687) (xy -1.568261 -1.837063)
- (xy -1.569938 -1.853809) (xy -1.571786 -1.865868) (xy -1.573813 -1.87418) (xy -1.576025 -1.879687)
- (xy -1.577108 -1.881537) (xy -1.581271 -1.888549) (xy -1.584805 -1.894996) (xy -1.588635 -1.9009)
- (xy -1.593682 -1.906286) (xy -1.600871 -1.911178) (xy -1.611123 -1.915598) (xy -1.625364 -1.919572)
- (xy -1.644514 -1.923121) (xy -1.669499 -1.92627) (xy -1.70124 -1.929042) (xy -1.740662 -1.931461)
- (xy -1.788686 -1.933551) (xy -1.846237 -1.935335) (xy -1.914237 -1.936837) (xy -1.99361 -1.93808)
- (xy -2.085279 -1.939089) (xy -2.190166 -1.939885) (xy -2.309196 -1.940494) (xy -2.44329 -1.940939)
- (xy -2.593373 -1.941243) (xy -2.760367 -1.94143) (xy -2.945196 -1.941524) (xy -3.148783 -1.941548)
- (xy -3.37205 -1.941525) (xy -3.615922 -1.94148) (xy -3.881321 -1.941437) (xy -3.919704 -1.941432)
- (xy -4.186682 -1.941389) (xy -4.432002 -1.941318) (xy -4.656583 -1.941213) (xy -4.861345 -1.941066)
- (xy -5.047206 -1.940869) (xy -5.215088 -1.940616) (xy -5.365908 -1.9403) (xy -5.500587 -1.939913)
- (xy -5.620044 -1.939447) (xy -5.725199 -1.938897) (xy -5.816971 -1.938253) (xy -5.896279 -1.937511)
- (xy -5.964043 -1.936661) (xy -6.021182 -1.935697) (xy -6.068617 -1.934611) (xy -6.107266 -1.933397)
- (xy -6.138049 -1.932047) (xy -6.161885 -1.930555) (xy -6.179694 -1.928911) (xy -6.192395 -1.927111)
- (xy -6.200908 -1.925145) (xy -6.205266 -1.923477) (xy -6.213728 -1.919906) (xy -6.221497 -1.91727)
- (xy -6.228602 -1.914634) (xy -6.235073 -1.911062) (xy -6.240939 -1.905621) (xy -6.246229 -1.897375)
- (xy -6.250974 -1.88539) (xy -6.255202 -1.868731) (xy -6.258943 -1.846463) (xy -6.262227 -1.817652)
- (xy -6.265083 -1.781363) (xy -6.26754 -1.736661) (xy -6.269629 -1.682611) (xy -6.271378 -1.618279)
- (xy -6.272817 -1.54273) (xy -6.273976 -1.45503) (xy -6.274883 -1.354243) (xy -6.275569 -1.239434)
- (xy -6.276063 -1.10967) (xy -6.276395 -0.964015) (xy -6.276593 -0.801535) (xy -6.276687 -0.621295)
- (xy -6.276708 -0.42236) (xy -6.276685 -0.203796) (xy -6.276646 0.035332) (xy -6.276622 0.29596)
- (xy -6.276622 0.338111) (xy -6.276636 0.601008) (xy -6.276661 0.842268) (xy -6.276671 1.062835)
- (xy -6.276642 1.263648) (xy -6.276548 1.445651) (xy -6.276362 1.609784) (xy -6.276059 1.756989)
- (xy -6.275614 1.888208) (xy -6.275034 1.998133) (xy -5.972197 1.998133) (xy -5.932407 1.940289)
- (xy -5.921236 1.924521) (xy -5.911166 1.910559) (xy -5.902138 1.897216) (xy -5.894097 1.883307)
- (xy -5.886986 1.867644) (xy -5.880747 1.849042) (xy -5.875325 1.826314) (xy -5.870662 1.798273)
- (xy -5.866701 1.763733) (xy -5.863385 1.721508) (xy -5.860659 1.670411) (xy -5.858464 1.609256)
- (xy -5.856745 1.536856) (xy -5.855444 1.452025) (xy -5.854505 1.353578) (xy -5.85387 1.240326)
- (xy -5.853484 1.111084) (xy -5.853288 0.964666) (xy -5.853227 0.799884) (xy -5.853243 0.615553)
- (xy -5.85328 0.410487) (xy -5.853289 0.287867) (xy -5.853265 0.070918) (xy -5.853231 -0.124642)
- (xy -5.853243 -0.299999) (xy -5.853358 -0.456341) (xy -5.85363 -0.594857) (xy -5.854118 -0.716734)
- (xy -5.854876 -0.82316) (xy -5.855962 -0.915322) (xy -5.857431 -0.994409) (xy -5.85934 -1.061608)
- (xy -5.861744 -1.118107) (xy -5.864701 -1.165093) (xy -5.868266 -1.203755) (xy -5.872495 -1.23528)
- (xy -5.877446 -1.260855) (xy -5.883173 -1.28167) (xy -5.889733 -1.298911) (xy -5.897183 -1.313765)
- (xy -5.905579 -1.327422) (xy -5.914976 -1.341069) (xy -5.925432 -1.355893) (xy -5.931523 -1.364783)
- (xy -5.970296 -1.4224) (xy -5.438732 -1.4224) (xy -5.315483 -1.422365) (xy -5.212987 -1.422215)
- (xy -5.12942 -1.421878) (xy -5.062956 -1.421286) (xy -5.011771 -1.420367) (xy -4.974041 -1.419051)
- (xy -4.94794 -1.417269) (xy -4.931644 -1.414951) (xy -4.923328 -1.412026) (xy -4.921168 -1.408424)
- (xy -4.923339 -1.404075) (xy -4.924535 -1.402645) (xy -4.949685 -1.365573) (xy -4.975583 -1.312772)
- (xy -4.999192 -1.25077) (xy -5.007461 -1.224357) (xy -5.012078 -1.206416) (xy -5.015979 -1.185355)
- (xy -5.019248 -1.159089) (xy -5.021966 -1.125532) (xy -5.024215 -1.082599) (xy -5.026077 -1.028204)
- (xy -5.027636 -0.960262) (xy -5.028972 -0.876688) (xy -5.030169 -0.775395) (xy -5.031308 -0.6543)
- (xy -5.031685 -0.6096) (xy -5.032702 -0.484449) (xy -5.03346 -0.380082) (xy -5.033903 -0.294707)
- (xy -5.03397 -0.226533) (xy -5.033605 -0.173765) (xy -5.032748 -0.134614) (xy -5.031341 -0.107285)
- (xy -5.029325 -0.089986) (xy -5.026643 -0.080926) (xy -5.023236 -0.078312) (xy -5.019044 -0.080351)
- (xy -5.014571 -0.084667) (xy -5.004216 -0.097602) (xy -4.982158 -0.126676) (xy -4.949957 -0.169759)
- (xy -4.909174 -0.224718) (xy -4.86137 -0.289423) (xy -4.808105 -0.361742) (xy -4.75094 -0.439544)
- (xy -4.691437 -0.520698) (xy -4.631155 -0.603072) (xy -4.571655 -0.684536) (xy -4.514498 -0.762957)
- (xy -4.461245 -0.836204) (xy -4.413457 -0.902147) (xy -4.372693 -0.958654) (xy -4.340516 -1.003593)
- (xy -4.318485 -1.034834) (xy -4.313917 -1.041466) (xy -4.290996 -1.078369) (xy -4.264188 -1.126359)
- (xy -4.238789 -1.175897) (xy -4.235568 -1.182577) (xy -4.21389 -1.230772) (xy -4.201304 -1.268334)
- (xy -4.195574 -1.30416) (xy -4.194456 -1.3462) (xy -4.19509 -1.4224) (xy -3.040651 -1.4224)
- (xy -3.131815 -1.328669) (xy -3.178612 -1.278775) (xy -3.228899 -1.222295) (xy -3.274944 -1.168026)
- (xy -3.295369 -1.142673) (xy -3.325807 -1.103128) (xy -3.365862 -1.049916) (xy -3.414361 -0.984667)
- (xy -3.470135 -0.909011) (xy -3.532011 -0.824577) (xy -3.598819 -0.732994) (xy -3.669387 -0.635892)
- (xy -3.742545 -0.534901) (xy -3.817121 -0.43165) (xy -3.891944 -0.327768) (xy -3.965843 -0.224885)
- (xy -4.037646 -0.124631) (xy -4.106184 -0.028636) (xy -4.170284 0.061473) (xy -4.228775 0.144064)
- (xy -4.280486 0.217508) (xy -4.324247 0.280176) (xy -4.358885 0.330439) (xy -4.38323 0.366666)
- (xy -4.396111 0.387229) (xy -4.397869 0.391332) (xy -4.38991 0.402658) (xy -4.369115 0.429838)
- (xy -4.336847 0.471171) (xy -4.29447 0.524956) (xy -4.243347 0.589494) (xy -4.184841 0.663082)
- (xy -4.120314 0.744022) (xy -4.051131 0.830612) (xy -3.978653 0.921152) (xy -3.904246 1.01394)
- (xy -3.844517 1.088298) (xy -2.833511 1.088298) (xy -2.827602 1.075341) (xy -2.813272 1.053092)
- (xy -2.812225 1.051609) (xy -2.793438 1.021456) (xy -2.773791 0.984625) (xy -2.769892 0.976489)
- (xy -2.766356 0.96806) (xy -2.76323 0.957941) (xy -2.760486 0.94474) (xy -2.758092 0.927062)
- (xy -2.756019 0.903516) (xy -2.754235 0.872707) (xy -2.752712 0.833243) (xy -2.751419 0.783731)
- (xy -2.750326 0.722777) (xy -2.749403 0.648989) (xy -2.748619 0.560972) (xy -2.747945 0.457335)
- (xy -2.74735 0.336684) (xy -2.746805 0.197626) (xy -2.746279 0.038768) (xy -2.745745 -0.140089)
- (xy -2.745206 -0.325207) (xy -2.744772 -0.489145) (xy -2.744509 -0.633303) (xy -2.744484 -0.759079)
- (xy -2.744765 -0.867871) (xy -2.745419 -0.961077) (xy -2.746514 -1.040097) (xy -2.748118 -1.106328)
- (xy -2.750297 -1.16117) (xy -2.753119 -1.206021) (xy -2.756651 -1.242278) (xy -2.760961 -1.271341)
- (xy -2.766117 -1.294609) (xy -2.772185 -1.313479) (xy -2.779233 -1.329351) (xy -2.787329 -1.343622)
- (xy -2.79654 -1.357691) (xy -2.80504 -1.370158) (xy -2.822176 -1.396452) (xy -2.832322 -1.414037)
- (xy -2.833511 -1.417257) (xy -2.822604 -1.418334) (xy -2.791411 -1.419335) (xy -2.742223 -1.420235)
- (xy -2.677333 -1.42101) (xy -2.59903 -1.421637) (xy -2.509607 -1.422091) (xy -2.411356 -1.422349)
- (xy -2.342445 -1.4224) (xy -2.237452 -1.42218) (xy -2.14061 -1.421548) (xy -2.054107 -1.420549)
- (xy -1.980132 -1.419227) (xy -1.920874 -1.417626) (xy -1.87852 -1.415791) (xy -1.85526 -1.413765)
- (xy -1.851378 -1.412493) (xy -1.859076 -1.397591) (xy -1.867074 -1.38956) (xy -1.880246 -1.372434)
- (xy -1.897485 -1.342183) (xy -1.909407 -1.317622) (xy -1.936045 -1.258711) (xy -1.93912 -0.081845)
- (xy -1.942195 1.095022) (xy -2.387853 1.095022) (xy -2.48567 1.094858) (xy -2.576064 1.094389)
- (xy -2.65663 1.093653) (xy -2.724962 1.092684) (xy -2.778656 1.09152) (xy -2.815305 1.090197)
- (xy -2.832504 1.088751) (xy -2.833511 1.088298) (xy -3.844517 1.088298) (xy -3.82927 1.107278)
- (xy -3.75509 1.199463) (xy -3.683069 1.288796) (xy -3.614569 1.373576) (xy -3.550955 1.452102)
- (xy -3.493588 1.522674) (xy -3.443833 1.583591) (xy -3.403052 1.633153) (xy -3.385888 1.653822)
- (xy -3.299596 1.754484) (xy -3.222997 1.837741) (xy -3.154183 1.905562) (xy -3.091248 1.959911)
- (xy -3.081867 1.967278) (xy -3.042356 1.997883) (xy -4.174116 1.998133) (xy -4.168827 1.950156)
- (xy -4.17213 1.892812) (xy -4.193661 1.824537) (xy -4.233635 1.744788) (xy -4.278943 1.672505)
- (xy -4.295161 1.64986) (xy -4.323214 1.612304) (xy -4.36143 1.561979) (xy -4.408137 1.501027)
- (xy -4.461661 1.431589) (xy -4.520331 1.355806) (xy -4.582475 1.27582) (xy -4.646421 1.193772)
- (xy -4.710495 1.111804) (xy -4.773027 1.032057) (xy -4.832343 0.956673) (xy -4.886771 0.887793)
- (xy -4.934639 0.827558) (xy -4.974275 0.778111) (xy -5.004006 0.741592) (xy -5.022161 0.720142)
- (xy -5.02522 0.716844) (xy -5.028079 0.724851) (xy -5.030293 0.755145) (xy -5.031857 0.807444)
- (xy -5.032767 0.881469) (xy -5.03302 0.976937) (xy -5.032613 1.093566) (xy -5.031704 1.213555)
- (xy -5.030382 1.345667) (xy -5.028857 1.457406) (xy -5.026881 1.550975) (xy -5.024206 1.628581)
- (xy -5.020582 1.692426) (xy -5.015761 1.744717) (xy -5.009494 1.787656) (xy -5.001532 1.823449)
- (xy -4.991627 1.8543) (xy -4.979531 1.882414) (xy -4.964993 1.909995) (xy -4.950311 1.935034)
- (xy -4.912314 1.998133) (xy -5.972197 1.998133) (xy -6.275034 1.998133) (xy -6.275001 2.004383)
- (xy -6.274195 2.106456) (xy -6.27317 2.195367) (xy -6.2719 2.272059) (xy -6.27036 2.337473)
- (xy -6.268524 2.392551) (xy -6.266367 2.438235) (xy -6.263863 2.475466) (xy -6.260987 2.505187)
- (xy -6.257713 2.528338) (xy -6.254015 2.545861) (xy -6.249869 2.558699) (xy -6.245247 2.567792)
- (xy -6.240126 2.574082) (xy -6.234478 2.578512) (xy -6.228279 2.582022) (xy -6.221504 2.585555)
- (xy -6.215508 2.589124) (xy -6.210275 2.5917) (xy -6.202099 2.594028) (xy -6.189886 2.596122)
- (xy -6.172541 2.597993) (xy -6.148969 2.599653) (xy -6.118077 2.601116) (xy -6.078768 2.602392)
- (xy -6.02995 2.603496) (xy -5.970527 2.604439) (xy -5.899404 2.605233) (xy -5.815488 2.605891)
- (xy -5.717683 2.606425) (xy -5.604894 2.606847) (xy -5.476029 2.607171) (xy -5.329991 2.607408)
- (xy -5.165686 2.60757) (xy -4.98202 2.60767) (xy -4.777897 2.60772) (xy -4.566753 2.607733)
- (xy -2.9464 2.607733) (xy -2.9464 2.510946)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 0.328429 2.050929) (xy 0.48857 2.029755) (xy 0.65251 1.989615) (xy 0.822313 1.930111)
- (xy 1.000043 1.850846) (xy 1.01131 1.845301) (xy 1.069005 1.817275) (xy 1.120552 1.793198)
- (xy 1.162191 1.774751) (xy 1.190162 1.763614) (xy 1.199733 1.761067) (xy 1.21895 1.756059)
- (xy 1.223561 1.751853) (xy 1.218458 1.74142) (xy 1.202418 1.715132) (xy 1.177288 1.675743)
- (xy 1.144914 1.626009) (xy 1.107143 1.568685) (xy 1.065822 1.506524) (xy 1.022798 1.442282)
- (xy 0.979917 1.378715) (xy 0.939026 1.318575) (xy 0.901971 1.26462) (xy 0.8706 1.219603)
- (xy 0.846759 1.186279) (xy 0.832294 1.167403) (xy 0.830309 1.165213) (xy 0.820191 1.169862)
- (xy 0.79785 1.187038) (xy 0.76728 1.21356) (xy 0.751536 1.228036) (xy 0.655047 1.303318)
- (xy 0.548336 1.358759) (xy 0.432832 1.393859) (xy 0.309962 1.40812) (xy 0.240561 1.406949)
- (xy 0.119423 1.389788) (xy 0.010205 1.353906) (xy -0.087418 1.299041) (xy -0.173772 1.22493)
- (xy -0.249185 1.131312) (xy -0.313982 1.017924) (xy -0.351399 0.931333) (xy -0.395252 0.795634)
- (xy -0.427572 0.64815) (xy -0.448443 0.492686) (xy -0.457949 0.333044) (xy -0.456173 0.173027)
- (xy -0.443197 0.016439) (xy -0.419106 -0.132918) (xy -0.383982 -0.27124) (xy -0.337908 -0.394724)
- (xy -0.321627 -0.428978) (xy -0.25338 -0.543064) (xy -0.172921 -0.639557) (xy -0.08143 -0.71767)
- (xy 0.019911 -0.776617) (xy 0.12992 -0.815612) (xy 0.247415 -0.833868) (xy 0.288883 -0.835211)
- (xy 0.410441 -0.82429) (xy 0.530878 -0.791474) (xy 0.648666 -0.737439) (xy 0.762277 -0.662865)
- (xy 0.853685 -0.584539) (xy 0.900215 -0.540008) (xy 1.081483 -0.837271) (xy 1.12658 -0.911433)
- (xy 1.167819 -0.979646) (xy 1.203735 -1.039459) (xy 1.232866 -1.08842) (xy 1.25375 -1.124079)
- (xy 1.264924 -1.143984) (xy 1.266375 -1.147079) (xy 1.258146 -1.156718) (xy 1.232567 -1.173999)
- (xy 1.192873 -1.197283) (xy 1.142297 -1.224934) (xy 1.084074 -1.255315) (xy 1.021437 -1.28679)
- (xy 0.957621 -1.317722) (xy 0.89586 -1.346473) (xy 0.839388 -1.371408) (xy 0.791438 -1.390889)
- (xy 0.767986 -1.399318) (xy 0.634221 -1.437133) (xy 0.496327 -1.462136) (xy 0.348622 -1.47514)
- (xy 0.221833 -1.477468) (xy 0.153878 -1.476373) (xy 0.088277 -1.474275) (xy 0.030847 -1.471434)
- (xy -0.012597 -1.468106) (xy -0.026702 -1.466422) (xy -0.165716 -1.437587) (xy -0.307243 -1.392468)
- (xy -0.444725 -1.33375) (xy -0.571606 -1.26412) (xy -0.649111 -1.211441) (xy -0.776519 -1.103239)
- (xy -0.894822 -0.976671) (xy -1.001828 -0.834866) (xy -1.095348 -0.680951) (xy -1.17319 -0.518053)
- (xy -1.217044 -0.400756) (xy -1.267292 -0.217128) (xy -1.300791 -0.022581) (xy -1.317551 0.178675)
- (xy -1.317584 0.382432) (xy -1.300899 0.584479) (xy -1.267507 0.780608) (xy -1.21742 0.966609)
- (xy -1.213603 0.978197) (xy -1.150719 1.14025) (xy -1.073972 1.288168) (xy -0.980758 1.426135)
- (xy -0.868473 1.558339) (xy -0.824608 1.603601) (xy -0.688466 1.727543) (xy -0.548509 1.830085)
- (xy -0.402589 1.912344) (xy -0.248558 1.975436) (xy -0.084268 2.020477) (xy 0.011289 2.037967)
- (xy 0.170023 2.053534) (xy 0.328429 2.050929)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 2.673574 1.133448) (xy 2.825492 1.113433) (xy 2.960756 1.079798) (xy 3.080239 1.032275)
- (xy 3.184815 0.970595) (xy 3.262424 0.907035) (xy 3.331265 0.832901) (xy 3.385006 0.753129)
- (xy 3.42791 0.660909) (xy 3.443384 0.617839) (xy 3.456244 0.578858) (xy 3.467446 0.542711)
- (xy 3.47712 0.507566) (xy 3.485396 0.47159) (xy 3.492403 0.43295) (xy 3.498272 0.389815)
- (xy 3.503131 0.340351) (xy 3.50711 0.282727) (xy 3.51034 0.215109) (xy 3.512949 0.135666)
- (xy 3.515067 0.042564) (xy 3.516824 -0.066027) (xy 3.518349 -0.191942) (xy 3.519772 -0.337012)
- (xy 3.521025 -0.479778) (xy 3.522351 -0.635968) (xy 3.523556 -0.771239) (xy 3.524766 -0.887246)
- (xy 3.526106 -0.985645) (xy 3.5277 -1.068093) (xy 3.529675 -1.136246) (xy 3.532156 -1.19176)
- (xy 3.535269 -1.236292) (xy 3.539138 -1.271498) (xy 3.543889 -1.299034) (xy 3.549648 -1.320556)
- (xy 3.556539 -1.337722) (xy 3.564689 -1.352186) (xy 3.574223 -1.365606) (xy 3.585266 -1.379638)
- (xy 3.589566 -1.385071) (xy 3.605386 -1.40791) (xy 3.612422 -1.423463) (xy 3.612444 -1.423922)
- (xy 3.601567 -1.426121) (xy 3.570582 -1.428147) (xy 3.521957 -1.429942) (xy 3.458163 -1.431451)
- (xy 3.381669 -1.432616) (xy 3.294944 -1.43338) (xy 3.200457 -1.433686) (xy 3.18955 -1.433689)
- (xy 2.766657 -1.433689) (xy 2.763395 -1.337622) (xy 2.760133 -1.241556) (xy 2.698044 -1.292543)
- (xy 2.600714 -1.360057) (xy 2.490813 -1.414749) (xy 2.404349 -1.444978) (xy 2.335278 -1.459666)
- (xy 2.251925 -1.469659) (xy 2.162159 -1.474646) (xy 2.073845 -1.474313) (xy 1.994851 -1.468351)
- (xy 1.958622 -1.462638) (xy 1.818603 -1.424776) (xy 1.692178 -1.369932) (xy 1.58026 -1.298924)
- (xy 1.483762 -1.212568) (xy 1.4036 -1.111679) (xy 1.340687 -0.997076) (xy 1.296312 -0.870984)
- (xy 1.283978 -0.814401) (xy 1.276368 -0.752202) (xy 1.272739 -0.677363) (xy 1.272245 -0.643467)
- (xy 1.27231 -0.640282) (xy 2.032248 -0.640282) (xy 2.041541 -0.715333) (xy 2.069728 -0.77916)
- (xy 2.118197 -0.834798) (xy 2.123254 -0.839211) (xy 2.171548 -0.874037) (xy 2.223257 -0.89662)
- (xy 2.283989 -0.90854) (xy 2.359352 -0.911383) (xy 2.377459 -0.910978) (xy 2.431278 -0.908325)
- (xy 2.471308 -0.902909) (xy 2.506324 -0.892745) (xy 2.545103 -0.87585) (xy 2.555745 -0.870672)
- (xy 2.616396 -0.834844) (xy 2.663215 -0.792212) (xy 2.675952 -0.776973) (xy 2.720622 -0.720462)
- (xy 2.720622 -0.524586) (xy 2.720086 -0.445939) (xy 2.718396 -0.387988) (xy 2.715428 -0.348875)
- (xy 2.711057 -0.326741) (xy 2.706972 -0.320274) (xy 2.691047 -0.317111) (xy 2.657264 -0.314488)
- (xy 2.61034 -0.312655) (xy 2.554993 -0.311857) (xy 2.546106 -0.311842) (xy 2.42533 -0.317096)
- (xy 2.32266 -0.333263) (xy 2.236106 -0.360961) (xy 2.163681 -0.400808) (xy 2.108751 -0.447758)
- (xy 2.064204 -0.505645) (xy 2.03948 -0.568693) (xy 2.032248 -0.640282) (xy 1.27231 -0.640282)
- (xy 1.274178 -0.549712) (xy 1.282522 -0.470812) (xy 1.298768 -0.39959) (xy 1.324405 -0.328864)
- (xy 1.348401 -0.276493) (xy 1.40702 -0.181196) (xy 1.485117 -0.09317) (xy 1.580315 -0.014017)
- (xy 1.690238 0.05466) (xy 1.81251 0.111259) (xy 1.944755 0.154179) (xy 2.009422 0.169118)
- (xy 2.145604 0.191223) (xy 2.294049 0.205806) (xy 2.445505 0.212187) (xy 2.572064 0.210555)
- (xy 2.73395 0.203776) (xy 2.72653 0.262755) (xy 2.707238 0.361908) (xy 2.676104 0.442628)
- (xy 2.632269 0.505534) (xy 2.574871 0.551244) (xy 2.503048 0.580378) (xy 2.415941 0.593553)
- (xy 2.312686 0.591389) (xy 2.274711 0.587388) (xy 2.13352 0.56222) (xy 1.996707 0.521186)
- (xy 1.902178 0.483185) (xy 1.857018 0.46381) (xy 1.818585 0.44824) (xy 1.792234 0.438595)
- (xy 1.784546 0.436548) (xy 1.774802 0.445626) (xy 1.758083 0.474595) (xy 1.734232 0.523783)
- (xy 1.703093 0.593516) (xy 1.664507 0.684121) (xy 1.65791 0.699911) (xy 1.627853 0.772228)
- (xy 1.600874 0.837575) (xy 1.578136 0.893094) (xy 1.560806 0.935928) (xy 1.550048 0.963219)
- (xy 1.546941 0.972058) (xy 1.55694 0.976813) (xy 1.583217 0.98209) (xy 1.611489 0.985769)
- (xy 1.641646 0.990526) (xy 1.689433 0.999972) (xy 1.750612 1.01318) (xy 1.820946 1.029224)
- (xy 1.896194 1.04718) (xy 1.924755 1.054203) (xy 2.029816 1.079791) (xy 2.11748 1.099853)
- (xy 2.192068 1.115031) (xy 2.257903 1.125965) (xy 2.319307 1.133296) (xy 2.380602 1.137665)
- (xy 2.44611 1.139713) (xy 2.504128 1.140111) (xy 2.673574 1.133448)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 6.186507 0.527755) (xy 6.186526 0.293338) (xy 6.186552 0.080397) (xy 6.186625 -0.112168)
- (xy 6.186782 -0.285459) (xy 6.187064 -0.440576) (xy 6.187509 -0.57862) (xy 6.188156 -0.700692)
- (xy 6.189045 -0.807894) (xy 6.190213 -0.901326) (xy 6.191701 -0.98209) (xy 6.193546 -1.051286)
- (xy 6.195789 -1.110015) (xy 6.198469 -1.159379) (xy 6.201623 -1.200478) (xy 6.205292 -1.234413)
- (xy 6.209513 -1.262286) (xy 6.214327 -1.285198) (xy 6.219773 -1.304249) (xy 6.225888 -1.32054)
- (xy 6.232712 -1.335173) (xy 6.240285 -1.349249) (xy 6.248645 -1.363868) (xy 6.253839 -1.372974)
- (xy 6.288104 -1.433689) (xy 5.429955 -1.433689) (xy 5.429955 -1.337733) (xy 5.429224 -1.29437)
- (xy 5.427272 -1.261205) (xy 5.424463 -1.243424) (xy 5.423221 -1.241778) (xy 5.411799 -1.248662)
- (xy 5.389084 -1.266505) (xy 5.366385 -1.285879) (xy 5.3118 -1.326614) (xy 5.242321 -1.367617)
- (xy 5.16527 -1.405123) (xy 5.087965 -1.435364) (xy 5.057113 -1.445012) (xy 4.988616 -1.459578)
- (xy 4.905764 -1.469539) (xy 4.816371 -1.474583) (xy 4.728248 -1.474396) (xy 4.649207 -1.468666)
- (xy 4.611511 -1.462858) (xy 4.473414 -1.424797) (xy 4.346113 -1.367073) (xy 4.230292 -1.290211)
- (xy 4.126637 -1.194739) (xy 4.035833 -1.081179) (xy 3.969031 -0.970381) (xy 3.914164 -0.853625)
- (xy 3.872163 -0.734276) (xy 3.842167 -0.608283) (xy 3.823311 -0.471594) (xy 3.814732 -0.320158)
- (xy 3.814006 -0.242711) (xy 3.8161 -0.185934) (xy 4.645217 -0.185934) (xy 4.645424 -0.279002)
- (xy 4.648337 -0.366692) (xy 4.654 -0.443772) (xy 4.662455 -0.505009) (xy 4.665038 -0.51735)
- (xy 4.69684 -0.624633) (xy 4.738498 -0.711658) (xy 4.790363 -0.778642) (xy 4.852781 -0.825805)
- (xy 4.9261 -0.853365) (xy 5.010669 -0.861541) (xy 5.106835 -0.850551) (xy 5.170311 -0.834829)
- (xy 5.219454 -0.816639) (xy 5.273583 -0.790791) (xy 5.314244 -0.767089) (xy 5.3848 -0.720721)
- (xy 5.3848 0.42947) (xy 5.317392 0.473038) (xy 5.238867 0.51396) (xy 5.154681 0.540611)
- (xy 5.069557 0.552535) (xy 4.988216 0.549278) (xy 4.91538 0.530385) (xy 4.883426 0.514816)
- (xy 4.825501 0.471819) (xy 4.776544 0.415047) (xy 4.73539 0.342425) (xy 4.700874 0.251879)
- (xy 4.671833 0.141334) (xy 4.670552 0.135467) (xy 4.660381 0.073212) (xy 4.652739 -0.004594)
- (xy 4.64767 -0.09272) (xy 4.645217 -0.185934) (xy 3.8161 -0.185934) (xy 3.821857 -0.029895)
- (xy 3.843802 0.165941) (xy 3.879786 0.344668) (xy 3.929759 0.506155) (xy 3.993668 0.650274)
- (xy 4.071462 0.776894) (xy 4.163089 0.885885) (xy 4.268497 0.977117) (xy 4.313662 1.008068)
- (xy 4.414611 1.064215) (xy 4.517901 1.103826) (xy 4.627989 1.127986) (xy 4.74933 1.137781)
- (xy 4.841836 1.136735) (xy 4.97149 1.125769) (xy 5.084084 1.103954) (xy 5.182875 1.070286)
- (xy 5.271121 1.023764) (xy 5.319986 0.989552) (xy 5.349353 0.967638) (xy 5.371043 0.952667)
- (xy 5.379253 0.948267) (xy 5.380868 0.959096) (xy 5.382159 0.989749) (xy 5.383138 1.037474)
- (xy 5.383817 1.099521) (xy 5.38421 1.173138) (xy 5.38433 1.255573) (xy 5.384188 1.344075)
- (xy 5.383797 1.435893) (xy 5.383171 1.528276) (xy 5.38232 1.618472) (xy 5.38126 1.703729)
- (xy 5.380001 1.781297) (xy 5.378556 1.848424) (xy 5.376938 1.902359) (xy 5.375161 1.94035)
- (xy 5.374669 1.947333) (xy 5.367092 2.017749) (xy 5.355531 2.072898) (xy 5.337792 2.120019)
- (xy 5.311682 2.166353) (xy 5.305415 2.175933) (xy 5.280983 2.212622) (xy 6.186311 2.212622)
- (xy 6.186507 0.527755)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -2.273043 2.973429) (xy -2.176768 2.949191) (xy -2.090184 2.906359) (xy -2.015373 2.846581)
- (xy -1.954418 2.771506) (xy -1.909399 2.68278) (xy -1.883136 2.58647) (xy -1.877286 2.489205)
- (xy -1.89214 2.395346) (xy -1.92584 2.307489) (xy -1.976528 2.22823) (xy -2.042345 2.160164)
- (xy -2.121434 2.105888) (xy -2.211934 2.067998) (xy -2.2632 2.055574) (xy -2.307698 2.048053)
- (xy -2.341999 2.045081) (xy -2.37496 2.046906) (xy -2.415434 2.053775) (xy -2.448531 2.06075)
- (xy -2.541947 2.092259) (xy -2.625619 2.143383) (xy -2.697665 2.212571) (xy -2.7562 2.298272)
- (xy -2.770148 2.325511) (xy -2.786586 2.361878) (xy -2.796894 2.392418) (xy -2.80246 2.42455)
- (xy -2.804669 2.465693) (xy -2.804948 2.511778) (xy -2.800861 2.596135) (xy -2.787446 2.665414)
- (xy -2.762256 2.726039) (xy -2.722846 2.784433) (xy -2.684298 2.828698) (xy -2.612406 2.894516)
- (xy -2.537313 2.939947) (xy -2.454562 2.96715) (xy -2.376928 2.977424) (xy -2.273043 2.973429)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -6.121371 -2.269066) (xy -6.081889 -2.269467) (xy -5.9662 -2.272259) (xy -5.869311 -2.28055)
- (xy -5.787919 -2.295232) (xy -5.718723 -2.317193) (xy -5.65842 -2.347322) (xy -5.603708 -2.38651)
- (xy -5.584167 -2.403532) (xy -5.55175 -2.443363) (xy -5.52252 -2.497413) (xy -5.499991 -2.557323)
- (xy -5.487679 -2.614739) (xy -5.4864 -2.635956) (xy -5.494417 -2.694769) (xy -5.515899 -2.759013)
- (xy -5.546999 -2.819821) (xy -5.583866 -2.86833) (xy -5.589854 -2.874182) (xy -5.640579 -2.915321)
- (xy -5.696125 -2.947435) (xy -5.759696 -2.971365) (xy -5.834494 -2.987953) (xy -5.923722 -2.998041)
- (xy -6.030582 -3.002469) (xy -6.079528 -3.002845) (xy -6.141762 -3.002545) (xy -6.185528 -3.001292)
- (xy -6.214931 -2.998554) (xy -6.234079 -2.993801) (xy -6.247077 -2.986501) (xy -6.254045 -2.980267)
- (xy -6.260626 -2.972694) (xy -6.265788 -2.962924) (xy -6.269703 -2.94834) (xy -6.272543 -2.926326)
- (xy -6.27448 -2.894264) (xy -6.275684 -2.849536) (xy -6.276328 -2.789526) (xy -6.276583 -2.711617)
- (xy -6.276622 -2.635956) (xy -6.27687 -2.535041) (xy -6.276817 -2.454427) (xy -6.275857 -2.415822)
- (xy -6.129867 -2.415822) (xy -6.129867 -2.856089) (xy -6.036734 -2.856004) (xy -5.980693 -2.854396)
- (xy -5.921999 -2.850256) (xy -5.873028 -2.844464) (xy -5.871538 -2.844226) (xy -5.792392 -2.82509)
- (xy -5.731002 -2.795287) (xy -5.684305 -2.752878) (xy -5.654635 -2.706961) (xy -5.636353 -2.656026)
- (xy -5.637771 -2.6082) (xy -5.658988 -2.556933) (xy -5.700489 -2.503899) (xy -5.757998 -2.4646)
- (xy -5.83275 -2.438331) (xy -5.882708 -2.429035) (xy -5.939416 -2.422507) (xy -5.999519 -2.417782)
- (xy -6.050639 -2.415817) (xy -6.053667 -2.415808) (xy -6.129867 -2.415822) (xy -6.275857 -2.415822)
- (xy -6.27526 -2.391851) (xy -6.270998 -2.345055) (xy -6.26283 -2.311778) (xy -6.249556 -2.289759)
- (xy -6.229974 -2.276739) (xy -6.202883 -2.270457) (xy -6.167082 -2.268653) (xy -6.121371 -2.269066)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -4.712794 -2.269146) (xy -4.643386 -2.269518) (xy -4.590997 -2.270385) (xy -4.552847 -2.271946)
- (xy -4.526159 -2.274403) (xy -4.508153 -2.277957) (xy -4.496049 -2.28281) (xy -4.487069 -2.289161)
- (xy -4.483818 -2.292084) (xy -4.464043 -2.323142) (xy -4.460482 -2.358828) (xy -4.473491 -2.39051)
- (xy -4.479506 -2.396913) (xy -4.489235 -2.403121) (xy -4.504901 -2.40791) (xy -4.529408 -2.411514)
- (xy -4.565661 -2.414164) (xy -4.616565 -2.416095) (xy -4.685026 -2.417539) (xy -4.747617 -2.418418)
- (xy -4.995334 -2.421467) (xy -4.998719 -2.486378) (xy -5.002105 -2.551289) (xy -4.833958 -2.551289)
- (xy -4.760959 -2.551919) (xy -4.707517 -2.554553) (xy -4.670628 -2.560309) (xy -4.647288 -2.570304)
- (xy -4.634494 -2.585656) (xy -4.629242 -2.607482) (xy -4.628445 -2.627738) (xy -4.630923 -2.652592)
- (xy -4.640277 -2.670906) (xy -4.659383 -2.683637) (xy -4.691118 -2.691741) (xy -4.738359 -2.696176)
- (xy -4.803983 -2.697899) (xy -4.839801 -2.698045) (xy -5.000978 -2.698045) (xy -5.000978 -2.856089)
- (xy -4.752622 -2.856089) (xy -4.671213 -2.856202) (xy -4.609342 -2.856712) (xy -4.563968 -2.85787)
- (xy -4.532054 -2.85993) (xy -4.510559 -2.863146) (xy -4.496443 -2.867772) (xy -4.486668 -2.874059)
- (xy -4.481689 -2.878667) (xy -4.46461 -2.90556) (xy -4.459111 -2.929467) (xy -4.466963 -2.958667)
- (xy -4.481689 -2.980267) (xy -4.489546 -2.987066) (xy -4.499688 -2.992346) (xy -4.514844 -2.996298)
- (xy -4.537741 -2.999113) (xy -4.571109 -3.000982) (xy -4.617675 -3.002098) (xy -4.680167 -3.002651)
- (xy -4.761314 -3.002833) (xy -4.803422 -3.002845) (xy -4.893598 -3.002765) (xy -4.963924 -3.002398)
- (xy -5.017129 -3.001552) (xy -5.05594 -3.000036) (xy -5.083087 -2.997659) (xy -5.101298 -2.994229)
- (xy -5.1133 -2.989554) (xy -5.121822 -2.983444) (xy -5.125156 -2.980267) (xy -5.131755 -2.97267)
- (xy -5.136927 -2.96287) (xy -5.140846 -2.948239) (xy -5.143684 -2.926152) (xy -5.145615 -2.893982)
- (xy -5.146812 -2.849103) (xy -5.147448 -2.788889) (xy -5.147697 -2.710713) (xy -5.147734 -2.637923)
- (xy -5.1477 -2.544707) (xy -5.147465 -2.471431) (xy -5.14683 -2.415458) (xy -5.145594 -2.374151)
- (xy -5.143556 -2.344872) (xy -5.140517 -2.324984) (xy -5.136277 -2.31185) (xy -5.130635 -2.302832)
- (xy -5.123391 -2.295293) (xy -5.121606 -2.293612) (xy -5.112945 -2.286172) (xy -5.102882 -2.280409)
- (xy -5.088625 -2.276112) (xy -5.067383 -2.273064) (xy -5.036364 -2.271051) (xy -4.992777 -2.26986)
- (xy -4.933831 -2.269275) (xy -4.856734 -2.269083) (xy -4.802001 -2.269067) (xy -4.712794 -2.269146)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -3.691703 -2.270351) (xy -3.616888 -2.275581) (xy -3.547306 -2.28375) (xy -3.487002 -2.29455)
- (xy -3.44002 -2.307673) (xy -3.410406 -2.322813) (xy -3.40586 -2.327269) (xy -3.390054 -2.36185)
- (xy -3.394847 -2.397351) (xy -3.419364 -2.427725) (xy -3.420534 -2.428596) (xy -3.434954 -2.437954)
- (xy -3.450008 -2.442876) (xy -3.471005 -2.443473) (xy -3.503257 -2.439861) (xy -3.552073 -2.432154)
- (xy -3.556 -2.431505) (xy -3.628739 -2.422569) (xy -3.707217 -2.418161) (xy -3.785927 -2.418119)
- (xy -3.859361 -2.422279) (xy -3.922011 -2.430479) (xy -3.96837 -2.442557) (xy -3.971416 -2.443771)
- (xy -4.005048 -2.462615) (xy -4.016864 -2.481685) (xy -4.007614 -2.500439) (xy -3.978047 -2.518337)
- (xy -3.928911 -2.534837) (xy -3.860957 -2.549396) (xy -3.815645 -2.556406) (xy -3.721456 -2.569889)
- (xy -3.646544 -2.582214) (xy -3.587717 -2.594449) (xy -3.541785 -2.607661) (xy -3.505555 -2.622917)
- (xy -3.475838 -2.641285) (xy -3.449442 -2.663831) (xy -3.42823 -2.685971) (xy -3.403065 -2.716819)
- (xy -3.390681 -2.743345) (xy -3.386808 -2.776026) (xy -3.386667 -2.787995) (xy -3.389576 -2.827712)
- (xy -3.401202 -2.857259) (xy -3.421323 -2.883486) (xy -3.462216 -2.923576) (xy -3.507817 -2.954149)
- (xy -3.561513 -2.976203) (xy -3.626692 -2.990735) (xy -3.706744 -2.998741) (xy -3.805057 -3.001218)
- (xy -3.821289 -3.001177) (xy -3.886849 -2.999818) (xy -3.951866 -2.99673) (xy -4.009252 -2.992356)
- (xy -4.051922 -2.98714) (xy -4.055372 -2.986541) (xy -4.097796 -2.976491) (xy -4.13378 -2.963796)
- (xy -4.15415 -2.95219) (xy -4.173107 -2.921572) (xy -4.174427 -2.885918) (xy -4.158085 -2.854144)
- (xy -4.154429 -2.850551) (xy -4.139315 -2.839876) (xy -4.120415 -2.835276) (xy -4.091162 -2.836059)
- (xy -4.055651 -2.840127) (xy -4.01597 -2.843762) (xy -3.960345 -2.846828) (xy -3.895406 -2.849053)
- (xy -3.827785 -2.850164) (xy -3.81 -2.850237) (xy -3.742128 -2.849964) (xy -3.692454 -2.848646)
- (xy -3.65661 -2.845827) (xy -3.630224 -2.84105) (xy -3.608926 -2.833857) (xy -3.596126 -2.827867)
- (xy -3.568 -2.811233) (xy -3.550068 -2.796168) (xy -3.547447 -2.791897) (xy -3.552976 -2.774263)
- (xy -3.57926 -2.757192) (xy -3.624478 -2.741458) (xy -3.686808 -2.727838) (xy -3.705171 -2.724804)
- (xy -3.80109 -2.709738) (xy -3.877641 -2.697146) (xy -3.93778 -2.686111) (xy -3.98446 -2.67572)
- (xy -4.020637 -2.665056) (xy -4.049265 -2.653205) (xy -4.073298 -2.639251) (xy -4.095692 -2.622281)
- (xy -4.119402 -2.601378) (xy -4.12738 -2.594049) (xy -4.155353 -2.566699) (xy -4.17016 -2.545029)
- (xy -4.175952 -2.520232) (xy -4.176889 -2.488983) (xy -4.166575 -2.427705) (xy -4.135752 -2.37564)
- (xy -4.084595 -2.332958) (xy -4.013283 -2.299825) (xy -3.9624 -2.284964) (xy -3.9071 -2.275366)
- (xy -3.840853 -2.269936) (xy -3.767706 -2.268367) (xy -3.691703 -2.270351)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -2.923822 -2.291645) (xy -2.917242 -2.299218) (xy -2.912079 -2.308987) (xy -2.908164 -2.323571)
- (xy -2.905324 -2.345585) (xy -2.903387 -2.377648) (xy -2.902183 -2.422375) (xy -2.901539 -2.482385)
- (xy -2.901284 -2.560294) (xy -2.901245 -2.635956) (xy -2.901314 -2.729802) (xy -2.901638 -2.803689)
- (xy -2.902386 -2.860232) (xy -2.903732 -2.902049) (xy -2.905846 -2.931757) (xy -2.9089 -2.951973)
- (xy -2.913066 -2.965314) (xy -2.918516 -2.974398) (xy -2.923822 -2.980267) (xy -2.956826 -2.999947)
- (xy -2.991991 -2.998181) (xy -3.023455 -2.976717) (xy -3.030684 -2.968337) (xy -3.036334 -2.958614)
- (xy -3.040599 -2.944861) (xy -3.043673 -2.924389) (xy -3.045752 -2.894512) (xy -3.04703 -2.852541)
- (xy -3.047701 -2.795789) (xy -3.047959 -2.721567) (xy -3.048 -2.637537) (xy -3.048 -2.324485)
- (xy -3.020291 -2.296776) (xy -2.986137 -2.273463) (xy -2.953006 -2.272623) (xy -2.923822 -2.291645)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -1.950081 -2.274599) (xy -1.881565 -2.286095) (xy -1.828943 -2.303967) (xy -1.794708 -2.327499)
- (xy -1.785379 -2.340924) (xy -1.775893 -2.372148) (xy -1.782277 -2.400395) (xy -1.80243 -2.427182)
- (xy -1.833745 -2.439713) (xy -1.879183 -2.438696) (xy -1.914326 -2.431906) (xy -1.992419 -2.418971)
- (xy -2.072226 -2.417742) (xy -2.161555 -2.428241) (xy -2.186229 -2.43269) (xy -2.269291 -2.456108)
- (xy -2.334273 -2.490945) (xy -2.380461 -2.536604) (xy -2.407145 -2.592494) (xy -2.412663 -2.621388)
- (xy -2.409051 -2.680012) (xy -2.385729 -2.731879) (xy -2.344824 -2.775978) (xy -2.288459 -2.811299)
- (xy -2.21876 -2.836829) (xy -2.137852 -2.851559) (xy -2.04786 -2.854478) (xy -1.95091 -2.844575)
- (xy -1.945436 -2.843641) (xy -1.906875 -2.836459) (xy -1.885494 -2.829521) (xy -1.876227 -2.819227)
- (xy -1.874006 -2.801976) (xy -1.873956 -2.792841) (xy -1.873956 -2.754489) (xy -1.942431 -2.754489)
- (xy -2.0029 -2.750347) (xy -2.044165 -2.737147) (xy -2.068175 -2.71373) (xy -2.076877 -2.678936)
- (xy -2.076983 -2.674394) (xy -2.071892 -2.644654) (xy -2.054433 -2.623419) (xy -2.021939 -2.609366)
- (xy -1.971743 -2.601173) (xy -1.923123 -2.598161) (xy -1.852456 -2.596433) (xy -1.801198 -2.59907)
- (xy -1.766239 -2.6088) (xy -1.74447 -2.628353) (xy -1.73278 -2.660456) (xy -1.72806 -2.707838)
- (xy -1.7272 -2.770071) (xy -1.728609 -2.839535) (xy -1.732848 -2.886786) (xy -1.739936 -2.912012)
- (xy -1.741311 -2.913988) (xy -1.780228 -2.945508) (xy -1.837286 -2.97047) (xy -1.908869 -2.98834)
- (xy -1.991358 -2.998586) (xy -2.081139 -3.000673) (xy -2.174592 -2.994068) (xy -2.229556 -2.985956)
- (xy -2.315766 -2.961554) (xy -2.395892 -2.921662) (xy -2.462977 -2.869887) (xy -2.473173 -2.859539)
- (xy -2.506302 -2.816035) (xy -2.536194 -2.762118) (xy -2.559357 -2.705592) (xy -2.572298 -2.654259)
- (xy -2.573858 -2.634544) (xy -2.567218 -2.593419) (xy -2.549568 -2.542252) (xy -2.524297 -2.488394)
- (xy -2.494789 -2.439195) (xy -2.468719 -2.406334) (xy -2.407765 -2.357452) (xy -2.328969 -2.318545)
- (xy -2.235157 -2.290494) (xy -2.12915 -2.274179) (xy -2.032 -2.270192) (xy -1.950081 -2.274599)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -1.300114 -2.273448) (xy -1.276548 -2.287273) (xy -1.245735 -2.309881) (xy -1.206078 -2.342338)
- (xy -1.15598 -2.385708) (xy -1.093843 -2.441058) (xy -1.018072 -2.509451) (xy -0.931334 -2.588084)
- (xy -0.750711 -2.751878) (xy -0.745067 -2.532029) (xy -0.743029 -2.456351) (xy -0.741063 -2.399994)
- (xy -0.738734 -2.359706) (xy -0.735606 -2.332235) (xy -0.731245 -2.314329) (xy -0.725216 -2.302737)
- (xy -0.717084 -2.294208) (xy -0.712772 -2.290623) (xy -0.678241 -2.27167) (xy -0.645383 -2.274441)
- (xy -0.619318 -2.290633) (xy -0.592667 -2.312199) (xy -0.589352 -2.627151) (xy -0.588435 -2.719779)
- (xy -0.587968 -2.792544) (xy -0.588113 -2.848161) (xy -0.589032 -2.889342) (xy -0.590887 -2.918803)
- (xy -0.593839 -2.939255) (xy -0.59805 -2.953413) (xy -0.603682 -2.963991) (xy -0.609927 -2.972474)
- (xy -0.623439 -2.988207) (xy -0.636883 -2.998636) (xy -0.652124 -3.002639) (xy -0.671026 -2.999094)
- (xy -0.695455 -2.986879) (xy -0.727273 -2.964871) (xy -0.768348 -2.931949) (xy -0.820542 -2.886991)
- (xy -0.885722 -2.828875) (xy -0.959556 -2.762099) (xy -1.224845 -2.521458) (xy -1.230489 -2.740589)
- (xy -1.232531 -2.816128) (xy -1.234502 -2.872354) (xy -1.236839 -2.912524) (xy -1.239981 -2.939896)
- (xy -1.244364 -2.957728) (xy -1.250424 -2.969279) (xy -1.2586 -2.977807) (xy -1.262784 -2.981282)
- (xy -1.299765 -3.000372) (xy -1.334708 -2.997493) (xy -1.365136 -2.9731) (xy -1.372097 -2.963286)
- (xy -1.377523 -2.951826) (xy -1.381603 -2.935968) (xy -1.384529 -2.912963) (xy -1.386492 -2.880062)
- (xy -1.387683 -2.834516) (xy -1.388292 -2.773573) (xy -1.388511 -2.694486) (xy -1.388534 -2.635956)
- (xy -1.38846 -2.544407) (xy -1.388113 -2.472687) (xy -1.387301 -2.418045) (xy -1.385833 -2.377732)
- (xy -1.383519 -2.348998) (xy -1.380167 -2.329093) (xy -1.375588 -2.315268) (xy -1.369589 -2.304772)
- (xy -1.365136 -2.298811) (xy -1.35385 -2.284691) (xy -1.343301 -2.274029) (xy -1.331893 -2.267892)
- (xy -1.31803 -2.267343) (xy -1.300114 -2.273448)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 0.230343 -2.26926) (xy 0.306701 -2.270174) (xy 0.365217 -2.272311) (xy 0.408255 -2.276175)
- (xy 0.438183 -2.282267) (xy 0.457368 -2.29109) (xy 0.468176 -2.303146) (xy 0.472973 -2.318939)
- (xy 0.474127 -2.33897) (xy 0.474133 -2.341335) (xy 0.473131 -2.363992) (xy 0.468396 -2.381503)
- (xy 0.457333 -2.394574) (xy 0.437348 -2.403913) (xy 0.405846 -2.410227) (xy 0.360232 -2.414222)
- (xy 0.297913 -2.416606) (xy 0.216293 -2.418086) (xy 0.191277 -2.418414) (xy -0.0508 -2.421467)
- (xy -0.054186 -2.486378) (xy -0.057571 -2.551289) (xy 0.110576 -2.551289) (xy 0.176266 -2.551531)
- (xy 0.223172 -2.552556) (xy 0.255083 -2.554811) (xy 0.275791 -2.558742) (xy 0.289084 -2.564798)
- (xy 0.298755 -2.573424) (xy 0.298817 -2.573493) (xy 0.316356 -2.607112) (xy 0.315722 -2.643448)
- (xy 0.297314 -2.674423) (xy 0.293671 -2.677607) (xy 0.280741 -2.685812) (xy 0.263024 -2.691521)
- (xy 0.23657 -2.695162) (xy 0.197432 -2.697167) (xy 0.141662 -2.697964) (xy 0.105994 -2.698045)
- (xy -0.056445 -2.698045) (xy -0.056445 -2.856089) (xy 0.190161 -2.856089) (xy 0.27158 -2.856231)
- (xy 0.33341 -2.856814) (xy 0.378637 -2.858068) (xy 0.410248 -2.860227) (xy 0.431231 -2.863523)
- (xy 0.444573 -2.868189) (xy 0.453261 -2.874457) (xy 0.45545 -2.876733) (xy 0.471614 -2.90828)
- (xy 0.472797 -2.944168) (xy 0.459536 -2.975285) (xy 0.449043 -2.985271) (xy 0.438129 -2.990769)
- (xy 0.421217 -2.995022) (xy 0.395633 -2.99818) (xy 0.358701 -3.000392) (xy 0.307746 -3.001806)
- (xy 0.240094 -3.002572) (xy 0.153069 -3.002838) (xy 0.133394 -3.002845) (xy 0.044911 -3.002787)
- (xy -0.023773 -3.002467) (xy -0.075436 -3.001667) (xy -0.112855 -3.000167) (xy -0.13881 -2.997749)
- (xy -0.156078 -2.994194) (xy -0.167438 -2.989282) (xy -0.175668 -2.982795) (xy -0.180183 -2.978138)
- (xy -0.186979 -2.969889) (xy -0.192288 -2.959669) (xy -0.196294 -2.9448) (xy -0.199179 -2.922602)
- (xy -0.201126 -2.890393) (xy -0.202319 -2.845496) (xy -0.202939 -2.785228) (xy -0.203171 -2.706911)
- (xy -0.2032 -2.640994) (xy -0.203129 -2.548628) (xy -0.202792 -2.476117) (xy -0.202002 -2.420737)
- (xy -0.200574 -2.379765) (xy -0.198321 -2.350478) (xy -0.195057 -2.330153) (xy -0.190596 -2.316066)
- (xy -0.184752 -2.305495) (xy -0.179803 -2.298811) (xy -0.156406 -2.269067) (xy 0.133774 -2.269067)
- (xy 0.230343 -2.26926)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 1.018309 -2.269275) (xy 1.147288 -2.273636) (xy 1.256991 -2.286861) (xy 1.349226 -2.309741)
- (xy 1.425802 -2.34307) (xy 1.488527 -2.387638) (xy 1.539212 -2.444236) (xy 1.579663 -2.513658)
- (xy 1.580459 -2.515351) (xy 1.604601 -2.577483) (xy 1.613203 -2.632509) (xy 1.606231 -2.687887)
- (xy 1.583654 -2.751073) (xy 1.579372 -2.760689) (xy 1.550172 -2.816966) (xy 1.517356 -2.860451)
- (xy 1.475002 -2.897417) (xy 1.41719 -2.934135) (xy 1.413831 -2.936052) (xy 1.363504 -2.960227)
- (xy 1.306621 -2.978282) (xy 1.239527 -2.990839) (xy 1.158565 -2.998522) (xy 1.060082 -3.001953)
- (xy 1.025286 -3.002251) (xy 0.859594 -3.002845) (xy 0.836197 -2.9731) (xy 0.829257 -2.963319)
- (xy 0.823842 -2.951897) (xy 0.819765 -2.936095) (xy 0.816837 -2.913175) (xy 0.814867 -2.880396)
- (xy 0.814225 -2.856089) (xy 0.970844 -2.856089) (xy 1.064726 -2.856089) (xy 1.119664 -2.854483)
- (xy 1.17606 -2.850255) (xy 1.222345 -2.844292) (xy 1.225139 -2.84379) (xy 1.307348 -2.821736)
- (xy 1.371114 -2.7886) (xy 1.418452 -2.742847) (xy 1.451382 -2.682939) (xy 1.457108 -2.667061)
- (xy 1.462721 -2.642333) (xy 1.460291 -2.617902) (xy 1.448467 -2.5854) (xy 1.44134 -2.569434)
- (xy 1.418 -2.527006) (xy 1.38988 -2.49724) (xy 1.35894 -2.476511) (xy 1.296966 -2.449537)
- (xy 1.217651 -2.429998) (xy 1.125253 -2.418746) (xy 1.058333 -2.41627) (xy 0.970844 -2.415822)
- (xy 0.970844 -2.856089) (xy 0.814225 -2.856089) (xy 0.813668 -2.835021) (xy 0.81305 -2.774311)
- (xy 0.812825 -2.695526) (xy 0.8128 -2.63392) (xy 0.8128 -2.324485) (xy 0.840509 -2.296776)
- (xy 0.852806 -2.285544) (xy 0.866103 -2.277853) (xy 0.884672 -2.27304) (xy 0.912786 -2.270446)
- (xy 0.954717 -2.26941) (xy 1.014737 -2.26927) (xy 1.018309 -2.269275)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 3.744665 -2.271034) (xy 3.764255 -2.278035) (xy 3.76501 -2.278377) (xy 3.791613 -2.298678)
- (xy 3.80627 -2.319561) (xy 3.809138 -2.329352) (xy 3.808996 -2.342361) (xy 3.804961 -2.360895)
- (xy 3.796146 -2.387257) (xy 3.781669 -2.423752) (xy 3.760645 -2.472687) (xy 3.732188 -2.536365)
- (xy 3.695415 -2.617093) (xy 3.675175 -2.661216) (xy 3.638625 -2.739985) (xy 3.604315 -2.812423)
- (xy 3.573552 -2.87588) (xy 3.547648 -2.927708) (xy 3.52791 -2.965259) (xy 3.51565 -2.985884)
- (xy 3.513224 -2.988733) (xy 3.482183 -3.001302) (xy 3.447121 -2.999619) (xy 3.419 -2.984332)
- (xy 3.417854 -2.983089) (xy 3.406668 -2.966154) (xy 3.387904 -2.93317) (xy 3.363875 -2.88838)
- (xy 3.336897 -2.836032) (xy 3.327201 -2.816742) (xy 3.254014 -2.67015) (xy 3.17424 -2.829393)
- (xy 3.145767 -2.884415) (xy 3.11935 -2.932132) (xy 3.097148 -2.968893) (xy 3.081319 -2.991044)
- (xy 3.075954 -2.995741) (xy 3.034257 -3.002102) (xy 2.999849 -2.988733) (xy 2.989728 -2.974446)
- (xy 2.972214 -2.942692) (xy 2.948735 -2.896597) (xy 2.92072 -2.839285) (xy 2.889599 -2.77388)
- (xy 2.856799 -2.703507) (xy 2.82375 -2.631291) (xy 2.791881 -2.560355) (xy 2.762619 -2.493825)
- (xy 2.737395 -2.434826) (xy 2.717636 -2.386481) (xy 2.704772 -2.351915) (xy 2.700231 -2.334253)
- (xy 2.700277 -2.333613) (xy 2.711326 -2.311388) (xy 2.73341 -2.288753) (xy 2.73471 -2.287768)
- (xy 2.761853 -2.272425) (xy 2.786958 -2.272574) (xy 2.796368 -2.275466) (xy 2.807834 -2.281718)
- (xy 2.82001 -2.294014) (xy 2.834357 -2.314908) (xy 2.852336 -2.346949) (xy 2.875407 -2.392688)
- (xy 2.90503 -2.454677) (xy 2.931745 -2.511898) (xy 2.96248 -2.578226) (xy 2.990021 -2.637874)
- (xy 3.012938 -2.687725) (xy 3.029798 -2.724664) (xy 3.039173 -2.745573) (xy 3.04054 -2.748845)
- (xy 3.046689 -2.743497) (xy 3.060822 -2.721109) (xy 3.081057 -2.684946) (xy 3.105515 -2.638277)
- (xy 3.115248 -2.619022) (xy 3.148217 -2.554004) (xy 3.173643 -2.506654) (xy 3.193612 -2.474219)
- (xy 3.21021 -2.453946) (xy 3.225524 -2.443082) (xy 3.24164 -2.438875) (xy 3.252143 -2.4384)
- (xy 3.27067 -2.440042) (xy 3.286904 -2.446831) (xy 3.303035 -2.461566) (xy 3.321251 -2.487044)
- (xy 3.343739 -2.526061) (xy 3.372689 -2.581414) (xy 3.388662 -2.612903) (xy 3.41457 -2.663087)
- (xy 3.437167 -2.704704) (xy 3.454458 -2.734242) (xy 3.46445 -2.748189) (xy 3.465809 -2.74877)
- (xy 3.472261 -2.737793) (xy 3.486708 -2.70929) (xy 3.507703 -2.666244) (xy 3.533797 -2.611638)
- (xy 3.563546 -2.548454) (xy 3.57818 -2.517071) (xy 3.61625 -2.436078) (xy 3.646905 -2.373756)
- (xy 3.671737 -2.328071) (xy 3.692337 -2.296989) (xy 3.710298 -2.278478) (xy 3.72721 -2.270504)
- (xy 3.744665 -2.271034)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 4.188614 -2.275877) (xy 4.212327 -2.290647) (xy 4.238978 -2.312227) (xy 4.238978 -2.633773)
- (xy 4.238893 -2.72783) (xy 4.238529 -2.801932) (xy 4.237724 -2.858704) (xy 4.236313 -2.900768)
- (xy 4.234133 -2.930748) (xy 4.231021 -2.951267) (xy 4.226814 -2.964949) (xy 4.221348 -2.974416)
- (xy 4.217472 -2.979082) (xy 4.186034 -2.999575) (xy 4.150233 -2.998739) (xy 4.118873 -2.981264)
- (xy 4.092222 -2.959684) (xy 4.092222 -2.312227) (xy 4.118873 -2.290647) (xy 4.144594 -2.274949)
- (xy 4.1656 -2.269067) (xy 4.188614 -2.275877)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 4.963065 -2.269163) (xy 5.041772 -2.269542) (xy 5.102863 -2.270333) (xy 5.148817 -2.27167)
- (xy 5.182114 -2.273683) (xy 5.205236 -2.276506) (xy 5.220662 -2.280269) (xy 5.230871 -2.285105)
- (xy 5.235813 -2.288822) (xy 5.261457 -2.321358) (xy 5.264559 -2.355138) (xy 5.248711 -2.385826)
- (xy 5.238348 -2.398089) (xy 5.227196 -2.40645) (xy 5.211035 -2.411657) (xy 5.185642 -2.414457)
- (xy 5.146798 -2.415596) (xy 5.09028 -2.415821) (xy 5.07918 -2.415822) (xy 4.933244 -2.415822)
- (xy 4.933244 -2.686756) (xy 4.933148 -2.772154) (xy 4.932711 -2.837864) (xy 4.931712 -2.886774)
- (xy 4.929928 -2.921773) (xy 4.927137 -2.945749) (xy 4.923117 -2.961593) (xy 4.917645 -2.972191)
- (xy 4.910666 -2.980267) (xy 4.877734 -3.000112) (xy 4.843354 -2.998548) (xy 4.812176 -2.975906)
- (xy 4.809886 -2.9731) (xy 4.802429 -2.962492) (xy 4.796747 -2.950081) (xy 4.792601 -2.93285)
- (xy 4.78975 -2.907784) (xy 4.787954 -2.871867) (xy 4.786972 -2.822083) (xy 4.786564 -2.755417)
- (xy 4.786489 -2.679589) (xy 4.786489 -2.415822) (xy 4.647127 -2.415822) (xy 4.587322 -2.415418)
- (xy 4.545918 -2.41384) (xy 4.518748 -2.410547) (xy 4.501646 -2.404992) (xy 4.490443 -2.396631)
- (xy 4.489083 -2.395178) (xy 4.472725 -2.361939) (xy 4.474172 -2.324362) (xy 4.492978 -2.291645)
- (xy 4.50025 -2.285298) (xy 4.509627 -2.280266) (xy 4.523609 -2.276396) (xy 4.544696 -2.273537)
- (xy 4.575389 -2.271535) (xy 4.618189 -2.270239) (xy 4.675595 -2.269498) (xy 4.75011 -2.269158)
- (xy 4.844233 -2.269068) (xy 4.86426 -2.269067) (xy 4.963065 -2.269163)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 6.228823 -2.274533) (xy 6.260202 -2.296776) (xy 6.287911 -2.324485) (xy 6.287911 -2.63392)
- (xy 6.287838 -2.725799) (xy 6.287495 -2.79784) (xy 6.286692 -2.85278) (xy 6.285241 -2.89336)
- (xy 6.282952 -2.922317) (xy 6.279636 -2.942391) (xy 6.275105 -2.956321) (xy 6.269169 -2.966845)
- (xy 6.264514 -2.9731) (xy 6.233783 -2.997673) (xy 6.198496 -3.000341) (xy 6.166245 -2.985271)
- (xy 6.155588 -2.976374) (xy 6.148464 -2.964557) (xy 6.144167 -2.945526) (xy 6.141991 -2.914992)
- (xy 6.141228 -2.868662) (xy 6.141155 -2.832871) (xy 6.141155 -2.698045) (xy 5.644444 -2.698045)
- (xy 5.644444 -2.8207) (xy 5.643931 -2.876787) (xy 5.641876 -2.915333) (xy 5.637508 -2.941361)
- (xy 5.630056 -2.959897) (xy 5.621047 -2.9731) (xy 5.590144 -2.997604) (xy 5.555196 -3.000506)
- (xy 5.521738 -2.983089) (xy 5.512604 -2.973959) (xy 5.506152 -2.961855) (xy 5.501897 -2.943001)
- (xy 5.499352 -2.91362) (xy 5.498029 -2.869937) (xy 5.497443 -2.808175) (xy 5.497375 -2.794)
- (xy 5.496891 -2.677631) (xy 5.496641 -2.581727) (xy 5.496723 -2.504177) (xy 5.497231 -2.442869)
- (xy 5.498262 -2.39569) (xy 5.499913 -2.36053) (xy 5.502279 -2.335276) (xy 5.505457 -2.317817)
- (xy 5.509544 -2.306041) (xy 5.514634 -2.297835) (xy 5.520266 -2.291645) (xy 5.552128 -2.271844)
- (xy 5.585357 -2.274533) (xy 5.616735 -2.296776) (xy 5.629433 -2.311126) (xy 5.637526 -2.326978)
- (xy 5.642042 -2.349554) (xy 5.644006 -2.384078) (xy 5.644444 -2.435776) (xy 5.644444 -2.551289)
- (xy 6.141155 -2.551289) (xy 6.141155 -2.432756) (xy 6.141662 -2.378148) (xy 6.143698 -2.341275)
- (xy 6.148035 -2.317307) (xy 6.155447 -2.301415) (xy 6.163733 -2.291645) (xy 6.195594 -2.271844)
- (xy 6.228823 -2.274533)) (layer B.SilkS) (width 0.01))
- )
-
- (module Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical (layer B.Cu) (tedit 59FED5CC) (tstamp 5DE5899E)
- (at 119.9896 81.42 180)
- (descr "Through hole straight pin header, 1x06, 2.54mm pitch, single row")
- (tags "Through hole pin header THT 1x06 2.54mm single row")
- (path /5D0ADA96)
- (fp_text reference J2 (at 0 2.33) (layer B.SilkS)
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_text value Conn_01x06_Male (at 0 -15.03) (layer B.Fab)
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_text user %R (at 0 -6.35 270) (layer B.Fab)
+ (fp_line (start -4.7 1.9) (end -4.7 -0.1) (layer B.SilkS) (width 0.12))
+ (fp_line (start 4.7 1.9) (end 4.7 -0.1) (layer B.SilkS) (width 0.12))
+ (fp_line (start 5.32 5.27) (end 5.32 -4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -5.32 5.27) (end -5.32 -4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -5.32 -4.15) (end 5.32 -4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -5.32 5.27) (end 5.32 5.27) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.47 3.65) (end 4.47 -3.65) (layer B.Fab) (width 0.1))
+ (fp_line (start -4.47 -3.65) (end 4.47 -3.65) (layer B.Fab) (width 0.1))
+ (fp_line (start -4.47 3.65) (end -4.47 -3.65) (layer B.Fab) (width 0.1))
+ (fp_line (start -4.47 3.65) (end 4.47 3.65) (layer B.Fab) (width 0.1))
+ (fp_text user %R (at 0 0) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.8 -14.5) (end 1.8 1.8) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.8 -14.5) (end 1.8 -14.5) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.8 1.8) (end -1.8 -14.5) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12))
- (fp_line (start 1.33 -1.27) (end 1.33 -14.03) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 -1.27) (end -1.33 -14.03) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 -14.03) (end 1.33 -14.03) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1))
- (fp_line (start -1.27 -13.97) (end -1.27 0.635) (layer B.Fab) (width 0.1))
- (fp_line (start 1.27 -13.97) (end -1.27 -13.97) (layer B.Fab) (width 0.1))
- (fp_line (start 1.27 1.27) (end 1.27 -13.97) (layer B.Fab) (width 0.1))
- (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1))
- (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ (pad B1 smd rect (at 3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
(net 2 GND))
- (pad 2 thru_hole oval (at 0 -2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- (net 61 "Net-(J2-Pad2)"))
- (pad 3 thru_hole oval (at 0 -5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- (net 60 "Net-(J2-Pad3)"))
- (pad 4 thru_hole oval (at 0 -7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- (net 55 RXD))
- (pad 5 thru_hole oval (at 0 -10.16 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- (net 54 TXD))
- (pad 6 thru_hole oval (at 0 -12.7 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- (net 59 "Net-(J2-Pad6)"))
- (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x06_P2.54mm_Vertical.wrl
- (at (xyz 0 0 0))
- (scale (xyz 1 1 1))
- (rotate (xyz 0 0 0))
- )
- )
-
- (module Symbol:OSHW-Logo2_7.3x6mm_SilkScreen (layer B.Cu) (tedit 0) (tstamp 5DE589E0)
- (at 160.8 112.5 180)
- (descr "Open Source Hardware Symbol")
- (tags "Logo Symbol OSHW")
- (attr virtual)
- (fp_text reference REF** (at 0 0) (layer B.SilkS) hide
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_text value OSHW-Logo2_7.3x6mm_SilkScreen (at 0.75 0) (layer B.Fab) hide
- (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
- )
- (fp_poly (pts (xy -2.400256 -1.919918) (xy -2.344799 -1.947568) (xy -2.295852 -1.99848) (xy -2.282371 -2.017338)
- (xy -2.267686 -2.042015) (xy -2.258158 -2.068816) (xy -2.252707 -2.104587) (xy -2.250253 -2.156169)
- (xy -2.249714 -2.224267) (xy -2.252148 -2.317588) (xy -2.260606 -2.387657) (xy -2.276826 -2.439931)
- (xy -2.302546 -2.479869) (xy -2.339503 -2.512929) (xy -2.342218 -2.514886) (xy -2.37864 -2.534908)
- (xy -2.422498 -2.544815) (xy -2.478276 -2.547257) (xy -2.568952 -2.547257) (xy -2.56899 -2.635283)
- (xy -2.569834 -2.684308) (xy -2.574976 -2.713065) (xy -2.588413 -2.730311) (xy -2.614142 -2.744808)
- (xy -2.620321 -2.747769) (xy -2.649236 -2.761648) (xy -2.671624 -2.770414) (xy -2.688271 -2.771171)
- (xy -2.699964 -2.761023) (xy -2.70749 -2.737073) (xy -2.711634 -2.696426) (xy -2.713185 -2.636186)
- (xy -2.712929 -2.553455) (xy -2.711651 -2.445339) (xy -2.711252 -2.413) (xy -2.709815 -2.301524)
- (xy -2.708528 -2.228603) (xy -2.569029 -2.228603) (xy -2.568245 -2.290499) (xy -2.56476 -2.330997)
- (xy -2.556876 -2.357708) (xy -2.542895 -2.378244) (xy -2.533403 -2.38826) (xy -2.494596 -2.417567)
- (xy -2.460237 -2.419952) (xy -2.424784 -2.39575) (xy -2.423886 -2.394857) (xy -2.409461 -2.376153)
- (xy -2.400687 -2.350732) (xy -2.396261 -2.311584) (xy -2.394882 -2.251697) (xy -2.394857 -2.23843)
- (xy -2.398188 -2.155901) (xy -2.409031 -2.098691) (xy -2.42866 -2.063766) (xy -2.45835 -2.048094)
- (xy -2.475509 -2.046514) (xy -2.516234 -2.053926) (xy -2.544168 -2.07833) (xy -2.560983 -2.12298)
- (xy -2.56835 -2.19113) (xy -2.569029 -2.228603) (xy -2.708528 -2.228603) (xy -2.708292 -2.215245)
- (xy -2.706323 -2.150333) (xy -2.70355 -2.102958) (xy -2.699612 -2.06929) (xy -2.694151 -2.045498)
- (xy -2.686808 -2.027753) (xy -2.677223 -2.012224) (xy -2.673113 -2.006381) (xy -2.618595 -1.951185)
- (xy -2.549664 -1.91989) (xy -2.469928 -1.911165) (xy -2.400256 -1.919918)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -1.283907 -1.92778) (xy -1.237328 -1.954723) (xy -1.204943 -1.981466) (xy -1.181258 -2.009484)
- (xy -1.164941 -2.043748) (xy -1.154661 -2.089227) (xy -1.149086 -2.150892) (xy -1.146884 -2.233711)
- (xy -1.146629 -2.293246) (xy -1.146629 -2.512391) (xy -1.208314 -2.540044) (xy -1.27 -2.567697)
- (xy -1.277257 -2.32767) (xy -1.280256 -2.238028) (xy -1.283402 -2.172962) (xy -1.287299 -2.128026)
- (xy -1.292553 -2.09877) (xy -1.299769 -2.080748) (xy -1.30955 -2.069511) (xy -1.312688 -2.067079)
- (xy -1.360239 -2.048083) (xy -1.408303 -2.0556) (xy -1.436914 -2.075543) (xy -1.448553 -2.089675)
- (xy -1.456609 -2.10822) (xy -1.461729 -2.136334) (xy -1.464559 -2.179173) (xy -1.465744 -2.241895)
- (xy -1.465943 -2.307261) (xy -1.465982 -2.389268) (xy -1.467386 -2.447316) (xy -1.472086 -2.486465)
- (xy -1.482013 -2.51178) (xy -1.499097 -2.528323) (xy -1.525268 -2.541156) (xy -1.560225 -2.554491)
- (xy -1.598404 -2.569007) (xy -1.593859 -2.311389) (xy -1.592029 -2.218519) (xy -1.589888 -2.149889)
- (xy -1.586819 -2.100711) (xy -1.582206 -2.066198) (xy -1.575432 -2.041562) (xy -1.565881 -2.022016)
- (xy -1.554366 -2.00477) (xy -1.49881 -1.94968) (xy -1.43102 -1.917822) (xy -1.357287 -1.910191)
- (xy -1.283907 -1.92778)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -2.958885 -1.921962) (xy -2.890855 -1.957733) (xy -2.840649 -2.015301) (xy -2.822815 -2.052312)
- (xy -2.808937 -2.107882) (xy -2.801833 -2.178096) (xy -2.80116 -2.254727) (xy -2.806573 -2.329552)
- (xy -2.81773 -2.394342) (xy -2.834286 -2.440873) (xy -2.839374 -2.448887) (xy -2.899645 -2.508707)
- (xy -2.971231 -2.544535) (xy -3.048908 -2.55502) (xy -3.127452 -2.53881) (xy -3.149311 -2.529092)
- (xy -3.191878 -2.499143) (xy -3.229237 -2.459433) (xy -3.232768 -2.454397) (xy -3.247119 -2.430124)
- (xy -3.256606 -2.404178) (xy -3.26221 -2.370022) (xy -3.264914 -2.321119) (xy -3.265701 -2.250935)
- (xy -3.265714 -2.2352) (xy -3.265678 -2.230192) (xy -3.120571 -2.230192) (xy -3.119727 -2.29643)
- (xy -3.116404 -2.340386) (xy -3.109417 -2.368779) (xy -3.097584 -2.388325) (xy -3.091543 -2.394857)
- (xy -3.056814 -2.41968) (xy -3.023097 -2.418548) (xy -2.989005 -2.397016) (xy -2.968671 -2.374029)
- (xy -2.956629 -2.340478) (xy -2.949866 -2.287569) (xy -2.949402 -2.281399) (xy -2.948248 -2.185513)
- (xy -2.960312 -2.114299) (xy -2.98543 -2.068194) (xy -3.02344 -2.047635) (xy -3.037008 -2.046514)
- (xy -3.072636 -2.052152) (xy -3.097006 -2.071686) (xy -3.111907 -2.109042) (xy -3.119125 -2.16815)
- (xy -3.120571 -2.230192) (xy -3.265678 -2.230192) (xy -3.265174 -2.160413) (xy -3.262904 -2.108159)
- (xy -3.257932 -2.071949) (xy -3.249287 -2.045299) (xy -3.235995 -2.021722) (xy -3.233057 -2.017338)
- (xy -3.183687 -1.958249) (xy -3.129891 -1.923947) (xy -3.064398 -1.910331) (xy -3.042158 -1.909665)
- (xy -2.958885 -1.921962)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -1.831697 -1.931239) (xy -1.774473 -1.969735) (xy -1.730251 -2.025335) (xy -1.703833 -2.096086)
- (xy -1.69849 -2.148162) (xy -1.699097 -2.169893) (xy -1.704178 -2.186531) (xy -1.718145 -2.201437)
- (xy -1.745411 -2.217973) (xy -1.790388 -2.239498) (xy -1.857489 -2.269374) (xy -1.857829 -2.269524)
- (xy -1.919593 -2.297813) (xy -1.970241 -2.322933) (xy -2.004596 -2.342179) (xy -2.017482 -2.352848)
- (xy -2.017486 -2.352934) (xy -2.006128 -2.376166) (xy -1.979569 -2.401774) (xy -1.949077 -2.420221)
- (xy -1.93363 -2.423886) (xy -1.891485 -2.411212) (xy -1.855192 -2.379471) (xy -1.837483 -2.344572)
- (xy -1.820448 -2.318845) (xy -1.787078 -2.289546) (xy -1.747851 -2.264235) (xy -1.713244 -2.250471)
- (xy -1.706007 -2.249714) (xy -1.697861 -2.26216) (xy -1.69737 -2.293972) (xy -1.703357 -2.336866)
- (xy -1.714643 -2.382558) (xy -1.73005 -2.422761) (xy -1.730829 -2.424322) (xy -1.777196 -2.489062)
- (xy -1.837289 -2.533097) (xy -1.905535 -2.554711) (xy -1.976362 -2.552185) (xy -2.044196 -2.523804)
- (xy -2.047212 -2.521808) (xy -2.100573 -2.473448) (xy -2.13566 -2.410352) (xy -2.155078 -2.327387)
- (xy -2.157684 -2.304078) (xy -2.162299 -2.194055) (xy -2.156767 -2.142748) (xy -2.017486 -2.142748)
- (xy -2.015676 -2.174753) (xy -2.005778 -2.184093) (xy -1.981102 -2.177105) (xy -1.942205 -2.160587)
- (xy -1.898725 -2.139881) (xy -1.897644 -2.139333) (xy -1.860791 -2.119949) (xy -1.846 -2.107013)
- (xy -1.849647 -2.093451) (xy -1.865005 -2.075632) (xy -1.904077 -2.049845) (xy -1.946154 -2.04795)
- (xy -1.983897 -2.066717) (xy -2.009966 -2.102915) (xy -2.017486 -2.142748) (xy -2.156767 -2.142748)
- (xy -2.152806 -2.106027) (xy -2.12845 -2.036212) (xy -2.094544 -1.987302) (xy -2.033347 -1.937878)
- (xy -1.965937 -1.913359) (xy -1.89712 -1.911797) (xy -1.831697 -1.931239)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy -0.624114 -1.851289) (xy -0.619861 -1.910613) (xy -0.614975 -1.945572) (xy -0.608205 -1.96082)
- (xy -0.598298 -1.961015) (xy -0.595086 -1.959195) (xy -0.552356 -1.946015) (xy -0.496773 -1.946785)
- (xy -0.440263 -1.960333) (xy -0.404918 -1.977861) (xy -0.368679 -2.005861) (xy -0.342187 -2.037549)
- (xy -0.324001 -2.077813) (xy -0.312678 -2.131543) (xy -0.306778 -2.203626) (xy -0.304857 -2.298951)
- (xy -0.304823 -2.317237) (xy -0.3048 -2.522646) (xy -0.350509 -2.53858) (xy -0.382973 -2.54942)
- (xy -0.400785 -2.554468) (xy -0.401309 -2.554514) (xy -0.403063 -2.540828) (xy -0.404556 -2.503076)
- (xy -0.405674 -2.446224) (xy -0.406303 -2.375234) (xy -0.4064 -2.332073) (xy -0.406602 -2.246973)
- (xy -0.407642 -2.185981) (xy -0.410169 -2.144177) (xy -0.414836 -2.116642) (xy -0.422293 -2.098456)
- (xy -0.433189 -2.084698) (xy -0.439993 -2.078073) (xy -0.486728 -2.051375) (xy -0.537728 -2.049375)
- (xy -0.583999 -2.071955) (xy -0.592556 -2.080107) (xy -0.605107 -2.095436) (xy -0.613812 -2.113618)
- (xy -0.619369 -2.139909) (xy -0.622474 -2.179562) (xy -0.623824 -2.237832) (xy -0.624114 -2.318173)
- (xy -0.624114 -2.522646) (xy -0.669823 -2.53858) (xy -0.702287 -2.54942) (xy -0.720099 -2.554468)
- (xy -0.720623 -2.554514) (xy -0.721963 -2.540623) (xy -0.723172 -2.501439) (xy -0.724199 -2.4407)
- (xy -0.724998 -2.362141) (xy -0.725519 -2.269498) (xy -0.725714 -2.166509) (xy -0.725714 -1.769342)
- (xy -0.678543 -1.749444) (xy -0.631371 -1.729547) (xy -0.624114 -1.851289)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 0.039744 -1.950968) (xy 0.096616 -1.972087) (xy 0.097267 -1.972493) (xy 0.13244 -1.99838)
- (xy 0.158407 -2.028633) (xy 0.17667 -2.068058) (xy 0.188732 -2.121462) (xy 0.196096 -2.193651)
- (xy 0.200264 -2.289432) (xy 0.200629 -2.303078) (xy 0.205876 -2.508842) (xy 0.161716 -2.531678)
- (xy 0.129763 -2.54711) (xy 0.11047 -2.554423) (xy 0.109578 -2.554514) (xy 0.106239 -2.541022)
- (xy 0.103587 -2.504626) (xy 0.101956 -2.451452) (xy 0.1016 -2.408393) (xy 0.101592 -2.338641)
- (xy 0.098403 -2.294837) (xy 0.087288 -2.273944) (xy 0.063501 -2.272925) (xy 0.022296 -2.288741)
- (xy -0.039914 -2.317815) (xy -0.085659 -2.341963) (xy -0.109187 -2.362913) (xy -0.116104 -2.385747)
- (xy -0.116114 -2.386877) (xy -0.104701 -2.426212) (xy -0.070908 -2.447462) (xy -0.019191 -2.450539)
- (xy 0.018061 -2.450006) (xy 0.037703 -2.460735) (xy 0.049952 -2.486505) (xy 0.057002 -2.519337)
- (xy 0.046842 -2.537966) (xy 0.043017 -2.540632) (xy 0.007001 -2.55134) (xy -0.043434 -2.552856)
- (xy -0.095374 -2.545759) (xy -0.132178 -2.532788) (xy -0.183062 -2.489585) (xy -0.211986 -2.429446)
- (xy -0.217714 -2.382462) (xy -0.213343 -2.340082) (xy -0.197525 -2.305488) (xy -0.166203 -2.274763)
- (xy -0.115322 -2.24399) (xy -0.040824 -2.209252) (xy -0.036286 -2.207288) (xy 0.030821 -2.176287)
- (xy 0.072232 -2.150862) (xy 0.089981 -2.128014) (xy 0.086107 -2.104745) (xy 0.062643 -2.078056)
- (xy 0.055627 -2.071914) (xy 0.00863 -2.0481) (xy -0.040067 -2.049103) (xy -0.082478 -2.072451)
- (xy -0.110616 -2.115675) (xy -0.113231 -2.12416) (xy -0.138692 -2.165308) (xy -0.170999 -2.185128)
- (xy -0.217714 -2.20477) (xy -0.217714 -2.15395) (xy -0.203504 -2.080082) (xy -0.161325 -2.012327)
- (xy -0.139376 -1.989661) (xy -0.089483 -1.960569) (xy -0.026033 -1.9474) (xy 0.039744 -1.950968)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 0.529926 -1.949755) (xy 0.595858 -1.974084) (xy 0.649273 -2.017117) (xy 0.670164 -2.047409)
- (xy 0.692939 -2.102994) (xy 0.692466 -2.143186) (xy 0.668562 -2.170217) (xy 0.659717 -2.174813)
- (xy 0.62153 -2.189144) (xy 0.602028 -2.185472) (xy 0.595422 -2.161407) (xy 0.595086 -2.148114)
- (xy 0.582992 -2.09921) (xy 0.551471 -2.064999) (xy 0.507659 -2.048476) (xy 0.458695 -2.052634)
- (xy 0.418894 -2.074227) (xy 0.40545 -2.086544) (xy 0.395921 -2.101487) (xy 0.389485 -2.124075)
- (xy 0.385317 -2.159328) (xy 0.382597 -2.212266) (xy 0.380502 -2.287907) (xy 0.37996 -2.311857)
- (xy 0.377981 -2.39379) (xy 0.375731 -2.451455) (xy 0.372357 -2.489608) (xy 0.367006 -2.513004)
- (xy 0.358824 -2.526398) (xy 0.346959 -2.534545) (xy 0.339362 -2.538144) (xy 0.307102 -2.550452)
- (xy 0.288111 -2.554514) (xy 0.281836 -2.540948) (xy 0.278006 -2.499934) (xy 0.2766 -2.430999)
- (xy 0.277598 -2.333669) (xy 0.277908 -2.318657) (xy 0.280101 -2.229859) (xy 0.282693 -2.165019)
- (xy 0.286382 -2.119067) (xy 0.291864 -2.086935) (xy 0.299835 -2.063553) (xy 0.310993 -2.043852)
- (xy 0.31683 -2.03541) (xy 0.350296 -1.998057) (xy 0.387727 -1.969003) (xy 0.392309 -1.966467)
- (xy 0.459426 -1.946443) (xy 0.529926 -1.949755)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 1.190117 -2.065358) (xy 1.189933 -2.173837) (xy 1.189219 -2.257287) (xy 1.187675 -2.319704)
- (xy 1.185001 -2.365085) (xy 1.180894 -2.397429) (xy 1.175055 -2.420733) (xy 1.167182 -2.438995)
- (xy 1.161221 -2.449418) (xy 1.111855 -2.505945) (xy 1.049264 -2.541377) (xy 0.980013 -2.55409)
- (xy 0.910668 -2.542463) (xy 0.869375 -2.521568) (xy 0.826025 -2.485422) (xy 0.796481 -2.441276)
- (xy 0.778655 -2.383462) (xy 0.770463 -2.306313) (xy 0.769302 -2.249714) (xy 0.769458 -2.245647)
- (xy 0.870857 -2.245647) (xy 0.871476 -2.31055) (xy 0.874314 -2.353514) (xy 0.88084 -2.381622)
- (xy 0.892523 -2.401953) (xy 0.906483 -2.417288) (xy 0.953365 -2.44689) (xy 1.003701 -2.449419)
- (xy 1.051276 -2.424705) (xy 1.054979 -2.421356) (xy 1.070783 -2.403935) (xy 1.080693 -2.383209)
- (xy 1.086058 -2.352362) (xy 1.088228 -2.304577) (xy 1.088571 -2.251748) (xy 1.087827 -2.185381)
- (xy 1.084748 -2.141106) (xy 1.078061 -2.112009) (xy 1.066496 -2.091173) (xy 1.057013 -2.080107)
- (xy 1.01296 -2.052198) (xy 0.962224 -2.048843) (xy 0.913796 -2.070159) (xy 0.90445 -2.078073)
- (xy 0.88854 -2.095647) (xy 0.87861 -2.116587) (xy 0.873278 -2.147782) (xy 0.871163 -2.196122)
- (xy 0.870857 -2.245647) (xy 0.769458 -2.245647) (xy 0.77281 -2.158568) (xy 0.784726 -2.090086)
- (xy 0.807135 -2.0386) (xy 0.842124 -1.998443) (xy 0.869375 -1.977861) (xy 0.918907 -1.955625)
- (xy 0.976316 -1.945304) (xy 1.029682 -1.948067) (xy 1.059543 -1.959212) (xy 1.071261 -1.962383)
- (xy 1.079037 -1.950557) (xy 1.084465 -1.918866) (xy 1.088571 -1.870593) (xy 1.093067 -1.816829)
- (xy 1.099313 -1.784482) (xy 1.110676 -1.765985) (xy 1.130528 -1.75377) (xy 1.143 -1.748362)
- (xy 1.190171 -1.728601) (xy 1.190117 -2.065358)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 1.779833 -1.958663) (xy 1.782048 -1.99685) (xy 1.783784 -2.054886) (xy 1.784899 -2.12818)
- (xy 1.785257 -2.205055) (xy 1.785257 -2.465196) (xy 1.739326 -2.511127) (xy 1.707675 -2.539429)
- (xy 1.67989 -2.550893) (xy 1.641915 -2.550168) (xy 1.62684 -2.548321) (xy 1.579726 -2.542948)
- (xy 1.540756 -2.539869) (xy 1.531257 -2.539585) (xy 1.499233 -2.541445) (xy 1.453432 -2.546114)
- (xy 1.435674 -2.548321) (xy 1.392057 -2.551735) (xy 1.362745 -2.54432) (xy 1.33368 -2.521427)
- (xy 1.323188 -2.511127) (xy 1.277257 -2.465196) (xy 1.277257 -1.978602) (xy 1.314226 -1.961758)
- (xy 1.346059 -1.949282) (xy 1.364683 -1.944914) (xy 1.369458 -1.958718) (xy 1.373921 -1.997286)
- (xy 1.377775 -2.056356) (xy 1.380722 -2.131663) (xy 1.382143 -2.195286) (xy 1.386114 -2.445657)
- (xy 1.420759 -2.450556) (xy 1.452268 -2.447131) (xy 1.467708 -2.436041) (xy 1.472023 -2.415308)
- (xy 1.475708 -2.371145) (xy 1.478469 -2.309146) (xy 1.480012 -2.234909) (xy 1.480235 -2.196706)
- (xy 1.480457 -1.976783) (xy 1.526166 -1.960849) (xy 1.558518 -1.950015) (xy 1.576115 -1.944962)
- (xy 1.576623 -1.944914) (xy 1.578388 -1.958648) (xy 1.580329 -1.99673) (xy 1.582282 -2.054482)
- (xy 1.584084 -2.127227) (xy 1.585343 -2.195286) (xy 1.589314 -2.445657) (xy 1.6764 -2.445657)
- (xy 1.680396 -2.21724) (xy 1.684392 -1.988822) (xy 1.726847 -1.966868) (xy 1.758192 -1.951793)
- (xy 1.776744 -1.944951) (xy 1.777279 -1.944914) (xy 1.779833 -1.958663)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 2.144876 -1.956335) (xy 2.186667 -1.975344) (xy 2.219469 -1.998378) (xy 2.243503 -2.024133)
- (xy 2.260097 -2.057358) (xy 2.270577 -2.1028) (xy 2.276271 -2.165207) (xy 2.278507 -2.249327)
- (xy 2.278743 -2.304721) (xy 2.278743 -2.520826) (xy 2.241774 -2.53767) (xy 2.212656 -2.549981)
- (xy 2.198231 -2.554514) (xy 2.195472 -2.541025) (xy 2.193282 -2.504653) (xy 2.191942 -2.451542)
- (xy 2.191657 -2.409372) (xy 2.190434 -2.348447) (xy 2.187136 -2.300115) (xy 2.182321 -2.270518)
- (xy 2.178496 -2.264229) (xy 2.152783 -2.270652) (xy 2.112418 -2.287125) (xy 2.065679 -2.309458)
- (xy 2.020845 -2.333457) (xy 1.986193 -2.35493) (xy 1.970002 -2.369685) (xy 1.969938 -2.369845)
- (xy 1.97133 -2.397152) (xy 1.983818 -2.423219) (xy 2.005743 -2.444392) (xy 2.037743 -2.451474)
- (xy 2.065092 -2.450649) (xy 2.103826 -2.450042) (xy 2.124158 -2.459116) (xy 2.136369 -2.483092)
- (xy 2.137909 -2.487613) (xy 2.143203 -2.521806) (xy 2.129047 -2.542568) (xy 2.092148 -2.552462)
- (xy 2.052289 -2.554292) (xy 1.980562 -2.540727) (xy 1.943432 -2.521355) (xy 1.897576 -2.475845)
- (xy 1.873256 -2.419983) (xy 1.871073 -2.360957) (xy 1.891629 -2.305953) (xy 1.922549 -2.271486)
- (xy 1.95342 -2.252189) (xy 2.001942 -2.227759) (xy 2.058485 -2.202985) (xy 2.06791 -2.199199)
- (xy 2.130019 -2.171791) (xy 2.165822 -2.147634) (xy 2.177337 -2.123619) (xy 2.16658 -2.096635)
- (xy 2.148114 -2.075543) (xy 2.104469 -2.049572) (xy 2.056446 -2.047624) (xy 2.012406 -2.067637)
- (xy 1.980709 -2.107551) (xy 1.976549 -2.117848) (xy 1.952327 -2.155724) (xy 1.916965 -2.183842)
- (xy 1.872343 -2.206917) (xy 1.872343 -2.141485) (xy 1.874969 -2.101506) (xy 1.88623 -2.069997)
- (xy 1.911199 -2.036378) (xy 1.935169 -2.010484) (xy 1.972441 -1.973817) (xy 2.001401 -1.954121)
- (xy 2.032505 -1.94622) (xy 2.067713 -1.944914) (xy 2.144876 -1.956335)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 2.6526 -1.958752) (xy 2.669948 -1.966334) (xy 2.711356 -1.999128) (xy 2.746765 -2.046547)
- (xy 2.768664 -2.097151) (xy 2.772229 -2.122098) (xy 2.760279 -2.156927) (xy 2.734067 -2.175357)
- (xy 2.705964 -2.186516) (xy 2.693095 -2.188572) (xy 2.686829 -2.173649) (xy 2.674456 -2.141175)
- (xy 2.669028 -2.126502) (xy 2.63859 -2.075744) (xy 2.59452 -2.050427) (xy 2.53801 -2.051206)
- (xy 2.533825 -2.052203) (xy 2.503655 -2.066507) (xy 2.481476 -2.094393) (xy 2.466327 -2.139287)
- (xy 2.45725 -2.204615) (xy 2.453286 -2.293804) (xy 2.452914 -2.341261) (xy 2.45273 -2.416071)
- (xy 2.451522 -2.467069) (xy 2.448309 -2.499471) (xy 2.442109 -2.518495) (xy 2.43194 -2.529356)
- (xy 2.416819 -2.537272) (xy 2.415946 -2.53767) (xy 2.386828 -2.549981) (xy 2.372403 -2.554514)
- (xy 2.370186 -2.540809) (xy 2.368289 -2.502925) (xy 2.366847 -2.445715) (xy 2.365998 -2.374027)
- (xy 2.365829 -2.321565) (xy 2.366692 -2.220047) (xy 2.37007 -2.143032) (xy 2.377142 -2.086023)
- (xy 2.389088 -2.044526) (xy 2.40709 -2.014043) (xy 2.432327 -1.99008) (xy 2.457247 -1.973355)
- (xy 2.517171 -1.951097) (xy 2.586911 -1.946076) (xy 2.6526 -1.958752)) (layer B.SilkS) (width 0.01))
- (fp_poly (pts (xy 3.153595 -1.966966) (xy 3.211021 -2.004497) (xy 3.238719 -2.038096) (xy 3.260662 -2.099064)
- (xy 3.262405 -2.147308) (xy 3.258457 -2.211816) (xy 3.109686 -2.276934) (xy 3.037349 -2.310202)
- (xy 2.990084 -2.336964) (xy 2.965507 -2.360144) (xy 2.961237 -2.382667) (xy 2.974889 -2.407455)
- (xy 2.989943 -2.423886) (xy 3.033746 -2.450235) (xy 3.081389 -2.452081) (xy 3.125145 -2.431546)
- (xy 3.157289 -2.390752) (xy 3.163038 -2.376347) (xy 3.190576 -2.331356) (xy 3.222258 -2.312182)
- (xy 3.265714 -2.295779) (xy 3.265714 -2.357966) (xy 3.261872 -2.400283) (xy 3.246823 -2.435969)
- (xy 3.21528 -2.476943) (xy 3.210592 -2.482267) (xy 3.175506 -2.51872) (xy 3.145347 -2.538283)
- (xy 3.107615 -2.547283) (xy 3.076335 -2.55023) (xy 3.020385 -2.550965) (xy 2.980555 -2.54166)
- (xy 2.955708 -2.527846) (xy 2.916656 -2.497467) (xy 2.889625 -2.464613) (xy 2.872517 -2.423294)
- (xy 2.863238 -2.367521) (xy 2.859693 -2.291305) (xy 2.85941 -2.252622) (xy 2.860372 -2.206247)
- (xy 2.948007 -2.206247) (xy 2.949023 -2.231126) (xy 2.951556 -2.2352) (xy 2.968274 -2.229665)
- (xy 3.004249 -2.215017) (xy 3.052331 -2.19419) (xy 3.062386 -2.189714) (xy 3.123152 -2.158814)
- (xy 3.156632 -2.131657) (xy 3.16399 -2.10622) (xy 3.146391 -2.080481) (xy 3.131856 -2.069109)
- (xy 3.07941 -2.046364) (xy 3.030322 -2.050122) (xy 2.989227 -2.077884) (xy 2.960758 -2.127152)
- (xy 2.951631 -2.166257) (xy 2.948007 -2.206247) (xy 2.860372 -2.206247) (xy 2.861285 -2.162249)
- (xy 2.868196 -2.095384) (xy 2.881884 -2.046695) (xy 2.904096 -2.010849) (xy 2.936574 -1.982513)
- (xy 2.950733 -1.973355) (xy 3.015053 -1.949507) (xy 3.085473 -1.948006) (xy 3.153595 -1.966966)) (layer B.SilkS) (width 0.01))
+ (pad A9 smd rect (at 2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 16 USB-IN))
+ (pad B9 smd rect (at -2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 16 USB-IN))
+ (pad B12 smd rect (at -3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 2 GND))
+ (pad A1 smd rect (at -3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 2 GND))
+ (pad A4 smd rect (at -2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 16 USB-IN))
+ (pad B4 smd rect (at 2.45 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 16 USB-IN))
+ (pad A12 smd rect (at 3.25 4.045) (size 0.6 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 2 GND))
+ (pad B8 smd rect (at -1.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 76 "Net-(J1-PadB8)"))
+ (pad A5 smd rect (at -1.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 64 "Net-(J1-PadA5)"))
+ (pad B7 smd rect (at -0.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 63 "Net-(J1-PadA7)"))
+ (pad A7 smd rect (at 0.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 63 "Net-(J1-PadA7)"))
+ (pad B6 smd rect (at 0.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 62 "Net-(J1-PadA6)"))
+ (pad A8 smd rect (at 1.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 75 "Net-(J1-PadA8)"))
+ (pad B5 smd rect (at 1.75 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 65 "Net-(J1-PadB5)"))
+ (pad A6 smd rect (at -0.25 4.045) (size 0.3 1.45) (layers B.Cu B.Paste B.Mask)
+ (net 62 "Net-(J1-PadA6)"))
+ (pad S1 thru_hole oval (at 4.32 3.13) (size 1 2.1) (drill oval 0.6 1.7) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad S1 thru_hole oval (at -4.32 3.13) (size 1 2.1) (drill oval 0.6 1.7) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad "" np_thru_hole circle (at -2.89 2.6) (size 0.65 0.65) (drill 0.65) (layers *.Cu *.Mask))
+ (pad S1 thru_hole oval (at -4.32 -1.05) (size 1 1.6) (drill oval 0.6 1.2) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad "" np_thru_hole circle (at 2.89 2.6) (size 0.65 0.65) (drill 0.65) (layers *.Cu *.Mask))
+ (pad S1 thru_hole oval (at 4.32 -1.05) (size 1 1.6) (drill oval 0.6 1.2) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (model ${KISYS3DMOD}/Connector_USB.3dshapes/USB_C_Receptacle_HRO_TYPE-C-31-M-12.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ (model "${KIPRJMOD}/libs/HRO TYPE-C-31-M-12.step"
+ (offset (xyz -4.47 -3.66 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 90 180 180))
+ )
+ )
+
+ (module Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder (layer B.Cu) (tedit 5B36C52B) (tstamp 5DE58BB4)
+ (at 150.9 74.9 270)
+ (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal with elongated pad for handsoldering. (Body size source: https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator")
+ (tags "capacitor handsolder")
+ (path /5DEB0479)
+ (attr smd)
+ (fp_text reference C13 (at 2.6 -0.6) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value 47u (at 0 -1.65 270) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_text user %R (at 0 0 270) (layer B.Fab)
+ (effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
+ )
+ (pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
+ (net 1 +5V))
+ (pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
+ (net 2 GND))
+ (model ${KISYS3DMOD}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Symbol:KiCad-Logo2_5mm_SilkScreen (layer B.Cu) (tedit 0) (tstamp 5DE5895D)
+ (at 128.7 79.9 180)
+ (descr "KiCad Logo")
+ (tags "Logo KiCad")
+ (attr virtual)
+ (fp_text reference REF** (at 0 5.08) (layer B.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value KiCad-Logo2_5mm_SilkScreen (at 0 -5.08) (layer B.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_poly (pts (xy 6.228823 -2.274533) (xy 6.260202 -2.296776) (xy 6.287911 -2.324485) (xy 6.287911 -2.63392)
+ (xy 6.287838 -2.725799) (xy 6.287495 -2.79784) (xy 6.286692 -2.85278) (xy 6.285241 -2.89336)
+ (xy 6.282952 -2.922317) (xy 6.279636 -2.942391) (xy 6.275105 -2.956321) (xy 6.269169 -2.966845)
+ (xy 6.264514 -2.9731) (xy 6.233783 -2.997673) (xy 6.198496 -3.000341) (xy 6.166245 -2.985271)
+ (xy 6.155588 -2.976374) (xy 6.148464 -2.964557) (xy 6.144167 -2.945526) (xy 6.141991 -2.914992)
+ (xy 6.141228 -2.868662) (xy 6.141155 -2.832871) (xy 6.141155 -2.698045) (xy 5.644444 -2.698045)
+ (xy 5.644444 -2.8207) (xy 5.643931 -2.876787) (xy 5.641876 -2.915333) (xy 5.637508 -2.941361)
+ (xy 5.630056 -2.959897) (xy 5.621047 -2.9731) (xy 5.590144 -2.997604) (xy 5.555196 -3.000506)
+ (xy 5.521738 -2.983089) (xy 5.512604 -2.973959) (xy 5.506152 -2.961855) (xy 5.501897 -2.943001)
+ (xy 5.499352 -2.91362) (xy 5.498029 -2.869937) (xy 5.497443 -2.808175) (xy 5.497375 -2.794)
+ (xy 5.496891 -2.677631) (xy 5.496641 -2.581727) (xy 5.496723 -2.504177) (xy 5.497231 -2.442869)
+ (xy 5.498262 -2.39569) (xy 5.499913 -2.36053) (xy 5.502279 -2.335276) (xy 5.505457 -2.317817)
+ (xy 5.509544 -2.306041) (xy 5.514634 -2.297835) (xy 5.520266 -2.291645) (xy 5.552128 -2.271844)
+ (xy 5.585357 -2.274533) (xy 5.616735 -2.296776) (xy 5.629433 -2.311126) (xy 5.637526 -2.326978)
+ (xy 5.642042 -2.349554) (xy 5.644006 -2.384078) (xy 5.644444 -2.435776) (xy 5.644444 -2.551289)
+ (xy 6.141155 -2.551289) (xy 6.141155 -2.432756) (xy 6.141662 -2.378148) (xy 6.143698 -2.341275)
+ (xy 6.148035 -2.317307) (xy 6.155447 -2.301415) (xy 6.163733 -2.291645) (xy 6.195594 -2.271844)
+ (xy 6.228823 -2.274533)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 4.963065 -2.269163) (xy 5.041772 -2.269542) (xy 5.102863 -2.270333) (xy 5.148817 -2.27167)
+ (xy 5.182114 -2.273683) (xy 5.205236 -2.276506) (xy 5.220662 -2.280269) (xy 5.230871 -2.285105)
+ (xy 5.235813 -2.288822) (xy 5.261457 -2.321358) (xy 5.264559 -2.355138) (xy 5.248711 -2.385826)
+ (xy 5.238348 -2.398089) (xy 5.227196 -2.40645) (xy 5.211035 -2.411657) (xy 5.185642 -2.414457)
+ (xy 5.146798 -2.415596) (xy 5.09028 -2.415821) (xy 5.07918 -2.415822) (xy 4.933244 -2.415822)
+ (xy 4.933244 -2.686756) (xy 4.933148 -2.772154) (xy 4.932711 -2.837864) (xy 4.931712 -2.886774)
+ (xy 4.929928 -2.921773) (xy 4.927137 -2.945749) (xy 4.923117 -2.961593) (xy 4.917645 -2.972191)
+ (xy 4.910666 -2.980267) (xy 4.877734 -3.000112) (xy 4.843354 -2.998548) (xy 4.812176 -2.975906)
+ (xy 4.809886 -2.9731) (xy 4.802429 -2.962492) (xy 4.796747 -2.950081) (xy 4.792601 -2.93285)
+ (xy 4.78975 -2.907784) (xy 4.787954 -2.871867) (xy 4.786972 -2.822083) (xy 4.786564 -2.755417)
+ (xy 4.786489 -2.679589) (xy 4.786489 -2.415822) (xy 4.647127 -2.415822) (xy 4.587322 -2.415418)
+ (xy 4.545918 -2.41384) (xy 4.518748 -2.410547) (xy 4.501646 -2.404992) (xy 4.490443 -2.396631)
+ (xy 4.489083 -2.395178) (xy 4.472725 -2.361939) (xy 4.474172 -2.324362) (xy 4.492978 -2.291645)
+ (xy 4.50025 -2.285298) (xy 4.509627 -2.280266) (xy 4.523609 -2.276396) (xy 4.544696 -2.273537)
+ (xy 4.575389 -2.271535) (xy 4.618189 -2.270239) (xy 4.675595 -2.269498) (xy 4.75011 -2.269158)
+ (xy 4.844233 -2.269068) (xy 4.86426 -2.269067) (xy 4.963065 -2.269163)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 4.188614 -2.275877) (xy 4.212327 -2.290647) (xy 4.238978 -2.312227) (xy 4.238978 -2.633773)
+ (xy 4.238893 -2.72783) (xy 4.238529 -2.801932) (xy 4.237724 -2.858704) (xy 4.236313 -2.900768)
+ (xy 4.234133 -2.930748) (xy 4.231021 -2.951267) (xy 4.226814 -2.964949) (xy 4.221348 -2.974416)
+ (xy 4.217472 -2.979082) (xy 4.186034 -2.999575) (xy 4.150233 -2.998739) (xy 4.118873 -2.981264)
+ (xy 4.092222 -2.959684) (xy 4.092222 -2.312227) (xy 4.118873 -2.290647) (xy 4.144594 -2.274949)
+ (xy 4.1656 -2.269067) (xy 4.188614 -2.275877)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 3.744665 -2.271034) (xy 3.764255 -2.278035) (xy 3.76501 -2.278377) (xy 3.791613 -2.298678)
+ (xy 3.80627 -2.319561) (xy 3.809138 -2.329352) (xy 3.808996 -2.342361) (xy 3.804961 -2.360895)
+ (xy 3.796146 -2.387257) (xy 3.781669 -2.423752) (xy 3.760645 -2.472687) (xy 3.732188 -2.536365)
+ (xy 3.695415 -2.617093) (xy 3.675175 -2.661216) (xy 3.638625 -2.739985) (xy 3.604315 -2.812423)
+ (xy 3.573552 -2.87588) (xy 3.547648 -2.927708) (xy 3.52791 -2.965259) (xy 3.51565 -2.985884)
+ (xy 3.513224 -2.988733) (xy 3.482183 -3.001302) (xy 3.447121 -2.999619) (xy 3.419 -2.984332)
+ (xy 3.417854 -2.983089) (xy 3.406668 -2.966154) (xy 3.387904 -2.93317) (xy 3.363875 -2.88838)
+ (xy 3.336897 -2.836032) (xy 3.327201 -2.816742) (xy 3.254014 -2.67015) (xy 3.17424 -2.829393)
+ (xy 3.145767 -2.884415) (xy 3.11935 -2.932132) (xy 3.097148 -2.968893) (xy 3.081319 -2.991044)
+ (xy 3.075954 -2.995741) (xy 3.034257 -3.002102) (xy 2.999849 -2.988733) (xy 2.989728 -2.974446)
+ (xy 2.972214 -2.942692) (xy 2.948735 -2.896597) (xy 2.92072 -2.839285) (xy 2.889599 -2.77388)
+ (xy 2.856799 -2.703507) (xy 2.82375 -2.631291) (xy 2.791881 -2.560355) (xy 2.762619 -2.493825)
+ (xy 2.737395 -2.434826) (xy 2.717636 -2.386481) (xy 2.704772 -2.351915) (xy 2.700231 -2.334253)
+ (xy 2.700277 -2.333613) (xy 2.711326 -2.311388) (xy 2.73341 -2.288753) (xy 2.73471 -2.287768)
+ (xy 2.761853 -2.272425) (xy 2.786958 -2.272574) (xy 2.796368 -2.275466) (xy 2.807834 -2.281718)
+ (xy 2.82001 -2.294014) (xy 2.834357 -2.314908) (xy 2.852336 -2.346949) (xy 2.875407 -2.392688)
+ (xy 2.90503 -2.454677) (xy 2.931745 -2.511898) (xy 2.96248 -2.578226) (xy 2.990021 -2.637874)
+ (xy 3.012938 -2.687725) (xy 3.029798 -2.724664) (xy 3.039173 -2.745573) (xy 3.04054 -2.748845)
+ (xy 3.046689 -2.743497) (xy 3.060822 -2.721109) (xy 3.081057 -2.684946) (xy 3.105515 -2.638277)
+ (xy 3.115248 -2.619022) (xy 3.148217 -2.554004) (xy 3.173643 -2.506654) (xy 3.193612 -2.474219)
+ (xy 3.21021 -2.453946) (xy 3.225524 -2.443082) (xy 3.24164 -2.438875) (xy 3.252143 -2.4384)
+ (xy 3.27067 -2.440042) (xy 3.286904 -2.446831) (xy 3.303035 -2.461566) (xy 3.321251 -2.487044)
+ (xy 3.343739 -2.526061) (xy 3.372689 -2.581414) (xy 3.388662 -2.612903) (xy 3.41457 -2.663087)
+ (xy 3.437167 -2.704704) (xy 3.454458 -2.734242) (xy 3.46445 -2.748189) (xy 3.465809 -2.74877)
+ (xy 3.472261 -2.737793) (xy 3.486708 -2.70929) (xy 3.507703 -2.666244) (xy 3.533797 -2.611638)
+ (xy 3.563546 -2.548454) (xy 3.57818 -2.517071) (xy 3.61625 -2.436078) (xy 3.646905 -2.373756)
+ (xy 3.671737 -2.328071) (xy 3.692337 -2.296989) (xy 3.710298 -2.278478) (xy 3.72721 -2.270504)
+ (xy 3.744665 -2.271034)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 1.018309 -2.269275) (xy 1.147288 -2.273636) (xy 1.256991 -2.286861) (xy 1.349226 -2.309741)
+ (xy 1.425802 -2.34307) (xy 1.488527 -2.387638) (xy 1.539212 -2.444236) (xy 1.579663 -2.513658)
+ (xy 1.580459 -2.515351) (xy 1.604601 -2.577483) (xy 1.613203 -2.632509) (xy 1.606231 -2.687887)
+ (xy 1.583654 -2.751073) (xy 1.579372 -2.760689) (xy 1.550172 -2.816966) (xy 1.517356 -2.860451)
+ (xy 1.475002 -2.897417) (xy 1.41719 -2.934135) (xy 1.413831 -2.936052) (xy 1.363504 -2.960227)
+ (xy 1.306621 -2.978282) (xy 1.239527 -2.990839) (xy 1.158565 -2.998522) (xy 1.060082 -3.001953)
+ (xy 1.025286 -3.002251) (xy 0.859594 -3.002845) (xy 0.836197 -2.9731) (xy 0.829257 -2.963319)
+ (xy 0.823842 -2.951897) (xy 0.819765 -2.936095) (xy 0.816837 -2.913175) (xy 0.814867 -2.880396)
+ (xy 0.814225 -2.856089) (xy 0.970844 -2.856089) (xy 1.064726 -2.856089) (xy 1.119664 -2.854483)
+ (xy 1.17606 -2.850255) (xy 1.222345 -2.844292) (xy 1.225139 -2.84379) (xy 1.307348 -2.821736)
+ (xy 1.371114 -2.7886) (xy 1.418452 -2.742847) (xy 1.451382 -2.682939) (xy 1.457108 -2.667061)
+ (xy 1.462721 -2.642333) (xy 1.460291 -2.617902) (xy 1.448467 -2.5854) (xy 1.44134 -2.569434)
+ (xy 1.418 -2.527006) (xy 1.38988 -2.49724) (xy 1.35894 -2.476511) (xy 1.296966 -2.449537)
+ (xy 1.217651 -2.429998) (xy 1.125253 -2.418746) (xy 1.058333 -2.41627) (xy 0.970844 -2.415822)
+ (xy 0.970844 -2.856089) (xy 0.814225 -2.856089) (xy 0.813668 -2.835021) (xy 0.81305 -2.774311)
+ (xy 0.812825 -2.695526) (xy 0.8128 -2.63392) (xy 0.8128 -2.324485) (xy 0.840509 -2.296776)
+ (xy 0.852806 -2.285544) (xy 0.866103 -2.277853) (xy 0.884672 -2.27304) (xy 0.912786 -2.270446)
+ (xy 0.954717 -2.26941) (xy 1.014737 -2.26927) (xy 1.018309 -2.269275)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 0.230343 -2.26926) (xy 0.306701 -2.270174) (xy 0.365217 -2.272311) (xy 0.408255 -2.276175)
+ (xy 0.438183 -2.282267) (xy 0.457368 -2.29109) (xy 0.468176 -2.303146) (xy 0.472973 -2.318939)
+ (xy 0.474127 -2.33897) (xy 0.474133 -2.341335) (xy 0.473131 -2.363992) (xy 0.468396 -2.381503)
+ (xy 0.457333 -2.394574) (xy 0.437348 -2.403913) (xy 0.405846 -2.410227) (xy 0.360232 -2.414222)
+ (xy 0.297913 -2.416606) (xy 0.216293 -2.418086) (xy 0.191277 -2.418414) (xy -0.0508 -2.421467)
+ (xy -0.054186 -2.486378) (xy -0.057571 -2.551289) (xy 0.110576 -2.551289) (xy 0.176266 -2.551531)
+ (xy 0.223172 -2.552556) (xy 0.255083 -2.554811) (xy 0.275791 -2.558742) (xy 0.289084 -2.564798)
+ (xy 0.298755 -2.573424) (xy 0.298817 -2.573493) (xy 0.316356 -2.607112) (xy 0.315722 -2.643448)
+ (xy 0.297314 -2.674423) (xy 0.293671 -2.677607) (xy 0.280741 -2.685812) (xy 0.263024 -2.691521)
+ (xy 0.23657 -2.695162) (xy 0.197432 -2.697167) (xy 0.141662 -2.697964) (xy 0.105994 -2.698045)
+ (xy -0.056445 -2.698045) (xy -0.056445 -2.856089) (xy 0.190161 -2.856089) (xy 0.27158 -2.856231)
+ (xy 0.33341 -2.856814) (xy 0.378637 -2.858068) (xy 0.410248 -2.860227) (xy 0.431231 -2.863523)
+ (xy 0.444573 -2.868189) (xy 0.453261 -2.874457) (xy 0.45545 -2.876733) (xy 0.471614 -2.90828)
+ (xy 0.472797 -2.944168) (xy 0.459536 -2.975285) (xy 0.449043 -2.985271) (xy 0.438129 -2.990769)
+ (xy 0.421217 -2.995022) (xy 0.395633 -2.99818) (xy 0.358701 -3.000392) (xy 0.307746 -3.001806)
+ (xy 0.240094 -3.002572) (xy 0.153069 -3.002838) (xy 0.133394 -3.002845) (xy 0.044911 -3.002787)
+ (xy -0.023773 -3.002467) (xy -0.075436 -3.001667) (xy -0.112855 -3.000167) (xy -0.13881 -2.997749)
+ (xy -0.156078 -2.994194) (xy -0.167438 -2.989282) (xy -0.175668 -2.982795) (xy -0.180183 -2.978138)
+ (xy -0.186979 -2.969889) (xy -0.192288 -2.959669) (xy -0.196294 -2.9448) (xy -0.199179 -2.922602)
+ (xy -0.201126 -2.890393) (xy -0.202319 -2.845496) (xy -0.202939 -2.785228) (xy -0.203171 -2.706911)
+ (xy -0.2032 -2.640994) (xy -0.203129 -2.548628) (xy -0.202792 -2.476117) (xy -0.202002 -2.420737)
+ (xy -0.200574 -2.379765) (xy -0.198321 -2.350478) (xy -0.195057 -2.330153) (xy -0.190596 -2.316066)
+ (xy -0.184752 -2.305495) (xy -0.179803 -2.298811) (xy -0.156406 -2.269067) (xy 0.133774 -2.269067)
+ (xy 0.230343 -2.26926)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -1.300114 -2.273448) (xy -1.276548 -2.287273) (xy -1.245735 -2.309881) (xy -1.206078 -2.342338)
+ (xy -1.15598 -2.385708) (xy -1.093843 -2.441058) (xy -1.018072 -2.509451) (xy -0.931334 -2.588084)
+ (xy -0.750711 -2.751878) (xy -0.745067 -2.532029) (xy -0.743029 -2.456351) (xy -0.741063 -2.399994)
+ (xy -0.738734 -2.359706) (xy -0.735606 -2.332235) (xy -0.731245 -2.314329) (xy -0.725216 -2.302737)
+ (xy -0.717084 -2.294208) (xy -0.712772 -2.290623) (xy -0.678241 -2.27167) (xy -0.645383 -2.274441)
+ (xy -0.619318 -2.290633) (xy -0.592667 -2.312199) (xy -0.589352 -2.627151) (xy -0.588435 -2.719779)
+ (xy -0.587968 -2.792544) (xy -0.588113 -2.848161) (xy -0.589032 -2.889342) (xy -0.590887 -2.918803)
+ (xy -0.593839 -2.939255) (xy -0.59805 -2.953413) (xy -0.603682 -2.963991) (xy -0.609927 -2.972474)
+ (xy -0.623439 -2.988207) (xy -0.636883 -2.998636) (xy -0.652124 -3.002639) (xy -0.671026 -2.999094)
+ (xy -0.695455 -2.986879) (xy -0.727273 -2.964871) (xy -0.768348 -2.931949) (xy -0.820542 -2.886991)
+ (xy -0.885722 -2.828875) (xy -0.959556 -2.762099) (xy -1.224845 -2.521458) (xy -1.230489 -2.740589)
+ (xy -1.232531 -2.816128) (xy -1.234502 -2.872354) (xy -1.236839 -2.912524) (xy -1.239981 -2.939896)
+ (xy -1.244364 -2.957728) (xy -1.250424 -2.969279) (xy -1.2586 -2.977807) (xy -1.262784 -2.981282)
+ (xy -1.299765 -3.000372) (xy -1.334708 -2.997493) (xy -1.365136 -2.9731) (xy -1.372097 -2.963286)
+ (xy -1.377523 -2.951826) (xy -1.381603 -2.935968) (xy -1.384529 -2.912963) (xy -1.386492 -2.880062)
+ (xy -1.387683 -2.834516) (xy -1.388292 -2.773573) (xy -1.388511 -2.694486) (xy -1.388534 -2.635956)
+ (xy -1.38846 -2.544407) (xy -1.388113 -2.472687) (xy -1.387301 -2.418045) (xy -1.385833 -2.377732)
+ (xy -1.383519 -2.348998) (xy -1.380167 -2.329093) (xy -1.375588 -2.315268) (xy -1.369589 -2.304772)
+ (xy -1.365136 -2.298811) (xy -1.35385 -2.284691) (xy -1.343301 -2.274029) (xy -1.331893 -2.267892)
+ (xy -1.31803 -2.267343) (xy -1.300114 -2.273448)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -1.950081 -2.274599) (xy -1.881565 -2.286095) (xy -1.828943 -2.303967) (xy -1.794708 -2.327499)
+ (xy -1.785379 -2.340924) (xy -1.775893 -2.372148) (xy -1.782277 -2.400395) (xy -1.80243 -2.427182)
+ (xy -1.833745 -2.439713) (xy -1.879183 -2.438696) (xy -1.914326 -2.431906) (xy -1.992419 -2.418971)
+ (xy -2.072226 -2.417742) (xy -2.161555 -2.428241) (xy -2.186229 -2.43269) (xy -2.269291 -2.456108)
+ (xy -2.334273 -2.490945) (xy -2.380461 -2.536604) (xy -2.407145 -2.592494) (xy -2.412663 -2.621388)
+ (xy -2.409051 -2.680012) (xy -2.385729 -2.731879) (xy -2.344824 -2.775978) (xy -2.288459 -2.811299)
+ (xy -2.21876 -2.836829) (xy -2.137852 -2.851559) (xy -2.04786 -2.854478) (xy -1.95091 -2.844575)
+ (xy -1.945436 -2.843641) (xy -1.906875 -2.836459) (xy -1.885494 -2.829521) (xy -1.876227 -2.819227)
+ (xy -1.874006 -2.801976) (xy -1.873956 -2.792841) (xy -1.873956 -2.754489) (xy -1.942431 -2.754489)
+ (xy -2.0029 -2.750347) (xy -2.044165 -2.737147) (xy -2.068175 -2.71373) (xy -2.076877 -2.678936)
+ (xy -2.076983 -2.674394) (xy -2.071892 -2.644654) (xy -2.054433 -2.623419) (xy -2.021939 -2.609366)
+ (xy -1.971743 -2.601173) (xy -1.923123 -2.598161) (xy -1.852456 -2.596433) (xy -1.801198 -2.59907)
+ (xy -1.766239 -2.6088) (xy -1.74447 -2.628353) (xy -1.73278 -2.660456) (xy -1.72806 -2.707838)
+ (xy -1.7272 -2.770071) (xy -1.728609 -2.839535) (xy -1.732848 -2.886786) (xy -1.739936 -2.912012)
+ (xy -1.741311 -2.913988) (xy -1.780228 -2.945508) (xy -1.837286 -2.97047) (xy -1.908869 -2.98834)
+ (xy -1.991358 -2.998586) (xy -2.081139 -3.000673) (xy -2.174592 -2.994068) (xy -2.229556 -2.985956)
+ (xy -2.315766 -2.961554) (xy -2.395892 -2.921662) (xy -2.462977 -2.869887) (xy -2.473173 -2.859539)
+ (xy -2.506302 -2.816035) (xy -2.536194 -2.762118) (xy -2.559357 -2.705592) (xy -2.572298 -2.654259)
+ (xy -2.573858 -2.634544) (xy -2.567218 -2.593419) (xy -2.549568 -2.542252) (xy -2.524297 -2.488394)
+ (xy -2.494789 -2.439195) (xy -2.468719 -2.406334) (xy -2.407765 -2.357452) (xy -2.328969 -2.318545)
+ (xy -2.235157 -2.290494) (xy -2.12915 -2.274179) (xy -2.032 -2.270192) (xy -1.950081 -2.274599)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -2.923822 -2.291645) (xy -2.917242 -2.299218) (xy -2.912079 -2.308987) (xy -2.908164 -2.323571)
+ (xy -2.905324 -2.345585) (xy -2.903387 -2.377648) (xy -2.902183 -2.422375) (xy -2.901539 -2.482385)
+ (xy -2.901284 -2.560294) (xy -2.901245 -2.635956) (xy -2.901314 -2.729802) (xy -2.901638 -2.803689)
+ (xy -2.902386 -2.860232) (xy -2.903732 -2.902049) (xy -2.905846 -2.931757) (xy -2.9089 -2.951973)
+ (xy -2.913066 -2.965314) (xy -2.918516 -2.974398) (xy -2.923822 -2.980267) (xy -2.956826 -2.999947)
+ (xy -2.991991 -2.998181) (xy -3.023455 -2.976717) (xy -3.030684 -2.968337) (xy -3.036334 -2.958614)
+ (xy -3.040599 -2.944861) (xy -3.043673 -2.924389) (xy -3.045752 -2.894512) (xy -3.04703 -2.852541)
+ (xy -3.047701 -2.795789) (xy -3.047959 -2.721567) (xy -3.048 -2.637537) (xy -3.048 -2.324485)
+ (xy -3.020291 -2.296776) (xy -2.986137 -2.273463) (xy -2.953006 -2.272623) (xy -2.923822 -2.291645)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -3.691703 -2.270351) (xy -3.616888 -2.275581) (xy -3.547306 -2.28375) (xy -3.487002 -2.29455)
+ (xy -3.44002 -2.307673) (xy -3.410406 -2.322813) (xy -3.40586 -2.327269) (xy -3.390054 -2.36185)
+ (xy -3.394847 -2.397351) (xy -3.419364 -2.427725) (xy -3.420534 -2.428596) (xy -3.434954 -2.437954)
+ (xy -3.450008 -2.442876) (xy -3.471005 -2.443473) (xy -3.503257 -2.439861) (xy -3.552073 -2.432154)
+ (xy -3.556 -2.431505) (xy -3.628739 -2.422569) (xy -3.707217 -2.418161) (xy -3.785927 -2.418119)
+ (xy -3.859361 -2.422279) (xy -3.922011 -2.430479) (xy -3.96837 -2.442557) (xy -3.971416 -2.443771)
+ (xy -4.005048 -2.462615) (xy -4.016864 -2.481685) (xy -4.007614 -2.500439) (xy -3.978047 -2.518337)
+ (xy -3.928911 -2.534837) (xy -3.860957 -2.549396) (xy -3.815645 -2.556406) (xy -3.721456 -2.569889)
+ (xy -3.646544 -2.582214) (xy -3.587717 -2.594449) (xy -3.541785 -2.607661) (xy -3.505555 -2.622917)
+ (xy -3.475838 -2.641285) (xy -3.449442 -2.663831) (xy -3.42823 -2.685971) (xy -3.403065 -2.716819)
+ (xy -3.390681 -2.743345) (xy -3.386808 -2.776026) (xy -3.386667 -2.787995) (xy -3.389576 -2.827712)
+ (xy -3.401202 -2.857259) (xy -3.421323 -2.883486) (xy -3.462216 -2.923576) (xy -3.507817 -2.954149)
+ (xy -3.561513 -2.976203) (xy -3.626692 -2.990735) (xy -3.706744 -2.998741) (xy -3.805057 -3.001218)
+ (xy -3.821289 -3.001177) (xy -3.886849 -2.999818) (xy -3.951866 -2.99673) (xy -4.009252 -2.992356)
+ (xy -4.051922 -2.98714) (xy -4.055372 -2.986541) (xy -4.097796 -2.976491) (xy -4.13378 -2.963796)
+ (xy -4.15415 -2.95219) (xy -4.173107 -2.921572) (xy -4.174427 -2.885918) (xy -4.158085 -2.854144)
+ (xy -4.154429 -2.850551) (xy -4.139315 -2.839876) (xy -4.120415 -2.835276) (xy -4.091162 -2.836059)
+ (xy -4.055651 -2.840127) (xy -4.01597 -2.843762) (xy -3.960345 -2.846828) (xy -3.895406 -2.849053)
+ (xy -3.827785 -2.850164) (xy -3.81 -2.850237) (xy -3.742128 -2.849964) (xy -3.692454 -2.848646)
+ (xy -3.65661 -2.845827) (xy -3.630224 -2.84105) (xy -3.608926 -2.833857) (xy -3.596126 -2.827867)
+ (xy -3.568 -2.811233) (xy -3.550068 -2.796168) (xy -3.547447 -2.791897) (xy -3.552976 -2.774263)
+ (xy -3.57926 -2.757192) (xy -3.624478 -2.741458) (xy -3.686808 -2.727838) (xy -3.705171 -2.724804)
+ (xy -3.80109 -2.709738) (xy -3.877641 -2.697146) (xy -3.93778 -2.686111) (xy -3.98446 -2.67572)
+ (xy -4.020637 -2.665056) (xy -4.049265 -2.653205) (xy -4.073298 -2.639251) (xy -4.095692 -2.622281)
+ (xy -4.119402 -2.601378) (xy -4.12738 -2.594049) (xy -4.155353 -2.566699) (xy -4.17016 -2.545029)
+ (xy -4.175952 -2.520232) (xy -4.176889 -2.488983) (xy -4.166575 -2.427705) (xy -4.135752 -2.37564)
+ (xy -4.084595 -2.332958) (xy -4.013283 -2.299825) (xy -3.9624 -2.284964) (xy -3.9071 -2.275366)
+ (xy -3.840853 -2.269936) (xy -3.767706 -2.268367) (xy -3.691703 -2.270351)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -4.712794 -2.269146) (xy -4.643386 -2.269518) (xy -4.590997 -2.270385) (xy -4.552847 -2.271946)
+ (xy -4.526159 -2.274403) (xy -4.508153 -2.277957) (xy -4.496049 -2.28281) (xy -4.487069 -2.289161)
+ (xy -4.483818 -2.292084) (xy -4.464043 -2.323142) (xy -4.460482 -2.358828) (xy -4.473491 -2.39051)
+ (xy -4.479506 -2.396913) (xy -4.489235 -2.403121) (xy -4.504901 -2.40791) (xy -4.529408 -2.411514)
+ (xy -4.565661 -2.414164) (xy -4.616565 -2.416095) (xy -4.685026 -2.417539) (xy -4.747617 -2.418418)
+ (xy -4.995334 -2.421467) (xy -4.998719 -2.486378) (xy -5.002105 -2.551289) (xy -4.833958 -2.551289)
+ (xy -4.760959 -2.551919) (xy -4.707517 -2.554553) (xy -4.670628 -2.560309) (xy -4.647288 -2.570304)
+ (xy -4.634494 -2.585656) (xy -4.629242 -2.607482) (xy -4.628445 -2.627738) (xy -4.630923 -2.652592)
+ (xy -4.640277 -2.670906) (xy -4.659383 -2.683637) (xy -4.691118 -2.691741) (xy -4.738359 -2.696176)
+ (xy -4.803983 -2.697899) (xy -4.839801 -2.698045) (xy -5.000978 -2.698045) (xy -5.000978 -2.856089)
+ (xy -4.752622 -2.856089) (xy -4.671213 -2.856202) (xy -4.609342 -2.856712) (xy -4.563968 -2.85787)
+ (xy -4.532054 -2.85993) (xy -4.510559 -2.863146) (xy -4.496443 -2.867772) (xy -4.486668 -2.874059)
+ (xy -4.481689 -2.878667) (xy -4.46461 -2.90556) (xy -4.459111 -2.929467) (xy -4.466963 -2.958667)
+ (xy -4.481689 -2.980267) (xy -4.489546 -2.987066) (xy -4.499688 -2.992346) (xy -4.514844 -2.996298)
+ (xy -4.537741 -2.999113) (xy -4.571109 -3.000982) (xy -4.617675 -3.002098) (xy -4.680167 -3.002651)
+ (xy -4.761314 -3.002833) (xy -4.803422 -3.002845) (xy -4.893598 -3.002765) (xy -4.963924 -3.002398)
+ (xy -5.017129 -3.001552) (xy -5.05594 -3.000036) (xy -5.083087 -2.997659) (xy -5.101298 -2.994229)
+ (xy -5.1133 -2.989554) (xy -5.121822 -2.983444) (xy -5.125156 -2.980267) (xy -5.131755 -2.97267)
+ (xy -5.136927 -2.96287) (xy -5.140846 -2.948239) (xy -5.143684 -2.926152) (xy -5.145615 -2.893982)
+ (xy -5.146812 -2.849103) (xy -5.147448 -2.788889) (xy -5.147697 -2.710713) (xy -5.147734 -2.637923)
+ (xy -5.1477 -2.544707) (xy -5.147465 -2.471431) (xy -5.14683 -2.415458) (xy -5.145594 -2.374151)
+ (xy -5.143556 -2.344872) (xy -5.140517 -2.324984) (xy -5.136277 -2.31185) (xy -5.130635 -2.302832)
+ (xy -5.123391 -2.295293) (xy -5.121606 -2.293612) (xy -5.112945 -2.286172) (xy -5.102882 -2.280409)
+ (xy -5.088625 -2.276112) (xy -5.067383 -2.273064) (xy -5.036364 -2.271051) (xy -4.992777 -2.26986)
+ (xy -4.933831 -2.269275) (xy -4.856734 -2.269083) (xy -4.802001 -2.269067) (xy -4.712794 -2.269146)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -6.121371 -2.269066) (xy -6.081889 -2.269467) (xy -5.9662 -2.272259) (xy -5.869311 -2.28055)
+ (xy -5.787919 -2.295232) (xy -5.718723 -2.317193) (xy -5.65842 -2.347322) (xy -5.603708 -2.38651)
+ (xy -5.584167 -2.403532) (xy -5.55175 -2.443363) (xy -5.52252 -2.497413) (xy -5.499991 -2.557323)
+ (xy -5.487679 -2.614739) (xy -5.4864 -2.635956) (xy -5.494417 -2.694769) (xy -5.515899 -2.759013)
+ (xy -5.546999 -2.819821) (xy -5.583866 -2.86833) (xy -5.589854 -2.874182) (xy -5.640579 -2.915321)
+ (xy -5.696125 -2.947435) (xy -5.759696 -2.971365) (xy -5.834494 -2.987953) (xy -5.923722 -2.998041)
+ (xy -6.030582 -3.002469) (xy -6.079528 -3.002845) (xy -6.141762 -3.002545) (xy -6.185528 -3.001292)
+ (xy -6.214931 -2.998554) (xy -6.234079 -2.993801) (xy -6.247077 -2.986501) (xy -6.254045 -2.980267)
+ (xy -6.260626 -2.972694) (xy -6.265788 -2.962924) (xy -6.269703 -2.94834) (xy -6.272543 -2.926326)
+ (xy -6.27448 -2.894264) (xy -6.275684 -2.849536) (xy -6.276328 -2.789526) (xy -6.276583 -2.711617)
+ (xy -6.276622 -2.635956) (xy -6.27687 -2.535041) (xy -6.276817 -2.454427) (xy -6.275857 -2.415822)
+ (xy -6.129867 -2.415822) (xy -6.129867 -2.856089) (xy -6.036734 -2.856004) (xy -5.980693 -2.854396)
+ (xy -5.921999 -2.850256) (xy -5.873028 -2.844464) (xy -5.871538 -2.844226) (xy -5.792392 -2.82509)
+ (xy -5.731002 -2.795287) (xy -5.684305 -2.752878) (xy -5.654635 -2.706961) (xy -5.636353 -2.656026)
+ (xy -5.637771 -2.6082) (xy -5.658988 -2.556933) (xy -5.700489 -2.503899) (xy -5.757998 -2.4646)
+ (xy -5.83275 -2.438331) (xy -5.882708 -2.429035) (xy -5.939416 -2.422507) (xy -5.999519 -2.417782)
+ (xy -6.050639 -2.415817) (xy -6.053667 -2.415808) (xy -6.129867 -2.415822) (xy -6.275857 -2.415822)
+ (xy -6.27526 -2.391851) (xy -6.270998 -2.345055) (xy -6.26283 -2.311778) (xy -6.249556 -2.289759)
+ (xy -6.229974 -2.276739) (xy -6.202883 -2.270457) (xy -6.167082 -2.268653) (xy -6.121371 -2.269066)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -2.273043 2.973429) (xy -2.176768 2.949191) (xy -2.090184 2.906359) (xy -2.015373 2.846581)
+ (xy -1.954418 2.771506) (xy -1.909399 2.68278) (xy -1.883136 2.58647) (xy -1.877286 2.489205)
+ (xy -1.89214 2.395346) (xy -1.92584 2.307489) (xy -1.976528 2.22823) (xy -2.042345 2.160164)
+ (xy -2.121434 2.105888) (xy -2.211934 2.067998) (xy -2.2632 2.055574) (xy -2.307698 2.048053)
+ (xy -2.341999 2.045081) (xy -2.37496 2.046906) (xy -2.415434 2.053775) (xy -2.448531 2.06075)
+ (xy -2.541947 2.092259) (xy -2.625619 2.143383) (xy -2.697665 2.212571) (xy -2.7562 2.298272)
+ (xy -2.770148 2.325511) (xy -2.786586 2.361878) (xy -2.796894 2.392418) (xy -2.80246 2.42455)
+ (xy -2.804669 2.465693) (xy -2.804948 2.511778) (xy -2.800861 2.596135) (xy -2.787446 2.665414)
+ (xy -2.762256 2.726039) (xy -2.722846 2.784433) (xy -2.684298 2.828698) (xy -2.612406 2.894516)
+ (xy -2.537313 2.939947) (xy -2.454562 2.96715) (xy -2.376928 2.977424) (xy -2.273043 2.973429)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 6.186507 0.527755) (xy 6.186526 0.293338) (xy 6.186552 0.080397) (xy 6.186625 -0.112168)
+ (xy 6.186782 -0.285459) (xy 6.187064 -0.440576) (xy 6.187509 -0.57862) (xy 6.188156 -0.700692)
+ (xy 6.189045 -0.807894) (xy 6.190213 -0.901326) (xy 6.191701 -0.98209) (xy 6.193546 -1.051286)
+ (xy 6.195789 -1.110015) (xy 6.198469 -1.159379) (xy 6.201623 -1.200478) (xy 6.205292 -1.234413)
+ (xy 6.209513 -1.262286) (xy 6.214327 -1.285198) (xy 6.219773 -1.304249) (xy 6.225888 -1.32054)
+ (xy 6.232712 -1.335173) (xy 6.240285 -1.349249) (xy 6.248645 -1.363868) (xy 6.253839 -1.372974)
+ (xy 6.288104 -1.433689) (xy 5.429955 -1.433689) (xy 5.429955 -1.337733) (xy 5.429224 -1.29437)
+ (xy 5.427272 -1.261205) (xy 5.424463 -1.243424) (xy 5.423221 -1.241778) (xy 5.411799 -1.248662)
+ (xy 5.389084 -1.266505) (xy 5.366385 -1.285879) (xy 5.3118 -1.326614) (xy 5.242321 -1.367617)
+ (xy 5.16527 -1.405123) (xy 5.087965 -1.435364) (xy 5.057113 -1.445012) (xy 4.988616 -1.459578)
+ (xy 4.905764 -1.469539) (xy 4.816371 -1.474583) (xy 4.728248 -1.474396) (xy 4.649207 -1.468666)
+ (xy 4.611511 -1.462858) (xy 4.473414 -1.424797) (xy 4.346113 -1.367073) (xy 4.230292 -1.290211)
+ (xy 4.126637 -1.194739) (xy 4.035833 -1.081179) (xy 3.969031 -0.970381) (xy 3.914164 -0.853625)
+ (xy 3.872163 -0.734276) (xy 3.842167 -0.608283) (xy 3.823311 -0.471594) (xy 3.814732 -0.320158)
+ (xy 3.814006 -0.242711) (xy 3.8161 -0.185934) (xy 4.645217 -0.185934) (xy 4.645424 -0.279002)
+ (xy 4.648337 -0.366692) (xy 4.654 -0.443772) (xy 4.662455 -0.505009) (xy 4.665038 -0.51735)
+ (xy 4.69684 -0.624633) (xy 4.738498 -0.711658) (xy 4.790363 -0.778642) (xy 4.852781 -0.825805)
+ (xy 4.9261 -0.853365) (xy 5.010669 -0.861541) (xy 5.106835 -0.850551) (xy 5.170311 -0.834829)
+ (xy 5.219454 -0.816639) (xy 5.273583 -0.790791) (xy 5.314244 -0.767089) (xy 5.3848 -0.720721)
+ (xy 5.3848 0.42947) (xy 5.317392 0.473038) (xy 5.238867 0.51396) (xy 5.154681 0.540611)
+ (xy 5.069557 0.552535) (xy 4.988216 0.549278) (xy 4.91538 0.530385) (xy 4.883426 0.514816)
+ (xy 4.825501 0.471819) (xy 4.776544 0.415047) (xy 4.73539 0.342425) (xy 4.700874 0.251879)
+ (xy 4.671833 0.141334) (xy 4.670552 0.135467) (xy 4.660381 0.073212) (xy 4.652739 -0.004594)
+ (xy 4.64767 -0.09272) (xy 4.645217 -0.185934) (xy 3.8161 -0.185934) (xy 3.821857 -0.029895)
+ (xy 3.843802 0.165941) (xy 3.879786 0.344668) (xy 3.929759 0.506155) (xy 3.993668 0.650274)
+ (xy 4.071462 0.776894) (xy 4.163089 0.885885) (xy 4.268497 0.977117) (xy 4.313662 1.008068)
+ (xy 4.414611 1.064215) (xy 4.517901 1.103826) (xy 4.627989 1.127986) (xy 4.74933 1.137781)
+ (xy 4.841836 1.136735) (xy 4.97149 1.125769) (xy 5.084084 1.103954) (xy 5.182875 1.070286)
+ (xy 5.271121 1.023764) (xy 5.319986 0.989552) (xy 5.349353 0.967638) (xy 5.371043 0.952667)
+ (xy 5.379253 0.948267) (xy 5.380868 0.959096) (xy 5.382159 0.989749) (xy 5.383138 1.037474)
+ (xy 5.383817 1.099521) (xy 5.38421 1.173138) (xy 5.38433 1.255573) (xy 5.384188 1.344075)
+ (xy 5.383797 1.435893) (xy 5.383171 1.528276) (xy 5.38232 1.618472) (xy 5.38126 1.703729)
+ (xy 5.380001 1.781297) (xy 5.378556 1.848424) (xy 5.376938 1.902359) (xy 5.375161 1.94035)
+ (xy 5.374669 1.947333) (xy 5.367092 2.017749) (xy 5.355531 2.072898) (xy 5.337792 2.120019)
+ (xy 5.311682 2.166353) (xy 5.305415 2.175933) (xy 5.280983 2.212622) (xy 6.186311 2.212622)
+ (xy 6.186507 0.527755)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 2.673574 1.133448) (xy 2.825492 1.113433) (xy 2.960756 1.079798) (xy 3.080239 1.032275)
+ (xy 3.184815 0.970595) (xy 3.262424 0.907035) (xy 3.331265 0.832901) (xy 3.385006 0.753129)
+ (xy 3.42791 0.660909) (xy 3.443384 0.617839) (xy 3.456244 0.578858) (xy 3.467446 0.542711)
+ (xy 3.47712 0.507566) (xy 3.485396 0.47159) (xy 3.492403 0.43295) (xy 3.498272 0.389815)
+ (xy 3.503131 0.340351) (xy 3.50711 0.282727) (xy 3.51034 0.215109) (xy 3.512949 0.135666)
+ (xy 3.515067 0.042564) (xy 3.516824 -0.066027) (xy 3.518349 -0.191942) (xy 3.519772 -0.337012)
+ (xy 3.521025 -0.479778) (xy 3.522351 -0.635968) (xy 3.523556 -0.771239) (xy 3.524766 -0.887246)
+ (xy 3.526106 -0.985645) (xy 3.5277 -1.068093) (xy 3.529675 -1.136246) (xy 3.532156 -1.19176)
+ (xy 3.535269 -1.236292) (xy 3.539138 -1.271498) (xy 3.543889 -1.299034) (xy 3.549648 -1.320556)
+ (xy 3.556539 -1.337722) (xy 3.564689 -1.352186) (xy 3.574223 -1.365606) (xy 3.585266 -1.379638)
+ (xy 3.589566 -1.385071) (xy 3.605386 -1.40791) (xy 3.612422 -1.423463) (xy 3.612444 -1.423922)
+ (xy 3.601567 -1.426121) (xy 3.570582 -1.428147) (xy 3.521957 -1.429942) (xy 3.458163 -1.431451)
+ (xy 3.381669 -1.432616) (xy 3.294944 -1.43338) (xy 3.200457 -1.433686) (xy 3.18955 -1.433689)
+ (xy 2.766657 -1.433689) (xy 2.763395 -1.337622) (xy 2.760133 -1.241556) (xy 2.698044 -1.292543)
+ (xy 2.600714 -1.360057) (xy 2.490813 -1.414749) (xy 2.404349 -1.444978) (xy 2.335278 -1.459666)
+ (xy 2.251925 -1.469659) (xy 2.162159 -1.474646) (xy 2.073845 -1.474313) (xy 1.994851 -1.468351)
+ (xy 1.958622 -1.462638) (xy 1.818603 -1.424776) (xy 1.692178 -1.369932) (xy 1.58026 -1.298924)
+ (xy 1.483762 -1.212568) (xy 1.4036 -1.111679) (xy 1.340687 -0.997076) (xy 1.296312 -0.870984)
+ (xy 1.283978 -0.814401) (xy 1.276368 -0.752202) (xy 1.272739 -0.677363) (xy 1.272245 -0.643467)
+ (xy 1.27231 -0.640282) (xy 2.032248 -0.640282) (xy 2.041541 -0.715333) (xy 2.069728 -0.77916)
+ (xy 2.118197 -0.834798) (xy 2.123254 -0.839211) (xy 2.171548 -0.874037) (xy 2.223257 -0.89662)
+ (xy 2.283989 -0.90854) (xy 2.359352 -0.911383) (xy 2.377459 -0.910978) (xy 2.431278 -0.908325)
+ (xy 2.471308 -0.902909) (xy 2.506324 -0.892745) (xy 2.545103 -0.87585) (xy 2.555745 -0.870672)
+ (xy 2.616396 -0.834844) (xy 2.663215 -0.792212) (xy 2.675952 -0.776973) (xy 2.720622 -0.720462)
+ (xy 2.720622 -0.524586) (xy 2.720086 -0.445939) (xy 2.718396 -0.387988) (xy 2.715428 -0.348875)
+ (xy 2.711057 -0.326741) (xy 2.706972 -0.320274) (xy 2.691047 -0.317111) (xy 2.657264 -0.314488)
+ (xy 2.61034 -0.312655) (xy 2.554993 -0.311857) (xy 2.546106 -0.311842) (xy 2.42533 -0.317096)
+ (xy 2.32266 -0.333263) (xy 2.236106 -0.360961) (xy 2.163681 -0.400808) (xy 2.108751 -0.447758)
+ (xy 2.064204 -0.505645) (xy 2.03948 -0.568693) (xy 2.032248 -0.640282) (xy 1.27231 -0.640282)
+ (xy 1.274178 -0.549712) (xy 1.282522 -0.470812) (xy 1.298768 -0.39959) (xy 1.324405 -0.328864)
+ (xy 1.348401 -0.276493) (xy 1.40702 -0.181196) (xy 1.485117 -0.09317) (xy 1.580315 -0.014017)
+ (xy 1.690238 0.05466) (xy 1.81251 0.111259) (xy 1.944755 0.154179) (xy 2.009422 0.169118)
+ (xy 2.145604 0.191223) (xy 2.294049 0.205806) (xy 2.445505 0.212187) (xy 2.572064 0.210555)
+ (xy 2.73395 0.203776) (xy 2.72653 0.262755) (xy 2.707238 0.361908) (xy 2.676104 0.442628)
+ (xy 2.632269 0.505534) (xy 2.574871 0.551244) (xy 2.503048 0.580378) (xy 2.415941 0.593553)
+ (xy 2.312686 0.591389) (xy 2.274711 0.587388) (xy 2.13352 0.56222) (xy 1.996707 0.521186)
+ (xy 1.902178 0.483185) (xy 1.857018 0.46381) (xy 1.818585 0.44824) (xy 1.792234 0.438595)
+ (xy 1.784546 0.436548) (xy 1.774802 0.445626) (xy 1.758083 0.474595) (xy 1.734232 0.523783)
+ (xy 1.703093 0.593516) (xy 1.664507 0.684121) (xy 1.65791 0.699911) (xy 1.627853 0.772228)
+ (xy 1.600874 0.837575) (xy 1.578136 0.893094) (xy 1.560806 0.935928) (xy 1.550048 0.963219)
+ (xy 1.546941 0.972058) (xy 1.55694 0.976813) (xy 1.583217 0.98209) (xy 1.611489 0.985769)
+ (xy 1.641646 0.990526) (xy 1.689433 0.999972) (xy 1.750612 1.01318) (xy 1.820946 1.029224)
+ (xy 1.896194 1.04718) (xy 1.924755 1.054203) (xy 2.029816 1.079791) (xy 2.11748 1.099853)
+ (xy 2.192068 1.115031) (xy 2.257903 1.125965) (xy 2.319307 1.133296) (xy 2.380602 1.137665)
+ (xy 2.44611 1.139713) (xy 2.504128 1.140111) (xy 2.673574 1.133448)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 0.328429 2.050929) (xy 0.48857 2.029755) (xy 0.65251 1.989615) (xy 0.822313 1.930111)
+ (xy 1.000043 1.850846) (xy 1.01131 1.845301) (xy 1.069005 1.817275) (xy 1.120552 1.793198)
+ (xy 1.162191 1.774751) (xy 1.190162 1.763614) (xy 1.199733 1.761067) (xy 1.21895 1.756059)
+ (xy 1.223561 1.751853) (xy 1.218458 1.74142) (xy 1.202418 1.715132) (xy 1.177288 1.675743)
+ (xy 1.144914 1.626009) (xy 1.107143 1.568685) (xy 1.065822 1.506524) (xy 1.022798 1.442282)
+ (xy 0.979917 1.378715) (xy 0.939026 1.318575) (xy 0.901971 1.26462) (xy 0.8706 1.219603)
+ (xy 0.846759 1.186279) (xy 0.832294 1.167403) (xy 0.830309 1.165213) (xy 0.820191 1.169862)
+ (xy 0.79785 1.187038) (xy 0.76728 1.21356) (xy 0.751536 1.228036) (xy 0.655047 1.303318)
+ (xy 0.548336 1.358759) (xy 0.432832 1.393859) (xy 0.309962 1.40812) (xy 0.240561 1.406949)
+ (xy 0.119423 1.389788) (xy 0.010205 1.353906) (xy -0.087418 1.299041) (xy -0.173772 1.22493)
+ (xy -0.249185 1.131312) (xy -0.313982 1.017924) (xy -0.351399 0.931333) (xy -0.395252 0.795634)
+ (xy -0.427572 0.64815) (xy -0.448443 0.492686) (xy -0.457949 0.333044) (xy -0.456173 0.173027)
+ (xy -0.443197 0.016439) (xy -0.419106 -0.132918) (xy -0.383982 -0.27124) (xy -0.337908 -0.394724)
+ (xy -0.321627 -0.428978) (xy -0.25338 -0.543064) (xy -0.172921 -0.639557) (xy -0.08143 -0.71767)
+ (xy 0.019911 -0.776617) (xy 0.12992 -0.815612) (xy 0.247415 -0.833868) (xy 0.288883 -0.835211)
+ (xy 0.410441 -0.82429) (xy 0.530878 -0.791474) (xy 0.648666 -0.737439) (xy 0.762277 -0.662865)
+ (xy 0.853685 -0.584539) (xy 0.900215 -0.540008) (xy 1.081483 -0.837271) (xy 1.12658 -0.911433)
+ (xy 1.167819 -0.979646) (xy 1.203735 -1.039459) (xy 1.232866 -1.08842) (xy 1.25375 -1.124079)
+ (xy 1.264924 -1.143984) (xy 1.266375 -1.147079) (xy 1.258146 -1.156718) (xy 1.232567 -1.173999)
+ (xy 1.192873 -1.197283) (xy 1.142297 -1.224934) (xy 1.084074 -1.255315) (xy 1.021437 -1.28679)
+ (xy 0.957621 -1.317722) (xy 0.89586 -1.346473) (xy 0.839388 -1.371408) (xy 0.791438 -1.390889)
+ (xy 0.767986 -1.399318) (xy 0.634221 -1.437133) (xy 0.496327 -1.462136) (xy 0.348622 -1.47514)
+ (xy 0.221833 -1.477468) (xy 0.153878 -1.476373) (xy 0.088277 -1.474275) (xy 0.030847 -1.471434)
+ (xy -0.012597 -1.468106) (xy -0.026702 -1.466422) (xy -0.165716 -1.437587) (xy -0.307243 -1.392468)
+ (xy -0.444725 -1.33375) (xy -0.571606 -1.26412) (xy -0.649111 -1.211441) (xy -0.776519 -1.103239)
+ (xy -0.894822 -0.976671) (xy -1.001828 -0.834866) (xy -1.095348 -0.680951) (xy -1.17319 -0.518053)
+ (xy -1.217044 -0.400756) (xy -1.267292 -0.217128) (xy -1.300791 -0.022581) (xy -1.317551 0.178675)
+ (xy -1.317584 0.382432) (xy -1.300899 0.584479) (xy -1.267507 0.780608) (xy -1.21742 0.966609)
+ (xy -1.213603 0.978197) (xy -1.150719 1.14025) (xy -1.073972 1.288168) (xy -0.980758 1.426135)
+ (xy -0.868473 1.558339) (xy -0.824608 1.603601) (xy -0.688466 1.727543) (xy -0.548509 1.830085)
+ (xy -0.402589 1.912344) (xy -0.248558 1.975436) (xy -0.084268 2.020477) (xy 0.011289 2.037967)
+ (xy 0.170023 2.053534) (xy 0.328429 2.050929)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -2.9464 2.510946) (xy -2.935535 2.397007) (xy -2.903918 2.289384) (xy -2.853015 2.190385)
+ (xy -2.784293 2.102316) (xy -2.699219 2.027484) (xy -2.602232 1.969616) (xy -2.495964 1.929995)
+ (xy -2.38895 1.911427) (xy -2.2833 1.912566) (xy -2.181125 1.93207) (xy -2.084534 1.968594)
+ (xy -1.995638 2.020795) (xy -1.916546 2.087327) (xy -1.849369 2.166848) (xy -1.796217 2.258013)
+ (xy -1.759199 2.359477) (xy -1.740427 2.469898) (xy -1.738489 2.519794) (xy -1.738489 2.607733)
+ (xy -1.68656 2.607733) (xy -1.650253 2.604889) (xy -1.623355 2.593089) (xy -1.596249 2.569351)
+ (xy -1.557867 2.530969) (xy -1.557867 0.339398) (xy -1.557876 0.077261) (xy -1.557908 -0.163241)
+ (xy -1.557972 -0.383048) (xy -1.558076 -0.583101) (xy -1.558227 -0.764344) (xy -1.558434 -0.927716)
+ (xy -1.558706 -1.07416) (xy -1.55905 -1.204617) (xy -1.559474 -1.320029) (xy -1.559987 -1.421338)
+ (xy -1.560597 -1.509484) (xy -1.561312 -1.58541) (xy -1.56214 -1.650057) (xy -1.563089 -1.704367)
+ (xy -1.564167 -1.74928) (xy -1.565383 -1.78574) (xy -1.566745 -1.814687) (xy -1.568261 -1.837063)
+ (xy -1.569938 -1.853809) (xy -1.571786 -1.865868) (xy -1.573813 -1.87418) (xy -1.576025 -1.879687)
+ (xy -1.577108 -1.881537) (xy -1.581271 -1.888549) (xy -1.584805 -1.894996) (xy -1.588635 -1.9009)
+ (xy -1.593682 -1.906286) (xy -1.600871 -1.911178) (xy -1.611123 -1.915598) (xy -1.625364 -1.919572)
+ (xy -1.644514 -1.923121) (xy -1.669499 -1.92627) (xy -1.70124 -1.929042) (xy -1.740662 -1.931461)
+ (xy -1.788686 -1.933551) (xy -1.846237 -1.935335) (xy -1.914237 -1.936837) (xy -1.99361 -1.93808)
+ (xy -2.085279 -1.939089) (xy -2.190166 -1.939885) (xy -2.309196 -1.940494) (xy -2.44329 -1.940939)
+ (xy -2.593373 -1.941243) (xy -2.760367 -1.94143) (xy -2.945196 -1.941524) (xy -3.148783 -1.941548)
+ (xy -3.37205 -1.941525) (xy -3.615922 -1.94148) (xy -3.881321 -1.941437) (xy -3.919704 -1.941432)
+ (xy -4.186682 -1.941389) (xy -4.432002 -1.941318) (xy -4.656583 -1.941213) (xy -4.861345 -1.941066)
+ (xy -5.047206 -1.940869) (xy -5.215088 -1.940616) (xy -5.365908 -1.9403) (xy -5.500587 -1.939913)
+ (xy -5.620044 -1.939447) (xy -5.725199 -1.938897) (xy -5.816971 -1.938253) (xy -5.896279 -1.937511)
+ (xy -5.964043 -1.936661) (xy -6.021182 -1.935697) (xy -6.068617 -1.934611) (xy -6.107266 -1.933397)
+ (xy -6.138049 -1.932047) (xy -6.161885 -1.930555) (xy -6.179694 -1.928911) (xy -6.192395 -1.927111)
+ (xy -6.200908 -1.925145) (xy -6.205266 -1.923477) (xy -6.213728 -1.919906) (xy -6.221497 -1.91727)
+ (xy -6.228602 -1.914634) (xy -6.235073 -1.911062) (xy -6.240939 -1.905621) (xy -6.246229 -1.897375)
+ (xy -6.250974 -1.88539) (xy -6.255202 -1.868731) (xy -6.258943 -1.846463) (xy -6.262227 -1.817652)
+ (xy -6.265083 -1.781363) (xy -6.26754 -1.736661) (xy -6.269629 -1.682611) (xy -6.271378 -1.618279)
+ (xy -6.272817 -1.54273) (xy -6.273976 -1.45503) (xy -6.274883 -1.354243) (xy -6.275569 -1.239434)
+ (xy -6.276063 -1.10967) (xy -6.276395 -0.964015) (xy -6.276593 -0.801535) (xy -6.276687 -0.621295)
+ (xy -6.276708 -0.42236) (xy -6.276685 -0.203796) (xy -6.276646 0.035332) (xy -6.276622 0.29596)
+ (xy -6.276622 0.338111) (xy -6.276636 0.601008) (xy -6.276661 0.842268) (xy -6.276671 1.062835)
+ (xy -6.276642 1.263648) (xy -6.276548 1.445651) (xy -6.276362 1.609784) (xy -6.276059 1.756989)
+ (xy -6.275614 1.888208) (xy -6.275034 1.998133) (xy -5.972197 1.998133) (xy -5.932407 1.940289)
+ (xy -5.921236 1.924521) (xy -5.911166 1.910559) (xy -5.902138 1.897216) (xy -5.894097 1.883307)
+ (xy -5.886986 1.867644) (xy -5.880747 1.849042) (xy -5.875325 1.826314) (xy -5.870662 1.798273)
+ (xy -5.866701 1.763733) (xy -5.863385 1.721508) (xy -5.860659 1.670411) (xy -5.858464 1.609256)
+ (xy -5.856745 1.536856) (xy -5.855444 1.452025) (xy -5.854505 1.353578) (xy -5.85387 1.240326)
+ (xy -5.853484 1.111084) (xy -5.853288 0.964666) (xy -5.853227 0.799884) (xy -5.853243 0.615553)
+ (xy -5.85328 0.410487) (xy -5.853289 0.287867) (xy -5.853265 0.070918) (xy -5.853231 -0.124642)
+ (xy -5.853243 -0.299999) (xy -5.853358 -0.456341) (xy -5.85363 -0.594857) (xy -5.854118 -0.716734)
+ (xy -5.854876 -0.82316) (xy -5.855962 -0.915322) (xy -5.857431 -0.994409) (xy -5.85934 -1.061608)
+ (xy -5.861744 -1.118107) (xy -5.864701 -1.165093) (xy -5.868266 -1.203755) (xy -5.872495 -1.23528)
+ (xy -5.877446 -1.260855) (xy -5.883173 -1.28167) (xy -5.889733 -1.298911) (xy -5.897183 -1.313765)
+ (xy -5.905579 -1.327422) (xy -5.914976 -1.341069) (xy -5.925432 -1.355893) (xy -5.931523 -1.364783)
+ (xy -5.970296 -1.4224) (xy -5.438732 -1.4224) (xy -5.315483 -1.422365) (xy -5.212987 -1.422215)
+ (xy -5.12942 -1.421878) (xy -5.062956 -1.421286) (xy -5.011771 -1.420367) (xy -4.974041 -1.419051)
+ (xy -4.94794 -1.417269) (xy -4.931644 -1.414951) (xy -4.923328 -1.412026) (xy -4.921168 -1.408424)
+ (xy -4.923339 -1.404075) (xy -4.924535 -1.402645) (xy -4.949685 -1.365573) (xy -4.975583 -1.312772)
+ (xy -4.999192 -1.25077) (xy -5.007461 -1.224357) (xy -5.012078 -1.206416) (xy -5.015979 -1.185355)
+ (xy -5.019248 -1.159089) (xy -5.021966 -1.125532) (xy -5.024215 -1.082599) (xy -5.026077 -1.028204)
+ (xy -5.027636 -0.960262) (xy -5.028972 -0.876688) (xy -5.030169 -0.775395) (xy -5.031308 -0.6543)
+ (xy -5.031685 -0.6096) (xy -5.032702 -0.484449) (xy -5.03346 -0.380082) (xy -5.033903 -0.294707)
+ (xy -5.03397 -0.226533) (xy -5.033605 -0.173765) (xy -5.032748 -0.134614) (xy -5.031341 -0.107285)
+ (xy -5.029325 -0.089986) (xy -5.026643 -0.080926) (xy -5.023236 -0.078312) (xy -5.019044 -0.080351)
+ (xy -5.014571 -0.084667) (xy -5.004216 -0.097602) (xy -4.982158 -0.126676) (xy -4.949957 -0.169759)
+ (xy -4.909174 -0.224718) (xy -4.86137 -0.289423) (xy -4.808105 -0.361742) (xy -4.75094 -0.439544)
+ (xy -4.691437 -0.520698) (xy -4.631155 -0.603072) (xy -4.571655 -0.684536) (xy -4.514498 -0.762957)
+ (xy -4.461245 -0.836204) (xy -4.413457 -0.902147) (xy -4.372693 -0.958654) (xy -4.340516 -1.003593)
+ (xy -4.318485 -1.034834) (xy -4.313917 -1.041466) (xy -4.290996 -1.078369) (xy -4.264188 -1.126359)
+ (xy -4.238789 -1.175897) (xy -4.235568 -1.182577) (xy -4.21389 -1.230772) (xy -4.201304 -1.268334)
+ (xy -4.195574 -1.30416) (xy -4.194456 -1.3462) (xy -4.19509 -1.4224) (xy -3.040651 -1.4224)
+ (xy -3.131815 -1.328669) (xy -3.178612 -1.278775) (xy -3.228899 -1.222295) (xy -3.274944 -1.168026)
+ (xy -3.295369 -1.142673) (xy -3.325807 -1.103128) (xy -3.365862 -1.049916) (xy -3.414361 -0.984667)
+ (xy -3.470135 -0.909011) (xy -3.532011 -0.824577) (xy -3.598819 -0.732994) (xy -3.669387 -0.635892)
+ (xy -3.742545 -0.534901) (xy -3.817121 -0.43165) (xy -3.891944 -0.327768) (xy -3.965843 -0.224885)
+ (xy -4.037646 -0.124631) (xy -4.106184 -0.028636) (xy -4.170284 0.061473) (xy -4.228775 0.144064)
+ (xy -4.280486 0.217508) (xy -4.324247 0.280176) (xy -4.358885 0.330439) (xy -4.38323 0.366666)
+ (xy -4.396111 0.387229) (xy -4.397869 0.391332) (xy -4.38991 0.402658) (xy -4.369115 0.429838)
+ (xy -4.336847 0.471171) (xy -4.29447 0.524956) (xy -4.243347 0.589494) (xy -4.184841 0.663082)
+ (xy -4.120314 0.744022) (xy -4.051131 0.830612) (xy -3.978653 0.921152) (xy -3.904246 1.01394)
+ (xy -3.844517 1.088298) (xy -2.833511 1.088298) (xy -2.827602 1.075341) (xy -2.813272 1.053092)
+ (xy -2.812225 1.051609) (xy -2.793438 1.021456) (xy -2.773791 0.984625) (xy -2.769892 0.976489)
+ (xy -2.766356 0.96806) (xy -2.76323 0.957941) (xy -2.760486 0.94474) (xy -2.758092 0.927062)
+ (xy -2.756019 0.903516) (xy -2.754235 0.872707) (xy -2.752712 0.833243) (xy -2.751419 0.783731)
+ (xy -2.750326 0.722777) (xy -2.749403 0.648989) (xy -2.748619 0.560972) (xy -2.747945 0.457335)
+ (xy -2.74735 0.336684) (xy -2.746805 0.197626) (xy -2.746279 0.038768) (xy -2.745745 -0.140089)
+ (xy -2.745206 -0.325207) (xy -2.744772 -0.489145) (xy -2.744509 -0.633303) (xy -2.744484 -0.759079)
+ (xy -2.744765 -0.867871) (xy -2.745419 -0.961077) (xy -2.746514 -1.040097) (xy -2.748118 -1.106328)
+ (xy -2.750297 -1.16117) (xy -2.753119 -1.206021) (xy -2.756651 -1.242278) (xy -2.760961 -1.271341)
+ (xy -2.766117 -1.294609) (xy -2.772185 -1.313479) (xy -2.779233 -1.329351) (xy -2.787329 -1.343622)
+ (xy -2.79654 -1.357691) (xy -2.80504 -1.370158) (xy -2.822176 -1.396452) (xy -2.832322 -1.414037)
+ (xy -2.833511 -1.417257) (xy -2.822604 -1.418334) (xy -2.791411 -1.419335) (xy -2.742223 -1.420235)
+ (xy -2.677333 -1.42101) (xy -2.59903 -1.421637) (xy -2.509607 -1.422091) (xy -2.411356 -1.422349)
+ (xy -2.342445 -1.4224) (xy -2.237452 -1.42218) (xy -2.14061 -1.421548) (xy -2.054107 -1.420549)
+ (xy -1.980132 -1.419227) (xy -1.920874 -1.417626) (xy -1.87852 -1.415791) (xy -1.85526 -1.413765)
+ (xy -1.851378 -1.412493) (xy -1.859076 -1.397591) (xy -1.867074 -1.38956) (xy -1.880246 -1.372434)
+ (xy -1.897485 -1.342183) (xy -1.909407 -1.317622) (xy -1.936045 -1.258711) (xy -1.93912 -0.081845)
+ (xy -1.942195 1.095022) (xy -2.387853 1.095022) (xy -2.48567 1.094858) (xy -2.576064 1.094389)
+ (xy -2.65663 1.093653) (xy -2.724962 1.092684) (xy -2.778656 1.09152) (xy -2.815305 1.090197)
+ (xy -2.832504 1.088751) (xy -2.833511 1.088298) (xy -3.844517 1.088298) (xy -3.82927 1.107278)
+ (xy -3.75509 1.199463) (xy -3.683069 1.288796) (xy -3.614569 1.373576) (xy -3.550955 1.452102)
+ (xy -3.493588 1.522674) (xy -3.443833 1.583591) (xy -3.403052 1.633153) (xy -3.385888 1.653822)
+ (xy -3.299596 1.754484) (xy -3.222997 1.837741) (xy -3.154183 1.905562) (xy -3.091248 1.959911)
+ (xy -3.081867 1.967278) (xy -3.042356 1.997883) (xy -4.174116 1.998133) (xy -4.168827 1.950156)
+ (xy -4.17213 1.892812) (xy -4.193661 1.824537) (xy -4.233635 1.744788) (xy -4.278943 1.672505)
+ (xy -4.295161 1.64986) (xy -4.323214 1.612304) (xy -4.36143 1.561979) (xy -4.408137 1.501027)
+ (xy -4.461661 1.431589) (xy -4.520331 1.355806) (xy -4.582475 1.27582) (xy -4.646421 1.193772)
+ (xy -4.710495 1.111804) (xy -4.773027 1.032057) (xy -4.832343 0.956673) (xy -4.886771 0.887793)
+ (xy -4.934639 0.827558) (xy -4.974275 0.778111) (xy -5.004006 0.741592) (xy -5.022161 0.720142)
+ (xy -5.02522 0.716844) (xy -5.028079 0.724851) (xy -5.030293 0.755145) (xy -5.031857 0.807444)
+ (xy -5.032767 0.881469) (xy -5.03302 0.976937) (xy -5.032613 1.093566) (xy -5.031704 1.213555)
+ (xy -5.030382 1.345667) (xy -5.028857 1.457406) (xy -5.026881 1.550975) (xy -5.024206 1.628581)
+ (xy -5.020582 1.692426) (xy -5.015761 1.744717) (xy -5.009494 1.787656) (xy -5.001532 1.823449)
+ (xy -4.991627 1.8543) (xy -4.979531 1.882414) (xy -4.964993 1.909995) (xy -4.950311 1.935034)
+ (xy -4.912314 1.998133) (xy -5.972197 1.998133) (xy -6.275034 1.998133) (xy -6.275001 2.004383)
+ (xy -6.274195 2.106456) (xy -6.27317 2.195367) (xy -6.2719 2.272059) (xy -6.27036 2.337473)
+ (xy -6.268524 2.392551) (xy -6.266367 2.438235) (xy -6.263863 2.475466) (xy -6.260987 2.505187)
+ (xy -6.257713 2.528338) (xy -6.254015 2.545861) (xy -6.249869 2.558699) (xy -6.245247 2.567792)
+ (xy -6.240126 2.574082) (xy -6.234478 2.578512) (xy -6.228279 2.582022) (xy -6.221504 2.585555)
+ (xy -6.215508 2.589124) (xy -6.210275 2.5917) (xy -6.202099 2.594028) (xy -6.189886 2.596122)
+ (xy -6.172541 2.597993) (xy -6.148969 2.599653) (xy -6.118077 2.601116) (xy -6.078768 2.602392)
+ (xy -6.02995 2.603496) (xy -5.970527 2.604439) (xy -5.899404 2.605233) (xy -5.815488 2.605891)
+ (xy -5.717683 2.606425) (xy -5.604894 2.606847) (xy -5.476029 2.607171) (xy -5.329991 2.607408)
+ (xy -5.165686 2.60757) (xy -4.98202 2.60767) (xy -4.777897 2.60772) (xy -4.566753 2.607733)
+ (xy -2.9464 2.607733) (xy -2.9464 2.510946)) (layer B.SilkS) (width 0.01))
+ )
+
+ (module Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical (layer B.Cu) (tedit 59FED5CC) (tstamp 5DE5899E)
+ (at 119.9896 81.42 180)
+ (descr "Through hole straight pin header, 1x06, 2.54mm pitch, single row")
+ (tags "Through hole pin header THT 1x06 2.54mm single row")
+ (path /5D0ADA96)
+ (fp_text reference J2 (at 0 2.33) (layer B.SilkS)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value Conn_01x06_Male (at 0 -15.03) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1))
+ (fp_line (start 1.27 1.27) (end 1.27 -13.97) (layer B.Fab) (width 0.1))
+ (fp_line (start 1.27 -13.97) (end -1.27 -13.97) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.27 -13.97) (end -1.27 0.635) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.33 -14.03) (end 1.33 -14.03) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 -1.27) (end -1.33 -14.03) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1.33 -1.27) (end 1.33 -14.03) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.8 1.8) (end -1.8 -14.5) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.8 -14.5) (end 1.8 -14.5) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.8 -14.5) (end 1.8 1.8) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05))
+ (fp_text user %R (at 0 -6.35 270) (layer B.Fab)
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ (net 2 GND))
+ (pad 2 thru_hole oval (at 0 -2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ (net 61 "Net-(J2-Pad2)"))
+ (pad 3 thru_hole oval (at 0 -5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ (net 60 "Net-(J2-Pad3)"))
+ (pad 4 thru_hole oval (at 0 -7.62 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ (net 55 RXD))
+ (pad 5 thru_hole oval (at 0 -10.16 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ (net 54 TXD))
+ (pad 6 thru_hole oval (at 0 -12.7 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ (net 59 "Net-(J2-Pad6)"))
+ (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x06_P2.54mm_Vertical.wrl
+ (at (xyz 0 0 0))
+ (scale (xyz 1 1 1))
+ (rotate (xyz 0 0 0))
+ )
+ )
+
+ (module Symbol:OSHW-Logo2_7.3x6mm_SilkScreen (layer B.Cu) (tedit 0) (tstamp 5DE589E0)
+ (at 160.8 112.5 180)
+ (descr "Open Source Hardware Symbol")
+ (tags "Logo Symbol OSHW")
+ (attr virtual)
+ (fp_text reference REF** (at 0 0) (layer B.SilkS) hide
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
+ (fp_text value OSHW-Logo2_7.3x6mm_SilkScreen (at 0.75 0) (layer B.Fab) hide
+ (effects (font (size 1 1) (thickness 0.15)) (justify mirror))
+ )
(fp_poly (pts (xy 0.10391 2.757652) (xy 0.182454 2.757222) (xy 0.239298 2.756058) (xy 0.278105 2.753793)
(xy 0.302538 2.75006) (xy 0.316262 2.744494) (xy 0.32294 2.736727) (xy 0.326236 2.726395)
(xy 0.326556 2.725057) (xy 0.331562 2.700921) (xy 0.340829 2.653299) (xy 0.353392 2.587259)
@@ -2029,6 +1838,199 @@
(xy -0.326646 2.724675) (xy -0.326556 2.725057) (xy -0.323411 2.735701) (xy -0.317296 2.743738)
(xy -0.304547 2.749533) (xy -0.2815 2.753453) (xy -0.244491 2.755865) (xy -0.189856 2.757135)
(xy -0.113933 2.757629) (xy -0.013056 2.757714) (xy 0 2.757714) (xy 0.10391 2.757652)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 3.153595 -1.966966) (xy 3.211021 -2.004497) (xy 3.238719 -2.038096) (xy 3.260662 -2.099064)
+ (xy 3.262405 -2.147308) (xy 3.258457 -2.211816) (xy 3.109686 -2.276934) (xy 3.037349 -2.310202)
+ (xy 2.990084 -2.336964) (xy 2.965507 -2.360144) (xy 2.961237 -2.382667) (xy 2.974889 -2.407455)
+ (xy 2.989943 -2.423886) (xy 3.033746 -2.450235) (xy 3.081389 -2.452081) (xy 3.125145 -2.431546)
+ (xy 3.157289 -2.390752) (xy 3.163038 -2.376347) (xy 3.190576 -2.331356) (xy 3.222258 -2.312182)
+ (xy 3.265714 -2.295779) (xy 3.265714 -2.357966) (xy 3.261872 -2.400283) (xy 3.246823 -2.435969)
+ (xy 3.21528 -2.476943) (xy 3.210592 -2.482267) (xy 3.175506 -2.51872) (xy 3.145347 -2.538283)
+ (xy 3.107615 -2.547283) (xy 3.076335 -2.55023) (xy 3.020385 -2.550965) (xy 2.980555 -2.54166)
+ (xy 2.955708 -2.527846) (xy 2.916656 -2.497467) (xy 2.889625 -2.464613) (xy 2.872517 -2.423294)
+ (xy 2.863238 -2.367521) (xy 2.859693 -2.291305) (xy 2.85941 -2.252622) (xy 2.860372 -2.206247)
+ (xy 2.948007 -2.206247) (xy 2.949023 -2.231126) (xy 2.951556 -2.2352) (xy 2.968274 -2.229665)
+ (xy 3.004249 -2.215017) (xy 3.052331 -2.19419) (xy 3.062386 -2.189714) (xy 3.123152 -2.158814)
+ (xy 3.156632 -2.131657) (xy 3.16399 -2.10622) (xy 3.146391 -2.080481) (xy 3.131856 -2.069109)
+ (xy 3.07941 -2.046364) (xy 3.030322 -2.050122) (xy 2.989227 -2.077884) (xy 2.960758 -2.127152)
+ (xy 2.951631 -2.166257) (xy 2.948007 -2.206247) (xy 2.860372 -2.206247) (xy 2.861285 -2.162249)
+ (xy 2.868196 -2.095384) (xy 2.881884 -2.046695) (xy 2.904096 -2.010849) (xy 2.936574 -1.982513)
+ (xy 2.950733 -1.973355) (xy 3.015053 -1.949507) (xy 3.085473 -1.948006) (xy 3.153595 -1.966966)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 2.6526 -1.958752) (xy 2.669948 -1.966334) (xy 2.711356 -1.999128) (xy 2.746765 -2.046547)
+ (xy 2.768664 -2.097151) (xy 2.772229 -2.122098) (xy 2.760279 -2.156927) (xy 2.734067 -2.175357)
+ (xy 2.705964 -2.186516) (xy 2.693095 -2.188572) (xy 2.686829 -2.173649) (xy 2.674456 -2.141175)
+ (xy 2.669028 -2.126502) (xy 2.63859 -2.075744) (xy 2.59452 -2.050427) (xy 2.53801 -2.051206)
+ (xy 2.533825 -2.052203) (xy 2.503655 -2.066507) (xy 2.481476 -2.094393) (xy 2.466327 -2.139287)
+ (xy 2.45725 -2.204615) (xy 2.453286 -2.293804) (xy 2.452914 -2.341261) (xy 2.45273 -2.416071)
+ (xy 2.451522 -2.467069) (xy 2.448309 -2.499471) (xy 2.442109 -2.518495) (xy 2.43194 -2.529356)
+ (xy 2.416819 -2.537272) (xy 2.415946 -2.53767) (xy 2.386828 -2.549981) (xy 2.372403 -2.554514)
+ (xy 2.370186 -2.540809) (xy 2.368289 -2.502925) (xy 2.366847 -2.445715) (xy 2.365998 -2.374027)
+ (xy 2.365829 -2.321565) (xy 2.366692 -2.220047) (xy 2.37007 -2.143032) (xy 2.377142 -2.086023)
+ (xy 2.389088 -2.044526) (xy 2.40709 -2.014043) (xy 2.432327 -1.99008) (xy 2.457247 -1.973355)
+ (xy 2.517171 -1.951097) (xy 2.586911 -1.946076) (xy 2.6526 -1.958752)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 2.144876 -1.956335) (xy 2.186667 -1.975344) (xy 2.219469 -1.998378) (xy 2.243503 -2.024133)
+ (xy 2.260097 -2.057358) (xy 2.270577 -2.1028) (xy 2.276271 -2.165207) (xy 2.278507 -2.249327)
+ (xy 2.278743 -2.304721) (xy 2.278743 -2.520826) (xy 2.241774 -2.53767) (xy 2.212656 -2.549981)
+ (xy 2.198231 -2.554514) (xy 2.195472 -2.541025) (xy 2.193282 -2.504653) (xy 2.191942 -2.451542)
+ (xy 2.191657 -2.409372) (xy 2.190434 -2.348447) (xy 2.187136 -2.300115) (xy 2.182321 -2.270518)
+ (xy 2.178496 -2.264229) (xy 2.152783 -2.270652) (xy 2.112418 -2.287125) (xy 2.065679 -2.309458)
+ (xy 2.020845 -2.333457) (xy 1.986193 -2.35493) (xy 1.970002 -2.369685) (xy 1.969938 -2.369845)
+ (xy 1.97133 -2.397152) (xy 1.983818 -2.423219) (xy 2.005743 -2.444392) (xy 2.037743 -2.451474)
+ (xy 2.065092 -2.450649) (xy 2.103826 -2.450042) (xy 2.124158 -2.459116) (xy 2.136369 -2.483092)
+ (xy 2.137909 -2.487613) (xy 2.143203 -2.521806) (xy 2.129047 -2.542568) (xy 2.092148 -2.552462)
+ (xy 2.052289 -2.554292) (xy 1.980562 -2.540727) (xy 1.943432 -2.521355) (xy 1.897576 -2.475845)
+ (xy 1.873256 -2.419983) (xy 1.871073 -2.360957) (xy 1.891629 -2.305953) (xy 1.922549 -2.271486)
+ (xy 1.95342 -2.252189) (xy 2.001942 -2.227759) (xy 2.058485 -2.202985) (xy 2.06791 -2.199199)
+ (xy 2.130019 -2.171791) (xy 2.165822 -2.147634) (xy 2.177337 -2.123619) (xy 2.16658 -2.096635)
+ (xy 2.148114 -2.075543) (xy 2.104469 -2.049572) (xy 2.056446 -2.047624) (xy 2.012406 -2.067637)
+ (xy 1.980709 -2.107551) (xy 1.976549 -2.117848) (xy 1.952327 -2.155724) (xy 1.916965 -2.183842)
+ (xy 1.872343 -2.206917) (xy 1.872343 -2.141485) (xy 1.874969 -2.101506) (xy 1.88623 -2.069997)
+ (xy 1.911199 -2.036378) (xy 1.935169 -2.010484) (xy 1.972441 -1.973817) (xy 2.001401 -1.954121)
+ (xy 2.032505 -1.94622) (xy 2.067713 -1.944914) (xy 2.144876 -1.956335)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 1.779833 -1.958663) (xy 1.782048 -1.99685) (xy 1.783784 -2.054886) (xy 1.784899 -2.12818)
+ (xy 1.785257 -2.205055) (xy 1.785257 -2.465196) (xy 1.739326 -2.511127) (xy 1.707675 -2.539429)
+ (xy 1.67989 -2.550893) (xy 1.641915 -2.550168) (xy 1.62684 -2.548321) (xy 1.579726 -2.542948)
+ (xy 1.540756 -2.539869) (xy 1.531257 -2.539585) (xy 1.499233 -2.541445) (xy 1.453432 -2.546114)
+ (xy 1.435674 -2.548321) (xy 1.392057 -2.551735) (xy 1.362745 -2.54432) (xy 1.33368 -2.521427)
+ (xy 1.323188 -2.511127) (xy 1.277257 -2.465196) (xy 1.277257 -1.978602) (xy 1.314226 -1.961758)
+ (xy 1.346059 -1.949282) (xy 1.364683 -1.944914) (xy 1.369458 -1.958718) (xy 1.373921 -1.997286)
+ (xy 1.377775 -2.056356) (xy 1.380722 -2.131663) (xy 1.382143 -2.195286) (xy 1.386114 -2.445657)
+ (xy 1.420759 -2.450556) (xy 1.452268 -2.447131) (xy 1.467708 -2.436041) (xy 1.472023 -2.415308)
+ (xy 1.475708 -2.371145) (xy 1.478469 -2.309146) (xy 1.480012 -2.234909) (xy 1.480235 -2.196706)
+ (xy 1.480457 -1.976783) (xy 1.526166 -1.960849) (xy 1.558518 -1.950015) (xy 1.576115 -1.944962)
+ (xy 1.576623 -1.944914) (xy 1.578388 -1.958648) (xy 1.580329 -1.99673) (xy 1.582282 -2.054482)
+ (xy 1.584084 -2.127227) (xy 1.585343 -2.195286) (xy 1.589314 -2.445657) (xy 1.6764 -2.445657)
+ (xy 1.680396 -2.21724) (xy 1.684392 -1.988822) (xy 1.726847 -1.966868) (xy 1.758192 -1.951793)
+ (xy 1.776744 -1.944951) (xy 1.777279 -1.944914) (xy 1.779833 -1.958663)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 1.190117 -2.065358) (xy 1.189933 -2.173837) (xy 1.189219 -2.257287) (xy 1.187675 -2.319704)
+ (xy 1.185001 -2.365085) (xy 1.180894 -2.397429) (xy 1.175055 -2.420733) (xy 1.167182 -2.438995)
+ (xy 1.161221 -2.449418) (xy 1.111855 -2.505945) (xy 1.049264 -2.541377) (xy 0.980013 -2.55409)
+ (xy 0.910668 -2.542463) (xy 0.869375 -2.521568) (xy 0.826025 -2.485422) (xy 0.796481 -2.441276)
+ (xy 0.778655 -2.383462) (xy 0.770463 -2.306313) (xy 0.769302 -2.249714) (xy 0.769458 -2.245647)
+ (xy 0.870857 -2.245647) (xy 0.871476 -2.31055) (xy 0.874314 -2.353514) (xy 0.88084 -2.381622)
+ (xy 0.892523 -2.401953) (xy 0.906483 -2.417288) (xy 0.953365 -2.44689) (xy 1.003701 -2.449419)
+ (xy 1.051276 -2.424705) (xy 1.054979 -2.421356) (xy 1.070783 -2.403935) (xy 1.080693 -2.383209)
+ (xy 1.086058 -2.352362) (xy 1.088228 -2.304577) (xy 1.088571 -2.251748) (xy 1.087827 -2.185381)
+ (xy 1.084748 -2.141106) (xy 1.078061 -2.112009) (xy 1.066496 -2.091173) (xy 1.057013 -2.080107)
+ (xy 1.01296 -2.052198) (xy 0.962224 -2.048843) (xy 0.913796 -2.070159) (xy 0.90445 -2.078073)
+ (xy 0.88854 -2.095647) (xy 0.87861 -2.116587) (xy 0.873278 -2.147782) (xy 0.871163 -2.196122)
+ (xy 0.870857 -2.245647) (xy 0.769458 -2.245647) (xy 0.77281 -2.158568) (xy 0.784726 -2.090086)
+ (xy 0.807135 -2.0386) (xy 0.842124 -1.998443) (xy 0.869375 -1.977861) (xy 0.918907 -1.955625)
+ (xy 0.976316 -1.945304) (xy 1.029682 -1.948067) (xy 1.059543 -1.959212) (xy 1.071261 -1.962383)
+ (xy 1.079037 -1.950557) (xy 1.084465 -1.918866) (xy 1.088571 -1.870593) (xy 1.093067 -1.816829)
+ (xy 1.099313 -1.784482) (xy 1.110676 -1.765985) (xy 1.130528 -1.75377) (xy 1.143 -1.748362)
+ (xy 1.190171 -1.728601) (xy 1.190117 -2.065358)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 0.529926 -1.949755) (xy 0.595858 -1.974084) (xy 0.649273 -2.017117) (xy 0.670164 -2.047409)
+ (xy 0.692939 -2.102994) (xy 0.692466 -2.143186) (xy 0.668562 -2.170217) (xy 0.659717 -2.174813)
+ (xy 0.62153 -2.189144) (xy 0.602028 -2.185472) (xy 0.595422 -2.161407) (xy 0.595086 -2.148114)
+ (xy 0.582992 -2.09921) (xy 0.551471 -2.064999) (xy 0.507659 -2.048476) (xy 0.458695 -2.052634)
+ (xy 0.418894 -2.074227) (xy 0.40545 -2.086544) (xy 0.395921 -2.101487) (xy 0.389485 -2.124075)
+ (xy 0.385317 -2.159328) (xy 0.382597 -2.212266) (xy 0.380502 -2.287907) (xy 0.37996 -2.311857)
+ (xy 0.377981 -2.39379) (xy 0.375731 -2.451455) (xy 0.372357 -2.489608) (xy 0.367006 -2.513004)
+ (xy 0.358824 -2.526398) (xy 0.346959 -2.534545) (xy 0.339362 -2.538144) (xy 0.307102 -2.550452)
+ (xy 0.288111 -2.554514) (xy 0.281836 -2.540948) (xy 0.278006 -2.499934) (xy 0.2766 -2.430999)
+ (xy 0.277598 -2.333669) (xy 0.277908 -2.318657) (xy 0.280101 -2.229859) (xy 0.282693 -2.165019)
+ (xy 0.286382 -2.119067) (xy 0.291864 -2.086935) (xy 0.299835 -2.063553) (xy 0.310993 -2.043852)
+ (xy 0.31683 -2.03541) (xy 0.350296 -1.998057) (xy 0.387727 -1.969003) (xy 0.392309 -1.966467)
+ (xy 0.459426 -1.946443) (xy 0.529926 -1.949755)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy 0.039744 -1.950968) (xy 0.096616 -1.972087) (xy 0.097267 -1.972493) (xy 0.13244 -1.99838)
+ (xy 0.158407 -2.028633) (xy 0.17667 -2.068058) (xy 0.188732 -2.121462) (xy 0.196096 -2.193651)
+ (xy 0.200264 -2.289432) (xy 0.200629 -2.303078) (xy 0.205876 -2.508842) (xy 0.161716 -2.531678)
+ (xy 0.129763 -2.54711) (xy 0.11047 -2.554423) (xy 0.109578 -2.554514) (xy 0.106239 -2.541022)
+ (xy 0.103587 -2.504626) (xy 0.101956 -2.451452) (xy 0.1016 -2.408393) (xy 0.101592 -2.338641)
+ (xy 0.098403 -2.294837) (xy 0.087288 -2.273944) (xy 0.063501 -2.272925) (xy 0.022296 -2.288741)
+ (xy -0.039914 -2.317815) (xy -0.085659 -2.341963) (xy -0.109187 -2.362913) (xy -0.116104 -2.385747)
+ (xy -0.116114 -2.386877) (xy -0.104701 -2.426212) (xy -0.070908 -2.447462) (xy -0.019191 -2.450539)
+ (xy 0.018061 -2.450006) (xy 0.037703 -2.460735) (xy 0.049952 -2.486505) (xy 0.057002 -2.519337)
+ (xy 0.046842 -2.537966) (xy 0.043017 -2.540632) (xy 0.007001 -2.55134) (xy -0.043434 -2.552856)
+ (xy -0.095374 -2.545759) (xy -0.132178 -2.532788) (xy -0.183062 -2.489585) (xy -0.211986 -2.429446)
+ (xy -0.217714 -2.382462) (xy -0.213343 -2.340082) (xy -0.197525 -2.305488) (xy -0.166203 -2.274763)
+ (xy -0.115322 -2.24399) (xy -0.040824 -2.209252) (xy -0.036286 -2.207288) (xy 0.030821 -2.176287)
+ (xy 0.072232 -2.150862) (xy 0.089981 -2.128014) (xy 0.086107 -2.104745) (xy 0.062643 -2.078056)
+ (xy 0.055627 -2.071914) (xy 0.00863 -2.0481) (xy -0.040067 -2.049103) (xy -0.082478 -2.072451)
+ (xy -0.110616 -2.115675) (xy -0.113231 -2.12416) (xy -0.138692 -2.165308) (xy -0.170999 -2.185128)
+ (xy -0.217714 -2.20477) (xy -0.217714 -2.15395) (xy -0.203504 -2.080082) (xy -0.161325 -2.012327)
+ (xy -0.139376 -1.989661) (xy -0.089483 -1.960569) (xy -0.026033 -1.9474) (xy 0.039744 -1.950968)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -0.624114 -1.851289) (xy -0.619861 -1.910613) (xy -0.614975 -1.945572) (xy -0.608205 -1.96082)
+ (xy -0.598298 -1.961015) (xy -0.595086 -1.959195) (xy -0.552356 -1.946015) (xy -0.496773 -1.946785)
+ (xy -0.440263 -1.960333) (xy -0.404918 -1.977861) (xy -0.368679 -2.005861) (xy -0.342187 -2.037549)
+ (xy -0.324001 -2.077813) (xy -0.312678 -2.131543) (xy -0.306778 -2.203626) (xy -0.304857 -2.298951)
+ (xy -0.304823 -2.317237) (xy -0.3048 -2.522646) (xy -0.350509 -2.53858) (xy -0.382973 -2.54942)
+ (xy -0.400785 -2.554468) (xy -0.401309 -2.554514) (xy -0.403063 -2.540828) (xy -0.404556 -2.503076)
+ (xy -0.405674 -2.446224) (xy -0.406303 -2.375234) (xy -0.4064 -2.332073) (xy -0.406602 -2.246973)
+ (xy -0.407642 -2.185981) (xy -0.410169 -2.144177) (xy -0.414836 -2.116642) (xy -0.422293 -2.098456)
+ (xy -0.433189 -2.084698) (xy -0.439993 -2.078073) (xy -0.486728 -2.051375) (xy -0.537728 -2.049375)
+ (xy -0.583999 -2.071955) (xy -0.592556 -2.080107) (xy -0.605107 -2.095436) (xy -0.613812 -2.113618)
+ (xy -0.619369 -2.139909) (xy -0.622474 -2.179562) (xy -0.623824 -2.237832) (xy -0.624114 -2.318173)
+ (xy -0.624114 -2.522646) (xy -0.669823 -2.53858) (xy -0.702287 -2.54942) (xy -0.720099 -2.554468)
+ (xy -0.720623 -2.554514) (xy -0.721963 -2.540623) (xy -0.723172 -2.501439) (xy -0.724199 -2.4407)
+ (xy -0.724998 -2.362141) (xy -0.725519 -2.269498) (xy -0.725714 -2.166509) (xy -0.725714 -1.769342)
+ (xy -0.678543 -1.749444) (xy -0.631371 -1.729547) (xy -0.624114 -1.851289)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -1.831697 -1.931239) (xy -1.774473 -1.969735) (xy -1.730251 -2.025335) (xy -1.703833 -2.096086)
+ (xy -1.69849 -2.148162) (xy -1.699097 -2.169893) (xy -1.704178 -2.186531) (xy -1.718145 -2.201437)
+ (xy -1.745411 -2.217973) (xy -1.790388 -2.239498) (xy -1.857489 -2.269374) (xy -1.857829 -2.269524)
+ (xy -1.919593 -2.297813) (xy -1.970241 -2.322933) (xy -2.004596 -2.342179) (xy -2.017482 -2.352848)
+ (xy -2.017486 -2.352934) (xy -2.006128 -2.376166) (xy -1.979569 -2.401774) (xy -1.949077 -2.420221)
+ (xy -1.93363 -2.423886) (xy -1.891485 -2.411212) (xy -1.855192 -2.379471) (xy -1.837483 -2.344572)
+ (xy -1.820448 -2.318845) (xy -1.787078 -2.289546) (xy -1.747851 -2.264235) (xy -1.713244 -2.250471)
+ (xy -1.706007 -2.249714) (xy -1.697861 -2.26216) (xy -1.69737 -2.293972) (xy -1.703357 -2.336866)
+ (xy -1.714643 -2.382558) (xy -1.73005 -2.422761) (xy -1.730829 -2.424322) (xy -1.777196 -2.489062)
+ (xy -1.837289 -2.533097) (xy -1.905535 -2.554711) (xy -1.976362 -2.552185) (xy -2.044196 -2.523804)
+ (xy -2.047212 -2.521808) (xy -2.100573 -2.473448) (xy -2.13566 -2.410352) (xy -2.155078 -2.327387)
+ (xy -2.157684 -2.304078) (xy -2.162299 -2.194055) (xy -2.156767 -2.142748) (xy -2.017486 -2.142748)
+ (xy -2.015676 -2.174753) (xy -2.005778 -2.184093) (xy -1.981102 -2.177105) (xy -1.942205 -2.160587)
+ (xy -1.898725 -2.139881) (xy -1.897644 -2.139333) (xy -1.860791 -2.119949) (xy -1.846 -2.107013)
+ (xy -1.849647 -2.093451) (xy -1.865005 -2.075632) (xy -1.904077 -2.049845) (xy -1.946154 -2.04795)
+ (xy -1.983897 -2.066717) (xy -2.009966 -2.102915) (xy -2.017486 -2.142748) (xy -2.156767 -2.142748)
+ (xy -2.152806 -2.106027) (xy -2.12845 -2.036212) (xy -2.094544 -1.987302) (xy -2.033347 -1.937878)
+ (xy -1.965937 -1.913359) (xy -1.89712 -1.911797) (xy -1.831697 -1.931239)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -2.958885 -1.921962) (xy -2.890855 -1.957733) (xy -2.840649 -2.015301) (xy -2.822815 -2.052312)
+ (xy -2.808937 -2.107882) (xy -2.801833 -2.178096) (xy -2.80116 -2.254727) (xy -2.806573 -2.329552)
+ (xy -2.81773 -2.394342) (xy -2.834286 -2.440873) (xy -2.839374 -2.448887) (xy -2.899645 -2.508707)
+ (xy -2.971231 -2.544535) (xy -3.048908 -2.55502) (xy -3.127452 -2.53881) (xy -3.149311 -2.529092)
+ (xy -3.191878 -2.499143) (xy -3.229237 -2.459433) (xy -3.232768 -2.454397) (xy -3.247119 -2.430124)
+ (xy -3.256606 -2.404178) (xy -3.26221 -2.370022) (xy -3.264914 -2.321119) (xy -3.265701 -2.250935)
+ (xy -3.265714 -2.2352) (xy -3.265678 -2.230192) (xy -3.120571 -2.230192) (xy -3.119727 -2.29643)
+ (xy -3.116404 -2.340386) (xy -3.109417 -2.368779) (xy -3.097584 -2.388325) (xy -3.091543 -2.394857)
+ (xy -3.056814 -2.41968) (xy -3.023097 -2.418548) (xy -2.989005 -2.397016) (xy -2.968671 -2.374029)
+ (xy -2.956629 -2.340478) (xy -2.949866 -2.287569) (xy -2.949402 -2.281399) (xy -2.948248 -2.185513)
+ (xy -2.960312 -2.114299) (xy -2.98543 -2.068194) (xy -3.02344 -2.047635) (xy -3.037008 -2.046514)
+ (xy -3.072636 -2.052152) (xy -3.097006 -2.071686) (xy -3.111907 -2.109042) (xy -3.119125 -2.16815)
+ (xy -3.120571 -2.230192) (xy -3.265678 -2.230192) (xy -3.265174 -2.160413) (xy -3.262904 -2.108159)
+ (xy -3.257932 -2.071949) (xy -3.249287 -2.045299) (xy -3.235995 -2.021722) (xy -3.233057 -2.017338)
+ (xy -3.183687 -1.958249) (xy -3.129891 -1.923947) (xy -3.064398 -1.910331) (xy -3.042158 -1.909665)
+ (xy -2.958885 -1.921962)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -1.283907 -1.92778) (xy -1.237328 -1.954723) (xy -1.204943 -1.981466) (xy -1.181258 -2.009484)
+ (xy -1.164941 -2.043748) (xy -1.154661 -2.089227) (xy -1.149086 -2.150892) (xy -1.146884 -2.233711)
+ (xy -1.146629 -2.293246) (xy -1.146629 -2.512391) (xy -1.208314 -2.540044) (xy -1.27 -2.567697)
+ (xy -1.277257 -2.32767) (xy -1.280256 -2.238028) (xy -1.283402 -2.172962) (xy -1.287299 -2.128026)
+ (xy -1.292553 -2.09877) (xy -1.299769 -2.080748) (xy -1.30955 -2.069511) (xy -1.312688 -2.067079)
+ (xy -1.360239 -2.048083) (xy -1.408303 -2.0556) (xy -1.436914 -2.075543) (xy -1.448553 -2.089675)
+ (xy -1.456609 -2.10822) (xy -1.461729 -2.136334) (xy -1.464559 -2.179173) (xy -1.465744 -2.241895)
+ (xy -1.465943 -2.307261) (xy -1.465982 -2.389268) (xy -1.467386 -2.447316) (xy -1.472086 -2.486465)
+ (xy -1.482013 -2.51178) (xy -1.499097 -2.528323) (xy -1.525268 -2.541156) (xy -1.560225 -2.554491)
+ (xy -1.598404 -2.569007) (xy -1.593859 -2.311389) (xy -1.592029 -2.218519) (xy -1.589888 -2.149889)
+ (xy -1.586819 -2.100711) (xy -1.582206 -2.066198) (xy -1.575432 -2.041562) (xy -1.565881 -2.022016)
+ (xy -1.554366 -2.00477) (xy -1.49881 -1.94968) (xy -1.43102 -1.917822) (xy -1.357287 -1.910191)
+ (xy -1.283907 -1.92778)) (layer B.SilkS) (width 0.01))
+ (fp_poly (pts (xy -2.400256 -1.919918) (xy -2.344799 -1.947568) (xy -2.295852 -1.99848) (xy -2.282371 -2.017338)
+ (xy -2.267686 -2.042015) (xy -2.258158 -2.068816) (xy -2.252707 -2.104587) (xy -2.250253 -2.156169)
+ (xy -2.249714 -2.224267) (xy -2.252148 -2.317588) (xy -2.260606 -2.387657) (xy -2.276826 -2.439931)
+ (xy -2.302546 -2.479869) (xy -2.339503 -2.512929) (xy -2.342218 -2.514886) (xy -2.37864 -2.534908)
+ (xy -2.422498 -2.544815) (xy -2.478276 -2.547257) (xy -2.568952 -2.547257) (xy -2.56899 -2.635283)
+ (xy -2.569834 -2.684308) (xy -2.574976 -2.713065) (xy -2.588413 -2.730311) (xy -2.614142 -2.744808)
+ (xy -2.620321 -2.747769) (xy -2.649236 -2.761648) (xy -2.671624 -2.770414) (xy -2.688271 -2.771171)
+ (xy -2.699964 -2.761023) (xy -2.70749 -2.737073) (xy -2.711634 -2.696426) (xy -2.713185 -2.636186)
+ (xy -2.712929 -2.553455) (xy -2.711651 -2.445339) (xy -2.711252 -2.413) (xy -2.709815 -2.301524)
+ (xy -2.708528 -2.228603) (xy -2.569029 -2.228603) (xy -2.568245 -2.290499) (xy -2.56476 -2.330997)
+ (xy -2.556876 -2.357708) (xy -2.542895 -2.378244) (xy -2.533403 -2.38826) (xy -2.494596 -2.417567)
+ (xy -2.460237 -2.419952) (xy -2.424784 -2.39575) (xy -2.423886 -2.394857) (xy -2.409461 -2.376153)
+ (xy -2.400687 -2.350732) (xy -2.396261 -2.311584) (xy -2.394882 -2.251697) (xy -2.394857 -2.23843)
+ (xy -2.398188 -2.155901) (xy -2.409031 -2.098691) (xy -2.42866 -2.063766) (xy -2.45835 -2.048094)
+ (xy -2.475509 -2.046514) (xy -2.516234 -2.053926) (xy -2.544168 -2.07833) (xy -2.560983 -2.12298)
+ (xy -2.56835 -2.19113) (xy -2.569029 -2.228603) (xy -2.708528 -2.228603) (xy -2.708292 -2.215245)
+ (xy -2.706323 -2.150333) (xy -2.70355 -2.102958) (xy -2.699612 -2.06929) (xy -2.694151 -2.045498)
+ (xy -2.686808 -2.027753) (xy -2.677223 -2.012224) (xy -2.673113 -2.006381) (xy -2.618595 -1.951185)
+ (xy -2.549664 -1.91989) (xy -2.469928 -1.911165) (xy -2.400256 -1.919918)) (layer B.SilkS) (width 0.01))
)
(module Crystal:Crystal_SMD_5032-2Pin_5.0x3.2mm_HandSoldering (layer F.Cu) (tedit 5A0FD1B2) (tstamp 5DE583E1)
@@ -2043,29 +2045,29 @@
(fp_text value 8MHz (at 2.8808 2.689) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_circle (center 0 0) (end 0.093333 0) (layer F.Adhes) (width 0.186667))
+ (fp_circle (center 0 0) (end 0.213333 0) (layer F.Adhes) (width 0.133333))
+ (fp_circle (center 0 0) (end 0.333333 0) (layer F.Adhes) (width 0.133333))
+ (fp_circle (center 0 0) (end 0.4 0) (layer F.Adhes) (width 0.1))
+ (fp_line (start 4.6 -1.9) (end -4.6 -1.9) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.6 1.9) (end 4.6 -1.9) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -4.6 1.9) (end 4.6 1.9) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -4.6 -1.9) (end -4.6 1.9) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -4.55 1.8) (end 2.7 1.8) (layer F.SilkS) (width 0.12))
+ (fp_line (start -4.55 -1.8) (end -4.55 1.8) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.7 -1.8) (end -4.55 -1.8) (layer F.SilkS) (width 0.12))
+ (fp_line (start -2.5 0.6) (end -1.5 1.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.5 -1.4) (end -2.3 -1.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.5 1.4) (end -2.5 -1.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.3 1.6) (end -2.5 1.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 2.3 1.6) (end -2.3 1.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 2.5 1.4) (end 2.3 1.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 2.5 -1.4) (end 2.5 1.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 2.3 -1.6) (end 2.5 -1.4) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.3 -1.6) (end 2.3 -1.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (fp_line (start -2.3 -1.6) (end 2.3 -1.6) (layer F.Fab) (width 0.1))
- (fp_line (start 2.3 -1.6) (end 2.5 -1.4) (layer F.Fab) (width 0.1))
- (fp_line (start 2.5 -1.4) (end 2.5 1.4) (layer F.Fab) (width 0.1))
- (fp_line (start 2.5 1.4) (end 2.3 1.6) (layer F.Fab) (width 0.1))
- (fp_line (start 2.3 1.6) (end -2.3 1.6) (layer F.Fab) (width 0.1))
- (fp_line (start -2.3 1.6) (end -2.5 1.4) (layer F.Fab) (width 0.1))
- (fp_line (start -2.5 1.4) (end -2.5 -1.4) (layer F.Fab) (width 0.1))
- (fp_line (start -2.5 -1.4) (end -2.3 -1.6) (layer F.Fab) (width 0.1))
- (fp_line (start -2.5 0.6) (end -1.5 1.6) (layer F.Fab) (width 0.1))
- (fp_line (start 2.7 -1.8) (end -4.55 -1.8) (layer F.SilkS) (width 0.12))
- (fp_line (start -4.55 -1.8) (end -4.55 1.8) (layer F.SilkS) (width 0.12))
- (fp_line (start -4.55 1.8) (end 2.7 1.8) (layer F.SilkS) (width 0.12))
- (fp_line (start -4.6 -1.9) (end -4.6 1.9) (layer F.CrtYd) (width 0.05))
- (fp_line (start -4.6 1.9) (end 4.6 1.9) (layer F.CrtYd) (width 0.05))
- (fp_line (start 4.6 1.9) (end 4.6 -1.9) (layer F.CrtYd) (width 0.05))
- (fp_line (start 4.6 -1.9) (end -4.6 -1.9) (layer F.CrtYd) (width 0.05))
- (fp_circle (center 0 0) (end 0.4 0) (layer F.Adhes) (width 0.1))
- (fp_circle (center 0 0) (end 0.333333 0) (layer F.Adhes) (width 0.133333))
- (fp_circle (center 0 0) (end 0.213333 0) (layer F.Adhes) (width 0.133333))
- (fp_circle (center 0 0) (end 0.093333 0) (layer F.Adhes) (width 0.186667))
(pad 2 smd rect (at 2.6 0 180) (size 3.5 2.4) (layers F.Cu F.Paste F.Mask)
(net 26 OSC_OUT))
(pad 1 smd rect (at -2.6 0 180) (size 3.5 2.4) (layers F.Cu F.Paste F.Mask)
@@ -2088,21 +2090,21 @@
(fp_text value Jumper_NO_Small (at 0 -4.87) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1))
- (fp_line (start 1.27 1.27) (end 1.27 -3.81) (layer B.Fab) (width 0.1))
- (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer B.Fab) (width 0.1))
- (fp_line (start -1.27 -3.81) (end -1.27 0.635) (layer B.Fab) (width 0.1))
- (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1))
- (fp_line (start -1.33 -3.87) (end 1.33 -3.87) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 -1.27) (end -1.33 -3.87) (layer B.SilkS) (width 0.12))
- (fp_line (start 1.33 -1.27) (end 1.33 -3.87) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.8 1.8) (end -1.8 -4.35) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.8 -4.35) (end 1.8 -4.35) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.8 -4.35) (end 1.8 1.8) (layer B.CrtYd) (width 0.05))
(fp_line (start 1.8 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.8 -4.35) (end 1.8 1.8) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.8 -4.35) (end 1.8 -4.35) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.8 1.8) (end -1.8 -4.35) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 -1.27) (end 1.33 -1.27) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1.33 -1.27) (end 1.33 -3.87) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 -1.27) (end -1.33 -3.87) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.33 -3.87) (end 1.33 -3.87) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.27 0.635) (end -0.635 1.27) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.27 -3.81) (end -1.27 0.635) (layer B.Fab) (width 0.1))
+ (fp_line (start 1.27 -3.81) (end -1.27 -3.81) (layer B.Fab) (width 0.1))
+ (fp_line (start 1.27 1.27) (end 1.27 -3.81) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.635 1.27) (end 1.27 1.27) (layer B.Fab) (width 0.1))
(fp_text user %R (at 0 -1.27 -90) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
@@ -2129,18 +2131,18 @@
(fp_text value LED (at 2.525 0 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1))
- (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 -0.96) (end -1.86 -0.96) (layer F.SilkS) (width 0.12))
- (fp_line (start -1.86 -0.96) (end -1.86 0.96) (layer F.SilkS) (width 0.12))
- (fp_line (start -1.86 0.96) (end 1 0.96) (layer F.SilkS) (width 0.12))
- (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.86 0.96) (end 1 0.96) (layer F.SilkS) (width 0.12))
+ (fp_line (start -1.86 -0.96) (end -1.86 0.96) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 -0.96) (end -1.86 -0.96) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.3) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.7 -0.6) (end -1 -0.3) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -0.7 -0.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
@@ -2167,19 +2169,19 @@
(fp_text value 2.2u (at 0 -1.65) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
(net 25 "Net-(C6-Pad1)"))
(pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
@@ -2203,19 +2205,19 @@
(fp_text value 2.2u (at 0 -1.65) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
(net 25 "Net-(C6-Pad1)"))
(pad 2 smd roundrect (at 1.025 0) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
@@ -2239,16 +2241,16 @@
(fp_text value 22 (at 0 -1.65 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(fp_text user %R (at 0 0 270) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
@@ -2275,16 +2277,16 @@
(fp_text value 22 (at 0 -1.65 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(fp_text user %R (at 0 0 270) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
@@ -2311,19 +2313,19 @@
(fp_text value 100nF (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
- (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 180) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
(net 17 +3V3))
(pad 2 smd roundrect (at 1.025 0 180) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
@@ -2347,19 +2349,19 @@
(fp_text value 100nF (at 0.091 1.5398 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0 90) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
- (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
(net 17 +3V3))
(pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
@@ -2383,19 +2385,19 @@
(fp_text value 100nF (at -1.7074 1.5522) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
- (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 180) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
(net 17 +3V3))
(pad 2 smd roundrect (at 1.025 0 180) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
@@ -2419,19 +2421,19 @@
(fp_text value 18pF (at 0 -1.65 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 0 0 270) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
(net 26 OSC_OUT))
(pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
@@ -2455,19 +2457,19 @@
(fp_text value 18pF (at 0 -1.65 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 0 0 270) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
(net 27 OSC_IN))
(pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
@@ -2491,19 +2493,19 @@
(fp_text value 100nF (at 0 -1.65 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at -0.8 -0.4 270) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
(net 1 +5V))
(pad 2 smd roundrect (at 1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
@@ -2527,19 +2529,19 @@
(fp_text value 100nF (at -1.246001 3.1322 180) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_text user %R (at -0.046001 0 180) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
- (fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 90) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
(net 17 +3V3))
(pad 2 smd roundrect (at 1.025 0 90) (size 1.15 1.4) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.217391)
@@ -2563,19 +2565,19 @@
(fp_text value 100nF (at 0 -1.65 90) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 0 0 90) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(pad 1 smd roundrect (at -1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
(net 17 +3V3))
(pad 2 smd roundrect (at 1.025 0 90) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
@@ -2599,16 +2601,16 @@
(fp_text value 2.2u (at 0 -1.65) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
@@ -2635,16 +2637,16 @@
(fp_text value 2.2u (at 0 -1.65) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
@@ -2671,27 +2673,27 @@
(fp_text value MBR0520 (at 0 2.1) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
+ (fp_line (start -2.25 -1) (end 1.65 -1) (layer F.SilkS) (width 0.12))
+ (fp_line (start -2.25 1) (end 1.65 1) (layer F.SilkS) (width 0.12))
+ (fp_line (start -2.35 -1.15) (end -2.35 1.15) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 2.35 1.15) (end -2.35 1.15) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 2.35 -1.15) (end 2.35 1.15) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -2.35 -1.15) (end 2.35 -1.15) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.4 -0.9) (end 1.4 -0.9) (layer F.Fab) (width 0.1))
+ (fp_line (start 1.4 -0.9) (end 1.4 0.9) (layer F.Fab) (width 0.1))
+ (fp_line (start 1.4 0.9) (end -1.4 0.9) (layer F.Fab) (width 0.1))
+ (fp_line (start -1.4 0.9) (end -1.4 -0.9) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.25 -1) (end -2.25 1) (layer F.SilkS) (width 0.12))
(fp_text user %R (at -2.6 -1.8) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (fp_line (start -2.25 -1) (end -2.25 1) (layer F.SilkS) (width 0.12))
- (fp_line (start 0.25 0) (end 0.75 0) (layer F.Fab) (width 0.1))
- (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.Fab) (width 0.1))
- (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.Fab) (width 0.1))
- (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.Fab) (width 0.1))
- (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.Fab) (width 0.1))
- (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.Fab) (width 0.1))
- (fp_line (start -0.75 0) (end -0.35 0) (layer F.Fab) (width 0.1))
- (fp_line (start -1.4 0.9) (end -1.4 -0.9) (layer F.Fab) (width 0.1))
- (fp_line (start 1.4 0.9) (end -1.4 0.9) (layer F.Fab) (width 0.1))
- (fp_line (start 1.4 -0.9) (end 1.4 0.9) (layer F.Fab) (width 0.1))
- (fp_line (start -1.4 -0.9) (end 1.4 -0.9) (layer F.Fab) (width 0.1))
- (fp_line (start -2.35 -1.15) (end 2.35 -1.15) (layer F.CrtYd) (width 0.05))
- (fp_line (start 2.35 -1.15) (end 2.35 1.15) (layer F.CrtYd) (width 0.05))
- (fp_line (start 2.35 1.15) (end -2.35 1.15) (layer F.CrtYd) (width 0.05))
- (fp_line (start -2.35 -1.15) (end -2.35 1.15) (layer F.CrtYd) (width 0.05))
- (fp_line (start -2.25 1) (end 1.65 1) (layer F.SilkS) (width 0.12))
- (fp_line (start -2.25 -1) (end 1.65 -1) (layer F.SilkS) (width 0.12))
(pad 2 smd rect (at 1.65 0) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask)
(net 45 C_VCC))
(pad 1 smd rect (at -1.65 0) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask)
@@ -2715,27 +2717,27 @@
(fp_text value MBR0520 (at 0 -2.1 90) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -2.25 1) (end 1.65 1) (layer B.SilkS) (width 0.12))
+ (fp_line (start -2.25 -1) (end 1.65 -1) (layer B.SilkS) (width 0.12))
+ (fp_line (start -2.35 1.15) (end -2.35 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.35 -1.15) (end -2.35 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 2.35 1.15) (end 2.35 -1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.35 1.15) (end 2.35 1.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.4 0.9) (end 1.4 0.9) (layer B.Fab) (width 0.1))
+ (fp_line (start 1.4 0.9) (end 1.4 -0.9) (layer B.Fab) (width 0.1))
+ (fp_line (start 1.4 -0.9) (end -1.4 -0.9) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.4 -0.9) (end -1.4 0.9) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 0.4) (layer B.Fab) (width 0.1))
+ (fp_line (start 0.25 0.4) (end 0.25 -0.4) (layer B.Fab) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end -0.35 0) (layer B.Fab) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.Fab) (width 0.1))
+ (fp_line (start -2.25 1) (end -2.25 -1) (layer B.SilkS) (width 0.12))
(fp_text user %R (at 0 2 90) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -2.25 1) (end -2.25 -1) (layer B.SilkS) (width 0.12))
- (fp_line (start 0.25 0) (end 0.75 0) (layer B.Fab) (width 0.1))
- (fp_line (start 0.25 -0.4) (end -0.35 0) (layer B.Fab) (width 0.1))
- (fp_line (start 0.25 0.4) (end 0.25 -0.4) (layer B.Fab) (width 0.1))
- (fp_line (start -0.35 0) (end 0.25 0.4) (layer B.Fab) (width 0.1))
- (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.Fab) (width 0.1))
- (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.Fab) (width 0.1))
- (fp_line (start -0.75 0) (end -0.35 0) (layer B.Fab) (width 0.1))
- (fp_line (start -1.4 -0.9) (end -1.4 0.9) (layer B.Fab) (width 0.1))
- (fp_line (start 1.4 -0.9) (end -1.4 -0.9) (layer B.Fab) (width 0.1))
- (fp_line (start 1.4 0.9) (end 1.4 -0.9) (layer B.Fab) (width 0.1))
- (fp_line (start -1.4 0.9) (end 1.4 0.9) (layer B.Fab) (width 0.1))
- (fp_line (start -2.35 1.15) (end 2.35 1.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 2.35 1.15) (end 2.35 -1.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 2.35 -1.15) (end -2.35 -1.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start -2.35 1.15) (end -2.35 -1.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start -2.25 -1) (end 1.65 -1) (layer B.SilkS) (width 0.12))
- (fp_line (start -2.25 1) (end 1.65 1) (layer B.SilkS) (width 0.12))
(pad 2 smd rect (at 1.65 0 270) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask)
(net 16 USB-IN))
(pad 1 smd rect (at -1.65 0 270) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask)
@@ -2759,27 +2761,27 @@
(fp_text value W25Q128 (at 1.294 -3.6358) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
- (fp_text user %R (at -0.206 -1.9358) (layer F.Fab)
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (fp_line (start 4.65 -2.86) (end -4.65 -2.86) (layer F.CrtYd) (width 0.05))
- (fp_line (start 4.65 2.86) (end 4.65 -2.86) (layer F.CrtYd) (width 0.05))
- (fp_line (start -4.65 2.86) (end 4.65 2.86) (layer F.CrtYd) (width 0.05))
- (fp_line (start -4.65 -2.86) (end -4.65 2.86) (layer F.CrtYd) (width 0.05))
- (fp_line (start -2.615 -1.615) (end -1.615 -2.615) (layer F.Fab) (width 0.1))
- (fp_line (start -2.615 2.615) (end -2.615 -1.615) (layer F.Fab) (width 0.1))
- (fp_line (start 2.615 2.615) (end -2.615 2.615) (layer F.Fab) (width 0.1))
- (fp_line (start 2.615 -2.615) (end 2.615 2.615) (layer F.Fab) (width 0.1))
- (fp_line (start -1.615 -2.615) (end 2.615 -2.615) (layer F.Fab) (width 0.1))
- (fp_line (start -2.725 -2.465) (end -4.4 -2.465) (layer F.SilkS) (width 0.12))
- (fp_line (start -2.725 -2.725) (end -2.725 -2.465) (layer F.SilkS) (width 0.12))
- (fp_line (start 0 -2.725) (end -2.725 -2.725) (layer F.SilkS) (width 0.12))
- (fp_line (start 2.725 -2.725) (end 2.725 -2.465) (layer F.SilkS) (width 0.12))
- (fp_line (start 0 -2.725) (end 2.725 -2.725) (layer F.SilkS) (width 0.12))
- (fp_line (start -2.725 2.725) (end -2.725 2.465) (layer F.SilkS) (width 0.12))
- (fp_line (start 0 2.725) (end -2.725 2.725) (layer F.SilkS) (width 0.12))
- (fp_line (start 2.725 2.725) (end 2.725 2.465) (layer F.SilkS) (width 0.12))
(fp_line (start 0 2.725) (end 2.725 2.725) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.725 2.725) (end 2.725 2.465) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 2.725) (end -2.725 2.725) (layer F.SilkS) (width 0.12))
+ (fp_line (start -2.725 2.725) (end -2.725 2.465) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -2.725) (end 2.725 -2.725) (layer F.SilkS) (width 0.12))
+ (fp_line (start 2.725 -2.725) (end 2.725 -2.465) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -2.725) (end -2.725 -2.725) (layer F.SilkS) (width 0.12))
+ (fp_line (start -2.725 -2.725) (end -2.725 -2.465) (layer F.SilkS) (width 0.12))
+ (fp_line (start -2.725 -2.465) (end -4.4 -2.465) (layer F.SilkS) (width 0.12))
+ (fp_line (start -1.615 -2.615) (end 2.615 -2.615) (layer F.Fab) (width 0.1))
+ (fp_line (start 2.615 -2.615) (end 2.615 2.615) (layer F.Fab) (width 0.1))
+ (fp_line (start 2.615 2.615) (end -2.615 2.615) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.615 2.615) (end -2.615 -1.615) (layer F.Fab) (width 0.1))
+ (fp_line (start -2.615 -1.615) (end -1.615 -2.615) (layer F.Fab) (width 0.1))
+ (fp_line (start -4.65 -2.86) (end -4.65 2.86) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -4.65 2.86) (end 4.65 2.86) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.65 2.86) (end 4.65 -2.86) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 4.65 -2.86) (end -4.65 -2.86) (layer F.CrtYd) (width 0.05))
+ (fp_text user %R (at -0.206 -1.9358) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
(pad 1 smd roundrect (at -3.6 -1.905 180) (size 1.6 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
(net 21 CSn))
(pad 2 smd roundrect (at -3.6 -0.635 180) (size 1.6 0.6) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.25)
@@ -2815,25 +2817,25 @@
(fp_text value SN74LVC8T245DB (at 0 -5.25 180) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1.65 4.1) (end 2.65 4.1) (layer B.Fab) (width 0.15))
+ (fp_line (start 2.65 4.1) (end 2.65 -4.1) (layer B.Fab) (width 0.15))
+ (fp_line (start 2.65 -4.1) (end -2.65 -4.1) (layer B.Fab) (width 0.15))
+ (fp_line (start -2.65 -4.1) (end -2.65 3.1) (layer B.Fab) (width 0.15))
+ (fp_line (start -2.65 3.1) (end -1.65 4.1) (layer B.Fab) (width 0.15))
+ (fp_line (start -4.75 4.5) (end -4.75 -4.5) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.75 4.5) (end 4.75 -4.5) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -4.75 4.5) (end 4.75 4.5) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -4.75 -4.5) (end 4.75 -4.5) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -2.875 4.325) (end -2.875 4.1) (layer B.SilkS) (width 0.15))
+ (fp_line (start 2.875 4.325) (end 2.875 4.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start 2.875 -4.325) (end 2.875 -4.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -2.875 -4.325) (end -2.875 -4.025) (layer B.SilkS) (width 0.15))
+ (fp_line (start -2.875 4.325) (end 2.875 4.325) (layer B.SilkS) (width 0.15))
+ (fp_line (start -2.875 -4.325) (end 2.875 -4.325) (layer B.SilkS) (width 0.15))
+ (fp_line (start -2.875 4.1) (end -4.475 4.1) (layer B.SilkS) (width 0.15))
(fp_text user %R (at 0 0 180) (layer B.Fab)
(effects (font (size 0.8 0.8) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -2.875 4.1) (end -4.475 4.1) (layer B.SilkS) (width 0.15))
- (fp_line (start -2.875 -4.325) (end 2.875 -4.325) (layer B.SilkS) (width 0.15))
- (fp_line (start -2.875 4.325) (end 2.875 4.325) (layer B.SilkS) (width 0.15))
- (fp_line (start -2.875 -4.325) (end -2.875 -4.025) (layer B.SilkS) (width 0.15))
- (fp_line (start 2.875 -4.325) (end 2.875 -4.025) (layer B.SilkS) (width 0.15))
- (fp_line (start 2.875 4.325) (end 2.875 4.025) (layer B.SilkS) (width 0.15))
- (fp_line (start -2.875 4.325) (end -2.875 4.1) (layer B.SilkS) (width 0.15))
- (fp_line (start -4.75 -4.5) (end 4.75 -4.5) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.75 4.5) (end 4.75 4.5) (layer B.CrtYd) (width 0.05))
- (fp_line (start 4.75 4.5) (end 4.75 -4.5) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.75 4.5) (end -4.75 -4.5) (layer B.CrtYd) (width 0.05))
- (fp_line (start -2.65 3.1) (end -1.65 4.1) (layer B.Fab) (width 0.15))
- (fp_line (start -2.65 -4.1) (end -2.65 3.1) (layer B.Fab) (width 0.15))
- (fp_line (start 2.65 -4.1) (end -2.65 -4.1) (layer B.Fab) (width 0.15))
- (fp_line (start 2.65 4.1) (end 2.65 -4.1) (layer B.Fab) (width 0.15))
- (fp_line (start -1.65 4.1) (end 2.65 4.1) (layer B.Fab) (width 0.15))
(pad 1 smd rect (at -3.6 3.575 180) (size 1.75 0.45) (layers B.Cu B.Paste B.Mask)
(net 17 +3V3))
(pad 2 smd rect (at -3.6 2.925 180) (size 1.75 0.45) (layers B.Cu B.Paste B.Mask)
@@ -2901,19 +2903,19 @@
(fp_text value 74HC32 (at 0 5.28) (layer F.Fab) hide
(effects (font (size 1 1) (thickness 0.15)))
)
- (fp_line (start 0 4.435) (end 1.95 4.435) (layer F.SilkS) (width 0.12))
- (fp_line (start 0 4.435) (end -1.95 4.435) (layer F.SilkS) (width 0.12))
- (fp_line (start 0 -4.435) (end 1.95 -4.435) (layer F.SilkS) (width 0.12))
- (fp_line (start 0 -4.435) (end -3.45 -4.435) (layer F.SilkS) (width 0.12))
- (fp_line (start -0.975 -4.325) (end 1.95 -4.325) (layer F.Fab) (width 0.1))
- (fp_line (start 1.95 -4.325) (end 1.95 4.325) (layer F.Fab) (width 0.1))
- (fp_line (start 1.95 4.325) (end -1.95 4.325) (layer F.Fab) (width 0.1))
- (fp_line (start -1.95 4.325) (end -1.95 -3.35) (layer F.Fab) (width 0.1))
- (fp_line (start -1.95 -3.35) (end -0.975 -4.325) (layer F.Fab) (width 0.1))
- (fp_line (start -3.7 -4.58) (end -3.7 4.58) (layer F.CrtYd) (width 0.05))
- (fp_line (start -3.7 4.58) (end 3.7 4.58) (layer F.CrtYd) (width 0.05))
- (fp_line (start 3.7 4.58) (end 3.7 -4.58) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.7 -4.58) (end -3.7 -4.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 3.7 4.58) (end 3.7 -4.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.7 4.58) (end 3.7 4.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -3.7 -4.58) (end -3.7 4.58) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.95 -3.35) (end -0.975 -4.325) (layer F.Fab) (width 0.1))
+ (fp_line (start -1.95 4.325) (end -1.95 -3.35) (layer F.Fab) (width 0.1))
+ (fp_line (start 1.95 4.325) (end -1.95 4.325) (layer F.Fab) (width 0.1))
+ (fp_line (start 1.95 -4.325) (end 1.95 4.325) (layer F.Fab) (width 0.1))
+ (fp_line (start -0.975 -4.325) (end 1.95 -4.325) (layer F.Fab) (width 0.1))
+ (fp_line (start 0 -4.435) (end -3.45 -4.435) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 -4.435) (end 1.95 -4.435) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 4.435) (end -1.95 4.435) (layer F.SilkS) (width 0.12))
+ (fp_line (start 0 4.435) (end 1.95 4.435) (layer F.SilkS) (width 0.12))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.98 0.98) (thickness 0.15)))
)
@@ -2964,47 +2966,47 @@
(fp_text value STM32F411RCTx (at 0 -7.4 180) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start 4.16 -5.11) (end 5.11 -5.11) (layer B.SilkS) (width 0.12))
+ (fp_line (start 5.11 -5.11) (end 5.11 -4.16) (layer B.SilkS) (width 0.12))
+ (fp_line (start -4.16 -5.11) (end -5.11 -5.11) (layer B.SilkS) (width 0.12))
+ (fp_line (start -5.11 -5.11) (end -5.11 -4.16) (layer B.SilkS) (width 0.12))
+ (fp_line (start 4.16 5.11) (end 5.11 5.11) (layer B.SilkS) (width 0.12))
+ (fp_line (start 5.11 5.11) (end 5.11 4.16) (layer B.SilkS) (width 0.12))
+ (fp_line (start -4.16 5.11) (end -5.11 5.11) (layer B.SilkS) (width 0.12))
+ (fp_line (start -5.11 5.11) (end -5.11 4.16) (layer B.SilkS) (width 0.12))
+ (fp_line (start -5.11 4.16) (end -6.45 4.16) (layer B.SilkS) (width 0.12))
+ (fp_line (start -4 5) (end 5 5) (layer B.Fab) (width 0.1))
+ (fp_line (start 5 5) (end 5 -5) (layer B.Fab) (width 0.1))
+ (fp_line (start 5 -5) (end -5 -5) (layer B.Fab) (width 0.1))
+ (fp_line (start -5 -5) (end -5 4) (layer B.Fab) (width 0.1))
+ (fp_line (start -5 4) (end -4 5) (layer B.Fab) (width 0.1))
+ (fp_line (start 0 6.7) (end -4.15 6.7) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -4.15 6.7) (end -4.15 5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -4.15 5.25) (end -5.25 5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -5.25 5.25) (end -5.25 4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -5.25 4.15) (end -6.7 4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -6.7 4.15) (end -6.7 0) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 0 6.7) (end 4.15 6.7) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.15 6.7) (end 4.15 5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.15 5.25) (end 5.25 5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 5.25 5.25) (end 5.25 4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 5.25 4.15) (end 6.7 4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 6.7 4.15) (end 6.7 0) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 0 -6.7) (end -4.15 -6.7) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -4.15 -6.7) (end -4.15 -5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -4.15 -5.25) (end -5.25 -5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -5.25 -5.25) (end -5.25 -4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -5.25 -4.15) (end -6.7 -4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -6.7 -4.15) (end -6.7 0) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 0 -6.7) (end 4.15 -6.7) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.15 -6.7) (end 4.15 -5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.15 -5.25) (end 5.25 -5.25) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 5.25 -5.25) (end 5.25 -4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 5.25 -4.15) (end 6.7 -4.15) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 6.7 -4.15) (end 6.7 0) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 0 0 180) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start 6.7 -4.15) (end 6.7 0) (layer B.CrtYd) (width 0.05))
- (fp_line (start 5.25 -4.15) (end 6.7 -4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 5.25 -5.25) (end 5.25 -4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 4.15 -5.25) (end 5.25 -5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start 4.15 -6.7) (end 4.15 -5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start 0 -6.7) (end 4.15 -6.7) (layer B.CrtYd) (width 0.05))
- (fp_line (start -6.7 -4.15) (end -6.7 0) (layer B.CrtYd) (width 0.05))
- (fp_line (start -5.25 -4.15) (end -6.7 -4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start -5.25 -5.25) (end -5.25 -4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.15 -5.25) (end -5.25 -5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.15 -6.7) (end -4.15 -5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start 0 -6.7) (end -4.15 -6.7) (layer B.CrtYd) (width 0.05))
- (fp_line (start 6.7 4.15) (end 6.7 0) (layer B.CrtYd) (width 0.05))
- (fp_line (start 5.25 4.15) (end 6.7 4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 5.25 5.25) (end 5.25 4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start 4.15 5.25) (end 5.25 5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start 4.15 6.7) (end 4.15 5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start 0 6.7) (end 4.15 6.7) (layer B.CrtYd) (width 0.05))
- (fp_line (start -6.7 4.15) (end -6.7 0) (layer B.CrtYd) (width 0.05))
- (fp_line (start -5.25 4.15) (end -6.7 4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start -5.25 5.25) (end -5.25 4.15) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.15 5.25) (end -5.25 5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.15 6.7) (end -4.15 5.25) (layer B.CrtYd) (width 0.05))
- (fp_line (start 0 6.7) (end -4.15 6.7) (layer B.CrtYd) (width 0.05))
- (fp_line (start -5 4) (end -4 5) (layer B.Fab) (width 0.1))
- (fp_line (start -5 -5) (end -5 4) (layer B.Fab) (width 0.1))
- (fp_line (start 5 -5) (end -5 -5) (layer B.Fab) (width 0.1))
- (fp_line (start 5 5) (end 5 -5) (layer B.Fab) (width 0.1))
- (fp_line (start -4 5) (end 5 5) (layer B.Fab) (width 0.1))
- (fp_line (start -5.11 4.16) (end -6.45 4.16) (layer B.SilkS) (width 0.12))
- (fp_line (start -5.11 5.11) (end -5.11 4.16) (layer B.SilkS) (width 0.12))
- (fp_line (start -4.16 5.11) (end -5.11 5.11) (layer B.SilkS) (width 0.12))
- (fp_line (start 5.11 5.11) (end 5.11 4.16) (layer B.SilkS) (width 0.12))
- (fp_line (start 4.16 5.11) (end 5.11 5.11) (layer B.SilkS) (width 0.12))
- (fp_line (start -5.11 -5.11) (end -5.11 -4.16) (layer B.SilkS) (width 0.12))
- (fp_line (start -4.16 -5.11) (end -5.11 -5.11) (layer B.SilkS) (width 0.12))
- (fp_line (start 5.11 -5.11) (end 5.11 -4.16) (layer B.SilkS) (width 0.12))
- (fp_line (start 4.16 -5.11) (end 5.11 -5.11) (layer B.SilkS) (width 0.12))
(pad 1 smd roundrect (at -5.675 3.75) (size 1.55 0.3) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25)
(net 74 "Net-(U2-Pad1)"))
(pad 2 smd roundrect (at -5.675 3.25) (size 1.55 0.3) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.25)
@@ -3152,22 +3154,22 @@
(fp_text value LM1117-3.3 (at 0 -4.5 90) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start 1.85 3.35) (end 1.85 -3.35) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.85 -3.35) (end 1.85 -3.35) (layer B.Fab) (width 0.1))
+ (fp_line (start -4.1 3.41) (end 1.91 3.41) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.85 3.35) (end 1.85 3.35) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.85 -3.41) (end 1.91 -3.41) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 2.35) (end -1.85 -3.35) (layer B.Fab) (width 0.1))
+ (fp_line (start -1.85 2.35) (end -0.85 3.35) (layer B.Fab) (width 0.1))
+ (fp_line (start -4.4 3.6) (end -4.4 -3.6) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -4.4 -3.6) (end 4.4 -3.6) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.4 -3.6) (end 4.4 3.6) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 4.4 3.6) (end -4.4 3.6) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.91 3.41) (end 1.91 2.15) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1.91 -3.41) (end 1.91 -2.15) (layer B.SilkS) (width 0.12))
(fp_text user %R (at 0 0 180) (layer B.Fab)
(effects (font (size 0.8 0.8) (thickness 0.12)) (justify mirror))
)
- (fp_line (start 1.91 -3.41) (end 1.91 -2.15) (layer B.SilkS) (width 0.12))
- (fp_line (start 1.91 3.41) (end 1.91 2.15) (layer B.SilkS) (width 0.12))
- (fp_line (start 4.4 3.6) (end -4.4 3.6) (layer B.CrtYd) (width 0.05))
- (fp_line (start 4.4 -3.6) (end 4.4 3.6) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.4 -3.6) (end 4.4 -3.6) (layer B.CrtYd) (width 0.05))
- (fp_line (start -4.4 3.6) (end -4.4 -3.6) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 2.35) (end -0.85 3.35) (layer B.Fab) (width 0.1))
- (fp_line (start -1.85 2.35) (end -1.85 -3.35) (layer B.Fab) (width 0.1))
- (fp_line (start -1.85 -3.41) (end 1.91 -3.41) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.85 3.35) (end 1.85 3.35) (layer B.Fab) (width 0.1))
- (fp_line (start -4.1 3.41) (end 1.91 3.41) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -3.35) (end 1.85 -3.35) (layer B.Fab) (width 0.1))
- (fp_line (start 1.85 3.35) (end 1.85 -3.35) (layer B.Fab) (width 0.1))
(pad 1 smd rect (at -3.15 2.3 90) (size 2 1.5) (layers B.Cu B.Paste B.Mask)
(net 2 GND))
(pad 3 smd rect (at -3.15 -2.3 90) (size 2 1.5) (layers B.Cu B.Paste B.Mask)
@@ -3195,19 +3197,19 @@
(fp_text value 5.1k (at 0 -1.65 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_text user %R (at 0 0 270) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
- (fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(pad 2 smd roundrect (at 1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
(net 64 "Net-(J1-PadA5)"))
(pad 1 smd roundrect (at -1.025 0 270) (size 1.15 1.4) (layers B.Cu B.Paste B.Mask) (roundrect_rratio 0.217391)
@@ -3231,16 +3233,16 @@
(fp_text value 5.1k (at 0 -1.65 270) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(fp_text user %R (at 0 0 270) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
@@ -3267,16 +3269,16 @@
(fp_text value 10k (at 0 -1.65) (layer B.Fab)
(effects (font (size 1 1) (thickness 0.15)) (justify mirror))
)
- (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
- (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
- (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
(fp_line (start 1.85 -0.95) (end -1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start 1.85 0.95) (end 1.85 -0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end 1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end -1.85 0.95) (layer B.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer B.SilkS) (width 0.12))
+ (fp_line (start 1 -0.6) (end -1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start 1 0.6) (end 1 -0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end 1 0.6) (layer B.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end -1 0.6) (layer B.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer B.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)) (justify mirror))
)
@@ -3303,16 +3305,16 @@
(fp_text value 220 (at 0 1.65) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
- (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
- (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
- (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.85 0.95) (end -1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start 1.85 -0.95) (end 1.85 0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 -0.95) (end 1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -1.85 0.95) (end -1.85 -0.95) (layer F.CrtYd) (width 0.05))
+ (fp_line (start -0.261252 0.71) (end 0.261252 0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start -0.261252 -0.71) (end 0.261252 -0.71) (layer F.SilkS) (width 0.12))
+ (fp_line (start 1 0.6) (end -1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start 1 -0.6) (end 1 0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 -0.6) (end 1 -0.6) (layer F.Fab) (width 0.1))
+ (fp_line (start -1 0.6) (end -1 -0.6) (layer F.Fab) (width 0.1))
(fp_text user %R (at 0 0) (layer F.Fab)
(effects (font (size 0.5 0.5) (thickness 0.08)))
)
@@ -3327,86 +3329,148 @@
)
)
- (dimension 48 (width 0.15) (layer F.Fab)
- (gr_text "48.000 mm" (at 141.688396 143.899999) (layer F.Fab)
+ (dimension 24 (width 0.15) (layer F.Fab)
+ (gr_text "24.000 mm" (at 153.7 142.999999) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (feature1 (pts (xy 165.7 137.6) (xy 165.7 142.28642)))
+ (feature2 (pts (xy 141.7 137.6) (xy 141.7 142.28642)))
+ (crossbar (pts (xy 141.7 141.699999) (xy 165.7 141.699999)))
+ (arrow1a (pts (xy 165.7 141.699999) (xy 164.573496 142.28642)))
+ (arrow1b (pts (xy 165.7 141.699999) (xy 164.573496 141.113578)))
+ (arrow2a (pts (xy 141.7 141.699999) (xy 142.826504 142.28642)))
+ (arrow2b (pts (xy 141.7 141.699999) (xy 142.826504 141.113578)))
+ )
+ (dimension 24 (width 0.15) (layer F.Fab)
+ (gr_text "24.000 mm" (at 129.7 143) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (feature1 (pts (xy 117.7 137.6) (xy 117.7 142.286421)))
+ (feature2 (pts (xy 141.7 137.6) (xy 141.7 142.286421)))
+ (crossbar (pts (xy 141.7 141.7) (xy 117.7 141.7)))
+ (arrow1a (pts (xy 117.7 141.7) (xy 118.826504 141.113579)))
+ (arrow1b (pts (xy 117.7 141.7) (xy 118.826504 142.286421)))
+ (arrow2a (pts (xy 141.7 141.7) (xy 140.573496 141.113579)))
+ (arrow2b (pts (xy 141.7 141.7) (xy 140.573496 142.286421)))
+ )
+ (dimension 19.2 (width 0.15) (layer F.Fab)
+ (gr_text "19.200 mm" (at 176.5 127.2 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (feature1 (pts (xy 161.7 136.8) (xy 175.786421 136.8)))
+ (feature2 (pts (xy 161.7 117.6) (xy 175.786421 117.6)))
+ (crossbar (pts (xy 175.2 117.6) (xy 175.2 136.8)))
+ (arrow1a (pts (xy 175.2 136.8) (xy 174.613579 135.673496)))
+ (arrow1b (pts (xy 175.2 136.8) (xy 175.786421 135.673496)))
+ (arrow2a (pts (xy 175.2 117.6) (xy 174.613579 118.726504)))
+ (arrow2b (pts (xy 175.2 117.6) (xy 175.786421 118.726504)))
+ )
+ (dimension 18 (width 0.15) (layer F.Fab)
+ (gr_text "18.000 mm" (at 173.5 126.6 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (feature1 (pts (xy 161.7 135.6) (xy 172.786421 135.6)))
+ (feature2 (pts (xy 161.7 117.6) (xy 172.786421 117.6)))
+ (crossbar (pts (xy 172.2 117.6) (xy 172.2 135.6)))
+ (arrow1a (pts (xy 172.2 135.6) (xy 171.613579 134.473496)))
+ (arrow1b (pts (xy 172.2 135.6) (xy 172.786421 134.473496)))
+ (arrow2a (pts (xy 172.2 117.6) (xy 171.613579 118.726504)))
+ (arrow2b (pts (xy 172.2 117.6) (xy 172.786421 118.726504)))
+ )
+ (dimension 13.6 (width 0.15) (layer F.Fab)
+ (gr_text "13.600 mm" (at 170.5 124.4 270) (layer F.Fab)
+ (effects (font (size 1 1) (thickness 0.15)))
+ )
+ (feature1 (pts (xy 141.7 131.2) (xy 169.786421 131.2)))
+ (feature2 (pts (xy 141.7 117.6) (xy 169.786421 117.6)))
+ (crossbar (pts (xy 169.2 117.6) (xy 169.2 131.2)))
+ (arrow1a (pts (xy 169.2 131.2) (xy 168.613579 130.073496)))
+ (arrow1b (pts (xy 169.2 131.2) (xy 169.786421 130.073496)))
+ (arrow2a (pts (xy 169.2 117.6) (xy 168.613579 118.726504)))
+ (arrow2b (pts (xy 169.2 117.6) (xy 169.786421 118.726504)))
+ )
+ (dimension 66.1 (width 0.15) (layer F.Fab)
+ (gr_text "66.100 mm" (at 111.3 103.75 270) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (feature1 (pts (xy 165.688396 136.2) (xy 165.688396 143.18642)))
- (feature2 (pts (xy 117.688396 136.2) (xy 117.688396 143.18642)))
- (crossbar (pts (xy 117.688396 142.599999) (xy 165.688396 142.599999)))
- (arrow1a (pts (xy 165.688396 142.599999) (xy 164.561892 143.18642)))
- (arrow1b (pts (xy 165.688396 142.599999) (xy 164.561892 142.013578)))
- (arrow2a (pts (xy 117.688396 142.599999) (xy 118.8149 143.18642)))
- (arrow2b (pts (xy 117.688396 142.599999) (xy 118.8149 142.013578)))
+ (feature1 (pts (xy 117 136.8) (xy 112.413579 136.8)))
+ (feature2 (pts (xy 117 70.7) (xy 112.413579 70.7)))
+ (crossbar (pts (xy 113 70.7) (xy 113 136.8)))
+ (arrow1a (pts (xy 113 136.8) (xy 112.413579 135.673496)))
+ (arrow1b (pts (xy 113 136.8) (xy 113.586421 135.673496)))
+ (arrow2a (pts (xy 113 70.7) (xy 112.413579 71.826504)))
+ (arrow2b (pts (xy 113 70.7) (xy 113.586421 71.826504)))
)
- (gr_line (start 162.1 130.6) (end 114.2 130.6) (layer F.Fab) (width 0.15) (tstamp 5DE58BA2))
- (gr_line (start 121.688396 121.4) (end 121.688396 114.255229) (layer F.Fab) (width 0.15) (tstamp 5DE58479))
- (gr_line (start 161.688397 120.9) (end 161.688397 113.9) (layer F.Fab) (width 0.15) (tstamp 5DE58BDB))
- (gr_line (start 129.688396 87.598872) (end 129.688396 117.598872) (layer F.Fab) (width 0.15) (tstamp 5DE58B8A))
- (gr_line (start 153.688396 87.598872) (end 153.688396 117.598872) (layer F.Fab) (width 0.15) (tstamp 5DE58A01))
- (gr_line (start 129.688396 87.598872) (end 153.688396 87.598872) (layer F.Fab) (width 0.15) (tstamp 5DE58947))
- (gr_line (start 121.688396 117.598872) (end 161.688397 117.598872) (layer F.Fab) (width 0.15) (tstamp 5DE58476))
- (dimension 12 (width 0.15) (layer F.Fab) (tstamp 5DE58BE8)
- (gr_text "12.000 mm" (at 147.688396 85.700001) (layer F.Fab) (tstamp 5DE58BE9)
+ (dimension 12 (width 0.15) (layer F.Fab)
+ (gr_text "12.000 mm" (at 147.7 84.700001) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (feature1 (pts (xy 141.688396 87.598872) (xy 141.688396 86.41358)))
- (feature2 (pts (xy 153.688396 87.598872) (xy 153.688396 86.41358)))
- (crossbar (pts (xy 153.688396 87.000001) (xy 141.688396 87.000001)))
- (arrow1a (pts (xy 141.688396 87.000001) (xy 142.8149 86.41358)))
- (arrow1b (pts (xy 141.688396 87.000001) (xy 142.8149 87.586422)))
- (arrow2a (pts (xy 153.688396 87.000001) (xy 152.561892 86.41358)))
- (arrow2b (pts (xy 153.688396 87.000001) (xy 152.561892 87.586422)))
+ (feature1 (pts (xy 141.7 87.6) (xy 141.7 85.41358)))
+ (feature2 (pts (xy 153.7 87.6) (xy 153.7 85.41358)))
+ (crossbar (pts (xy 153.7 86.000001) (xy 141.7 86.000001)))
+ (arrow1a (pts (xy 141.7 86.000001) (xy 142.826504 85.41358)))
+ (arrow1b (pts (xy 141.7 86.000001) (xy 142.826504 86.586422)))
+ (arrow2a (pts (xy 153.7 86.000001) (xy 152.573496 85.41358)))
+ (arrow2b (pts (xy 153.7 86.000001) (xy 152.573496 86.586422)))
)
- (gr_line (start 141.688396 117.598872) (end 141.688396 85.6) (layer F.Fab) (width 0.15) (tstamp 5DE58BE4))
- (dimension 24 (width 0.15) (layer F.Fab) (tstamp 5DE58BD6)
- (gr_text "24.000 mm" (at 141.688396 83.4) (layer F.Fab) (tstamp 5DE58BD7)
+ (dimension 24 (width 0.15) (layer F.Fab)
+ (gr_text "24.000 mm" (at 141.7 82.2) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (feature1 (pts (xy 153.688396 87.598872) (xy 153.688396 84.113579)))
- (feature2 (pts (xy 129.688396 87.598872) (xy 129.688396 84.113579)))
- (crossbar (pts (xy 129.688396 84.7) (xy 153.688396 84.7)))
- (arrow1a (pts (xy 153.688396 84.7) (xy 152.561892 85.286421)))
- (arrow1b (pts (xy 153.688396 84.7) (xy 152.561892 84.113579)))
- (arrow2a (pts (xy 129.688396 84.7) (xy 130.8149 85.286421)))
- (arrow2b (pts (xy 129.688396 84.7) (xy 130.8149 84.113579)))
+ (feature1 (pts (xy 153.7 87.6) (xy 153.7 82.913579)))
+ (feature2 (pts (xy 129.7 87.6) (xy 129.7 82.913579)))
+ (crossbar (pts (xy 129.7 83.5) (xy 153.7 83.5)))
+ (arrow1a (pts (xy 153.7 83.5) (xy 152.573496 84.086421)))
+ (arrow1b (pts (xy 153.7 83.5) (xy 152.573496 82.913579)))
+ (arrow2a (pts (xy 129.7 83.5) (xy 130.826504 84.086421)))
+ (arrow2b (pts (xy 129.7 83.5) (xy 130.826504 82.913579)))
)
- (dimension 30 (width 0.15) (layer F.Fab) (tstamp 5DE58A05)
- (gr_text "30.000 mm" (at 170.8 102.598872 90) (layer F.Fab) (tstamp 5DE58A06)
+ (dimension 30 (width 0.15) (layer F.Fab)
+ (gr_text "30.000 mm" (at 170.5 102.6 90) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (feature1 (pts (xy 161.688397 87.598872) (xy 170.086421 87.598872)))
- (feature2 (pts (xy 161.688397 117.598872) (xy 170.086421 117.598872)))
- (crossbar (pts (xy 169.5 117.598872) (xy 169.5 87.598872)))
- (arrow1a (pts (xy 169.5 87.598872) (xy 170.086421 88.725376)))
- (arrow1b (pts (xy 169.5 87.598872) (xy 168.913579 88.725376)))
- (arrow2a (pts (xy 169.5 117.598872) (xy 170.086421 116.472368)))
- (arrow2b (pts (xy 169.5 117.598872) (xy 168.913579 116.472368)))
+ (feature1 (pts (xy 161.7 87.6) (xy 169.786421 87.6)))
+ (feature2 (pts (xy 161.7 117.6) (xy 169.786421 117.6)))
+ (crossbar (pts (xy 169.2 117.6) (xy 169.2 87.6)))
+ (arrow1a (pts (xy 169.2 87.6) (xy 169.786421 88.726504)))
+ (arrow1b (pts (xy 169.2 87.6) (xy 168.613579 88.726504)))
+ (arrow2a (pts (xy 169.2 117.6) (xy 169.786421 116.473496)))
+ (arrow2b (pts (xy 169.2 117.6) (xy 168.613579 116.473496)))
)
- (dimension 20 (width 0.15) (layer F.Fab) (tstamp 5DE58C03)
- (gr_text "20.000 mm" (at 131.688396 140.2) (layer F.Fab) (tstamp 5DE58C04)
+ (gr_line (start 161.7 117.6) (end 161.7 87.6) (layer F.Fab) (width 0.15))
+ (gr_line (start 153.7 87.6) (end 161.7 87.6) (layer F.Fab) (width 0.15))
+ (gr_line (start 153.7 87.6) (end 129.7 87.6) (layer F.Fab) (width 0.15))
+ (dimension 20 (width 0.15) (layer F.Fab)
+ (gr_text "20.000 mm" (at 151.7 140.5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (feature1 (pts (xy 121.688396 117.598872) (xy 121.688396 139.486421)))
- (feature2 (pts (xy 141.688396 117.598872) (xy 141.688396 139.486421)))
- (crossbar (pts (xy 141.688396 138.9) (xy 121.688396 138.9)))
- (arrow1a (pts (xy 121.688396 138.9) (xy 122.8149 138.313579)))
- (arrow1b (pts (xy 121.688396 138.9) (xy 122.8149 139.486421)))
- (arrow2a (pts (xy 141.688396 138.9) (xy 140.561892 138.313579)))
- (arrow2b (pts (xy 141.688396 138.9) (xy 140.561892 139.486421)))
+ (feature1 (pts (xy 161.7 117.6) (xy 161.7 139.786421)))
+ (feature2 (pts (xy 141.7 117.6) (xy 141.7 139.786421)))
+ (crossbar (pts (xy 141.7 139.2) (xy 161.7 139.2)))
+ (arrow1a (pts (xy 161.7 139.2) (xy 160.573496 139.786421)))
+ (arrow1b (pts (xy 161.7 139.2) (xy 160.573496 138.613579)))
+ (arrow2a (pts (xy 141.7 139.2) (xy 142.826504 139.786421)))
+ (arrow2b (pts (xy 141.7 139.2) (xy 142.826504 138.613579)))
)
- (dimension 20.000001 (width 0.15) (layer F.Fab) (tstamp 5DE58BDF)
- (gr_text "20.000 mm" (at 151.688396 140.2) (layer F.Fab) (tstamp 5DE58BE0)
+ (dimension 20 (width 0.15) (layer F.Fab)
+ (gr_text "20.000 mm" (at 131.7 140.5) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
- (feature1 (pts (xy 161.688397 117.598872) (xy 161.688397 139.486421)))
- (feature2 (pts (xy 141.688396 117.598872) (xy 141.688396 139.486421)))
- (crossbar (pts (xy 141.688396 138.9) (xy 161.688397 138.9)))
- (arrow1a (pts (xy 161.688397 138.9) (xy 160.561893 139.486421)))
- (arrow1b (pts (xy 161.688397 138.9) (xy 160.561893 138.313579)))
- (arrow2a (pts (xy 141.688396 138.9) (xy 142.8149 139.486421)))
- (arrow2b (pts (xy 141.688396 138.9) (xy 142.8149 138.313579)))
+ (feature1 (pts (xy 141.7 117.6) (xy 141.7 139.786421)))
+ (feature2 (pts (xy 121.7 117.6) (xy 121.7 139.786421)))
+ (crossbar (pts (xy 121.7 139.2) (xy 141.7 139.2)))
+ (arrow1a (pts (xy 141.7 139.2) (xy 140.573496 139.786421)))
+ (arrow1b (pts (xy 141.7 139.2) (xy 140.573496 138.613579)))
+ (arrow2a (pts (xy 121.7 139.2) (xy 122.826504 139.786421)))
+ (arrow2b (pts (xy 121.7 139.2) (xy 122.826504 138.613579)))
)
+ (gr_line (start 141.7 117.6) (end 141.7 85.6) (layer F.Fab) (width 0.15) (tstamp 5DE58BE4))
+ (gr_line (start 170 131.2) (end 114.2 131.2) (layer F.Fab) (width 0.15) (tstamp 5DE58BA2))
+ (gr_line (start 121.7 121.4) (end 121.7 114.255229) (layer F.Fab) (width 0.15) (tstamp 5DE58479))
+ (gr_line (start 161.7 121) (end 161.7 114) (layer F.Fab) (width 0.15) (tstamp 5DE58BDB))
+ (gr_line (start 129.7 87.6) (end 129.7 117.6) (layer F.Fab) (width 0.15) (tstamp 5DE58B8A))
+ (gr_line (start 153.7 87.6) (end 153.7 117.6) (layer F.Fab) (width 0.15) (tstamp 5DE58A01))
+ (gr_line (start 121.7 117.6) (end 161.7 117.6) (layer F.Fab) (width 0.15) (tstamp 5DE58476))
(gr_poly (pts (xy 119.35 122.85) (xy 121.55 120.65) (xy 122.65 121.75) (xy 120.35 124.05) (xy 119.25 122.95)) (layer B.Mask) (width 0.1) (tstamp 5DE584A9))
(gr_poly (pts (xy 119.2 123) (xy 121.9 120.3) (xy 123 121.4) (xy 120.2 124.2) (xy 119.1 123.1)) (layer F.Mask) (width 0.1) (tstamp 5DE584A6))
(gr_text 64K (at 121 122.4 45) (layer B.Cu) (tstamp 5DE59DA5)
@@ -3415,18 +3479,6 @@
(gr_text 128K (at 121.1 122.3 45) (layer F.Cu) (tstamp 5DE59DA2)
(effects (font (size 1 1) (thickness 0.2)))
)
- (dimension 65.5 (width 0.15) (layer F.Fab) (tstamp 5DE584A1)
- (gr_text "65.500 mm" (at 111.3 103.45 90) (layer F.Fab) (tstamp 5DE584A2)
- (effects (font (size 1 1) (thickness 0.15)))
- )
- (feature1 (pts (xy 117.8 70.7) (xy 112.013579 70.7)))
- (feature2 (pts (xy 117.8 136.2) (xy 112.013579 136.2)))
- (crossbar (pts (xy 112.6 136.2) (xy 112.6 70.7)))
- (arrow1a (pts (xy 112.6 70.7) (xy 113.186421 71.826504)))
- (arrow1b (pts (xy 112.6 70.7) (xy 112.013579 71.826504)))
- (arrow2a (pts (xy 112.6 136.2) (xy 113.186421 135.073496)))
- (arrow2b (pts (xy 112.6 136.2) (xy 112.013579 135.073496)))
- )
(gr_text VEXTREME (at 141.4 122.4) (layer B.SilkS) (tstamp 5DE59D9F)
(effects (font (size 3 4) (thickness 0.75)) (justify mirror))
)
@@ -3436,10 +3488,10 @@
(gr_text VEXTREME (at 141.8 122.4) (layer F.SilkS) (tstamp 5DE59D99)
(effects (font (size 3 4) (thickness 0.75)))
)
- (gr_line (start 165.688396 70.7) (end 117.688396 70.701128) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE58497))
- (gr_line (start 117.688396 70.701128) (end 117.688396 136.2) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE59E28))
- (gr_line (start 117.688396 136.2) (end 165.688396 136.2) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE58491))
- (gr_line (start 165.688396 136.2) (end 165.688396 70.7) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE5848E))
+ (gr_line (start 165.7 70.7) (end 117.7 70.7) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE58497))
+ (gr_line (start 117.7 70.7) (end 117.7 136.8) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE59E28))
+ (gr_line (start 117.7 136.8) (end 165.7 136.8) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE58491))
+ (gr_line (start 165.7 136.8) (end 165.7 70.7) (angle 90) (layer Edge.Cuts) (width 0.15) (tstamp 5DE5848E))
(via (at 123.2 93.1) (size 1) (drill 0.8) (layers F.Cu B.Cu) (net 1) (tstamp 5DE59D1B))
(segment (start 123.2 91.625) (end 123.2 93.1) (width 0.6096) (layer B.Cu) (net 1) (tstamp 5DE59D18))
@@ -4686,7 +4738,7 @@
(fill (arc_segments 32) (thermal_gap 1) (thermal_bridge_width 0.508))
(polygon
(pts
- (xy 165.7 131.5) (xy 165.7 136.162436) (xy 117.7 136.2) (xy 117.7 131.512001)
+ (xy 165.7 131.5) (xy 165.7 136.8) (xy 117.7 136.8) (xy 117.7 131.512001)
)
)
)
@@ -4697,7 +4749,7 @@
(fill (arc_segments 32) (thermal_gap 1) (thermal_bridge_width 0.508))
(polygon
(pts
- (xy 165.7 131.5) (xy 165.7 136.2) (xy 117.7 136.2) (xy 117.7 131.5)
+ (xy 165.7 131.5) (xy 165.7 136.8) (xy 117.7 136.8) (xy 117.7 131.5)
)
)
)
diff --git a/hardware/veccart.sch b/hardware/veccart.sch
index 847f1da..d14ea86 100644
--- a/hardware/veccart.sch
+++ b/hardware/veccart.sch
@@ -1,5 +1,4 @@
EESchema Schematic File Version 4
-LIBS:veccart-cache
EELAYER 30 0
EELAYER END
$Descr A4 11693 8268
@@ -7,7 +6,7 @@ encoding utf-8
Sheet 1 1
Title "VEXTREME Vectrex Multicart"
Date "2019-12-01"
-Rev "v0.2"
+Rev "v0.3"
Comp ""
Comment1 ""
Comment2 ""
@@ -15,7 +14,7 @@ Comment3 ""
Comment4 ""
$EndDescr
$Comp
-L veccart-rescue:GND #PWR07
+L veccart-rescue:GND-veccart-rescue #PWR07
U 1 1 59F16914
P 1700 5300
F 0 "#PWR07" H 1700 5050 50 0001 C CNN
@@ -144,7 +143,7 @@ F 3 "~" H 4600 6200 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0101
+L veccart-rescue:GND-veccart-rescue #PWR0101
U 1 1 5D00E463
P 3850 6350
F 0 "#PWR0101" H 3850 6100 50 0001 C CNN
@@ -155,7 +154,7 @@ F 3 "" H 3850 6350 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0102
+L veccart-rescue:GND-veccart-rescue #PWR0102
U 1 1 5D00E892
P 4600 6350
F 0 "#PWR0102" H 4600 6100 50 0001 C CNN
@@ -168,7 +167,7 @@ $EndComp
Wire Wire Line
4250 6200 4250 6350
$Comp
-L veccart-rescue:GND #PWR0103
+L veccart-rescue:GND-veccart-rescue #PWR0103
U 1 1 5D00F858
P 4250 6350
F 0 "#PWR0103" H 4250 6100 50 0001 C CNN
@@ -215,7 +214,7 @@ $EndComp
Text GLabel 4950 2350 2 50 Input ~ 0
USB-IN
$Comp
-L veccart-rescue:GND #PWR0105
+L veccart-rescue:GND-veccart-rescue #PWR0105
U 1 1 5D01B9D7
P 5650 4300
F 0 "#PWR0105" H 5650 4050 50 0001 C CNN
@@ -254,7 +253,7 @@ F 3 "~" H 7250 3800 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0106
+L veccart-rescue:GND-veccart-rescue #PWR0106
U 1 1 5D023148
P 7250 3950
F 0 "#PWR0106" H 7250 3700 50 0001 C CNN
@@ -413,7 +412,7 @@ F 3 "" H 7350 1100 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0112
+L veccart-rescue:+5V-veccart-rescue #PWR0112
U 1 1 5D05FE50
P 7350 750
F 0 "#PWR0112" H 7350 600 50 0001 C CNN
@@ -516,7 +515,7 @@ F 3 "" H 4600 1100 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0117
+L veccart-rescue:+5V-veccart-rescue #PWR0117
U 1 1 5D06ED8C
P 1750 1050
F 0 "#PWR0117" H 1750 900 50 0001 C CNN
@@ -546,7 +545,7 @@ Wire Wire Line
4250 4750 4350 4750
Connection ~ 4350 4750
$Comp
-L veccart-rescue:GND #PWR0119
+L veccart-rescue:GND-veccart-rescue #PWR0119
U 1 1 5D07FB9D
P 4700 4850
F 0 "#PWR0119" H 4700 4600 50 0001 C CNN
@@ -699,7 +698,7 @@ Connection ~ 8150 1900
Wire Wire Line
8150 1900 8150 2000
$Comp
-L veccart-rescue:GND #PWR0124
+L veccart-rescue:GND-veccart-rescue #PWR0124
U 1 1 5D0A1129
P 8150 2000
F 0 "#PWR0124" H 8150 1750 50 0001 C CNN
@@ -767,7 +766,7 @@ F 3 "" H 5700 3250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0126
+L veccart-rescue:GND-veccart-rescue #PWR0126
U 1 1 5D0F5289
P 9800 2150
F 0 "#PWR0126" H 9800 1900 50 0001 C CNN
@@ -778,7 +777,7 @@ F 3 "" H 9800 2150 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0127
+L veccart-rescue:+5V-veccart-rescue #PWR0127
U 1 1 5D0F55E9
P 9800 1150
F 0 "#PWR0127" H 9800 1000 50 0001 C CNN
@@ -789,7 +788,7 @@ F 3 "" H 9800 1150 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0128
+L veccart-rescue:+5V-veccart-rescue #PWR0128
U 1 1 5D0F60DC
P 3850 5900
F 0 "#PWR0128" H 3850 5750 50 0001 C CNN
@@ -898,7 +897,7 @@ $EndComp
Wire Wire Line
10500 1400 10350 1400
$Comp
-L veccart-rescue:GND #PWR0130
+L veccart-rescue:GND-veccart-rescue #PWR0130
U 1 1 5D0AE42B
P 10350 1400
F 0 "#PWR0130" H 10350 1150 50 0001 C CNN
@@ -915,7 +914,7 @@ RXD
Text GLabel 3200 5900 1 50 Input ~ 0
USB-IN
$Comp
-L veccart-rescue:GND #PWR0118
+L veccart-rescue:GND-veccart-rescue #PWR0118
U 1 1 5DEA6FB0
P 1700 7400
F 0 "#PWR0118" H 1700 7150 50 0001 C CNN
@@ -926,7 +925,7 @@ F 3 "" H 1700 7400 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0131
+L veccart-rescue:GND-veccart-rescue #PWR0131
U 1 1 5DEA771E
P 1400 7400
F 0 "#PWR0131" H 1400 7150 50 0001 C CNN
@@ -967,7 +966,7 @@ Wire Wire Line
Wire Wire Line
3250 6200 3100 6200
$Comp
-L veccart-rescue:GND #PWR0132
+L veccart-rescue:GND-veccart-rescue #PWR0132
U 1 1 5DF1039D
P 3450 6100
F 0 "#PWR0132" H 3450 5850 50 0001 C CNN
@@ -1046,7 +1045,7 @@ SCLK
Text GLabel 7400 4850 0 60 Input ~ 0
SDAT
$Comp
-L veccart-rescue:GND #PWR0135
+L veccart-rescue:GND-veccart-rescue #PWR0135
U 1 1 5E1C4F53
P 7700 5250
F 0 "#PWR0135" H 7700 5000 50 0001 C CNN
@@ -1057,7 +1056,7 @@ F 3 "" H 7700 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0136
+L veccart-rescue:+5V-veccart-rescue #PWR0136
U 1 1 5E1C55CA
P 7700 4650
F 0 "#PWR0136" H 7700 4500 50 0001 C CNN
@@ -1068,7 +1067,7 @@ F 3 "" H 7700 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0137
+L veccart-rescue:GND-veccart-rescue #PWR0137
U 1 1 5E1CFFED
P 8350 5250
F 0 "#PWR0137" H 8350 5000 50 0001 C CNN
@@ -1079,7 +1078,7 @@ F 3 "" H 8350 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0138
+L veccart-rescue:+5V-veccart-rescue #PWR0138
U 1 1 5E1CFFF7
P 8350 4650
F 0 "#PWR0138" H 8350 4500 50 0001 C CNN
@@ -1094,7 +1093,7 @@ Wire Wire Line
Wire Wire Line
5100 3150 4950 3150
$Comp
-L veccart-rescue:GND #PWR0133
+L veccart-rescue:GND-veccart-rescue #PWR0133
U 1 1 5E222AFD
P 9000 5250
F 0 "#PWR0133" H 9000 5000 50 0001 C CNN
@@ -1105,7 +1104,7 @@ F 3 "" H 9000 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0134
+L veccart-rescue:+5V-veccart-rescue #PWR0134
U 1 1 5E222B03
P 9000 4650
F 0 "#PWR0134" H 9000 4500 50 0001 C CNN
@@ -1116,7 +1115,7 @@ F 3 "" H 9000 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0139
+L veccart-rescue:GND-veccart-rescue #PWR0139
U 1 1 5E22D72D
P 9650 5250
F 0 "#PWR0139" H 9650 5000 50 0001 C CNN
@@ -1127,7 +1126,7 @@ F 3 "" H 9650 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0140
+L veccart-rescue:+5V-veccart-rescue #PWR0140
U 1 1 5E22D733
P 9650 4650
F 0 "#PWR0140" H 9650 4500 50 0001 C CNN
@@ -1138,7 +1137,7 @@ F 3 "" H 9650 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0141
+L veccart-rescue:GND-veccart-rescue #PWR0141
U 1 1 5E232EFC
P 10300 5250
F 0 "#PWR0141" H 10300 5000 50 0001 C CNN
@@ -1149,7 +1148,7 @@ F 3 "" H 10300 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0142
+L veccart-rescue:+5V-veccart-rescue #PWR0142
U 1 1 5E232F02
P 10300 4650
F 0 "#PWR0142" H 10300 4500 50 0001 C CNN
@@ -1160,7 +1159,7 @@ F 3 "" H 10300 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0143
+L veccart-rescue:GND-veccart-rescue #PWR0143
U 1 1 5E237D78
P 7700 6300
F 0 "#PWR0143" H 7700 6050 50 0001 C CNN
@@ -1171,7 +1170,7 @@ F 3 "" H 7700 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0144
+L veccart-rescue:+5V-veccart-rescue #PWR0144
U 1 1 5E237D7E
P 7700 5700
F 0 "#PWR0144" H 7700 5550 50 0001 C CNN
@@ -1182,7 +1181,7 @@ F 3 "" H 7700 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0145
+L veccart-rescue:GND-veccart-rescue #PWR0145
U 1 1 5E23C8F2
P 8350 6300
F 0 "#PWR0145" H 8350 6050 50 0001 C CNN
@@ -1193,7 +1192,7 @@ F 3 "" H 8350 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0146
+L veccart-rescue:+5V-veccart-rescue #PWR0146
U 1 1 5E23C8F8
P 8350 5700
F 0 "#PWR0146" H 8350 5550 50 0001 C CNN
@@ -1204,7 +1203,7 @@ F 3 "" H 8350 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0147
+L veccart-rescue:GND-veccart-rescue #PWR0147
U 1 1 5E241687
P 9000 6300
F 0 "#PWR0147" H 9000 6050 50 0001 C CNN
@@ -1215,7 +1214,7 @@ F 3 "" H 9000 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0148
+L veccart-rescue:+5V-veccart-rescue #PWR0148
U 1 1 5E24168D
P 9000 5700
F 0 "#PWR0148" H 9000 5550 50 0001 C CNN
@@ -1226,7 +1225,7 @@ F 3 "" H 9000 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0149
+L veccart-rescue:GND-veccart-rescue #PWR0149
U 1 1 5E247B45
P 9650 6300
F 0 "#PWR0149" H 9650 6050 50 0001 C CNN
@@ -1237,7 +1236,7 @@ F 3 "" H 9650 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0150
+L veccart-rescue:+5V-veccart-rescue #PWR0150
U 1 1 5E247B4B
P 9650 5700
F 0 "#PWR0150" H 9650 5550 50 0001 C CNN
@@ -1248,7 +1247,7 @@ F 3 "" H 9650 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0151
+L veccart-rescue:GND-veccart-rescue #PWR0151
U 1 1 5E24CDAA
P 10300 6300
F 0 "#PWR0151" H 10300 6050 50 0001 C CNN
@@ -1259,7 +1258,7 @@ F 3 "" H 10300 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0152
+L veccart-rescue:+5V-veccart-rescue #PWR0152
U 1 1 5E24CDB0
P 10300 5700
F 0 "#PWR0152" H 10300 5550 50 0001 C CNN
@@ -1346,7 +1345,7 @@ Wire Wire Line
6700 7500 6650 7500
Connection ~ 6700 7300
$Comp
-L veccart-rescue:GND #PWR0153
+L veccart-rescue:GND-veccart-rescue #PWR0153
U 1 1 5E4F4996
P 6700 7500
F 0 "#PWR0153" H 6700 7250 50 0001 C CNN
@@ -1367,8 +1366,8 @@ Wire Wire Line
Connection ~ 6700 6500
Wire Wire Line
6700 6500 6700 6300
-Text Notes 7650 4150 0 50 ~ 0
-v0.2 Changelog\n——————————————————————\n- Replaced USB-B-mini with USB-C and centered USB on cart\n- Extended the PCB by 1.7 mm to get the USB-C connector as close to the case\n exterior as possible.\n- Widened the PCB to 48.0 mm so that there’s less side to side play in the cartridge slot.\n- Moved outer mounting holes into the proper locations\n- Reversed D3 and R4 order to get D3 closer to edge of the PCB, but it turned\n out we added something else there!\n- Added 10 APA102-2020 addressable RGB LED lights (max. draw 245mA) …\n qualify with USB-IN (PA9) for 100% brightness, else 50%\n- Added 47uF cap for peak currents required for RGB LEDs.\n- Added V-IRQ connection to PB9 for 128KB bank-switching\n- Grounded unused floating inputs on U3 to reduce current consumption\n- Adjusted Y1 to use 12pF load crystal resonator with 18pF load caps (see equation)\n- Lots of clean up and tweaking all over PCB\n- Added revision to PCB\n- Added “VEXTREME” to PCB\n- Added a ground pour under the STM32\n- Made the contacts on the edge connector thinner (1.52mm) and made sure they were\n spaced properly (2.54mm).\n- Started moving footprints to the libs/veccart.pretty library so you know where they \n will be!
+Text Notes 7700 2750 0 50 ~ 0
+v0.3 Changelog\n——————————————————————\n- Fixed PCB fingers (removed soldermask ink around fingers, made them 8.8mm\n x 1.52mm, spaced 1.2mm from board edge, and 18.0mm from 3.6mm hole)\n- Increased hole sizes to 3.7mm, 4.2mm, 5.2mm\n- Made all pads on addressable LEDs the same size\n
Text Notes 8000 900 0 50 ~ 0
CL = (C8 * C9)/(C8 + C9) + Cstray\n(324pF/36pF) + 4pF = 13pF (close to 12pF Y1 CL requirement)\n
$Comp
@@ -1477,7 +1476,7 @@ U 1 1 5E24CDA4
P 10300 6000
F 0 "D13" H 10150 6250 50 0000 C CNN
F 1 "APA102-2020" H 10600 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 10350 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 10350 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 10400 5625 50 0001 L TNN
1 10300 6000
1 0 0 -1
@@ -1488,7 +1487,7 @@ U 1 1 5E247B3F
P 9650 6000
F 0 "D12" H 9500 6250 50 0000 C CNN
F 1 "APA102-2020" H 9950 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9700 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9700 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9750 5625 50 0001 L TNN
1 9650 6000
1 0 0 -1
@@ -1499,7 +1498,7 @@ U 1 1 5E241681
P 9000 6000
F 0 "D11" H 8850 6250 50 0000 C CNN
F 1 "APA102-2020" H 9300 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9050 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9050 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9100 5625 50 0001 L TNN
1 9000 6000
1 0 0 -1
@@ -1510,7 +1509,7 @@ U 1 1 5E23C8EC
P 8350 6000
F 0 "D10" H 8200 6250 50 0000 C CNN
F 1 "APA102-2020" H 8650 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 8400 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 8400 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 8450 5625 50 0001 L TNN
1 8350 6000
1 0 0 -1
@@ -1521,7 +1520,7 @@ U 1 1 5E237D72
P 7700 6000
F 0 "D9" H 7550 6250 50 0000 C CNN
F 1 "APA102-2020" H 8000 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 7750 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 7750 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 7800 5625 50 0001 L TNN
1 7700 6000
1 0 0 -1
@@ -1532,7 +1531,7 @@ U 1 1 5E232EF6
P 10300 4950
F 0 "D8" H 10150 5200 50 0000 C CNN
F 1 "APA102-2020" H 10600 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 10350 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 10350 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 10400 4575 50 0001 L TNN
1 10300 4950
1 0 0 -1
@@ -1543,7 +1542,7 @@ U 1 1 5E22D727
P 9650 4950
F 0 "D7" H 9500 5200 50 0000 C CNN
F 1 "APA102-2020" H 9950 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9700 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9700 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9750 4575 50 0001 L TNN
1 9650 4950
1 0 0 -1
@@ -1554,7 +1553,7 @@ U 1 1 5E222AF7
P 9000 4950
F 0 "D6" H 8850 5200 50 0000 C CNN
F 1 "APA102-2020" H 9300 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9050 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9050 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9100 4575 50 0001 L TNN
1 9000 4950
1 0 0 -1
@@ -1565,18 +1564,18 @@ U 1 1 5E1CFFE3
P 8350 4950
F 0 "D5" H 8200 5200 50 0000 C CNN
F 1 "APA102-2020" H 8650 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 8400 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 8400 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 8450 4575 50 0001 L TNN
1 8350 4950
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:vectrex-edge-connector CON1
+L veccart-rescue:vectrex-edge-connector-veccart-rescue CON1
U 1 1 59F1631A
P 1800 3500
F 0 "CON1" H 1450 5350 60 0000 C CNN
F 1 "vectrex-edge-connector" V 1400 3250 60 0000 C CNN
-F 2 "veccart:vectrex-edge-connector-thinner" H 1800 4200 60 0001 C CNN
+F 2 "veccart:vectrex-edge-connector-thinner-no-soldermask" H 1800 4200 60 0001 C CNN
F 3 "" H 1800 4200 60 0001 C CNN
1 1800 3500
1 0 0 -1
@@ -1587,7 +1586,7 @@ U 1 1 5E1BB363
P 7700 4950
F 0 "D4" H 7550 5200 50 0000 C CNN
F 1 "APA102-2020" H 8000 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 7750 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 7750 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 7800 4575 50 0001 L TNN
1 7700 4950
1 0 0 -1
@@ -1619,7 +1618,7 @@ F 3 "~" H 6800 5100 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0154
+L veccart-rescue:GND-veccart-rescue #PWR0154
U 1 1 5DEB047F
P 6800 5250
F 0 "#PWR0154" H 6800 5000 50 0001 C CNN
@@ -1630,7 +1629,7 @@ F 3 "" H 6800 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0155
+L veccart-rescue:+5V-veccart-rescue #PWR0155
U 1 1 5DEB5A91
P 6800 4950
F 0 "#PWR0155" H 6800 4800 50 0001 C CNN
diff --git a/hardware/veccart.sch-bak b/hardware/veccart.sch-bak
index 6b4e2e5..d295870 100644
--- a/hardware/veccart.sch-bak
+++ b/hardware/veccart.sch-bak
@@ -1,5 +1,4 @@
EESchema Schematic File Version 4
-LIBS:veccart-cache
EELAYER 30 0
EELAYER END
$Descr A4 11693 8268
@@ -15,7 +14,7 @@ Comment3 ""
Comment4 ""
$EndDescr
$Comp
-L veccart-rescue:GND #PWR07
+L veccart-rescue:GND-veccart-rescue #PWR07
U 1 1 59F16914
P 1700 5300
F 0 "#PWR07" H 1700 5050 50 0001 C CNN
@@ -144,7 +143,7 @@ F 3 "~" H 4600 6200 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0101
+L veccart-rescue:GND-veccart-rescue #PWR0101
U 1 1 5D00E463
P 3850 6350
F 0 "#PWR0101" H 3850 6100 50 0001 C CNN
@@ -155,7 +154,7 @@ F 3 "" H 3850 6350 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0102
+L veccart-rescue:GND-veccart-rescue #PWR0102
U 1 1 5D00E892
P 4600 6350
F 0 "#PWR0102" H 4600 6100 50 0001 C CNN
@@ -168,7 +167,7 @@ $EndComp
Wire Wire Line
4250 6200 4250 6350
$Comp
-L veccart-rescue:GND #PWR0103
+L veccart-rescue:GND-veccart-rescue #PWR0103
U 1 1 5D00F858
P 4250 6350
F 0 "#PWR0103" H 4250 6100 50 0001 C CNN
@@ -215,7 +214,7 @@ $EndComp
Text GLabel 4950 2350 2 50 Input ~ 0
USB-IN
$Comp
-L veccart-rescue:GND #PWR0105
+L veccart-rescue:GND-veccart-rescue #PWR0105
U 1 1 5D01B9D7
P 5650 4300
F 0 "#PWR0105" H 5650 4050 50 0001 C CNN
@@ -254,7 +253,7 @@ F 3 "~" H 7250 3800 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0106
+L veccart-rescue:GND-veccart-rescue #PWR0106
U 1 1 5D023148
P 7250 3950
F 0 "#PWR0106" H 7250 3700 50 0001 C CNN
@@ -413,7 +412,7 @@ F 3 "" H 7350 1100 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0112
+L veccart-rescue:+5V-veccart-rescue #PWR0112
U 1 1 5D05FE50
P 7350 750
F 0 "#PWR0112" H 7350 600 50 0001 C CNN
@@ -516,7 +515,7 @@ F 3 "" H 4600 1100 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0117
+L veccart-rescue:+5V-veccart-rescue #PWR0117
U 1 1 5D06ED8C
P 1750 1050
F 0 "#PWR0117" H 1750 900 50 0001 C CNN
@@ -546,7 +545,7 @@ Wire Wire Line
4250 4750 4350 4750
Connection ~ 4350 4750
$Comp
-L veccart-rescue:GND #PWR0119
+L veccart-rescue:GND-veccart-rescue #PWR0119
U 1 1 5D07FB9D
P 4700 4850
F 0 "#PWR0119" H 4700 4600 50 0001 C CNN
@@ -699,7 +698,7 @@ Connection ~ 8150 1900
Wire Wire Line
8150 1900 8150 2000
$Comp
-L veccart-rescue:GND #PWR0124
+L veccart-rescue:GND-veccart-rescue #PWR0124
U 1 1 5D0A1129
P 8150 2000
F 0 "#PWR0124" H 8150 1750 50 0001 C CNN
@@ -767,7 +766,7 @@ F 3 "" H 5700 3250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0126
+L veccart-rescue:GND-veccart-rescue #PWR0126
U 1 1 5D0F5289
P 9800 2150
F 0 "#PWR0126" H 9800 1900 50 0001 C CNN
@@ -778,7 +777,7 @@ F 3 "" H 9800 2150 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0127
+L veccart-rescue:+5V-veccart-rescue #PWR0127
U 1 1 5D0F55E9
P 9800 1150
F 0 "#PWR0127" H 9800 1000 50 0001 C CNN
@@ -789,7 +788,7 @@ F 3 "" H 9800 1150 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0128
+L veccart-rescue:+5V-veccart-rescue #PWR0128
U 1 1 5D0F60DC
P 3850 5900
F 0 "#PWR0128" H 3850 5750 50 0001 C CNN
@@ -898,7 +897,7 @@ $EndComp
Wire Wire Line
10500 1400 10350 1400
$Comp
-L veccart-rescue:GND #PWR0130
+L veccart-rescue:GND-veccart-rescue #PWR0130
U 1 1 5D0AE42B
P 10350 1400
F 0 "#PWR0130" H 10350 1150 50 0001 C CNN
@@ -915,7 +914,7 @@ RXD
Text GLabel 3200 5900 1 50 Input ~ 0
USB-IN
$Comp
-L veccart-rescue:GND #PWR0118
+L veccart-rescue:GND-veccart-rescue #PWR0118
U 1 1 5DEA6FB0
P 1700 7400
F 0 "#PWR0118" H 1700 7150 50 0001 C CNN
@@ -926,7 +925,7 @@ F 3 "" H 1700 7400 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0131
+L veccart-rescue:GND-veccart-rescue #PWR0131
U 1 1 5DEA771E
P 1400 7400
F 0 "#PWR0131" H 1400 7150 50 0001 C CNN
@@ -967,7 +966,7 @@ Wire Wire Line
Wire Wire Line
3250 6200 3100 6200
$Comp
-L veccart-rescue:GND #PWR0132
+L veccart-rescue:GND-veccart-rescue #PWR0132
U 1 1 5DF1039D
P 3450 6100
F 0 "#PWR0132" H 3450 5850 50 0001 C CNN
@@ -1046,7 +1045,7 @@ SCLK
Text GLabel 7400 4850 0 60 Input ~ 0
SDAT
$Comp
-L veccart-rescue:GND #PWR0135
+L veccart-rescue:GND-veccart-rescue #PWR0135
U 1 1 5E1C4F53
P 7700 5250
F 0 "#PWR0135" H 7700 5000 50 0001 C CNN
@@ -1057,7 +1056,7 @@ F 3 "" H 7700 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0136
+L veccart-rescue:+5V-veccart-rescue #PWR0136
U 1 1 5E1C55CA
P 7700 4650
F 0 "#PWR0136" H 7700 4500 50 0001 C CNN
@@ -1068,7 +1067,7 @@ F 3 "" H 7700 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0137
+L veccart-rescue:GND-veccart-rescue #PWR0137
U 1 1 5E1CFFED
P 8350 5250
F 0 "#PWR0137" H 8350 5000 50 0001 C CNN
@@ -1079,7 +1078,7 @@ F 3 "" H 8350 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0138
+L veccart-rescue:+5V-veccart-rescue #PWR0138
U 1 1 5E1CFFF7
P 8350 4650
F 0 "#PWR0138" H 8350 4500 50 0001 C CNN
@@ -1094,7 +1093,7 @@ Wire Wire Line
Wire Wire Line
5100 3150 4950 3150
$Comp
-L veccart-rescue:GND #PWR0133
+L veccart-rescue:GND-veccart-rescue #PWR0133
U 1 1 5E222AFD
P 9000 5250
F 0 "#PWR0133" H 9000 5000 50 0001 C CNN
@@ -1105,7 +1104,7 @@ F 3 "" H 9000 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0134
+L veccart-rescue:+5V-veccart-rescue #PWR0134
U 1 1 5E222B03
P 9000 4650
F 0 "#PWR0134" H 9000 4500 50 0001 C CNN
@@ -1116,7 +1115,7 @@ F 3 "" H 9000 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0139
+L veccart-rescue:GND-veccart-rescue #PWR0139
U 1 1 5E22D72D
P 9650 5250
F 0 "#PWR0139" H 9650 5000 50 0001 C CNN
@@ -1127,7 +1126,7 @@ F 3 "" H 9650 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0140
+L veccart-rescue:+5V-veccart-rescue #PWR0140
U 1 1 5E22D733
P 9650 4650
F 0 "#PWR0140" H 9650 4500 50 0001 C CNN
@@ -1138,7 +1137,7 @@ F 3 "" H 9650 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0141
+L veccart-rescue:GND-veccart-rescue #PWR0141
U 1 1 5E232EFC
P 10300 5250
F 0 "#PWR0141" H 10300 5000 50 0001 C CNN
@@ -1149,7 +1148,7 @@ F 3 "" H 10300 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0142
+L veccart-rescue:+5V-veccart-rescue #PWR0142
U 1 1 5E232F02
P 10300 4650
F 0 "#PWR0142" H 10300 4500 50 0001 C CNN
@@ -1160,7 +1159,7 @@ F 3 "" H 10300 4650 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0143
+L veccart-rescue:GND-veccart-rescue #PWR0143
U 1 1 5E237D78
P 7700 6300
F 0 "#PWR0143" H 7700 6050 50 0001 C CNN
@@ -1171,7 +1170,7 @@ F 3 "" H 7700 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0144
+L veccart-rescue:+5V-veccart-rescue #PWR0144
U 1 1 5E237D7E
P 7700 5700
F 0 "#PWR0144" H 7700 5550 50 0001 C CNN
@@ -1182,7 +1181,7 @@ F 3 "" H 7700 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0145
+L veccart-rescue:GND-veccart-rescue #PWR0145
U 1 1 5E23C8F2
P 8350 6300
F 0 "#PWR0145" H 8350 6050 50 0001 C CNN
@@ -1193,7 +1192,7 @@ F 3 "" H 8350 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0146
+L veccart-rescue:+5V-veccart-rescue #PWR0146
U 1 1 5E23C8F8
P 8350 5700
F 0 "#PWR0146" H 8350 5550 50 0001 C CNN
@@ -1204,7 +1203,7 @@ F 3 "" H 8350 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0147
+L veccart-rescue:GND-veccart-rescue #PWR0147
U 1 1 5E241687
P 9000 6300
F 0 "#PWR0147" H 9000 6050 50 0001 C CNN
@@ -1215,7 +1214,7 @@ F 3 "" H 9000 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0148
+L veccart-rescue:+5V-veccart-rescue #PWR0148
U 1 1 5E24168D
P 9000 5700
F 0 "#PWR0148" H 9000 5550 50 0001 C CNN
@@ -1226,7 +1225,7 @@ F 3 "" H 9000 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0149
+L veccart-rescue:GND-veccart-rescue #PWR0149
U 1 1 5E247B45
P 9650 6300
F 0 "#PWR0149" H 9650 6050 50 0001 C CNN
@@ -1237,7 +1236,7 @@ F 3 "" H 9650 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0150
+L veccart-rescue:+5V-veccart-rescue #PWR0150
U 1 1 5E247B4B
P 9650 5700
F 0 "#PWR0150" H 9650 5550 50 0001 C CNN
@@ -1248,7 +1247,7 @@ F 3 "" H 9650 5700 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR0151
+L veccart-rescue:GND-veccart-rescue #PWR0151
U 1 1 5E24CDAA
P 10300 6300
F 0 "#PWR0151" H 10300 6050 50 0001 C CNN
@@ -1259,7 +1258,7 @@ F 3 "" H 10300 6300 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR0152
+L veccart-rescue:+5V-veccart-rescue #PWR0152
U 1 1 5E24CDB0
P 10300 5700
F 0 "#PWR0152" H 10300 5550 50 0001 C CNN
@@ -1346,7 +1345,7 @@ Wire Wire Line
6700 7500 6650 7500
Connection ~ 6700 7300
$Comp
-L veccart-rescue:GND #PWR0153
+L veccart-rescue:GND-veccart-rescue #PWR0153
U 1 1 5E4F4996
P 6700 7500
F 0 "#PWR0153" H 6700 7250 50 0001 C CNN
@@ -1367,8 +1366,8 @@ Wire Wire Line
Connection ~ 6700 6500
Wire Wire Line
6700 6500 6700 6300
-Text Notes 7700 3850 0 50 ~ 0
-v0.2 Changelog\n——————————————————————\n- Replaced USB-B-mini with USB-C and centered USB on cart\n- Extended the PCB by 1.7 mm to get the USB-C connector as close to the case\n exterior as possible.\n- Moved outer mounting holes into the proper locations\n- Reversed D3 and R4 order to get D3 closer to edge of the PCB, but it turned\n out we added something else there!\n- Added 10 APA102-2020 addressable RGB LED lights (max. draw 245mA) …\n qualify with USB-IN (PA9) for 100% brightness, else 50%\n- Added V-IRQ connection to PB9 for 128KB bank-switching\n- Grounded unused floating inputs on U3 to reduce current consumption\n- Adjusted Y1 to use 12pF load crystal resonator with 18pF load caps (see equation)\n- Lots of clean up and tweaking all over PCB\n- Added revision to PCB\n- Added “VEXTREME” to PCB
+Text Notes 7650 4150 0 50 ~ 0
+v0.2 Changelog\n——————————————————————\n- Replaced USB-B-mini with USB-C and centered USB on cart\n- Extended the PCB by 1.7 mm to get the USB-C connector as close to the case\n exterior as possible.\n- Widened the PCB to 48.0 mm so that there’s less side to side play in the cartridge slot.\n- Moved outer mounting holes into the proper locations\n- Reversed D3 and R4 order to get D3 closer to edge of the PCB, but it turned\n out we added something else there!\n- Added 10 APA102-2020 addressable RGB LED lights (max. draw 245mA) …\n qualify with USB-IN (PA9) for 100% brightness, else 50%\n- Added 47uF cap for peak currents required for RGB LEDs.\n- Added V-IRQ connection to PB9 for 128KB bank-switching\n- Grounded unused floating inputs on U3 to reduce current consumption\n- Adjusted Y1 to use 12pF load crystal resonator with 18pF load caps (see equation)\n- Lots of clean up and tweaking all over PCB\n- Added revision to PCB\n- Added “VEXTREME” to PCB\n- Added a ground pour under the STM32\n- Made the contacts on the edge connector thinner (1.52mm) and made sure they were\n spaced properly (2.54mm).\n- Started moving footprints to the libs/veccart.pretty library so you know where they \n will be!
Text Notes 8000 900 0 50 ~ 0
CL = (C8 * C9)/(C8 + C9) + Cstray\n(324pF/36pF) + 4pF = 13pF (close to 12pF Y1 CL requirement)\n
$Comp
@@ -1477,7 +1476,7 @@ U 1 1 5E24CDA4
P 10300 6000
F 0 "D13" H 10150 6250 50 0000 C CNN
F 1 "APA102-2020" H 10600 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 10350 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 10350 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 10400 5625 50 0001 L TNN
1 10300 6000
1 0 0 -1
@@ -1488,7 +1487,7 @@ U 1 1 5E247B3F
P 9650 6000
F 0 "D12" H 9500 6250 50 0000 C CNN
F 1 "APA102-2020" H 9950 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9700 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9700 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9750 5625 50 0001 L TNN
1 9650 6000
1 0 0 -1
@@ -1499,7 +1498,7 @@ U 1 1 5E241681
P 9000 6000
F 0 "D11" H 8850 6250 50 0000 C CNN
F 1 "APA102-2020" H 9300 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9050 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9050 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9100 5625 50 0001 L TNN
1 9000 6000
1 0 0 -1
@@ -1510,7 +1509,7 @@ U 1 1 5E23C8EC
P 8350 6000
F 0 "D10" H 8200 6250 50 0000 C CNN
F 1 "APA102-2020" H 8650 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 8400 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 8400 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 8450 5625 50 0001 L TNN
1 8350 6000
1 0 0 -1
@@ -1521,7 +1520,7 @@ U 1 1 5E237D72
P 7700 6000
F 0 "D9" H 7550 6250 50 0000 C CNN
F 1 "APA102-2020" H 8000 5750 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 7750 5700 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 7750 5700 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 7800 5625 50 0001 L TNN
1 7700 6000
1 0 0 -1
@@ -1532,7 +1531,7 @@ U 1 1 5E232EF6
P 10300 4950
F 0 "D8" H 10150 5200 50 0000 C CNN
F 1 "APA102-2020" H 10600 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 10350 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 10350 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 10400 4575 50 0001 L TNN
1 10300 4950
1 0 0 -1
@@ -1543,7 +1542,7 @@ U 1 1 5E22D727
P 9650 4950
F 0 "D7" H 9500 5200 50 0000 C CNN
F 1 "APA102-2020" H 9950 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9700 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9700 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9750 4575 50 0001 L TNN
1 9650 4950
1 0 0 -1
@@ -1554,7 +1553,7 @@ U 1 1 5E222AF7
P 9000 4950
F 0 "D6" H 8850 5200 50 0000 C CNN
F 1 "APA102-2020" H 9300 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 9050 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 9050 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 9100 4575 50 0001 L TNN
1 9000 4950
1 0 0 -1
@@ -1565,18 +1564,18 @@ U 1 1 5E1CFFE3
P 8350 4950
F 0 "D5" H 8200 5200 50 0000 C CNN
F 1 "APA102-2020" H 8650 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 8400 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 8400 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 8450 4575 50 0001 L TNN
1 8350 4950
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:vectrex-edge-connector CON1
+L veccart-rescue:vectrex-edge-connector-veccart-rescue CON1
U 1 1 59F1631A
P 1800 3500
F 0 "CON1" H 1450 5350 60 0000 C CNN
F 1 "vectrex-edge-connector" V 1400 3250 60 0000 C CNN
-F 2 "veccart:vectrex-edge-connector" H 1800 4200 60 0001 C CNN
+F 2 "veccart:vectrex-edge-connector-thinner-no-soldermask" H 1800 4200 60 0001 C CNN
F 3 "" H 1800 4200 60 0001 C CNN
1 1800 3500
1 0 0 -1
@@ -1587,7 +1586,7 @@ U 1 1 5E1BB363
P 7700 4950
F 0 "D4" H 7550 5200 50 0000 C CNN
F 1 "APA102-2020" H 8000 4700 50 0000 C CNN
-F 2 "veccart:LED-APA102-2020_6" H 7750 4650 50 0001 L TNN
+F 2 "veccart:LED-APA102-2020_6_REV_2" H 7750 4650 50 0001 L TNN
F 3 "http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf" H 7800 4575 50 0001 L TNN
1 7700 4950
1 0 0 -1
@@ -1608,10 +1607,10 @@ F 3 "" H 4750 5800 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L Device:C C?
+L Device:C C13
U 1 1 5DEB0479
P 6800 5100
-F 0 "C?" H 6915 5146 50 0000 L CNN
+F 0 "C13" H 6915 5146 50 0000 L CNN
F 1 "47u" H 6915 5055 50 0000 L CNN
F 2 "Capacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolder" H 6838 4950 50 0001 C CNN
F 3 "~" H 6800 5100 50 0001 C CNN
@@ -1619,10 +1618,10 @@ F 3 "~" H 6800 5100 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:GND #PWR?
+L veccart-rescue:GND-veccart-rescue #PWR0154
U 1 1 5DEB047F
P 6800 5250
-F 0 "#PWR?" H 6800 5000 50 0001 C CNN
+F 0 "#PWR0154" H 6800 5000 50 0001 C CNN
F 1 "GND" H 6800 5100 50 0000 C CNN
F 2 "" H 6800 5250 50 0001 C CNN
F 3 "" H 6800 5250 50 0001 C CNN
@@ -1630,10 +1629,10 @@ F 3 "" H 6800 5250 50 0001 C CNN
1 0 0 -1
$EndComp
$Comp
-L veccart-rescue:+5V #PWR?
+L veccart-rescue:+5V-veccart-rescue #PWR0155
U 1 1 5DEB5A91
P 6800 4950
-F 0 "#PWR?" H 6800 4800 50 0001 C CNN
+F 0 "#PWR0155" H 6800 4800 50 0001 C CNN
F 1 "+5V" H 6800 5090 50 0000 C CNN
F 2 "" H 6800 4950 50 0001 C CNN
F 3 "" H 6800 4950 50 0001 C CNN
diff --git a/images/v0.3-mod1.png b/images/v0.3-mod1.png
new file mode 100644
index 0000000..5d97f44
Binary files /dev/null and b/images/v0.3-mod1.png differ