DELETED .agignore Index: .agignore ================================================================== --- .agignore +++ /dev/null @@ -1,2 +0,0 @@ -inst -test ADDED .fossil-settings/clean-glob Index: .fossil-settings/clean-glob ================================================================== --- /dev/null +++ .fossil-settings/clean-glob @@ -0,0 +1,60 @@ +*.mk + +bin/*.pt +bin/*.rk05 +bin/*.save +bin/*.tu56 +bin/cc8 +bin/d8tape +bin/os8-cp +bin/os8-run +bin/os8pkg +bin/palbart +bin/pdp8 +bin/pidp8i +bin/pidp8i-sim +bin/pidp8i-test +bin/ptp2txt +bin/teco-pi-demo +bin/txt2ptp + +boot/?.script +boot/ac-mq-blinker.script +boot/add.script +boot/asr33-rim-loader.script +boot/bit-rotate.script +boot/common.script +boot/hello.script +boot/hs-rim-loader.script +boot/pep001.script +boot/run-v3f.script +boot/run.script +boot/tss8.script + +config.log + +etc/*.service +etc/sudoers + +lib/*.py +lib/*__pycache__/*.pyc + +libexec/scanswitch + +logfile.txt + +Makefile +*/Makefile + +media/os8/3finit.tx +media/os8/init.tx +media/os8/ock-init.tx + +obj/* + +src/config.h +src/os8/v3f/logfile.txt +src/pidp8i/gpio-common.c +src/pidp8i/main.c + +tools/simh-update Index: .fossil-settings/crlf-glob ================================================================== --- .fossil-settings/crlf-glob +++ .fossil-settings/crlf-glob @@ -1,12 +1,21 @@ examples/*.fc +hardware/pidp8i/*.cmp +hardware/pidp8i/*.dsn +hardware/pidp8i/*.kicad_pcb +hardware/pidp8i/*.lib +hardware/pidp8i/*.mod +hardware/pidp8i/*.pro +hardware/pidp8i/*.sch + src/*.[ch] src/*.in src/cc8/*/*.[ch] src/cc8/include/* +src/cc8/os8/*.[ch] +src/cc8/os8/*.bi src/cc8/os8/*.sb -src/cc8/os8/bldcc8.bi src/PDP8/pdp8_*.[ch] src/PDP8/pidp8i.c.in Index: .fossil-settings/ignore-glob ================================================================== --- .fossil-settings/ignore-glob +++ .fossil-settings/ignore-glob @@ -1,2 +1,3 @@ +autosetup/Makefile doc/simh/*.pdf test/* ADDED .github/workflows/ci.yml Index: .github/workflows/ci.yml ================================================================== --- /dev/null +++ .github/workflows/ci.yml @@ -0,0 +1,33 @@ +name: ci +on: [push, pull_request] +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + steps: + - uses: actions/checkout@v2 + - name: Dependency packages (ubuntu) + run: sudo apt-get -y install build-essential python3-pexpect python3-yaml libncurses-dev + if: ${{ matrix.os == 'ubuntu-latest' }} + - name: Dependency packages (macos) + run: | + brew install coreutils ncurses + pip3 install pexpect pyyaml + if: ${{ matrix.os == 'macos-latest' }} + - name: configure + run: ./configure + - name: make + run: ./tools/mmake + - name: make install-target + run: make install-target DESTDIR=${GITHUB_WORKSPACE}/destdir + - name: Build artifact tarball + run: | + mkdir -p ${GITHUB_WORKSPACE}/artifacts + tar zcvf ${GITHUB_WORKSPACE}/artifacts/${{ github.job }}-${{ github.run_id }}.${{ github.run_number }}-${{ matrix.os }}.tar.gz -C ${GITHUB_WORKSPACE}/destdir . + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: ci-${{ github.job }}-${{ github.run_id }}.${{ github.run_number }}-${{ matrix.os }} + path: artifacts/*.tar.gz Index: .ignore ================================================================== --- .ignore +++ .ignore @@ -1,1 +1,2 @@ -.agignore +inst +test Index: AUTHORS.md ================================================================== --- AUTHORS.md +++ AUTHORS.md @@ -77,10 +77,14 @@ script then replaced it entirely as `os8-run`. He curated the tape collections we ship as `media/.../*.tu56`, created some of those tapes, and more. He has also contributed to other areas of the software project. His contributions are made to the project [as `poetnerd`][pncomm]. + +* **[Bill Silver](mailto:bsilver@tidewater.net)** created E8, an + Emacs-like editor for the PDP-8. See [its `AUTHORS.md` file][e8au] + for more info. * **[Warren Young](mailto:tangentsoft@gmail.com)** Did everything listed in [the change log][cl] that is not attributed to anyone else. @@ -90,9 +94,10 @@ software repository. The changelog provides proper attribution for these where the checkin comments do not. [advent]: http://www.rickmurphy.net/advent/ [cl]: https://tangentsoft.com/pidp8i/doc/trunk/ChangeLog.md +[e8au]: ./src/e8/AUTHORS.md [pncomm]: https://tangentsoft.com/pidp8i/timeline?u=poetnerd [thcomm]: https://tangentsoft.com/pidp8i/timeline?u=tony [vtedit]: https://tangentsoft.com/pidp8i/wiki?name=Using+VTEDIT [wycomm]: https://tangentsoft.com/pidp8i/timeline?u=tangent ADDED CONTRIBUTING.md Index: CONTRIBUTING.md ================================================================== --- /dev/null +++ CONTRIBUTING.md @@ -0,0 +1,1037 @@ +# Contributing to the PiDP-8/I Project + +If you wish to make any changes to [the project’s files][home], here are +some rules and hints to keep in mind while you work. + +[home]: https://tangentsoft.com/pidp8i/ + + +## Getting Started with Fossil + +The PiDP-8/I software project is hosted using the Fossil +[distributed version control system][dvcs], which provides most of the +features of GitHub without [the complexities of Git][fvg]. + +Those new to Fossil should at least read its [Quick Start Guide][fqsg]. +If you want to go deeper, [the Schimpf book][fbook] is somewhat +outdated, but it is still the best single coherent tutorial on Fossil. +Those coming from Git will benefit from the approach taken by the +“[Git to Fossil Translation Guide][gitusr].” + +[The official Fossil docs][fdoc] are much more up to date, but they take +a piecemeal approach to topics, rather than the linear tutorial approach +of a book, so it is not my first recommendation for learning Fossil. +Those docs are better for polishing your skills and for reference after +you know Fossil reasonably well. + +If you have questions about Fossil, ask on [the Fossil forum][ffor] +where I, your humble project maintainer, am active. I also work on the +Fossil docs quite a bit, so if your question really isn’t answered +somewhere in the above material, I might just solve it by extending the +Fossil docs. + +Fossil is pre-installed on our [binary OS images][bosi] since April +2017. + +When starting from Debian-based OSes released in June 2019 or newer, +this will work: + + $ sudo apt install fossil + +Older Debian-based OSes will give you Fossil 1.*x*, which won’t work with +our repository, which requires Fossil 2.1 or higher. If you can’t +upgrade your host OS, you’ll have to [build Fossil from source][bffs]. + +Fossil is also available for all common desktop platforms. If your OS +package repository doesn’t include Fossil 2.1 or higher already, one of +the [precompiled binaries][fbin] may work on your system. + + +[bffs]: https://fossil-scm.org/home/doc/trunk/www/build.wiki +[bosi]: https://tangentsoft.com/pidp8i#bosi +[fbin]: https://fossil-scm.org/index.html/uv/download.html +[fvg]: https://fossil-scm.org/home/doc/trunk/www/fossil-v-git.wiki +[dvcs]: https://en.wikipedia.org/wiki/Distributed_revision_control +[fbook]: https://www.fossil-scm.org/schimpf-book/home +[fdoc]: https://fossil-scm.org/home/doc/trunk/www/permutedindex.html +[ffor]: https://fossil-scm.org/forum/ +[fqsg]: https://fossil-scm.org/home/doc/trunk/www/quickstart.wiki +[gitusr]: https://fossil-scm.org/home/doc/trunk/www/gitusers.md + + +## Fossil Anonymous Access + +There are three ways to clone the repository anonymously using Fossil. +Each of these methods gets you a file called `pidp8i.fossil` containing +the full history of the PiDP-8/I software project from the upstream +2015.12.15 release onward. + +You only need to take one of these options, once per machine. +Thereafter, you will just be working with the cloned repository. + + +### One-Step Clone-and-Open + +The easiest way requires Fossil 2.14 or higher: + + $ fossil clone https://tangentsoft.com/pidp8i + $ cd pidp8i + +That gets you a clone of the `pidp8i.fossil` repository plus a check-out +of the current trunk in a `pidp8i/` directory alongside it. We recommend +that you do this in a directory like `~/src` so you don’t commingle +these files with other things in your current working directory. + + +### Open from URI + +If you have Fossil 2.12 or 2.13, the next-easiest method is: + + $ mkdir -p ~/src/pidp8i + $ cd ~/src/pidp8i + $ fossil open https://tangentsoft.com/pidp8i + +This opens the repository referenced by that URI into the current +directory as `pidp8i.fossil`, then opens that repo into that same +subdirectory. + +You have to create the destination directory first with this method +because Fossil will refuse to spam a non-empty directory with the +check-out contents when opening the repo into a directory containing +other files unless you give it the `--force` flag. + +Notice that the repo file ends up *inside* the check-out tree with this +method. This is because of a purposeful semantic difference in Fossil +between “open” and “clone.” It may seem strange to someone coming from +Git, but while we don’t want to get into the whys and wherefores here, +realize there is logic behind this choice. + + +### Separate Clone and Open + +The complicated method works with all versions of Fossil back to 2.1, +and it is the one we recommend to people who want to get involved with +the project, because it has [numerous advantages][cowf] over the easy +methods. We’ll explain those benefits in the context of the PiDP-8/I +project later, but for now, the method is: + + $ mkdir -p ~/museum ~/src/pidp8i/trunk + $ fossil clone https://tangentsoft.com/pidp8i ~/museum/pidp8i.fossil + $ cd ~/src/pidp8i/trunk + $ fossil open ~/museum/pidp8i.fossil + +[cowf]: https://fossil-scm.org/home/doc/trunk/www/ckout-workflows.md + + +## Fossil Developer Access + +If you have a developer account on the `tangentsoft.com/pidp8i` Fossil +instance, just add your username to the URL like so: + + $ fossil clone https://USERNAME@tangentsoft.com/pidp8i pidp8i.fossil + +If you’ve already cloned anonymously, simply tell Fossil about the new +sync URL instead: + + $ cd ~/src/pidp8i/trunk + $ fossil sync https://USERNAME@tangentsoft.com/pidp8i + +Either way, Fossil will ask you for the password for `USERNAME` on the +remote Fossil instance, and it will offer to remember it for you. If +you let it remember the password, operation from then on is scarcely +different from working with an anonymous clone, except that on checkin, +your changes will be sync’d back to the repository on tangentsoft.com if +you’re online at the time, and you’ll get credit under your developer +account name for the checkin. + +If you’re working offline, Fossil will still do the checkin locally, and +it will sync up with the central repository after you get back online. +It is best to work on a branch when unable to use Fossil’s autosync +feature, as you are less likely to have a sync conflict when attempting +to send a new branch to the central server than in attempting to merge +your changes to the tip of trunk into the current upstream trunk, which +may well have changed since you went offline. + +You can purposely work offline by disabling autosync mode: + + $ fossil set autosync 0 + +Until you re-enable it (`autosync 1`) Fossil will stop trying to sync +your local changes back to the central repo. In this mode, Fossil works +more like Git’s default mode, buying you many of the same problems that +go along with that working style. I recommend disabling autosync mode +only when you are truly going to be offline and don’t want Fossil +attempting to sync when you know it will fail. + + +## Getting Developer Access + +We’re pretty open about giving developer access to someone who’s +provided at least one good, substantial [patch](#patches) to the +software. If we’ve accepted one of your patches, just ask for a +developer account [on the forum][pfor]. + + +## Working with Existing Tags and Branches + +The directory structure shown in the [separate clone and +open](#sep-clone-open) sequence above is more complicated than strictly +necessary, but it has a number of nice properties. + +First, it collects software projects under a common top-level +directory. I’ve used `~/src` for this example, but you are free to use any scheme +you like. + +Second, the level underneath the project directory (`~/src/pidp8i`) stores multiple separate +checkouts, one for each version the developer is actively working with at the moment, +so to add a few other checkouts, you could say: + + $ cd ~/src/pidp8i + $ mkdir -p release # another branch + $ mkdir -p v20151215 # a tag this time, not a branch + $ mkdir -p 2019-04-01 # the software as of a particular date + ...etc... + $ cd release + $ fossil open ~/museum/pidp8i.fossil release + $ cd ../v20151215 + $ fossil open ~/museum/pidp8i.fossil v20151215 + $ cd ../2019-04-01 + $ fossil open ~/museum/pidp8i.fossil 2019-04-01 + ...etc... + +This gives you multiple independent checkouts, which allows you to +quickly switch between versions with “`cd`” commands. The alternative +(favored by Git and some other version control systems) is to use a +single working directory and switch among versions by updating that +single working directory in place. The problem is that this +invalidates all of the build artifacts tied to changed files, so you +have a longer rebuild time than simply switching among check-out +directories. Since disk space is cheap these days — even on a small +Raspberry Pi SD card – it’s better to have multiple working states and +just “`cd`” among them. + +When you say `fossil update` in a check-out directory, you get the “tip” +state of that version’s branch. This means that if you created your +“`release`” check-out while version 2017.01.23 was current and you say +“`fossil update`” today, you’ll get the release version 2019.04.25 or +later. But, since the `v20151215` tag was made on trunk, saying +“`fossil update`” in that check-out directory will fast-forward you to the tip of +trunk; you won’t remain pinned to that old version. This is one of the +essential differences between tags and branches in Fossil, which are at +bottom otherwise nearly identical. + +The PiDP-8/I project uses tags for [each released version][tags], and it +has [many working branches][brlist]. You can use any of those names in +“`fossil open`” and “`fossil update`” commands, and you can also use any +of [Fossil’s special check-in names][fscn]. + +[brlist]: https://tangentsoft.com/pidp8i/brlist +[fscn]: https://fossil-scm.org/home/doc/trunk/www/checkin_names.wiki +[fvg]: https://fossil-scm.org/home/doc/trunk/www/fossil-v-git.wiki +[gitwt]: https://git-scm.com/docs/git-worktree +[tags]: https://tangentsoft.com/pidp8i/taglist + + +## Creating Branches + +Creating a branch in Fossil is scary-simple, to the point that those +coming from other version control systems may ask, “Is that really all +there is to it?” Yes, really, this is it: + + $ fossil ci --branch new-branch-name + +That is to say, you make your changes as you normally would; then when +you go to check them in, you give the `--branch` option to the +`ci/checkin` command to put the changes on a new branch, rather than add +them to the same branch the changes were made against. + +While developers with login rights to the PiDP-8/I Fossil instance are +allowed to check in on the trunk at any time, we recommend using +branches whenever you’re working on something experimental, or where you +can’t make the necessary changes in a single coherent checkin. + +One of this project’s core principles is that `trunk` should always +build without error, and it should always function correctly. That’s an +ideal we have not always achieved, but we do always *try* to achieve it. + +Contrast branches, which PiDP-8/I developers may use to isolate work +until it is ready to merge into the trunk. It is okay to check work in +on a branch that doesn’t work, or doesn’t even *build*, so long as the +goal is to get it to a point that it does build and work properly before +merging it into trunk. + +Here again we have a difference with Git: because Fossil normally syncs +your work back to the central repository, this means we get to see the +branches you are still working on. This is a *good thing*. Do not fear +committing broken or otherwise bad code to a branch. [You are not your +code.][daff] We are software developers, too: we understand that +software development is an iterative process, that not all ideas +spring forth perfect and production-ready from the fingers of its +developers. These public branches let your collaborators see what +you’re up to; they may be able to lend advice, to help with the work, or +to at least be unsurprised when your change finally lands in trunk. + +Fossil fosters close cooperation, whereas Git fosters wild tangents that +never come back home. + +Jim McCarthy (author of [Dynamics of Software Development][dosd]) has a +presentation on YouTube that touches on this topic at a couple of +points: + +* [Don’t go dark](https://www.youtube.com/watch?v=9OJ9hplU8XA) +* [Beware of a guy in a room](https://www.youtube.com/watch?v=oY6BCHqEbyc) + +Fossil’s sync-by-default behavior fights these negative tendencies. + +PiDP-8/I project developers are welcome to create branches at will. The +main rule is to follow the branch naming scheme: all lowercase with +hyphens separating words. See the [available branch list][brlist] for +examples to emulate. + +If you have checkin rights on the repository, it is generally fine to +check things in on someone else’s feature branch, as long as you do so +in a way that cooperates with the purpose of that branch. The same is +true of `trunk`: you should not check something in directly on the trunk +that changes the nature of the software in a major way without +discussing the idea first. This is yet another use for branches: to +make a possibly-controversial change so that it can be discussed before +being merged into the trunk. + +[daff]: http://www.hanselman.com/blog/YouAreNotYourCode.aspx +[dosd]: http://amzn.to/2iEVoBL + + +## Special Branches + +Most of the branches in the PiDP-8/I project are feature branches of the +sort described in the previous section: an isolated line of development +by one or more of the project’s developers to work towards some new +feature, with the goal of merging that feature into the `trunk` branch. + +There are a few branches in the project that are special, which are +subject to different rules than other branches: + +* **release** — One of the steps in the + [release process][relpr] is to merge the stabilized `trunk` into the + `release` branch, from which the release tarballs and binary OS + images are created. Only the project’s release manager — currently + Warren Young — should make changes to this branch. + +* **bogus** or **BOGUS** — Because a branch + is basically just a label for a specific checkin, Fossil allows the tip + of one branch to be “moved” to another branch by applying a branch + label to that checkin. We use this label when someone makes a + checkin on the tip of a branch that should be “forgotten.” Fossil + makes destroying project history very difficult, on purpose, so + things moved to the “bogus” branch are not actually destroyed; + instead, they are merely moved out of the way so that they do not + interfere with that branch’s normal purpose. + + If you find yourself needing to prune the tip of a branch this way, + the simplest way is to do it via the web UI, using the checkin + description page’s “edit” link. You can instead do it from the + command line with the `fossil amend` command. + +[relpr]: https://tangentsoft.com/pidp8i/doc/trunk/doc/RELEASE-PROCESS.md + + +## Developer Discussion Forum + +The “[Forum][pfor]” link at the top of the Fossil web interface is for +discussing the development of the PiDP-8/I software only. All other +traffic should go to [the end-user focused mailing list][ggml] instead. We’re not trying +to split the community by providing a second discussion forum; we just +think many development-related discussions are too low-level to be of +any interest to most of the people on the mailing list. + +You can sign up for the forums without having a developer login, and you +can even post anonymously. If you have a login, you can [sign up for +email alerts][alert] if you like. + +Keep in mind that posts to the Fossil forum are treated much the same +way as ticket submissions and wiki articles. They are permanently +archived with the project. The “edit” feature of Fossil forums just +creates a replacement record for a post, but the old post is still +available in the repository. Don’t post anything you wouldn’t want made +part of the permanent record of the project! + +[ggml]: https://groups.google.com/forum/#!forum/pidp-8 +[pfor]: https://tangentsoft.com/pidp8i/forum +[alert]: https://tangentsoft.com/pidp8i/alerts + + +## Debug Builds + +By default, the build system creates a release build, but you can force +it to produce a binary without as much optimization and with debug +symbols included: + + $ ./configure --debug-mode + $ make clean + $ tools/mmake + + +## Manipulating the Build System Source Files + +The [autosetup build system][asbs] is composed of these files and +directories: + + auto.def + autosetup/* + configure + Makefile.in + +Unlike with GNU Autoconf, which you may be familiar with, the +`configure` script is not output from some other tool. It is just a +driver for the generic Tcl and C code under the `autosetup` directory, +which in turn runs the project-specific `auto.def` Tcl script to +configure the software. Some knowledge of [Tcl syntax][tcldoc] will +therefore be helpful in modifying `auto.def`. + +If you have to modify any of the files in `autosetup/` to get some +needed effect, you should try to get that change into the upstream +[Autosetup][asbs] project, then merge that change down into the local +copy when it lands upstream. + +If you do not have Tcl installed on your system, `configure` builds a +minimal Tcl interpreter called `jimsh0`, based on the [Jim Tcl][jim] +project. Developers working on the build system are encouraged to use +this stripped-down version of Tcl rather than “real” Tcl because Jim Tcl +is a mostly-pure subset of Tcl, and `jimsh0` is a subset of the complete +Jim Tcl distribution, so any changes you make that work with the +`jimsh0` interpreter should also work with “real” Tcl, but not vice +versa. If you have Tcl installed and don’t really need it, consider +uninstalling it to force Autosetup to build and use `jimsh0` to ensure +that your changes to `auto.def` work on both interpreters. + +The `Makefile.in` file is largely a standard [GNU `make`][gmake] file +excepting only that it has variables substituted into it by Autosetup +using its `@VARIABLE@` syntax. At this time, we do not attempt to +achieve compatibility with other `make` programs, though in the future +we may need it to work with [BSD `make`][bmake] as well, so if you are +adding features, you might want to stick to the common subset of +features implemented by both the GNU and BSD flavors of `make`. We do +not anticipate any need to support any other `make` flavors. + +This, by the way, is why we’re not using some heavy-weight build system +such as the GNU Autotools, CMake, etc. + +The primary advantage of GNU Autotools is that you can generate +standalone source packages that will configure and build on weird and +ancient flavors of Unix. We don’t need that. + +Cross-platform build systems such as CMake ease building the same +software on multiple disparate platforms, but the PiDP-8/I software is +built primarily on and for a single operating system, Raspberry Pi OS, +né Raspbian. It also happens to build and run on [several other +OSes][oscomp], for which we also do not need the full power of something +like CMake. Autosetup and GNU `make` suffice for our purposes here. + +[asbs]: http://msteveb.github.io/autosetup/ +[bmake]: https://www.freebsd.org/doc/en/books/developers-handbook/tools-make.html +[gmake]: https://www.gnu.org/software/make/ +[jim]: http://jim.tcl.tk/ +[oscomp]: https://tangentsoft.com/pidp8i/wiki?name=OS+Compatibility +[tcldoc]: http://wiki.tcl.tk/11485 + + +## Directory Structure + +The directory structure of the PiDP-8/I project is as follows: + +* `.` — Top level, occupied only by the few files the end user + of the source code needs immediately at hand on first unpacking the + project: the top level build system files, key documentation, and + licensing information. If a given file *can* be buried deeper, it + *should* be buried to reduce clutter at this most precious level of + the hierarchy. + +* `.fossil-settings` — Versioned settings for the Fossil build + system which Fossil applies as defaults everywhere you check out a + Fossil version. Settings made here are intended to be correct for + all users of the system; think of these not as expressing defaults + but as expressing *policy*. It is possible to override these + settings, but we do not make settings here if we expect that some + users may quibble with our choices here. + + Any setting whose value may vary between users of the Fossil + repository should be done locally with a [`fossil setting` command][fscmd] + rather than by creating or editing files in this subdirectory. + + See [the Fossil settings documentation][fset] for more on this. + +* `autosetup` — The bulk of the [Autosetup build system][asbs]. + These are generic files, not modified by the project itself. We + occasionally run `tools/autosetup-update` to merge in upstream + changes. + +* `bin` — Programs installed to `$prefix/bin`, which may also + be run during development, if only to test changes to those + programs. Some scripts stored here are written in place by the + project’s developers, while other files in this directory are + outputs of the build system. + + A subset of this directory’s content is copied to `$prefix/bin` at + installation time, which is added to the user’s `PATH` by the + `make install` script. We don’t copy the whole thing as-is because + the build system places some files here that get installed to other + locations or which don’t get installed at all. + +* `boot` — SIMH initialization scripts. The `*.script.in` + files are written by the project developers but have local + configuration values substituted in by the `configure` script to + produce a `*.script` version. Scripts which need no config-time + values substituted in are checked in directly as `*.script`. The + `*.script` files in this directory which do not fall into either of + those categories are outputs of `tools/mkbootscript`, which produces + them from `palbart` assembly listings. + + All of these `*.script` files are copied to `$prefix/share/boot` by + `make mediainstall` which runs automatically from `make install` + when we detect that the binary media and SIMH boot scripts have + never been installed at this site before. On subsequent installs, + the user chooses whether to run `make mediainstall` by hand to + overwrite all of this. + +* `doc` — Documentation files that can wait for new users to + discover them, which do not need to be available immediately to the + user on inspecting the tree for the first time. + + Fossil’s [embedded documentation][edoc] feature allows us to present + the contents of `doc` to web site users all but indistinguishably + from a wiki page. + + You may then ask, “Why are there two different ways to achieve the + same end — embedded docs and the wiki — and how do we decide which + mechanism to use?” Let us explore the differences before we answer + the question. + + Fossil’s wiki feature behaves much like Wikipedia: it keeps change + history for wiki documents, but it always presents the most recent + version unless you go out of your way to manually dig up a + historical version. This is true even if you’ve run `fossil ui` from + a check-out directory where you’ve rolled back to a historical + version. This doesn’t roll back the wiki to the same point in time; + it continues showing the most recent version of each article. + + Embedded documentation — being files like any other committed to the + repository — *are* rolled back to historical versions when you say + something like `fossil update 2018-04-01` to see the software as of + April Fool’s Day 2018. You see the embedded docs as of that date as + well, unlike with the wiki. + + That leads us to the razor we use to decide where a given document + lives. + + Use the wiki for evergreen content: material likely to remain + correct for future versions of the software as well as the version + contemporaneous with the initial version of the document. Also use + the wiki for documention of conditions that change independently of + the software’s version history, a good example being [our OS + Compatibility wiki article][oscomp]. In either case, there is no tie + between the software’s internal version history and changes out in + the wider world, so the wiki’s always-current nature matches our + needs well. + + The best case for using embedded documentation is when + changes to the software are likely to require changes to the + corresponding documentation, so that the commit changes both docs + and code, keeping them in lock-step. + + When in doubt, use embedded documentation. + + The `doc/graphics` subdirectory holds JPEGs and SVGs displayed + inline within wiki articles. + +* `etc` — Files which get copied to `/etc` or one of its + subdirectories at installation time. + + There is an exception: `pidp8i.service.in` does not get installed to + `/etc` at install time, but only because systemd’s [unit file load + path scheme][uflp] is screwy: *some* unit files go in `/etc`, while + others do not. The systemd docs claim we can put user units in + `/etc/systemd/user` but this does not appear to work on a Raspberry + Pi running Raspbian Stretch at least. We’ve fallen back to another + directory that *does* work, which feels more right to us anyway, but + which happens not to be in `/etc`. If systemd were designed sanely, + we’d install such files to `$HOME/etc/systemd` but noooo… + + Since none of the above actually argues for creating another + top-level repository directory to hold this one file, we’ve chosen + to store it in `etc`. + +* `examples` — Example programs for the end user’s edification. + Many of these are referenced by documentation files and therefore + should not be renamed or moved, since there may be public web links + referring to these examples. + +* `hardware` — Schematics and such for the PiDP-8/I board or + associated hardware. + +* `labels` — Graphics intended to be printed out and used as + labels for removable media. + +* `lib` — Library routines used by other programs, installed to + `$prefix/lib`. + +* `libexec` — A logical extension of `lib`, these are + standalone programs that nevertheless are intended to be run + primarily by other programs. Whereas a file in `lib` might have its + interface described by a programmer’s reference manual, the + interface of a program in `libexec` is described by its usage + message. + + Currently, there is only one such program, `scanswitch`, which si + run primarily by `etc/pidp8i`. It is only run by hand when someone + is trying to debug something, as in development. + + Programs in `libexec` are installed to `$prefix/libexec`, which is + *not* put into the user’s `PATH`, on purpose. If a program should + end up in the user’s `PATH`, it belongs in `bin`. Alternately, a + wrapper may be put in `bin` which calls a `libexec` program as a + helper. + +* `media` — Binary media images used either by SIMH directly or + inputs consumed by tools like `os8-run` to *produce* media used by + SIMH. + + The contents of this tree are installed to `$prefix/share/media`. + +* `obj` — Intermediate output directory used by the build + system. It is safe to remove this directory at any time, as its + contents may be recreated by `make`. No file checked into Fossil + should be placed here. + + (Contrast `bin` which does have some files checked into Fossil; all + of the *other* files that end up in `bin` can be recreated by + `make`, but not these few hand-written programs.) + +* `scripts` — Scripts driving `os8-run`, most of which are + invoked by the build system, though some are meant to be run by + hand, such as the content of `scripts/test`. + +* `src` — Source code for the project’s programs, especially + those that cannot be used until they are built. The great majority + of these programs are written in C. The build system’s output + directories are `bin`, `boot`, `libexec`, and `obj`. + + Programs that can be used without being “built,” example programs, + and single-file scripts are placed elsewhere: `bin`, `examples`, + `libexec`, `tools`, etc. Basically, we place such files where the + build system *would* place them if they were built from something + under `src`. + + This directory also contains PDP-8 source files of various sorts, + mainly those used for building the SIMH media and the `os8pkg` + packages. These are all “built” into other forms that then appear + when running the simulator, rather than being used directly in this + source code form. + + There are no program sources in the top level of `src`. The file + `src/config.h` may appear to be an exception to that restriction, + but it is *generated output* of the `configure` script, not “source + code” *per se*. + + Multi-module programs each have their own subdirectory of `src`, + each named after the program contained within. + + Single module programs live in `src/misc` or `src/asm`, depending on + whether they are host-side C programs or PAL8 assembly programs. + +* `test` — Output directory used by `tools/test-*`. + +* `tools` — Programs run only during development and not + installed. + + If a program is initially created here but we later decide that it + should be installed for use by end users of the PiDP-8/I system, we + move it to either `bin` or `libexec`, depending on whether it is run + directly at the command line or run from some other program that is + also installed, respectively. + +[edoc]: https://fossil-scm.org/home/doc/trunk/www/embeddeddoc.wiki +[fset]: https://fossil-scm.org/home/doc/trunk/www/settings.wiki +[fscmd]: https://fossil-scm.org/home/help?cmd=setting +[uflp]: https://freedesktop.org/software/systemd/man/systemd.unit.html#id-1.9 + + +## Submitting Patches + +If you do not have a developer login on the project repository, you can +still send changes to the project. + +The simplest way is to say this after developing your change against +trunk: + + $ fossil diff > my-changes.patch + +Then paste that into a [forum post][pfor] using a [fenced code +block][fcb]. We will also accept trivial patches not needing discussion +as text or attachments on [a Fossil ticket][tkt]. + +If you're making a patch against a PiDP-8/I distribution tarball, you can +generate a patch this way: + + $ diff -ruN pidp8i-olddir pidp8i-newdir > mychange.patch + +The `diff` command is part of every Unix and Linux system, and should be +installed by default. If you're on a Windows machine, GNU diff is part +of [Cygwin](http://cygwin.com/) and [WSL]. Fossil is also available for +all of these systems. There are no excuses for not being able to make +unified diffs. :) + +[fcb]: https://www.markdownguide.org/extended-syntax#fenced-code-blocks +[tkt]: https://tangentsoft.com/pidp8i/tktnew +[WSL]: https://docs.microsoft.com/en-us/windows/wsl/install-win10 + + +#### Bundles Instead of Patches + +If your change is more than a small patch, `fossil diff` might not +incorporate all of the changes you have made. The old unified `diff` +format can’t encode branch names, file renamings, file deletions, tags, +checkin comments, and other Fossil-specific information. For such +changes, it is better to send a [Fossil bundle][fb]: + + $ fossil set autosync 0 # disable autosync + $ fossil checkin --branch my-changes + ...followed by more checkins on that branch... + $ fossil bundle export --branch my-changes my-changes.bundle + +After that first `fossil checkin --branch ...` command, any subsequent +`fossil ci` commands will check your changes in on that branch without +needing a `--branch` option until you explicitly switch that checkout +directory to some other branch. This lets you build up a larger change +on a private branch until you’re ready to submit the whole thing as a +bundle. + +Because you are working on a branch on your private copy of the +project’s Fossil repository, you are free to make as many checkins as +you like on the new branch before giving the `bundle export` command. + +Once you are done with the bundle, upload it somewhere public and point +to it from a forum post or ticket. + +[fb]: https://fossil-scm.org/home/help?cmd=bundle + + +#### Contribution Licensing + +Submissions should include a declaration of the license you wish to +contribute your changes under. We suggest using the [SIMH license][simhl], +but any [non-viral][viral] [OSI-approved license][osil] should suffice. +We’re willing to tolerate viral licenses for standalone products; for +example, CC8 is under the GPL, but it’s fine because it isn’t statically +linked into any other part of the PiDP-8/I software system. + +[osil]: https://opensource.org/licenses +[simhl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md +[viral]: https://en.wikipedia.org/wiki/Viral_license + + +#### Can I Use GitHub Instead? + +Although the PiDP-8/I project does have a [GitHub mirror][ghm], it is +intended as a read-only mirror for those heavily tied into Git-based +tooling. You’re welcome to send us a PR anyway, but realize that what’s +going to happen on the back end is that we’ll generate a patch, apply it +to the Fossil repo by hand, test it, and then commit it to the +repository under one of our existing Fossil developer accounts. Only +then do we update the mirror so that the change appears on GitHub; thus, +you don’t get GitHub credit for the PR. You avoid these problems by +simply asking for a developer account on the Fossil repo, so you can +commit there instead. + +This is not simply because setting up bidirectional mirroring is +difficult, it is actually [impossible to achieve 100% fidelity][ghlim] +due to limitations of Git and/or GitHub. If you want a faithful clone of +the project repo, or if you wish to contribute to the project’s +development with full credit for your contributions, it’s best done via +Fossil, not via GitHub. + +[ghlim]: https://fossil-scm.org/home/doc/trunk/www/mirrorlimitations.md +[ghm]: https://github.com/tangentsoft/pidp8i/ + + +## The PiDP-8/I Software Project Code Style Rules + +Every code base should have a common code style. Love it or +hate it, here are PiDP-8/I’s current code style rules: + +**C Source Code** + +File types: `*.c`, `*.h`, `*.c.in` + +We follow the SIMH project’s pre-existing code style when modifying one +of its source files: + +* Spaces for indents, size 4; tabs are rendered size 8 in HTML output, + since that’s how a PDP-8 terminal would likely interpret it! + +* DOS line endings. (Yes, even though this is a Linux-based project! + All decent Linux text editors can cope with this.) + +* Function, structure, type, and variable names are all lowercase, + with underscores separating words + +* Macro names are in `ALL_UPPERCASE_WITH_UNDERSCORES` + +* Whitespace in the SIMH C files is of a style I have never seen + anywhere else in my decades of software development. This example + shows the important features: + + ```C + int some_function (char some_parameter) + { + int some_variable = 0; + + if (some_parameter != '\0') { + int nbytes = sizeof (some_parameter); + char *buffer = malloc (4 * nbytes); + + switch (some_parameter) { + case 'a': + do_something_with_buffer ((char *)buffer); + default: + do_something_else (); + } + } + else { + some_other_function (with_a_large, "number of parameters", + wraps_with_a_single, "indent level"); + printf (stderr, "Failed to allocate buffer.\n"); + } + } + ``` + + It is vaguely like K&R C style except that: + + * The top level of statements in a function are not indented + + * The closing curly brace is indented to the same level as the + statement(s) it contains + + * There is a space before all opening parentheses, not just those + used in `if`, `while`, and similar flow control statements. + + Nested open parentheses do not have extra spaces, however. Only + the outer opening parenthesis has a space separating it from + what went before. + + * Multiple variables declared together don’t have their types and + variable names aligned in columns. + + I find that this style is mostly sensible, but with two serious problems: + I find the indented closing curly braces confusing, and I find that the + loss of the first indent level for the statements inside a function makes + functions all visually run together in a screenful of code. Therefore, + when we have the luxury to be working on a file separate from SIMH, + we use a variant of its style with these two changes, which you can + produce with the `tools/restyle` command. See its internal comments for + details. + + That gives the following, when applied to the above example: + + ```C + int some_function (char some_parameter) + { + int some_variable = 0; + + if (some_parameter != '\0') { + int nbytes = sizeof (some_parameter); + char *buffer = malloc (4 * nbytes); + + switch (some_parameter) { + case 'a': + do_something_with_buffer ((char *)buffer); + default: + do_something_else (); + } + } + else { + some_other_function (with_a_large, "number of parameters", + wraps_with_a_single, "indent level"); + printf (stderr, "Failed to allocate buffer.\n"); + } + } + ``` + + If that looks greatly different, realize that it is just two indenting + level differences: add one indent at function level, except for the + closing braces, which we leave at their previous position. + + SIMH occasionally exceeds 100-column lines. I recommend breaking + long lines at 72 columns. Call me an 80-column traditionalist. + + When in doubt, mimic what you see in the current code. When still in + doubt, ask on the [project forum][pfor]. + +[indent]: http://linux.die.net/man/1/indent + + +**Plain Text Files** + +File types: `*.md`, `*.txt` + +* Spaces for indents, size 4. + +* Unix line endings. The only common text editor I’m aware of that + has a problem with this is Notepad, and people looking at these + files anywhere other than unpacked on a Raspberry Pi box are + probably looking at them through the Fossil web interface on + tangentsoft.com. + +* Markdown files must follow the syntax flavor understood by + [Fossil’s Markdown interpreter][fmd]. + +[fmd]: https://tangentsoft.com/pidp8i/md_rules + + +## Ticket Workflow + +Normal end users of the Fossil ticket system are not expected to +understand it properly or to fill out tickets properly. Without certain +permissions, it is in fact not possible to completely fill out a ticket +properly. Project developers typically must triage, augment, and correct +submissions from the start. + +Here’s the basic workflow for a “code defect” ticket, colloquially +called a bug report: + +``` pikchr toggle indent + fill = bisque + linerad = 15px + + define diamond { \ + box wid 150% invis + line from last.w to last.n to last.e to last.s close rad 0 $1 + } + + oval "SUBMIT TICKET" width 150% + down + arrow 50% +NEW: file "New bug ticket" "marked \"Open\"" fit + arrow same + box "Triage," "augment &" "correct" fit + arrow same +DC: box "Developer comments" fit + arrow same +FR: box "Filer responds" fit + arrow 100% +REJ: diamond("Reject?") + right + arrow 100% "Yes" above + box "Mark ticket" "\"Rejected\" &" "\"Resolved\"" fit with .w at previous.e + arrow right 50% +REJF: file "Rejected" "ticket" fit + arrow right 50% +REOP: diamond("Reopen?") + down +REJA: arrow 75% from REJ.s " No; fix it" ljust +CHNG: box "Developer changes code" with .n at last arrow.s fit + arrow 50% +FIXD: diamond("Fixed?") + right +FNO: arrow "No" above +RES: box "Optional:" "Update ticket resolution:" "\"Partial Fix\", etc." fit + down + arrow 75% " Yes" ljust from FIXD.s + box "Mark ticket" "\"Fixed\" & \"Closed\"" fit + arrow 50% +RESF: file "Resolved ticket" fit + arrow same + oval "END" + + line from 0.3 right even with 0.25 right of DC.e then \ + up even with DC.e then to DC.e -> + + line from NEW.w left 0.5 then down even with REJ.w then to REJ.w -> + line invis from 2nd vertex of last line to 3rd vertex of last line \ + "fast reject path" above aligned + + line from RES.e right 0.3 then up even with CHNG.e then to CHNG.e -> + + line from REOP.s "No" aligned above down 0.4 + line from previous.s down to (previous.s, RESF.e) then to RESF.e -> + + line from REOP.n "Yes" aligned below up 0.3 + line from previous.n up even with 0.6 then to 0.6 -> +``` + +On noticing a new-filed ticket — such as because you are subscribed to +email notifications on ticket changes — someone with sufficient +privilege triages it, sets values for the fields not exposed to the +ticket’s filer, and fixes up any incorrect values given in the initial +submission. + +The Status of a ticket initially starts out as Open; the filer cannot +change that default value, short-circuiting the process. If the person +triaging a ticket takes the time to check that the bug actually occurs +as the ticket filer claims, the Status should change to Verified. + +If a developer implements a fix in response to a ticket, he +has two choices: change the ticket’s Status to “Review” if he wants +someone to check out the change before closing it, or go straight to +Closed status. Closing a ticket hides it from the [Wishes] and [Bugs] ticket +reports. + +The process for software feature request and documentation improvement +request tickets is essentially the same, differing mainly in terminology +rather than process flow: instead of verifying the existence of a bug, +the one triaging the ticket verifies that the feature does in fact not +exist yet, and so on. + +A common requrement in larger teams is that all ticket changes to go through Review +status before getting to Closed, but the PiDP-8/I project is too small +to require such ceremony: if we’ve given you a developer account on the +repository, you’re expected to resolve and close tickets in the same +step, most of the time. If you cannot confidently close a ticket when +resolving it, you should probably not be assigning a resolution yet +anyway. Do whatever you have to with tests and such to *become* certain +before you resolve a ticket. + +There is a process interlock between the Resolution and Status settings +for a ticket: while Status is not Closed, Resolution should be Open. +When Resolution changes from Open, Status should change to either Review +or, preferentially, Closed. A resolution is an end state, not an +expression of changeable intent: no more ceremony than setting a +ticket’s Resolution state *away* from Open and its Status *to* Closed is +required. + +If you do not intend to close a ticket but wish to advocate for a +particular resolution, just add a comment to the ticket and let someone +else choose whether to close the ticket or not. Don’t change the +Resolution value until the issue has been *resolved* for good. + +For example, the resolution “Works as Designed” does not merely mean, +“Yes, we know it works that way,” it also implies “…and we have no +intention to change that behavior, ever.” If there is a chance that the +behavior described in the ticket could change, you should not assign any +resolution. Just leave it open until someone decides to do something +final with the ticket. + +This is not to say that a ticket can never be re-opened once it’s had a +resolution assigned and been closed, but that this is a rare occurrence. +When a developer makes a decision about a ticket, it should be difficult +to re-open the issue. A rejected ticket probably shouldn’t be re-opened +with anything short of a working patch, for example: + +> User A: I want feature X. + +> Dev B: No, we’re not going to do that. Ticket closed and rejected. + +> User C: Here’s a patch to implement feature X. + +> Dev B: Well, that’s different, then. Thanks for the patch! Ticket +> marked Implemented, but still Closed. + +[Bugs]: https://tangentsoft.com/pidp8i/bugs +[Wishes]: https://tangentsoft.com/pidp8i/wishes + + +## License + +Copyright © 2016-2020 by Warren Young. This document is licensed under +the terms of [the SIMH license][sl]. + +[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md Index: COPYING.md ================================================================== --- COPYING.md +++ COPYING.md @@ -9,11 +9,12 @@ Most of the files in this software distribution are released under the terms of the SIMH license, a copy of which typically appears at the top of each file it applies to. This includes not only SIMH proper but also several files written by PiDP-8/I software project contributors who -chose to license their contributions under the same license. +chose to license their contributions under the same license, including +E8. For a few files, textual inclusion of the license inside the file itself was impractical, so this license is applied by reference to [a file included with the distribution][sl]. @@ -81,11 +82,11 @@ Vincent Slyngstad, which uses an entirely different approach for code generation. Ian Schofield took some of the library routines from this implementation. [ddj]: https://en.wikipedia.org/wiki/Dr._Dobb%27s_Journal -[gpl3]: https://tangentsoft.com/pidp8i/doc/trunk/src/cc8/LICENSE.txt +[gpl3]: https://tangentsoft.com/pidp8i/doc/trunk/src/cc8/GPL3.txt [smc]: https://en.wikipedia.org/wiki/Small-C [smsc]: http://so-much-stuff.com/pdp8/C/C.php ## OS/8 License @@ -99,23 +100,13 @@ ## Other DEC Software The other files in the [`media`][md] and [`examples`][ed] directories that originate from Digital Equipment Corporation are believed to fall -under the [public domain license][pdp8pd] DEC released all their PDP-8 +under the [blanket public domain license][decpd] DEC released all their PDP-8 software under after it stopped being economically viable. Documented releases for specific software (e.g. TSS/8) may be difficult to come by, however. [md]: https://tangentsoft.com/pidp8i/dir?ci=trunk&name=media [ed]: https://tangentsoft.com/pidp8i/dir?ci=trunk&name=examples -[pdp8pd]: http://mailman.trailing-edge.com/pipermail/simh/2017-January/016164.html - - -## ETOS License - -ETOS was a commercial product produced outside of DEC. No public -documented declaration of license is known to be available for it, but -we have [a third-hand report][el] that its creators are fine with ETOS -being redistributed. - -[el]: http://mailman.trailing-edge.com/pipermail/simh/2017-January/016169.html +[decpd]: http://mailman.trailing-edge.com/pipermail/simh/2017-January/016164.html Index: ChangeLog.md ================================================================== --- ChangeLog.md +++ ChangeLog.md @@ -1,9 +1,252 @@ # PiDP-8/I Changes + + +## Version 2021.02.14 — The Quarantine Release + +* Raspberry Pi 4 support. + +* Increased SD card requirement from 2 GB to 8 GB. See + [the OS images doc](doc/OS-images.md) for details. + +* Integrated Bill Silver’s E8 Emacs-like text editor for the PDP-8. + +* Updated Ian Schofield’s CC8 C compiler to V2.0: + + * The OS/8 (“native”) compiler now has support for every K&R C + 1978 construct except for `struct`, `float`, and function + pointers. There are numerous compliance problems, but we’ve + tried to document all of them in [`doc/cc8-manual.md`][cc8m]. + + Most notably, this release adds support for `switch` and all of + the remaining 2-character operators: `!=`, `>=`, `<=` and `?:` + + * Added several more examples, including a Forth interpreter. + +* The software build now creates a [bootable RK05 disk image][OCK] of the + [OS/8 Combined Kit (OCK)][kit] which is effectively the last + official release of OS/8, with all patches. You can elect to use + this for the IF=0 boot option instead of OS/8 V3D by configuring the + software with the `--use-ock` flag. + + Bill Cattey did almost all of the work for this. + + Contrast the OS/8 V3F release, which wasn’t a formal release from + DEC, but was rather V3D plus the Device Extensions Kit to support + newer hardware that came out after V3D. + +* Added the [`os8pkg` package manager][os8pkg], allowing installation and + uninstallation of packages on the installed RK05 OS/8 boot media, + whether OCK or V3D. This is the new mechanism behind the existing + `--with-os8-*` options, allowing you to get different feature sets + on existing media without rebuilding it from scratch. Bill Cattey + did almost all of the work on this. + +* Many packages previously copied in as binary blobs have been shifted + to the source tree to be built from source, or at the very least as + individual binary files copied in from the source tree under code + management. This not only permits “clean” builds, it allows adding + and removing packages from OS/8 media after installation, where + previously you had to rebuild the entire medium after reconfiguring + the source tree using `--enable-os8-*` type flags. Bill Cattey did + this integration. + + The packages newly managed in this way are: + + * [`advent`][adventrm]: The game of Adventure, built from + [source][advsrc]. + + * [`basic-games`][gamesrm]: The collection of BASIC games and + demos. Although this is a [collection of ASCII text + files][bgsrc], and OS/8 BASIC is an interpreter of those text + program files, not a compiler, we still build this package of + PDP-8 ASCII text files from POSIX ASCII text files. + + This not only permits later package add and remove options, it + also allows fun things like editing the sources on the Pi side, + rebuilding the package, and reinstalling, rather than editing + the sources directly under OS/8. Or, skip the middleman and use + [`os8-cp`][os8cp] to copy the edited version to the boot media. + + * [`cc8`][cc8m]: Ian Schofield's C compiler was always built from + [source][cc8src], but now it’s built to an intermediate package + rather than copied straight to the OS/8 boot media. + + * [`chekmo`][chekmorm]: The Chekmo II chess playing program, built + from [source][ckmsrc]. + + * [`dcp`][dcprm]: The OS/8 PDP-8 dissassembler, built from binary + executables, since source has apparently been lost. + + * [`e8`][e8man]: Bill Silver's E8 editor, built from + [source][e8src]. + + * [`focal69`][focalrm]: The first DEC FOCAL interpreter, built + from [source][f69src]. + + * [`kermit`][kermitrm]: The communication and text encode/decode + suite, built from [source][krmsrc]. + + * [`lcmod`][lcsrc]: The batch scripts `UCSYS.BI`, `LCSYS.BI`, + `UCBAS.BI` and `LCBAS.BI` are now under source control. Being + patches to OS/8, the sources are scattered within our [OS/8 + source subtree][os8src]. + + * [`music`][musicrm]: The PDP-8 Music compiler is now built from + [source][mussrc] with the scores under source control. Note that + we still can't actually hear the output owing to lack of + connection between the sound generation and SIMH. + + * [`uwfocal`][uwfocalrm]: The U/W FOCAL interpreter. The main + module is built from [source][uwfsrc], but other components are + considered legacy and treated as binary blobs for now. This is + documented in the `uwfocal.pspec` file. + + * [`vtedit`][vteditdoc]: The VT screen editor extensions to TECO + are now packaged separately, built from [source][vtesrc]. + +* Added [`os8-progtest`][progtest] tool for testing software under OS/8. Tests + in `pyyaml` format create state machines for starting programs + engaging in run dialogs, and confirming success. Test harnesses + exist for advent, cc8, chekmo, uwfocal, and basic-games. Bill Cattey + did almost all the work on this. + +* The distribution now follows a [documented testing protocol][testing]. + +* [Configurable screen manager][rmsm], allowing either tmux or "none" + as an alternative to GNU screen. Initial work on this feature done + by Ryan Finnie. + +* Updated the PiDP-8/I KiCad hardware files to Oscar Vermeulen’s 2019 + kit version. + +* Integrated the octal comparison tool `ocomp` into the lower level + `dist-v3d.rk05` and `dist-ocomp.rk05` images. Used for validation of + packages installed by `os8pkg`. Integration by Bill Cattey. + +* Added udev rules to allow mounting media from disks on USB + floppy drives. (Thanks to Ryan Finnie for this feature.) + +* Updated SIMH to 2021-02-03 version, GitHub commit 2f66e74c50. The + primary user-visible changes from the perspective of a PiDP-8/I user + are: + + * The paper tape punch and LPT output devices now default to + append mode for existing files, rather than overwriting them on + `ATTACH`. This not only follows the principle of least surprise + for modern users, it also replicates the way actual hardware + operated: reopening such devices and sending more data to them + just advanced the tape thru the punch or the paper thru the + teletypewriter. + + * RF08: Fixed a bug that could cause loss of photo cell unit + events. + + * The simulator now does a precalibration pass to achieve a good + initial guess at the host's IPS rate rather than drop sharply + into a calibrated level some seconds past the simulator startup + time, as in the prior release. + + * Improvements to SCP, the command shell / script interpreter: + + * Add the `RENAME/MOVE/MV`, `MKDIR`, and `RMDIR` commands. + + * The `SAVE` command can now overwrite existing files. + + * The unimplemented `DUMP` command now gives a helpful + diagnostic message recommending use of `EXAMINE`. + + * Several improvements to power-of-2 unit handling in command + output and parameter input. + + * Regular expressions in SIMH `EXPECT` commands now use + PCRE syntax if available instead of the POSIX regex + library. + + * Many improvements to magnetic tape device handling. (Nothing + PDP-8 specific, just generic SIMH improvements.) + +* Fixed a bug in the `SING_STEP` + `IF` feature for switching between + boot scripts (e.g. IF=2 for running TSS/8) that could cause the + simulator to crash rather than execute the new script. + + In typical use, this may not even be noticed by the user because + systemd will restart a crashed simulator, which will then choose its + boot script based on the same `IF` switch setting. + + Likely the only people to notice this fix are those running the + simulator attached to a terminal, such as in development. + +* The build system now detects the availability of Python 3 and + prefers it if available. All documentation now assumes that you’re + using Python 3. These changes mean we’re no longer testing regularly + with Python 2, so there may be breakages going forward. These should + be inadvertent, but we don’t rule out the possibility of a hard + cut-over in the future that permanently breaks compatibility with + Python 2. We believe we retain that compatibility in this release, + but this may be the last such release of the PiDP-8/I software. + +* Considerable updates to the Python library classes we’ve built our + tooling atop to support all of the above. Some library behaviors + and interfaces may have changed in ways that affect outside users. + +* Updated Autosetup to v0.7.0+, allowing builds under Tcl 8.7. + +* The previous release shipped with a broken version of the UCSYS.BI + script on the v3d.rk05 boot image. The script is supposed to + turn off forcing lower case characters to upper case in the OS/8 + keyboard monitor, and re-enable the linefeed key's command to + re-echo the command line. (Cleaning up messy character echoing.) + Instead linefeed would hang the keyboard monitor. This is because + the script for the v3f keyboard monitor was installed on the v3d + packs. + +* Fixed a bug with the MB display in Sing Inst mode when poking around + with Load Add and Exam. This only affects some configurations, not + all, but the fix appears benign on the non-affected ones. + +* The `os8script.py` class has been [documented][os8script] to explain + the design and assist others in writing programs that can drive operation + under OS/8 in SIMH using Python expect and all the layers developed + above it. + +* Portability and documentation improvements. + +[adventrm]: https://tangentsoft.com/pidp8i/doc/release/src/advent/README.md +[advsrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/advent +[bgsrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/basic-games +[cc8src]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/cc8/os8 +[chekmorm]: https://tangentsoft.com/pidp8i/doc/release/src/chekmo/README.md +[ckmsrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/chekmo +[dcprm]: https://tangentsoft.com/pidp8i/doc/release/src/dcp/README.md +[e8man]: https://tangentsoft.com/pidp8i/doc/release/doc/e8-manual.md +[e8src]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/e8 +[f69src]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/focal69 +[focalrm]: https://tangentsoft.com/pidp8i/doc/release/src/focal69/README.md +[gamesrm]: https://tangentsoft.com/pidp8i/doc/release/src/basic-games/README.md +[kermitrm]: https://tangentsoft.com/pidp8i/doc/release/src/kermit-12/README.md +[kit]: https://tangentsoft.com/pidp8i/doc/release/doc/os8-combined-kit.md +[krmsrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/kermit-12 +[lcsrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/os8/ock/SYSTEM +[musicrm]: https://tangentsoft.com/pidp8i/doc/release/src/music/README.md +[mussrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/music +[OCK]: https://tangentsoft.com/pidp8i/doc/release/src/os8/ock/README.md +[ocomprm]: https://tangentsoft.com/pidp8i/doc/release/src/os8/tools/ocomp/README.md +[os8cp]: https://tangentsoft.com/pidp8i/doc/release/doc/os8-cp.md +[os8pkg]: https://tangentsoft.com/pidp8i/doc/release/doc/os8pkg.md +[os8src]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/os8 +[progtest]: https://tangentsoft.com/pidp8i/doc/release/doc/os8-progtest.md +[rmsm]: https://tangentsoft.com/pidp8i/doc/release/README.md#rc-screen-manager +[testing]: https://tangentsoft.com/pidp8i/doc/release/doc/testing.md +[uwfocalrm]: https://tangentsoft.com/pidp8i/doc/release/src/uwfocal/README.md +[uwfsrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/uwfocal +[vtesrc]: https://tangentsoft.com/pidp8i/dir?ci=release&name=src/vtedit +[os8script]: https://tangentsoft.com/pidp8i/doc/release/doc/class-os8script.md + -## Version 2019.04.25 — The "OS/8 V3F and os8-run" release +## Version 2019.04.25 — The "OS/8 V3F and os8-run" Release * The banner feature in this release is that Bill Cattey transformed our `mkos8` tool into the `os8-run` script interpreter, giving us many new features and capabilities: @@ -264,10 +507,17 @@ Between these weaknesses and the `mkbootscript` bug fixed above, this example was entirely broken since being shipped. Our thanks for the tests and diagnosis of these problems go to Greg Christie and Bill Cattey. +* The `SING_STEP` + `IF` switch combo to restart the simulator with a + new boot script (e.g. IF=2 for TSS/8) now does a full restart of the + simulator rather than simply executing the script’s commands in the + context of the current simulator instance. This can make the + relaunch more reliable by starting with the simulator with known + register values, device states, etc. + * Improved `examples/pep001.pal`: * This program no longer gets stuck in the TSF loop on startup if you run it with the terminal unready for output. The terminal would typically be ready when launching this program from within @@ -303,20 +553,20 @@ * `scanswitch` now returns 127 on “no GPIO” rather than 255. * 16 months of maintenance and polishing: better documentation, build system improvements, etc. -[cc8m]: https://tangentsoft.com/pidp8i/doc/trunk/doc/cc8-manual.md -[esco]: https://tangentsoft.com/pidp8i/doc/trunk/README.md#savestate -[pv]: https://tangentsoft.com/pidp8i/doc/trunk/README.md#systemd +[cc8m]: https://tangentsoft.com/pidp8i/doc/release/doc/cc8-manual.md +[esco]: https://tangentsoft.com/pidp8i/doc/release/README.md#savestate +[pv]: https://tangentsoft.com/pidp8i/doc/release/README.md#systemd [sc85]: https://github.com/ncb85/SmallC-85 [tctd]: https://tangentsoft.com/pidp8i/wiki?name=TD8E+vs+TC08 [v3df]: https://tangentsoft.com/pidp8i/wiki?name=OS/8+V3D+vs+V3F -## Version 2017.12.22 — The "Languages and Custom OS/8 Disk Packs" release +## Version 2017.12.22 — The "Languages and Custom OS/8 Disk Packs" Release * All prior versions of the PiDP-8/I software distribution included `os8.rk05`, a "Field Service Diagnostic" OS/8 disk pack image with uncertain provenance, configuration, and modification history. We have replaced that canned disk image with a script which is run at @@ -688,26 +938,26 @@ that you manually do this with `raspi-config`.) * Assorted portability, build system, and documentation improvements. [apt]: https://linux.die.net/man/8/apt -[cc8rm]: https://tangentsoft.com/pidp8i/doc/trunk/doc/cc8-manual.md -[csd]: https://tangentsoft.com/pidp8i/doc/trunk/doc/class-simh.md +[cc8rm]: https://tangentsoft.com/pidp8i/doc/release/doc/cc8-manual.md +[csd]: https://tangentsoft.com/pidp8i/doc/release/doc/class-simh.md [dibas]: https://tangentsoft.com/pidp8i/wiki?name=Demos+in+BASIC [dt2vk]: https://github.com/VentureKing/Deeper-Thought-2 [gh508]: https://github.com/simh/simh/issues/508 [mbua]: https://serverfault.com/a/767079 [os8ct]: https://tangentsoft.com/pidp8i/wiki?name=OS/8+Console+TTY+Setup [os8lc]: https://tangentsoft.com/pidp8i/wiki?name=OS/8+LCSYS.BI+Disassembled -[os8p]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-patching.md -[os8rm]: https://tangentsoft.com/pidp8i/doc/trunk/media/os8/README.md +[os8p]: https://tangentsoft.com/pidp8i/doc/release/doc/os8-patching.md +[os8rm]: https://tangentsoft.com/pidp8i/doc/release/media/os8/README.md [pe1c]: https://tangentsoft.com/pidp8i/wiki?name=PEP001.C [pe1f2]: https://tangentsoft.com/pidp8i/wiki?name=PEP001.FT#fortran-ii [pe1f4]: https://tangentsoft.com/pidp8i/wiki?name=PEP001.FT#fortran-iv [pe1u]: https://tangentsoft.com/pidp8i/wiki?name=PEP001.FC -[uwfm]: https://tangentsoft.com/pidp8i/doc/trunk/doc/uwfocal-manual.md -[uwfs]: https://tangentsoft.com/pidp8i/doc/trunk/doc/uwfocal-manual-supp.md +[uwfm]: https://tangentsoft.com/pidp8i/doc/release/doc/uwfocal-manual.md +[uwfs]: https://tangentsoft.com/pidp8i/doc/release/doc/uwfocal-manual-supp.md ## Version 2017.04.04 @@ -731,11 +981,11 @@ background CPU usage. See the single-core section of `README-throttle.md` for details. -## Version 2017.04.01 — The "I May Be a Fool, but I am *Your* Fool" release +## Version 2017.04.01 — The "I May Be a Fool, but I am *Your* Fool" Release * Added the `configure --alt-serial-mod` option to change the GPIO code to work with [James L-W's alternative serial mod][sm2]. * Increased the stock CPU throttle from 0.67 MIPS to 0.85 MIPS on most @@ -1213,12 +1463,12 @@ with a `make mediainstall` command, you might want to diff the two versions and decide which changes to copy over or merge into your local files. [hltbug]: https://tangentsoft.com/pidp8i/info/f961906a5c24f5de -[copying]: https://tangentsoft.com/pidp8i/doc/trunk/COPYING.md -[rmth]: https://tangentsoft.com/pidp8i/doc/trunk/README-throttle.md +[copying]: https://tangentsoft.com/pidp8i/doc/release/COPYING.md +[rmth]: https://tangentsoft.com/pidp8i/doc/release/README-throttle.md ## Version 2017.01.05 @@ -1246,11 +1496,11 @@ meaningful to them. (They don't care about our vYYYYMMDD release numbers or our Fossil checkin IDs.) -## Version 2016.12.26 — The Boxing Day release +## Version 2016.12.26 — The Boxing Day Release * Tony Hill updated SIMH to the latest upstream version. This change represents about 15 months worth of work in the [upstream project][simh] — plus a fair bit of work by Tony to merge @@ -1526,15 +1776,15 @@ currently misbehaves if the PiDP-8/I panel is not present. Fixing this is on the radar.) * Fixed a bunch of bugs! -[tlrm]: https://tangentsoft.com/pidp8i/doc/trunk/README.md +[tlrm]: https://tangentsoft.com/pidp8i/doc/release/README.md [dupatch]: https://groups.google.com/forum/#!topic/pidp-8/fmjt7AD1gIA [dudis]: https://tangentsoft.com/pidp8i/tktview?name=e06f8ae936 [wiki]: https://tangentsoft.com/pidp8i/wcontent -[ex]: https://tangentsoft.com/pidp8i/doc/trunk/examples/README.md +[ex]: https://tangentsoft.com/pidp8i/doc/release/examples/README.md [art]: https://tangentsoft.com/pidp8i/dir?c=trunk&name=labels [tix]: https://tangentsoft.com/pidp8i/tickets DELETED HACKERS.md Index: HACKERS.md ================================================================== --- HACKERS.md +++ /dev/null @@ -1,863 +0,0 @@ -Hacking on the PiDP-8/I Software -==== - -If you are going to make any changes to the PiDP-8/I software, here are -some rules and hints to keep in mind while you work. - - - -Getting Started with Fossil ----- - -The PiDP-8/I software project is hosted using the [Fossil][fossil] -[distributed version control system][dvcs]. Fossil provides most of the -features of GitHub under a simpler operating model than Subversion -without tying you to a proprietary web service. - -This guide will introduce you to some of the basics, but you should also -at least read the [Fossil Quick Start Guide][fqsg]. For a more thorough -introduction, I recommend [the Schimpf book][fbook]. If you have -questions about Fossil, you can ask on [the Fossil forum][ffor], where -I, your humble project maintainer, am active. - -If you started with one of our PiDP-8/I binary OS images made in or -after April 2017, Fossil 2.x is already installed. - -If you're starting from some other OS, you either won't have Fossil -installed at all, or you'll most likely be using an older version, since -the Debian project is still shipping version 1.37 and likely will -continue to do so until 2020 or so in accordance with their software -stability policy. You could build Fossil from source, or you could just -go grab a pre-built binary we keep on the project site: - - $ wget https://tangentsoft.com/pidp8i/uv/fossil-2.8-raspbian-9.6-stretch - $ sudo install -m 755 fossil-* /usr/local/bin/fossil - -Fossil is also available for all common desktop platforms. One of [the -official binaries][fbin] may work on your system. If you're getting -binaries from a third party, be sure it is Fossil 2.1 or higher. - - -[fbin]: https://fossil-scm.org/index.html/uv/download.html -[dvcs]: https://en.wikipedia.org/wiki/Distributed_revision_control -[fbook]: https://www.fossil-scm.org/schimpf-book/home -[ffor]: https://fossil-scm.org/forum/ -[fossil]: https://fossil-scm.org/ -[fqsg]: https://fossil-scm.org/index.html/doc/trunk/www/quickstart.wiki - - - -Fossil Anonymous Access ----- - -To clone the code repository anonymously, say: - - $ mkdir -p ~/museum ~/src/pidp8i/trunk - $ fossil clone https://tangentsoft.com/pidp8i ~/museum/pidp8i.fossil - $ cd ~/src/pidp8i/trunk - $ fossil open ~/museum/pidp8i.fossil - -The `clone` command gets you a file called `pidp8i.fossil` containing -the full history of the PiDP-8/I software project from the upstream -2015.12.15 release onward. You can call that clone file anything you -like and put it in any directory you like. Even the `.fossil` extension -is largely a convention, not a requirement. - - - -Working with Existing Tags and Branches ----- - -The directory structure shown in the commands above is more complicated -than strictly necessary, but it has a number of nice properties. - -First, it collects other software projects under a common top-level -directory, which I'm calling `~/src`, but you are free to use any scheme -you like. - -Second, the top-level project directory stores multiple separate -checkouts, one for each branch or tag I'm actively working with at the -moment. So, to add a few other checkouts, you could say: - - $ cd ~/src/pidp8i - $ mkdir -p release # another branch - $ mkdir -p v20151215 # a tag this time, not a branch - ...etc... - $ cd release - $ fossil open ~/museum/pidp8i.fossil release - $ cd ../v20151215 - $ fossil open ~/museum/pidp8i.fossil v20151215 - ...etc... - -This gives you multiple independent checkouts. The branch checkouts -remain pinned to the tip of that branch, so that if someone else checks -changes in on that branch and you say `fossil update`, those changes -appear in your checkout of that branch. The tag checkouts simply give -you the latest checkin with that tag; saying `fossil update` in a -checkout made from a tag will fast-forward you to the tip of the branch -that tag was made on. - -(In Fossil, tags and branches are related, but the details are beyond -our scope here. See the [Fossil Quick Start Guide][fqsg] and the -documents it links to for more details.) - -This directory scheme shows an important difference between Fossil and -Git: with Git, the checkout and the clone are normally intermingled in -the same directory tree, but in Fossil, the clone and the checkout are -always strictly separate. Git has a weak emulation of Fossil's normal -working style via its [worktree][gitwt] feature, but most Git users -aren't even aware of the feature, and those that are aware of it tend to -discourage its use because of the problems it can cause. Fossil was -designed to work this way from the start, so it doesn't have the -problems associated with Git worktrees. - -Another important difference relative to Git is that with Fossil, local -checkins attempt to automatically sync checked-in changes back to the -repository you cloned from. (This only works if you have a login on the -remote repository, the subject of the [next section](#login).) This -solves a number of problems with Git, all stemming from the fact that -Git almost actively tries to make sure every clone differs from every -other in some important way. - -While Fossil does allow offline operation and local independent clones, -its default mode of operation is to try and keep the clones in sync as -much as possible. Git works the way it does because it was designed to -meet the needs of the Linux kernel development project, which is -inherently federated, so Git tries to operate in a federated model as -well. Fossil is better for smaller, more coherent teams, where there is -a single, clear goal for the project and a single source for its -official code. Fossil helps remote developers cooperate, whereas Git -helps remote developers go off on their own tangents for extended -periods of time and optionally sync back up with each other -occasionally. - -Fossil is a better match for the way the PiDP-8/I software project -works: we want you to cooperate closely with us, not go off on wild -tangents. - -[gitwt]: https://git-scm.com/docs/git-worktree - - - -Fossil Developer Access ----- - -If you have a developer account on the `tangentsoft.com/pidp8i` Fossil -instance, just add your username to the URL like so: - - $ fossil clone https://username@tangentsoft.com/pidp8i pidp8i.fossil - -If you've already cloned anonymously, you don't have to clone again to -inform Fossil about your developer account. Just do a manual sync from -within a PiDP-8/I checkout directory, changing the URL to include the -user name: - - $ fossil sync https://username@tangentsoft.com/pidp8i - -Either way, Fossil will ask you for the password for `username` on the -remote Fossil instance, and it will offer to remember it for you. If -you let it remember the password, operation from then on is scarcely -different from working with an anonymous clone, except that on checkin, -your changes will be sync’d back to the repository on tangentsoft.com if -you're online at the time, and you'll get credit under your developer -account name for the checkin. - -If you're working offline, Fossil will still do the checkin locally, and -it will sync up with the central repository after you get back online. -It is best to work on a branch when unable to use Fossil's autosync -feature, as you are less likely to have a sync conflict when attempting -to send a new branch to the central server than in attempting to merge -your changes to the tip of trunk into the current upstream trunk, which -may well have changed since you went offline. - -You can purposely work offline by disabling autosync mode: - - $ fossil set autosync 0 - -Until you re-enable it (`autosync 1`) Fossil will stop trying to sync -your local changes back to the central repo. In this mode, Fossil works -more like Git's default mode, buying you many of the same problems that -go along with that working style. I recommend disabling autosync mode -only when you are truly going to be offline and don't want Fossil -attempting to sync when you know it will fail. - - - -Getting Developer Access ----- - -We are pretty open about giving developer access to someone who’s -provided at least one good, substantial [patch](#patches) to the -software. If we’ve accepted one of your patches, just ask for a -developer account [on the forum][pfor]. - - - -Developer Discussion Forum ----- - -The "[Forum][pfor]" link at the top of the Fossil web interface is for -discussing the development of the PiDP-8/I software only. All other -traffic should go to [the mailing list][ggml] instead. We're not trying -to split the community by providing a second discussion forum; we just -think many development-related discussions are too low-level to be of -any interest to most of the people on the mailing list. - -We used to relegate such discussions to private email, but that was not -out of any wish to hide what we're doing. We just didn't have a good -place to do this work in public until recently. - -You can sign up for the forums without having a developer login, and you -can even post anonymously. If you have a login, you can [sign up for -email alerts][alert] if you like. - -Keep in mind that posts to the Fossil forum are treated much the same -way as ticket submissions and wiki articles. They are permanently -archived with the project. The "edit" feature of Fossil forums just -creates a replacement record for a post, but the old post is still -available in the repository. Don't post anything you wouldn't want made -part of the permanent record of the project! - -[ggml]: https://groups.google.com/forum/#!forum/pidp-8 -[pfor]: https://tangentsoft.com/pidp8i/forum -[alert]: https://tangentsoft.com/pidp8i/alerts - - - -Creating Branches ----- - -Creating a branch in Fossil is scary-simple, to the point that those -coming from other version control systems may ask, "Is that really all -there is to it?" Yes, really, this is it: - - $ fossil ci --branch new-branch-name - -That is to say, you make your changes as you normally would; then when -you go to check them in, you give the `--branch` option to the -`ci/checkin` command to put the changes on a new branch, rather than add -them to the same branch the changes were made against. - -While developers with login rights to the PiDP-8/I Fossil instance are -allowed to check in on the trunk at any time, we recommend using -branches whenever you're working on something experimental, or where you -can't make the necessary changes in a single coherent checkin. - -One of this project's core principles is that `trunk` should always -build without error, and it should always function correctly. That's an -ideal we have not always achieved, but we do always *try* to achieve it. - -Contrast branches, which PiDP-8/I developers may use to isolate work -until it is ready to merge into the trunk. It is okay to check work in -on a branch that doesn't work, or doesn't even *build*, so long as the -goal is to get it to a point that it does build and work properly before -merging it into trunk. - -Here again we have a difference with Git: because Fossil normally syncs -your work back to the central repository, this means we get to see the -branches you are still working on. This is a *good thing*. Do not fear -committing broken or otherwise bad code to a branch. [You are not your -code.][daff] We are software developers, too: we understand that -software development is an iterative process, and that not all ideas -spring forth perfect and production-ready from the fingers of its -developers. These public branches let your collaborators see what -you're up to, and maybe lend advice or a hand in the work; mostly, -public branches let your collaborators see what you're up to, so they're -not surprised when the change finally lands in trunk. - -This is part of what I mean about Fossil fostering close cooperation -rather than fostering wild tangents. - -Jim McCarthy (author of [Dynamics of Software Development][dosd]) has a -presentation on YouTube that touches on this topic at a couple of -points: - -* [Don't go dark](https://www.youtube.com/watch?v=9OJ9hplU8XA) -* [Beware of a guy in a room](https://www.youtube.com/watch?v=oY6BCHqEbyc) - -Fossil's sync-by-default behavior fights these negative tendencies. - -PiDP-8/I project developers are welcome to create branches at will. The -main rule is to follow the branch naming scheme: all lowercase with -hyphens separating words. See the [available branch list][brlist] for -examples to emulate. - -If you have checkin rights on the repository, it is generally fine to -check things in on someone else's feature branch, as long as you do so -in a way that cooperates with the purpose of that branch. The same is -true of `trunk`: you should not check something in directly on the trunk -that changes the nature of the software in a major way without -discussing the idea first. This is yet another use for branches: to -make a possibly-controversial change so that it can be discussed before -being merged into the trunk. - -[brlist]: https://tangentsoft.com/pidp8i/brlist -[daff]: http://www.hanselman.com/blog/YouAreNotYourCode.aspx -[dosd]: http://amzn.to/2iEVoBL - - - -Special Branches ----- - -Most of the branches in the PiDP-8/I project are feature branches of the -sort described in the previous section: an isolated line of development -by one or more of the project's developers to work towards some new -feature, with the goal of merging that feature into the `trunk` branch. - -There are a few branches in the project that are special, which are -subject to different rules than other branches: - -* **release** - One of the steps in the - [release process][relpr] is to merge the stabilized `trunk` into the - `release` branch, from which the release tarballs and binary OS - images are created. Only the project's release manager — currently - Warren Young — should make changes to this branch. - -* **bogus/BOGUS** — Because a branch is basically just a - label for a specific checkin, Fossil allows the tip of one branch to - be "moved" to another branch by applying a branch label to that - checkin. We use this label when someone makes a checkin on the tip - of a branch that should be "forgotten." Fossil makes destroying - project history very difficult, on purpose, so things moved to the - "bogus" branch are not actually destroyed; instead, they are merely - moved out of the way so that they do not interfere with that - branch's normal purpose. - - If you find yourself needing to prune the tip of a branch this way, - the simplest way is to do it via the web UI, using the checkin - description page's "edit" link. You can instead do it from the - command line with the `fossil amend` command. - -[relpr]: https://tangentsoft.com/pidp8i/doc/trunk/doc/RELEASE-PROCESS.md - - - -Debug Builds ----- - -By default, the build system creates a release build, but you can force -it to produce a binary without as much optimization and with debug -symbols included: - - $ ./configure --debug-mode - - - -Manipulating the Build System Source Files ----- - -The [autosetup build system][asbs] is composed of these files and -directories: - - auto.def - autosetup/* - configure - Makefile.in - -Unlike with GNU Autoconf, which you may be familiar with, the -`configure` script is not output from some other tool. It is just a -driver for the Tcl and C code under the `autosetup` directory. - -If you have to modify any of the files in `autosetup/` to get some -needed effect, you should try to get that change into the upstream -[Autosetup][asbs] project, then merge that change down into the local -copy when it lands upstream. - -The bulk of the customization to the build system is in `auto.def`, -which is a Tcl script run by `autosetup` via the `configure` script. -Some knowledge of [Tcl syntax][tcldoc] will therefore be helpful in -modifying it. - -If you do not have Tcl installed on your system, `configure` builds a -minimal Tcl interpreter called `jimsh0`, based on the [Jim Tcl][jim] -project. Developers working on the build system are encouraged to use -this stripped-down version of Tcl rather than "real" Tcl because Jim Tcl -is more or less a strict subset of Tcl, so any changes you make that -work with the `jimsh0` interpreter should also work with "real" Tcl, but -not vice versa. If you have Tcl installed and don't really need it, -consider uninstalling it to force Autosetup to build and use `jimsh0`. - -The `Makefile.in` file is largely a standard [GNU `make`][gmake] file -excepting only that it has variables substituted into it by Autosetup -using its `@VARIABLE@` syntax. At this time, we do not attempt to -achieve compatibility with other `make` programs, though in the future -we may need it to work with [BSD `make`][bmake] as well, so if you are -adding features, you might want to stick to the common subset of -features implemented by both the GNU and BSD flavors of `make`. We do -not anticipate any need to support any other `make` flavors. - -This, by the way, is why we're not using some heavy-weight build system -such as the GNU Autotools, CMake, etc. The primary advantage of GNU -Autotools is that you can generate source packages that will configure -and build on weird and ancient flavors of Unix; we don't need that. -Cross-platform build systems such as CMake ease building the same -software on multiple disparate platforms straightforward, but the -PiDP-8/I software is built primarily on and for a single operating -system, Raspbian Linux. It also happens to build and run on [several -other OSes][oscomp], for which we also do not need the full power of -something like CMake. Autosetup and GNU `make` suffice for our purposes -here. - -[asbs]: http://msteveb.github.io/autosetup/ -[bmake]: https://www.freebsd.org/doc/en/books/developers-handbook/tools-make.html -[gmake]: https://www.gnu.org/software/make/ -[jim]: http://jim.tcl.tk/ -[oscomp]: https://tangentsoft.com/pidp8i/wiki?name=OS+Compatibility -[tcldoc]: http://wiki.tcl.tk/11485 - - - -Directory Structure ----- - -The directory structure of the PiDP-8/I project is as follows: - -* `.` - Top level, occupied only by the few files the end user - of the source code needs immediately at hand on first unpacking the - project: the top level build system files, key documentation, and - licensing information. If a given file *can* be buried deeper, it - *should* be buried to reduce clutter at this most precious level of - the hierarchy. - -* `.fossil-settings` - Versioned settings for the Fossil build - system which Fossil applies as defaults everywhere you check out a - Fossil version. Settings made here are intended to be correct for - all users of the system; think of these not as expressing defaults - but as expressing *policy*. It is possible to override these - settings, but we do not make settings here if we expect that some - users may quibble with our choices here. - - Any setting whose value may vary between users of the Fossil - repository should be done locally with a `fossil set` command. - - Say `fossil help set` at the command line for more on this. - -* `autosetup` - The bulk of the [Autosetup build system][asbs]. - These are generic files, not modified by the project itself. We - occasionally run `tools/autosetup-update` to merge in upstream - changes. - -* `bin` - Programs installed to `$prefix/bin`, which may also - be run during development, if only to test changes to those - programs. Some scripts stored here are written in place by the - project's developers, while other files in this directory are - outputs of the build system. - - The content of this directory is copied to `$prefix/bin` at - installation time, which is added to the user's `PATH` by the - `make install` script. - -* `boot` - SIMH initialization scripts. The `*.script.in` - files are written by the project developers but have local - configuration values substituted in by the `configure` script to - produce a `*.script` version. Scripts which need no config-time - values substituted in are checked in directly as `*.script`. The - `*.script` files in this directory which do not fall into either of - those categories are outputs of `tools/mkbootscript`, which produces - them from `palbart` assembly listings. - - All of these `*.script` files are copied to `$prefix/share/boot` by - `make mediainstall` which runs automatically from `make install` - when we detect that the binary media and SIMH boot scripts have - never been installed at this site before. On subsequent installs, - the user chooses whether to run `make mediainstall` by hand to - overwrite all of this. - -* `doc` - Documentation files sufficiently unimportant to a new - user of the software that they need not be at the top level of the - project tree. Such files can wait for new users to discover them. - - Fossil's [embedded documentation][edoc] feature allows us to present - the contents of `doc` to web site users all but indistinguishably - from a wiki page. Why are there two different ways to achieve the - same end, and how do we decide which mechanism to use? - - The rule is simple: if a given document's change history is tied to - the history of the PiDP-8/I project itself, it goes in `doc`, else - it goes in the wiki. When checking out older versions of the - PiDP-8/I software, you expect to roll back to contemporaneous - versions of the project documentation, which is what happens to all - files stored in the repository, including those in `doc`, but this - does not happen to the wiki documents. The wiki always presents the - most current version, no matter what version you have locally - checked out. - - (Fossil's wiki feature behaves much like Wikipedia: it keeps change - history for wiki documents, but it always presents the most recent - version unless you manually go poking around in the history to pull - up old versions. If you check out a historical version of the - software and then say `fossil ui` within that checkout directory, - the resulting web view still shows the most recent locally-available - version of each wiki document, not versions of the wiki documents - contemporaneous with the historical version of the Fossil tree you - have checked out.) - - The `doc/graphics` subdirectory holds JPEGs and SVGs displayed - inline within wiki articles. - -* `etc` - Files which get copied to `/etc` or one of its - subdirectories at installation time. - - There is an exception: `pidp8i.service.in` does not get installed to - `/etc` at install time, but only because systemd's [unit file load - path scheme][uflp] is screwy: *some* unit files go in `/etc`, while - others do not. The systemd docs claim we can put user units in - `/etc/systemd/user` but this does not appear to work on a Raspberry - Pi running Raspbian Stretch at least. We've fallen back to another - directory that *does* work, which feels more right to us anyway, but - which happens not to be in `/etc`. If systemd were designed sanely, - we'd install such files to `$HOME/etc/systemd` but noooo.... - - Since none of the above actually argues for creating another - top-level repository directory to hold this one file, we've chosen - to store it in `etc`. - -* `examples` - Example programs for the end user's edification. - Many of these are referenced by documentation files and therefore - should not be renamed or moved, since there may be public web links - referring to these examples. - -* `hardware` - Schematics and such for the PiDP-8/I board or - associated hardware. - -* `labels` - Graphics intended to be printed out and used as - labels for removable media. - -* `lib` - Library routines used by other programs, installed to - `$prefix/lib`. - -* `libexec` - A logical extension of `lib`, these are - standalone programs that nevertheless are intended to be run - primarily by other programs. Whereas a file in `lib` might have its - interface described by a programmer's reference manual, the - interface of a program in `libexec` is described by its usage - message. Example: - - * `scanswitch` - Run by `etc/pidp8i`. - -

It is run by hand only by developers modifying its behavior.

- - Programs in `libexec` are installed to `$prefix/libexec`, which is - *not* put into the user's `PATH`, on purpose. If a program should - end up in the user's `PATH`, it belongs in `bin`. Alternately, a - wrapper may be put in `bin` which calls a `libexec` program as a - helper. - -* `media` - Binary media images used either by SIMH directly or - by tools like `os8-run` to produce media used by SIMH. - - The contents of this tree are installed to `$prefix/share/media`. - -* `obj` - Intermediate output directory used by the build - system. It is safe to remove this directory at any time, as its - contents may be recreated by `make`. No file checked into Fossil - should be placed here. - - (Contrast `bin` which does have some files checked into Fossil; all - of the *other* files that end up in `bin` can be recreated by - `make`, but not these few hand-written programs.) - -* `src` - Source code for the project's programs, especially - those that cannot be used until they are built. The great majority - of these programs are written in C. The build system's output - directories are `bin`, `boot`, `libexec`, and `obj`. - - Programs that can be used without being "built," example programs, - and single-file scripts are placed elsewhere: `bin`, `examples`, - `libexec`, `tools`, etc. Basically, we place such files where the - build system *would* place them if they were built from something - under `src`. - - There are no program sources in the top level of `src`. The file - `src/config.h` may appear to be an exception to that restriction, - but it is *generated output* of the `configure` script, not "source - code" *per se*. - - Multi-module programs each have their own subdirectory of `src`, - each named after the program contained within. - - Single module programs live in `src/misc` or `src/asm`, depending on - whether they are host-side C programs or PAL8 assembly programs. - -* `test` - Output directory used by `tools/test-*`. - -* `tools` - Programs run only during development and not - installed. - - If a program is initially created here but we later decide that it - should be installed for use by end users of the PiDP-8/I system, we - move it to either `bin` or `libexec`, depending on whether it is run - directly at the command line or run from some other program that is - also installed, respectively. - -[edoc]: https://www.fossil-scm.org/index.html/doc/trunk/www/embeddeddoc.wiki -[uflp]: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#id-1.9 - - - -Submitting Patches ----- - -If you do not have a developer login on the PiDP-8/I software -repository, you can still send changes to the project. - -The simplest way is to say this after developing your change against the -trunk of PiDP-8/I: - - $ fossil diff > my-changes.patch - -Then either upload that file somewhere (e.g. Pastebin) and point to it -from a [forum post][pfor] or attach the patch to a new [PiDP-8/I mailing -list][ggml] message. Either way, include a declaration of the license -you wish to contribute your changes under. We suggest using the [SIMH -license][simhl], but any [non-viral][viral] [OSI-approved license][osil] -should suffice. We’re willing to tolerate viral licenses for standalone -products; for example, CC8 is under the GPL, but it’s fine because it -isn’t hard-linked into any other part of the PiDP-8/I software system. - -If your change is more than a small patch, `fossil diff` might not -incorporate all of the changes you have made. The old unified `diff` -format can't encode branch names, file renamings, file deletions, tags, -checkin comments, and other Fossil-specific information. For such -changes, it is better to send a Fossil bundle: - - $ fossil set autosync 0 # disable autosync - $ fossil checkin --branch my-changes - ...followed by more checkins on that branch... - $ fossil bundle export --branch my-changes my-changes.bundle - -After that first `fossil checkin --branch ...` command, any subsequent -`fossil ci` commands will check your changes in on that branch without -needing a `--branch` option until you explicitly switch that checkout -directory to some other branch. This lets you build up a larger change -on a private branch until you're ready to submit the whole thing as a -bundle. - -Because you are working on a branch on your private copy of the -PiDP-8/I Fossil repository, you are free to make as many checkins as -you like on the new branch before giving the `bundle export` command. - -Once you are done with the bundle, send it to the developers the same -way you should a patch file. - -If you provide a quality patch, we are likely to offer you a developer -login on [the repository][repo] so you don't have to continue with the -patch or bundle methods. - -Please make your patches or experimental branch bundles against the tip -of the current trunk. PiDP-8/I often drifts enough during development -that a patch against a stable release may not apply to the trunk cleanly -otherwise. - -[osil]: https://opensource.org/licenses -[repo]: https://tangentsoft.com/pidp8i/ -[simhl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md -[viral]: https://en.wikipedia.org/wiki/Viral_license - - - -The PiDP-8/I Software Project Code Style Rules ----- - -Every code base should have a common code style. Love it or -hate it, here are PiDP-8/I's current code style rules: - -**C Source Code** - -File types: `c`, `h`, `c.in` - -We follow the SIMH project's pre-existing code style when modifying one -of its source files: - -* Spaces for indents, size 4 - -* DOS line endings. (Yes, even though this is a Linux-based project! - All decent Linux text editors can cope with this.) - -* Function, structure, type, and variable names are all lowercase, - with underscores separating words - -* Macro names are in `ALL_UPPERCASE_WITH_UNDERSCORES` - -* Whitespace in the SIMH C files is of a style I have never seen - anywhere else in my decades of software development. This example - shows the important features: - - int some_function (char some_parameter) - { - int some_variable = 0; - - if (some_parameter != '\0') { - int nbytes = sizeof (some_parameter); - char *buffer = malloc (4 * nbytes); - - switch (some_parameter) { - case 'a': - do_something_with_buffer ((char *)buffer); - default: - do_something_else (); - } - } - else { - some_other_function (with_a_large, "number of parameters", - wraps_with_a_single, "indent level"); - printf (stderr, "Failed to allocate buffer.\n"); - } - } - - It is vaguely like K&R C style except that: - - - The top level of statements in a function are not indented - - - The closing curly brace is indented to the same level as the - statement(s) it contains - - - There is a space before all opening parentheses, not just those - used in `if`, `while`, and similar flow control statements. - - Nested open parentheses do not have extra spaces, however. Only - the outer opening parenthesis has a space separating it from - what went before. - - - Multiple variables declared together don't have their types and - variable names aligned in columns. - -I find that this style is mostly sensible, but with two serious problems: -I find the indented closing curly braces confusing, and I find that the -loss of the first indent level for the statements inside a function makes -functions all visually run together in a screenful of code. Therefore, -when we have the luxury to be working on a file separate from SIMH, -we use a variant of its style with these two changes, which you can -produce with the `tools/restyle` command. See its internal comments for -details. - -That gives the following, when applied to the above example: - - int some_function (char some_parameter) - { - int some_variable = 0; - - if (some_parameter != '\0') { - int nbytes = sizeof (some_parameter); - char *buffer = malloc (4 * nbytes); - - switch (some_parameter) { - case 'a': - do_something_with_buffer ((char *)buffer); - default: - do_something_else (); - } - } - else { - some_other_function (with_a_large, "number of parameters", - wraps_with_a_single, "indent level"); - printf (stderr, "Failed to allocate buffer.\n"); - } - } - -If that looks greatly different, realize that it is just two indenting -level differences: add one indent at function level, except for the -closing braces, which we leave at their previous position. - -SIMH occasionally exceeds 100-column lines. I recommend breaking -long lines at 72 columns. Call me an 80-column traditionalist. - -When in doubt, mimic what you see in the current code. When still in -doubt, ask on the [project forum][pfor]. - -[indent]: http://linux.die.net/man/1/indent - - -**Plain Text Files** - -File types: `md`, `txt` - -* Spaces for indents, size 4. - -* Unix line endings. The only common text editor I'm aware of that - has a problem with this is Notepad, and people looking at these - files anywhere other than unpacked on a Raspberry Pi box are - probably looking at them through the Fossil web interface on - tangentsoft.com. - -* Markdown files must follow the syntax flavor understood by - [Fossil's Markdown interpreter][fmd]. - -[fmd]: https://tangentsoft.com/pidp8i/md_rules - - - -Ticket Processes ----- -Normal end users of the Fossil ticket system are not expected to -understand it properly or to fill out tickets properly. Without certain -permissions, it is in fact not possible to completely fill out a ticket -properly. - -Therefore, the first thing that should happen to a ticket is that -someone with sufficient privilege should triage it and fix up any -incorrect settings. - -The Status of a ticket initially starts out as Open. If the person -triaging a ticket takes the time to check that the problem actually -occurs as the ticket filer claims or that the requested feature is in -fact missing, the Status should change to Verified. - -If a developer implements a fix or feature in response to a ticket, he -has two choices: change the ticket’s Status to “Review” if he wants -someone to check out the change before closing it, or go straight to -Closed status. Closing a ticket hides it from the Wishes and Bugs ticket -reports. - -Larger teams often require all ticket changes to go through Review -status before getting to Closed, but the PiDP-8/I project is too small -to require such ceremony: if we’ve given you a developer account on the -repository, you’re expected to resolve and close tickets in the same -step, most of the time. If you cannot confidently close a ticket when -resolving it, you should probably not be assigning a resolution yet -anyway. Do whatever you have to with tests and such to *become* certain -before you resolve a ticket. - -There is a process interlock between the Resolution and Status settings -for a ticket: while Status is not Closed, Resolution should be Open. -When Resolution changes from Open, Status should change to either Review -or, preferentially, Closed. A resolution is an end state, not an -expression of changeable intent: no more ceremony than setting a -ticket’s Resolution state *away* from Open and its Status *to* Closed is -required. - -If you do not intend to close a ticket but wish to advocate for a -particular resolution, just add a comment to the ticket and let someone -else choose whether to close the ticket or not. Don’t change the -Resolution value until the issue has been *resolved* for good. - -For example, the resolution "Works as Designed" does not merely mean, -“Yes, we know it works that way,” it also implies “...and we have no -intention to change that behavior, ever.” If there is a chance that the -behavior described in the ticket could change, you should not assign any -resolution. Just leave it open until someone decides to do something -final with the ticket. - -This is not to say that a ticket can never be re-opened once it’s had a -resolution assigned and been closed, but that this is a rare occurrence. -When a developer makes a decision about a ticket, it should be difficult -to re-open the issue. A rejected ticket probably shouldn’t be re-opened -with anything short of a working patch, for example: - -> User A: I want feature X. - -> Dev B: No, we’re not going to do that. Ticket closed and rejected. - -> User C: Here’s a patch to implement feature X. - -> Dev B: Well, that’s different, then. Thanks for the patch! Ticket -> marked Implemented, but still Closed. - - -## License - -Copyright © 2016-2019 by Warren Young. This document is licensed under -the terms of [the SIMH license][sl]. - -[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md Index: Makefile.in ================================================================== --- Makefile.in +++ Makefile.in @@ -5,11 +5,11 @@ # If you are seeing this at the top of a file called Makefile and you # intend to make edits, do that in Makefile.in. Saying "make" will then # re-build Makefile from that modified Makefile.in before proceeding to # do the "make" operation. # -# Copyright © 2015 by Oscar Vermeulen, © 2016-2019 by Warren Young +# Copyright © 2015 by Oscar Vermeulen, © 2016-2021 by Warren Young # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, @@ -34,22 +34,30 @@ # authorization from those authors. ######################################################################## # Git commit ID and time of the latest version of the SIMH 4 project on # GitHub that has been merged into this source base. -SGCID=4e0450cff96830c5aced36928a4427adfc5314f8 -SGCTM=2019-04-18T20:03:17-07:00 +SGCID=ab48f31317f63943cf36995d2e29feb16d122b36 +SGCTM=2021-04-20T18:37:32+02:00 # C build flags for the PDP-8 simulator and its PiDP-8/I extensions. -SIM_CFLAGS := @CFLAGS@ @BUILDMODE@ \ +SIM_CFLAGS := @CFLAGS@ @PI_CFLAGS@ @BUILDMODE@ \ -Wno-unused-result -Wno-parentheses \ -DUSE_READER_THREAD -DHAVE_DLOPEN=$(subst .,,@SH_SOEXT@) -DPIDP8I \ - -DSIM_ASYNCH_IO -DHAVE_REGEX_H -DHAVE_GLOB \ + -DSIM_ASYNCH_IO -DHAVE_GLOB \ -DSIM_GIT_COMMIT_ID=$(SGCID) -DSIM_GIT_COMMIT_TIME=$(SGCTM) \ + -DSIM_BUILD_TOOL='autosetup+gmake' \ -D_GNU_SOURCE \ -U__STRICT_ANSI__ \ -I @srcdir@/src/SIMH -I @srcdir@/src/pidp8i -I src -I src/SIMH -I src/pidp8i +ifneq "@HAVE_PCRE_H@" "0" +SIM_CFLAGS += -DHAVE_PCRE_H +SIM_LFLAGS := -lpcre +endif +ifneq "@HAVE_PCREPOSIX_H@" "0" +SIM_CFLAGS += -DHAVE_PCREPOSIX_H +endif PIDP8I_CFLAGS = $(SIM_CFLAGS) SIMH_CFLAGS = $(SIM_CFLAGS) SIMH_PDP8_CFLAGS = $(SIM_CFLAGS) # Greatly stripped-down build options for the cc8 cross-compiler @@ -77,10 +85,11 @@ bin/palbart \ bin/pidp8i-test \ bin/ptp2txt \ libexec/scanswitch BIN_SCRIPTS = \ + bin/os8pkg \ bin/pidp8i \ bin/usb-mount \ @srcdir@/bin/teco-pi-demo # Some *.py files are generated by Autosetup, so they need different @@ -94,11 +103,16 @@ $(PIDP8I_DIRS) SIMH_PY := lib/simh.py SIMH_PY_SRC := @srcdir@/$(SIMH_PY) +# Any use of $(OS8RUN) must implicitly depend on $(OS8_TOOLTIME) disk image. OS8RUN = bin/os8-run + +# Any use of $(OS8CP) must implicitly depend on $(OS8_TOOLTIME) disk image. +OS8CP = bin/os8-cp + OS8SCRIPT := lib/os8script.py OS8RUN_PY_ALL := $(GENNED_PY) $(OS8SCRIPT) $(SIMH_PY_SRC) OS8RUN_SRCS := $(OS8RUN) $(OS8RUN_PY_ALL) $(PIDP8I_DIN) # If you edit this directory list, you should probably also edit @@ -109,10 +123,11 @@ obj/cc8/cross \ obj/cc8/os8 \ obj/d8tape \ obj/misc \ obj/palbart \ + obj/os8pkg \ obj/pidp8i \ obj/SIMH \ obj/SIMH/PDP8 INSTDIRS := bin etc lib/pidp8i libexec \ @@ -167,25 +182,10 @@ obj/cc8/cross/primary.o \ obj/cc8/cross/stmt.o \ obj/cc8/cross/struct.o \ obj/cc8/cross/sym.o \ obj/cc8/cross/while.o - -CC_OS8_OBJS := \ - obj/cc8/os8/libc.sb \ - obj/cc8/os8/c8.sb \ - obj/cc8/os8/n8.sb \ - obj/cc8/os8/p8.sb - -CC_OS8_SRCS := \ - @srcdir@/src/cc8/os8/header.sb - -CC_OS8_DEMOS := \ - obj/cc8/os8/fib.c \ - obj/cc8/os8/calc.c \ - obj/cc8/os8/ps.c \ - D8TAPE_OBJS := \ obj/d8tape/dasm.o \ obj/d8tape/flow.o \ obj/d8tape/main.o \ @@ -238,10 +238,11 @@ OS8RUN_INFILES = \ @srcdir@/lib/pidp8i/__init__.py.in \ @srcdir@/lib/pidp8i/ips.py.in \ @srcdir@/media/os8/init.tx.in \ @srcdir@/media/os8/3finit.tx.in \ + @srcdir@/media/os8/ock-init.tx.in \ @srcdir@/src/pidp8i/main.c.in \ $(PIDP8I_DIN) PRECIOUS_INFILES = \ @srcdir@/Makefile.in \ @srcdir@/examples/Makefile.in \ @@ -248,11 +249,16 @@ @srcdir@/src/Makefile.in \ @srcdir@/src/cc8/Makefile.in \ @srcdir@/src/SIMH/Makefile.in \ @srcdir@/src/SIMH/PDP8/Makefile.in INFILES = \ + @srcdir@/tools/os8-progtest.in \ + @srcdir@/bin/os8pkg.in \ @srcdir@/bin/os8-cp.in \ + @srcdir@/tools/os8-cmp.in \ + @srcdir@/bin/os8-run.in \ + @srcdir@/bin/teco-pi-demo.in \ @srcdir@/bin/pidp8i.in \ @srcdir@/boot/0.script.in \ @srcdir@/boot/2.script.in \ @srcdir@/boot/3.script.in \ @srcdir@/boot/4.script.in \ @@ -262,56 +268,121 @@ @srcdir@/boot/run-v3f.script.in \ @srcdir@/boot/tss8.script.in \ @srcdir@/etc/pidp8i.service.in \ @srcdir@/etc/sudoers.in \ @srcdir@/etc/usb-mount@.service.in \ + @srcdir@/lib/os8script.py.in \ + @srcdir@/lib/simh.py.in \ @srcdir@/src/pidp8i/gpio-common.c.in \ + @srcdir@/tools/simh-bisect.in \ @srcdir@/tools/simh-update.in \ $(OS8RUN_INFILES) OS8RUN_OUTFILES := $(subst @srcdir@/,,$(OS8RUN_INFILES)) OS8RUN_OUTFILES := $(subst .in,,$(OS8RUN_OUTFILES)) PRECIOUS_OUTFILES := $(subst @srcdir@/,,$(PRECIOUS_INFILES)) PRECIOUS_OUTFILES := $(subst .in,,$(PRECIOUS_OUTFILES)) OUTFILES := $(subst @srcdir@/,,$(INFILES)) OUTFILES := $(subst .in,,$(OUTFILES)) -OS8_DIST_RK05 = bin/v3d-dist.rk05 OS8_SRC_RK05 = @OS8_SRC_RK05@ -OS8_BOOT_DISK = bin/@OS8_BOOT_DISK@ -OS8_RK05S = $(OS8_DIST_RK05) $(OS8_BOOT_DISK) $(OS8_SRC_RK05) - -OS8_SCRIPTS_DIR = @srcdir@/media/os8/scripts - -V3D_DIST_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d-dist-rk05.os8 -V3D_SRC_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d-src-rk05.os8 -V3D_RK05_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d-rk05.os8 +OS8_BASELINE = bin/@OS8_BASELINE@ +OS8_TOOLTIME = bin/@OS8_TOOLTIME@ + +# auto.defs will select as OS8_RUNTIME either V3D_RUNTIME or OCK_RUNTIME disk image. +V3D_RUNTIME = bin/v3d.rk05 +OCK_RUNTIME = bin/ock.rk05 +OS8_RUNTIME = bin/@OS8_RUNTIME@ + +OS8_RK05S = \ + $(OS8_BASELINE) \ + $(V3D_RUNTIME) \ + $(OS8_SRC_RK05) \ + $(OS8_OCK_DIST_RK05) \ + $(OS8_OCK_PATCHED_RK05) \ + $(OCK_RUNTIME) + + + +INC_SCRIPTS_DIR = @srcdir@/scripts/include +MISC_SCRIPTS_DIR = @srcdir@/scripts/misc +OS8_SCRIPTS_DIR = @srcdir@/scripts/os8 + +V3D_DIST_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d/dist-rk05.os8 +V3D_SRC_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d/src-rk05.os8 +V3D_PATCH_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d/patch-rk05.os8 +V3D_RK05_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d/boot-rk05.os8 V3F_SRCDIR = @srcdir@/src/os8/v3f V3F_BUILD_RK05 = obj/v3f-build.rk05 V3F_MANIFEST = actions.txt V3F_MADE_RK05 = bin/v3f-made.rk05 -V3F_MAKER = $(OS8_SCRIPTS_DIR)/v3f-control.os8 +V3F_MAKER = $(OS8_SCRIPTS_DIR)/v3f/control.os8 + +# OS/8 Combined Kit. Build from Source. +# We build each object rk05 image in one large script +# Because otherwise mmake would have terrible race conditions. +# We cut the tree up into chunks to fit them on rk05 images: +# SYS: The System Head and device Handlers and key system CUSPS. +# CUSPS: The remaining Commonly Used System Programs (CUSPS) +# BF2: BASIC and FORTRAN II +# FIV: FORTRAN IV + +OS8_OCK_SRCDIR = @srcdir@/src/os8/ock + +OS8_OCK_SYS_SRC_RK05 = obj/ock-sys-src.rk05 +OS8_OCK_SYS_OBJ_RK05 = bin/ock-sys-obj.rk05 +OS8_OCK_SYS_MAKER = $(OS8_SCRIPTS_DIR)/ock/sys-build.os8 + +OS8_OCK_CUSPS_SRC_RK05 = obj/ock-cusps-src.rk05 +OS8_OCK_CUSPS_OBJ_RK05 = bin/ock-cusps-obj.rk05 +OS8_OCK_CUSPS_MAKER = $(OS8_SCRIPTS_DIR)/ock/cusps-build.os8 + +OS8_OCK_BF2_SRC_RK05 = obj/ock-bf2-src.rk05 +OS8_OCK_BF2_OBJ_RK05 = bin/ock-bf2-obj.rk05 +OS8_OCK_BF2_MAKER = $(OS8_SCRIPTS_DIR)/ock/bf2-build.os8 + +OS8_OCK_FIV_SRC_RK05 = obj/ock-fiv-src.rk05 +OS8_OCK_FIV_OBJ_RK05 = bin/ock-fiv-obj.rk05 +OS8_OCK_FIV_MAKER = $(OS8_SCRIPTS_DIR)/ock/fiv-build.os8 + +OS8_OCK_DIST_RK05 = bin/ock-dist.rk05 +OS8_OCK_DIST_MAKER = $(OS8_SCRIPTS_DIR)/ock/dist-rk05.os8 +OS8_OCK_PATCHED_RK05 = bin/ock-patched.rk05 +OS8_OCK_PATCHED_MAKER = $(OS8_SCRIPTS_DIR)/ock/patch-rk05.os8 +OS8_OCK_BOOT_MAKER = $(OS8_SCRIPTS_DIR)/ock/boot-rk05.os8 ALL_TU56_SCRIPT = $(OS8_SCRIPTS_DIR)/all-tu56.os8 -CUSP_COPYIN_SCRIPT = $(OS8_SCRIPTS_DIR)/cusp-copyin.os8 +CUSP_COPYIN_SCRIPT = $(INC_SCRIPTS_DIR)/cusp-copyin.os8 OS8_BOOT_TAPE = bin/@OS8_BOOT_TAPE@ V3D_TC08_TU56 = bin/v3d-tc08.tu56 V3D_TD12K_TU56 = bin/v3d-td12k.tu56 V3F_TC08_TU56 = bin/v3f-tc08.tu56 V3F_TD12K_TU56 = bin/v3f-td12k.tu56 V3F_BOOT_TAPE= bin/v3f-@OS8_TAPE_DEVICE@.tu56 -CC8_TU56_SCRIPT = $(OS8_SCRIPTS_DIR)/cc8-tu56.os8 + +# Absolute version of --prefix passed to configure. +PREFIX = @ABSPREFIX@ + +# Normally unset. Prepended to PREFIX to install files to a +# different tree than / (e.g. for distribution build/CI scripts). +# https://www.gnu.org/prep/standards/html_node/DESTDIR.html +DESTDIR = + +RCFILE := $(PREFIX)/etc/pidp8i.rc CLTXT = /boot/cmdline.txt ADF := adrules.mk +OS8_PKGS_SELECTED = @OS8_PKGS_SELECTED@ +OS8_PKGS_SELECTED_NAMES = @OS8_PKGS_SELECTED_NAMES@ +PKGS_INCLUDE = obj/os8pkg/pkgs.os8 #### TARGETS ########################################################### .PHONY: all tags .PRECIOUS: $(PRECIOUS_OUTFILES) @@ -318,23 +389,22 @@ all: \ $(OUTFILES) $(PRECIOUS_OUTFILES) \ $(BUILDDIRS) $(BINS) $(BOOTSCRIPTS) $(LISTINGS) \ $(ASM_PTS) $(FC_EX_PTS) $(PAL_EX_PTS) \ + $(OS8_TOOLTIME) pkg_all \ $(OS8_RK05S) $(V3F_MADE_RK05) $(V3D_TC08_TU56) \ $(V3D_TD12K_TU56) $(V3F_TC08_TU56) $(V3F_TD12K_TU56) clean: @rm -f $(BINS) $(BOOTSCRIPTS) $(ASM_PTS) $(PAL_EX_PTS) $(LISTINGS) \ $(OUTFILES) $(ADF) \ - $(OS8_RK05S) $(V3F_MADE_RK05) $(V3F_BUILD_RK05) $(V3D_TC08_TU56) \ - $(V3D_TD12K_TU56) $(V3F_TC08_TU56) $(V3F_TD12K_TU56) \ config.log cscope.out tags \ - bin/*.pt bin/*.save bin/txt2ptp \ + bin/*.pt bin/*.rk05 bin/*.save bin/*.tu56 bin/txt2ptp \ lib/*.pyc lib/*/*.pyc lib/pidp8i/dirs.py lib/pidp8i/ips.py \ - obj/*.log obj/*.pt obj/os8.opts \ - src/config.h \ + obj/*.log obj/*.pt obj/os8.opts obj/os8pkg/* \ + src/config.h src/e8/e8defs.pa \ @srcdir@/examples/*.err @find obj \( -name \*.o -o -name \*.d \) -delete @-rmdir -p $(BUILDDIRS) 2> /dev/null || true distclean: clean @@ -348,40 +418,73 @@ ctags -R @srcdir@/src @srcdir@/lib ifeq (@HAVE_PROG_CSCOPE@, 1) cscope -bR -s@srcdir@ endif -install: all instdirs - @echo Installing to @prefix@... +install: install-target install-system + +install-target: all instdirs + @echo Installing to $(PREFIX)... @# Install most bin/* stuff and set their perms @for f in $(BINS) ; do \ - dest=@prefix@/$$f ; \ + dest=$(PREFIX)/$$f ; \ echo "Installing binary $$dest..." ; \ - @INSTALL@ -m 755 -D -s $$f $$dest ; \ + @INSTALL@ -m 755 -D -s $$f $(DESTDIR)$$dest ; \ done @for f in $(BIN_SCRIPTS) ; do \ - dest=@prefix@/bin/$$(basename $$f) ; \ + dest=$(PREFIX)/bin/$$(basename $$f) ; \ echo "Installing script $$dest..." ; \ - @INSTALL@ -m 755 -D $$f $$dest ; \ + @INSTALL@ -m 755 -D $$f $(DESTDIR)$$dest ; \ done - @( cd @prefix@/bin ; \ - echo "Installing txt2ptp symlink..." ; \ - ln -f ptp2txt txt2ptp ; \ - ) - @(test -x /sbin/setcap && \ - for f in @prefix@/bin/pidp8i-* ; do \ - echo "Setting real-time priority capabilities on $$(basename $$f)..." ; \ - /sbin/setcap 'cap_sys_nice=eip' $$f ; \ - done \ - ) || true - @( test -e @MEDIADIR@/os8/os8.rk05 || \ - test -e @MEDIADIR@/os8/os8v3d-bin.rk05 || \ - test -e @MEDIADIR@/os8/v3d.rk05) && \ + @echo "Installing txt2ptp symlink..." + @ln -f $(DESTDIR)$(PREFIX)/bin/ptp2txt $(DESTDIR)$(PREFIX)/bin/txt2ptp + @( test -e $(DESTDIR)@MEDIADIR@/os8/os8.rk05 || \ + test -e $(DESTDIR)@MEDIADIR@/os8/os8v3d-bin.rk05 || \ + test -e $(DESTDIR)@MEDIADIR@/os8/v3d.rk05) && \ echo "Skipping media image and SIMH boot script reinstall." || \ $(MAKE) mediainstall - @ln -f @prefix@/bin/pidp8i-sim @prefix@/bin/pdp8 # run w/o PiDP-8/I extensions + @ln -f $(DESTDIR)$(PREFIX)/bin/pidp8i-sim $(DESTDIR)$(PREFIX)/bin/pdp8 # run w/o PiDP-8/I extensions + + @# Install CC8 stuff if built + @test -n "@CC8_CROSS@" && \ + echo "Installing cc8 cross-compiler..." ; \ + @INSTALL@ -m 755 bin/cc8 $(DESTDIR)$(PREFIX)/bin && \ + @INSTALL@ -m 644 @srcdir@/src/cc8/include/* $(DESTDIR)$(PREFIX)/share/include + + @# Install palbart stuff + @@INSTALL@ -m 755 bin/palbart $(DESTDIR)$(PREFIX)/bin + @@INSTALL@ -m 644 @srcdir@/src/palbart/palbart.1 $(DESTDIR)$(PREFIX)/share/man/man1 + + @# Install os8-run and its dependencies + @echo "Installing os8-run..." + @@INSTALL@ -m 775 -g @INSTGRP@ $(OS8RUN) $(DESTDIR)$(PREFIX)/bin + @( for src in $(OS8RUN_PY_ALL) ; do \ + test -e $$src || src=@srcdir@/$$src ; \ + dest=$(PREFIX)/$$(echo $$src | sed -e 's_^@srcdir@/__') ; \ + echo "Installing $$src to $$dest..." ; \ + @INSTALL@ -m 644 -g @INSTGRP@ -D $${src} $(DESTDIR)$${dest} ; \ + done \ + ) + @sed -e 's#^build =.*#build = "$(PREFIX)"#' \ + -e 's#^media =.*#media = os.path.join (build, "share/media/")#' \ + -e 's#^os8mo =.*#os8mo = os8mi#' \ + < $(PIDP8I_DIRS) > $(DESTDIR)$(PREFIX)/$(PIDP8I_DIRS) + @chgrp @INSTGRP@ $(DESTDIR)$(PREFIX)/$(PIDP8I_DIRS) + + @# We need a directory for PIDs and such in some cases + @@INSTALL@ -d -m 755 $(DESTDIR)$(PREFIX)/run + +install-system: install-target + @echo Installing system files and programs... + + @(test -x /sbin/setcap && \ + for f in $(PREFIX)/bin/pidp8i-* ; do \ + echo "Setting real-time priority capabilities on $$(basename $$f)..." ; \ + /sbin/setcap 'cap_sys_nice=eip' $(DESTDIR)$$f ; \ + done \ + ) || true @# If this is a Debian-type system, install needed helper programs @test -x /usr/bin/apt-get -a ! -x /usr/bin/screen && apt-get -y install screen || true @# Remove usbmount: we've replaced that with bin/usb-mount and friends. @@ -395,12 +498,12 @@ @INSTALL@ -m 644 etc/usb-mount@.service /etc/systemd/system && \ @INSTALL@ -m 644 @srcdir@/etc/udev.rules /etc/udev/rules.d/68-usb-mount.rules && \ sed -i -e 's/MountFlags=slave/MountFlags=shared/' \ /lib/systemd/system/systemd-udevd.service && \ /bin/systemctl daemon-reload && \ - /sbin/udevadm control --reload-rules && \ - /sbin/udevadm trigger \ + udevadm control --reload-rules && \ + udevadm trigger \ ) || true endif @# Disable competing services if this is a Raspberry Pi @(test -x /bin/systemctl && /bin/systemctl disable deeper pidp8 2> /dev/null || true) @@ -411,11 +514,11 @@ rm -f /etc/init.d/pidp8i \ ) || true @# Install the systemd unit file if this system is systemd based. @(test -x /bin/systemctl && \ - sudo -i -u @INSTUSR@ @ABSPREFIX@/bin/pidp8i install && \ + sudo -i -u @INSTUSR@ $(DESTDIR)$(PREFIX)/bin/pidp8i install && \ /bin/loginctl enable-linger @INSTUSR@ \ ) || true @# Give the install user permission to use GPIO if done on a Pi @grep -q '^gpio:' /etc/group && usermod -a -G gpio @INSTUSR@ || true @@ -425,23 +528,26 @@ @( test -d /etc/sudoers.d -a -w /etc/sudoers.d -a -x /bin/systemctl && \ @INSTALL@ -m 440 -o root -g root @srcdir@/etc/sudoers \ /etc/sudoers.d/099_pidp8i \ ) || true + @# Install runtime config file if there isn't one there already. + @test -f $(DESTDIR)$(RCFILE) || @INSTALL@ -m 644 -o @INSTUSR@ @srcdir@/etc/pidp8i.rc $(DESTDIR)$(RCFILE) + @# Add installation bin dir to the non-root user's PATH unless it's @# already in there or we aren't running under sudo. @(for p in .profile .bash_profile ; do \ test -n "$$SUDO_USER" -a -w "/home/$$SUDO_USER/$$p" && \ - ! grep -qF "@ABSPREFIX@/bin" "/home/$$SUDO_USER/$$p" && \ - echo "export PATH=\$$PATH:@ABSPREFIX@/bin" >> "/home/$$SUDO_USER/$$p" ; \ + ! grep -qF "$(PREFIX)/bin" "/home/$$SUDO_USER/$$p" && \ + echo "export PATH=\$$PATH:$(PREFIX)/bin" >> "/home/$$SUDO_USER/$$p" ; \ done) || true @# Ditto for MANPATH @(for p in .profile .bash_profile ; do \ test -n "$$SUDO_USER" -a -w "/home/$$SUDO_USER/$$p" && \ - ! grep -qF "@ABSPREFIX@/share/man" "/home/$$SUDO_USER/$$p" && \ - echo "export MANPATH=\$$MANPATH:@ABSPREFIX@/share/man" >> "/home/$$SUDO_USER/$$p" ; \ + ! grep -qF "$(PREFIX)/share/man" "/home/$$SUDO_USER/$$p" && \ + echo "export MANPATH=\$$MANPATH:$(PREFIX)/share/man" >> "/home/$$SUDO_USER/$$p" ; \ done \ ) || true @# If serial mod is disabled, turn off serial console and kgdb stuff @# in case they were enabled previously, else they will fight with @@ -450,68 +556,41 @@ cp -p $(CLTXT) "$(CLTXT)"_orig && \ sed -e 's/console\=[a-zA-Z0-9]+,[0-9]+ //' \ -e 's/kgdboc\=[a-zA-Z0-9]+,[0-9]+ //' -i $(CLTXT) \ ) || true - @# Install CC8 stuff if built - @test -n "@CC8_CROSS@" && \ - echo "Installing cc8 cross-compiler..." ; \ - @INSTALL@ -m 755 bin/cc8 @prefix@/bin && \ - @INSTALL@ -m 644 @srcdir@/src/cc8/include/* @prefix@/share/include - - @# Install palbart stuff - @@INSTALL@ -m 755 bin/palbart @prefix@/bin - @@INSTALL@ -m 644 @srcdir@/src/palbart/palbart.1 @prefix@/share/man/man1 - - @# Install os8-run and its dependencies - @echo "Installing os8-run..." - @@INSTALL@ -m 775 -g @INSTGRP@ $(OS8RUN) @prefix@/bin - @( for src in $(OS8RUN_PY_ALL) ; do \ - test -e $$src || src=@srcdir@/$$src ; \ - dest=@prefix@/$$(echo $$src | sed -e 's_^@srcdir@/__') ; \ - echo "Installing $$src to $$dest..." ; \ - @INSTALL@ -m 644 -g @INSTGRP@ -D $${src} $${dest} ; \ - @INSTALL@ -m 644 -g @INSTGRP@ -D $${src}c $${dest}c ; \ - done \ - ) - @sed -e 's#^build =.*#build = "@ABSPREFIX@"#' \ - -e 's#^media =.*#media = os.path.join (build, "share/media/")#' \ - -e 's#^os8mo =.*#os8mo = os8mi#' \ - < $(PIDP8I_DIRS) > @prefix@/$(PIDP8I_DIRS) - @chgrp @INSTGRP@ @prefix@/$(PIDP8I_DIRS) - instdirs: @echo "Creating installation directory tree..." - @for d in $(INSTDIRS) ; do @INSTALL@ -m 755 -o @INSTUSR@ -g @INSTGRP@ -d @prefix@/$$d ; done + @for d in $(INSTDIRS) ; do @INSTALL@ -m 755 -o @INSTUSR@ -g @INSTGRP@ -d $(DESTDIR)$(PREFIX)/$$d ; done mediainstall: instdirs @echo "[Re]installing OS and program media..." @cd @srcdir@ ; \ find media \( \ - -name \*.os8 -o \ -name \*.bin -o \ -name \*.dsk -o \ -name \*.rk05 -o \ -name \*.tu56 \ - \) -exec @INSTALL@ -D -m 664 -o @INSTUSR@ -g @INSTGRP@ {} @ABSPREFIX@/share/{} \; - @@INSTALL@ -m 644 -o @INSTUSR@ -g @INSTGRP@ bin/*.rk05 @ABSPREFIX@/share/media/os8 - @@INSTALL@ -m 644 -o @INSTUSR@ -g @INSTGRP@ bin/*.tu56 @ABSPREFIX@/share/media/os8 + \) -exec @INSTALL@ -D -m 664 -o @INSTUSR@ -g @INSTGRP@ {} $(DESTDIR)$(PREFIX)/share/{} \; + @@INSTALL@ -m 644 -o @INSTUSR@ -g @INSTGRP@ bin/*.rk05 $(DESTDIR)$(PREFIX)/share/media/os8 + @@INSTALL@ -m 644 -o @INSTUSR@ -g @INSTGRP@ bin/*.tu56 $(DESTDIR)$(PREFIX)/share/media/os8 for f in boot/*.script ; do \ - sed -e 's#%HOME%/\.pidp8i-#@SHAREDIR@/save/#' < $$f > @SHAREDIR@/$$f ; \ - chown @INSTUSR@:@INSTGRP@ @SHAREDIR@/$$f ; \ - chmod 664 @SHAREDIR@/$$f ; \ + sed -e 's#%HOME%/\.pidp8i-#@SHAREDIR@/save/#' < $$f > $(DESTDIR)@SHAREDIR@/$$f ; \ + chown @INSTUSR@:@INSTGRP@ $(DESTDIR)@SHAREDIR@/$$f ; \ + chmod 664 $(DESTDIR)@SHAREDIR@/$$f ; \ done # Called by test-os8-run # Minimizes dependencies to provoke minimal rebuilds. # Builds cc8.tu56, copying in rather than rebuilding source and demo files. os8-sys: test-tmp-tools $(OS8RUN)@OS8_OPTS@ $(V3D_DIST_SCRIPT) - $(OS8RUN) $(CC8_TU56_SCRIPT) + $(OS8RUN)@OS8_OPTS@ $(V3D_PATCH_SCRIPT) $(OS8RUN)@OS8_OPTS@ $(V3D_RK05_SCRIPT) reconfig: + find . -name \*.d -delete @AUTOREMAKE@ release: all @srcdir@/tools/mkrel @@ -541,10 +620,11 @@ @( for src in $(OS8RUN_PY_ALL) ; do \ test -e $$src || src=@srcdir@/$$src ; \ dest=./$$(echo $$src | sed -e 's_^@srcdir@/__') ; \ echo "Installing $$src to $$dest..." ; \ @INSTALL@ -m 644 -g @INSTGRP@ -D $${src} $${dest} ; \ + ! test -e $${src}c || \ @INSTALL@ -m 644 -g @INSTGRP@ -D $${src}c $${dest}c ; \ done \ ) @( for src in $(TEST_TMP_BINS) ; do \ test -e $$src || src=@srcdir@/$$src ; \ @@ -581,29 +661,97 @@ # that it always exists. V3D_DIST_SRCS := \ $(OS8RUN) $(PIDP8I_DIN) \ lib/pidp8i/dirs.py \ $(V3D_DIST_SCRIPT) \ + @srcdir@/src/os8/v3d/SYSTEM/LCSYS.BI \ + @srcdir@/src/os8/v3d/SYSTEM/UCSYS.BI \ + @srcdir@/src/os8/v3d/BASIC/LCBAS.BI \ + @srcdir@/src/os8/v3d/BASIC/UCBAS.BI \ @srcdir@/media/os8/al-*-ba-*.tu56 \ @srcdir@/media/os8/subsys/*.tu56 # Temporary: We depend on ALL the patches, but really we've picked them over. V3D_PATCHES := \ - @srcdir@/media/os8/patches/*.patch8 + @srcdir@/patches/os8/v3d/*.patch8 # Dependency on the contents of the v3f source directory. V3F_SOURCES := \ @srcdir@/src/os8/v3f/*.PA \ @srcdir@/src/os8/v3f/*.MA \ @srcdir@/src/os8/v3f/*.BI +# Dependency on the contents of the ock source directory. +OS8_OCK_SYS_SOURCES := \ + @srcdir@/src/os8/ock/SYSTEM/*.PA \ + @srcdir@/src/os8/ock/SYSTEM/*.MA \ + @srcdir@/src/os8/ock/SYSTEM/*.BI \ + @srcdir@/src/os8/ock/HANDLERS/*.PA \ + @srcdir@/src/os8/ock/CUSPS/*.MA \ + @srcdir@/src/os8/ock/CUSPS/*.BI \ + @srcdir@/src/os8/ock/CUSPS/*.HL + +OS8_OCK_CUSPS_SOURCES :=\ + @srcdir@/src/os8/ock/CUSPS/*.PA + +OS8_OCK_BF2_SOURCES := \ + @srcdir@/src/os8/ock/LANGUAGE/BASIC/*.PA \ + @srcdir@/src/os8/ock/LANGUAGE/BASIC/*.BA \ + @srcdir@/src/os8/ock/LANGUAGE/BASIC/*.BI \ + @srcdir@/src/os8/ock/LANGUAGE/FORTRAN2/*.PA \ + @srcdir@/src/os8/ock/LANGUAGE/FORTRAN2/*.CO \ + @srcdir@/src/os8/ock/LANGUAGE/FORTRAN2/LIBRARY/*.SB + +OS8_OCK_FIV_SOURCES := \ + @srcdir@/src/os8/ock/LANGUAGE/FORTRAN4/*.PA \ + @srcdir@/src/os8/ock/LANGUAGE/FORTRAN4/*.BI \ + @srcdir@/src/os8/ock/LANGUAGE/FORTRAN4/LIBRARY/*.RA + +# We could make FIV conditional here. +OS8_OCK_DIST_SRCS := \ + $(OS8RUN) $(PIDP8I_DIN) \ + lib/pidp8i/dirs.py \ + $(OS8_OCK_DIST_MAKER) \ + @srcdir@/media/os8/al-*-ba-*.tu56 \ + @srcdir@/media/os8/subsys/*.tu56 \ + $(OS8_OCK_SYS_OBJ_RK05) $(OS8_OCK_CUSPS_OBJ_RK05) \ + $(OS8_OCK_BF2_OBJ_RK05) $(OS8_OCK_FIV_OBJ_RK05) + +OCK_PATCHES := \ + @srcdir@/patches/os8/ock/*.patch8 -$(OS8_DIST_RK05): $(V3D_DIST_SRCS) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) +$(OS8_BASELINE): $(V3D_DIST_SRCS) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) $(OS8RUN)@OS8_OPTS@ $(V3D_DIST_SCRIPT) -$(OS8_BOOT_DISK): $(V3D_RK05_SCRIPT) $(OS8_DIST_RK05) $(V3D_PATCHES) @CC8_TU56@ | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) - $(OS8RUN)@OS8_OPTS@ $(V3D_RK05_SCRIPT) +$(OS8_TOOLTIME): $(V3D_PATCH_SCRIPT) $(OS8_BASELINE) $(V3D_PATCHES) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) + $(OS8RUN)@OS8_OPTS@ $(V3D_PATCH_SCRIPT) + +-include obj/os8pkg/*.mk + +# Extension of "all" rule to build all packages now that we've included +# the rules for doing so. If you move the autosetup variable below into +# the "all" target dependency list, it won't work because it references +# undefined variables. +pkg_all:@OS8_PKGS_ALL@ + +test: all + tools/os8-progtest -x @OS8_PKGS_TESTING@ + +$(V3D_RUNTIME): $(V3D_RK05_SCRIPT) $(OS8_TOOLTIME) $(PKGS_INCLUDE) $(OS8_PKGS_SELECTED) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) + $(OS8RUN) @OS8_OPTS@ $(V3D_RK05_SCRIPT) + + +$(OS8_OCK_PATCHED_RK05): $(OS8_OCK_PATCHED_MAKER) $(OS8_OCK_DIST_RK05) $(OCK_PATCHES) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) + $(OS8RUN)@OS8_OPTS@ $(OS8_OCK_PATCHED_MAKER) + +$(OCK_RUNTIME): $(OS8_OCK_BOOT_MAKER) $(OS8_OCK_PATCHED_RK05) $(PKGS_INCLUDE) $(OS8_PKGS_SELECTED) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) + $(OS8RUN)@OS8_OPTS@ $(OS8_OCK_BOOT_MAKER) + +# To build the magic includer, we should depend on all the created packages. +# Then a newly created one that we care about will drive creation of the include script. +$(PKGS_INCLUDE): $(OS8_PKGS_SELECTED) + bin/os8pkg include $(OS8_PKGS_SELECTED_NAMES) # Also build an OS/8 source disk, as a convenience to avoid the # need to mount up the 7 source tapes in succession. # @@ -613,20 +761,56 @@ $(OS8RUN) $(PIDP8I_DIN) \ lib/pidp8i/dirs.py \ $(V3D_SRC_SCRIPT) \ @srcdir@/media/os8/al-*-sa-*.tu56 -$(OS8_SRC_RK05): $(OS8_DIST_RK05) $(OS8_SRC_SRCS) | $(PIDP8I_SIM) $(OS8_BOOT_DISK) +$(OS8_SRC_RK05): $(OS8_BASELINE) $(OS8_SRC_SRCS) | $(PIDP8I_SIM) $(OS8_TOOLTIME) $(OS8RUN)@OS8_OPTS@ $(V3D_SRC_SCRIPT) # Build the source disk for OS/8 V3F -$(V3F_BUILD_RK05): $(V3F_SRCDIR)/$(V3F_MANIFEST) $(V3F_SOURCES) | $(OS8_BOOT_DISK) - cd $(V3F_SRCDIR); @builddir@/bin/os8-cp -v --action-file $(V3F_MANIFEST) +$(V3F_BUILD_RK05): $(V3F_SRCDIR)/$(V3F_MANIFEST) $(V3F_SOURCES) | $(OS8_TOOLTIME) + rm -f $(V3F_BUILD_RK05) + cd $(V3F_SRCDIR); @builddir@/$(OS8CP) -v --action-file $(V3F_MANIFEST) # Make a disk with binaries assembled from the V3F source disk $(V3F_MADE_RK05): $(V3F_BUILD_RK05) $(V3F_MAKER) $(OS8RUN) $(V3F_MAKER) + +# Build the source disk for OS/8 OCK SYS Component. +$(OS8_OCK_SYS_SRC_RK05): $(OS8_OCK_SYS_SOURCES) | $(OS8_TOOLTIME) + @builddir@/$(OS8CP) -v -rk1 $(OS8_OCK_SYS_SRC_RK05) -z -a $(OS8_OCK_SYS_SOURCES) RKA1: + +# Make a disk with binaries assembled from the OS8_OCK SYS source disk +$(OS8_OCK_SYS_OBJ_RK05): $(OS8_OCK_SYS_SRC_RK05) $(OS8_OCK_SYS_MAKER) + $(OS8RUN) $(OS8_OCK_SYS_MAKER) + +# Build the source disk for OS/8 OCK CUSPS Component. +$(OS8_OCK_CUSPS_SRC_RK05): $(OS8_OCK_CUSPS_SOURCES) | $(OS8_TOOLTIME) + @builddir@/$(OS8CP) -v -rk1 $(OS8_OCK_CUSPS_SRC_RK05) -z -a $(OS8_OCK_CUSPS_SOURCES) RKA1: + +# Make a disk with binaries assembled from the OS8_OCK SYS source disk +$(OS8_OCK_CUSPS_OBJ_RK05): $(OS8_OCK_CUSPS_SRC_RK05) $(OS8_OCK_CUSPS_MAKER) + $(OS8RUN) $(OS8_OCK_CUSPS_MAKER) + +# Build the source disk for OS/8 OCK BASIC and FORTRAN II Component. +$(OS8_OCK_BF2_SRC_RK05): $(OS8_OCK_BF2_SOURCES) | $(OS8_TOOLTIME) + @builddir@/$(OS8CP) -v -rk1 $(OS8_OCK_BF2_SRC_RK05) -z -a $(OS8_OCK_BF2_SOURCES) RKA1: + +# Make a disk with binaries assembled from the OS8_OCK FIRTRAN II source disk +$(OS8_OCK_BF2_OBJ_RK05): $(OS8_OCK_BF2_SRC_RK05) $(OS8_OCK_BF2_MAKER) + $(OS8RUN) $(OS8_OCK_BF2_MAKER) + +# Build the source disk for OS/8 OCK FORTRAN IV Component. +$(OS8_OCK_FIV_SRC_RK05): $(OS8_OCK_FIV_SOURCES) | $(OS8_TOOLTIME) + @builddir@/$(OS8CP) -v -rk1 $(OS8_OCK_FIV_SRC_RK05) -z -a $(OS8_OCK_FIV_SOURCES) RKA1: + +# Make a disk with binaries assembled from the OS8_OCK FORTRAN IV source disk +$(OS8_OCK_FIV_OBJ_RK05): $(OS8_OCK_FIV_SRC_RK05) $(OS8_OCK_FIV_MAKER) + $(OS8RUN) $(OS8_OCK_FIV_MAKER) + +$(OS8_OCK_DIST_RK05): $(OS8_OCK_DIST_SRCS) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) + $(OS8RUN)@OS8_OPTS@ $(OS8_OCK_DIST_MAKER) # Make a bootable OS/8 v3f TCO8 DECtape image $(V3F_TC08_TU56): $(V3F_MADE_RK05) $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) $(OS8RUN)@OS8_OPTS@ $(ALL_TU56_SCRIPT) --enable v3f @@ -633,21 +817,17 @@ # Make a bootable OS/8 v3f TD8E 12K DECtape image $(V3F_TD12K_TU56): $(V3F_MADE_RK05) $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) $(OS8RUN)@OS8_OPTS@ $(ALL_TU56_SCRIPT) --enable v3f --enable td12k # Make a bootable OS/8 v3d TCO8 DECtape image -$(V3D_TC08_TU56): $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) | $(OS8_BOOT_DISK) +$(V3D_TC08_TU56): $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) | $(OS8_TOOLTIME) $(OS8RUN)@OS8_OPTS@ $(ALL_TU56_SCRIPT) # Make a bootable OS/8 v3d TD8E 12K DECtape image -$(V3D_TD12K_TU56): $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) | $(OS8_BOOT_DISK) +$(V3D_TD12K_TU56): $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) | $(OS8_TOOLTIME) $(OS8RUN)@OS8_OPTS@ $(ALL_TU56_SCRIPT) --enable td12k -# Create the CC8 distribution DECtape image -bin/cc8.tu56: $(CC_OS8_OBJS) $(CC_OS8_SRCS) $(CC_OS8_DEMOS) $(CC8_TU56_SCRIPT) | $(OS8_DIST_RK05) - $(OS8RUN) $(CC8_TU56_SCRIPT) - # Rule for building PAL assembly language programs in src/asm/*.pal. obj/%.lst bin/%-pal.pt: @srcdir@/src/asm/%.pal bin/palbart bin/palbart -lr $< || cat obj/$*.err mv @srcdir@/src/asm/$*.lst obj mv @srcdir@/src/asm/$*.rim bin/$*-pal.pt @@ -688,37 +868,40 @@ $(BUILDDIRS): mkdir -p $@ $(PIDP8I_SIM): $(SIM_OBJS) obj/pidp8i/gpio-@LED_DRIVER_MODULE@ls.o - $(CC) -o $@ $^ $(LIBS) + $(CC) -o $@ @PI_LFLAGS@ $^ $(LIBS) $(SIM_LFLAGS) @PI_LIBS@ ln -f bin/pidp8i-sim bin/pdp8 bin/cc8: $(CC8_OBJS) - $(CC) -o $@ $^ $(LIBS) + $(CC) $(CC8_CROSS_CFLAGS) -o $@ $^ $(LIBS) bin/d8tape: $(D8TAPE_OBJS) - $(CC) -o $@ $^ + $(CC) $(D8TAPE_CFLAGS) -o $@ $^ bin/palbart: $(PALBART_OBJS) - $(CC) -o $@ $^ + $(CC) $(PALBART_CFLAGS) -o $@ $^ bin/pidp8i-test: obj/misc/test.o obj/pidp8i/gpio-nls.o obj/pidp8i/gpio-common.o - $(CC) -o $@ $^ $(LIBS) -lncurses + $(CC) -o $@ $(CFLAGS) @PI_CFLAGS@ @PI_LFLAGS@ $^ $(LIBS) @PI_LIBS@ -lncurses bin/ptp2txt: obj/misc/ptp2txt.o $(CC) -o $@ $^ ln -f bin/ptp2txt bin/txt2ptp bin/txt2ptp: bin/ptp2txt ln -f bin/ptp2txt bin/txt2ptp bin/deeper: obj/misc/deeper.o obj/pidp8i/gpio-@LED_DRIVER_MODULE@ls.o obj/pidp8i/gpio-common.o - $(CC) -o $@ $^ $(LIBS) + $(CC) -o $@ $(CFLAGS) @PI_CFLAGS@ @PI_LFLAGS@ $^ $(LIBS) @PI_LIBS@ + +doc/e8-manual.pdf: doc/e8-manual.md + tools/mkmanpdf doc/e8-manual libexec/scanswitch: obj/misc/scanswitch.o obj/pidp8i/gpio-nls.o obj/pidp8i/gpio-common.o - $(CC) -o $@ $^ $(LIBS) + $(CC) -o $@ $(CFLAGS) @PI_CFLAGS@ @PI_LFLAGS@ $^ $(LIBS) @PI_LIBS@ # Reconfigure whenever one of the *.in or autosetup files changes unless # this is "make clean". # # We purposely list only one of the OUTFILES on the left hand side @@ -747,5 +930,6 @@ $(CC8_OBJS:.o=.d) \ $(D8TAPE_OBJS:.o=.d) \ $(MISC_OBJS:.o=.d) \ $(PALBART_OBJS:.o=.d) -include $(ADF) + Index: README.md ================================================================== --- README.md +++ README.md @@ -1,203 +1,252 @@ # Getting Started with the PiDP-8/I Software ## Orientation -You will be reading this file from one of several likely places: - -* [Online][tlrm], within [the Fossil project repository][home]. - -* As a text file within the [source packages][src]. - -* In the read-only [GitHub mirror][ghm]. - -The source packages and the GitHub mirror are secondary outputs from the -Fossil repository, which is the primary home for the PiDP-8/I software -development project. - +You will be reading this either: + +* …[online][tlrm], within [the Fossil project repository][home]; or +* …as a text file within the [source packages][src]; or +* …in the read-only [GitHub mirror][ghm]. + +The latter two are secondary outputs from the first, being the PiDP-8/I +software development project’s home. + +This is open source software: you are welcome to +[contribute to the project][ctrb]. + +[ctrb]: https://tangentsoft.com/pidp8i/doc/trunk/CONTRIBUTING.md [ghm]: https://github.com/tangentsoft/pidp8i [home]: https://tangentsoft.com/pidp8i/ [src]: https://tangentsoft.com/pidp8i/#src [tlrm]: https://tangentsoft.com/pidp8i/doc/trunk/README.md ## Prerequisites -* A Raspberry Pi with the 40-pin GPIO connector. That rules out the - first-generation Raspberry Pi model A and B boards which had a - 26-pin GPIO connector. +* A Raspberry Pi with the 40-pin GPIO connector. -* An SD card containing [a compatible OS][os]. +* An SD card imaged with Raspberry Pi OS, either [stock][rpios] or + [modified by us][bosi]. * This software distribution, unpacked somewhere convenient within the - filesystem on the Raspberry Pi. We recommend that you unpack it - somewhere your user has read/write access like `$HOME/src/pidp8i`. - -* We require several tools and libraries that aren't always installed: - - * A working C compiler and other standard Linux build tools, - such as `make(1)`. - - * Python's `pexpect` library - - * The `ncurses` development libraries - - To install all of this on a Raspbian type OS, say: + filesystem on the Raspberry Pi. That’s already done on [our modified + OS images][bosi], in `~/pidp8i`. When adding it to the stock OS, we + recommend that you unpack it in your `HOME` directory or somewhere + else your user has read/write access. + +* While those with no Linux and Raspberry Pi knowledge may be able to + follow our instructions blindly, we recommend that such persons look + at [the official Raspberry Pi documentation][rpfd], particularly + their [Linux][rpfl] and [Raspberry Pi OS][rpfr] guides. The book + "[Linux for Makers][lfm]" by Aaron Newcomb is also well-reviewed. + +* Building the software requires several tools and libraries, some of + which you may not already have. + + On Raspberry Pi OS, say: $ sudo apt update - $ sudo apt install build-essential - $ sudo apt install libncurses-dev python-pip - $ sudo pip install pexpect - -[os]: https://tangentsoft.com/pidp8i/wiki?name=OS+Compatibility - - - -## Getting the Software onto Your Pi - -If you're reading this file within an unpacked distribution of the -PiDP-8/I software, you may skip this section, because you have -already achieved its aim. - -If you are reading this [online][this] and have not yet downloaded and -unpacked the software source code onto your Pi, this section will get -you going. - -[this]: https://tangentsoft.com/pidp8i/doc/trunk/README.md - - - -### Transferring the File to the Pi - -The first step is to get the tarball (`*.tar.gz` file) or Zip file onto -the Pi. There are many options: + $ sudo apt install build-essential libraspberrypi-dev \ + libncurses-dev perl python3-pexpect python3-yaml + + Under Homebrew, such as on macOS, say instead: + + $ brew install make perl python + $ pip3 install --user pexpect pyyaml + + On [other compatible OSes][othos], you may need different commands. + +[bosi]: https://tangentsoft.com/pidp8i/#bosi +[lfm]: https://www.makershed.com/products/make-linux-for-makers +[othos]: https://tangentsoft.com/pidp8i/wiki?name=OS+Compatibility +[rpfd]: https://www.raspberrypi.org/documentation/ +[rpfl]: https://www.raspberrypi.org/documentation/linux/ +[rpfr]: https://www.raspberrypi.org/documentation/raspbian +[rpios]: https://www.raspberrypi.org/software/ + + +## Enabling the SSH Server + +[That topic is covered elsewhere](./doc/OS-images.md#sshd). + + +## Preparing Your Pi + +If you’ve just barely unpacked Raspberry Pi OS onto an SD card and are +now trying to get the PiDP-8/I software distribution working on it, stop +and go through the [Rasbperry Pi documentation][rpd] first. At the +absolute minimum, run `raspi-config` and make sure the Localization +settings are correct. The defaults are for the United Kingdom, home of +the Raspberry Pi Foundation, so unless you live there, the defaults are +probably incorrect for *your* location. + +[rpd]: https://www.raspberrypi.org/documentation/ + + +## Getting the Software onto Your Pi + +This section is for those reading this on [our project home site][home] +or via [its GitHub mirror][ghm]. If you are instead reading this as the +`README.md` file within an unpacked distribution of the PiDP-8/I +software, [skip to the next section](#configuring). + + +### Transferring the Source Tarball to the Pi + +There are many ways to get the `*.tar.gz` file onto your Pi: 1. **Copy the file to the SD card** you're using to boot the Pi. When inserted into a Mac or Windows PC, typically only the `/boot` partition mounts as a drive your OS can see. (There's a much larger partition on the SD card, but most PCs cannot see it.) There should be enough free space left in this small partition to - copy the file over. When you boot the Pi up with that SD card, - you will find the tarball or Zip file in `/boot`. + copy the tarball over. When you boot the Pi up with that SD card, + you will find it in `/boot`. 2. **Pull the file down to the Pi** over the web, directly to the Pi: $ wget -O pidp8i.tar.gz https://goo.gl/JowPoC That will get you a file called `pidp8i.tar.gz` in the current - working directory containing the latest *release* version. (Use the - "bleeding edge" links on the home page if you want the tip of trunk - instead!) + working directory containing the latest *stable release.* To get the + bleeding edge tip-of-trunk version instead, say: + + $ wget -O pidp8i.tar.gz https://tangentsoft.com/pidp8i/tarball 3. **SCP the file over** to a running Pi from another machine. - If your Pi has OpenSSH installed and running, you can use + If your Pi has [OpenSSH installed and running](#sshd), you can use [WinSCP][wscp], [Cyberduck][cd], [FileZilla][fz] or another SCP or SFTP-compatible file transfer program to copy the file to the Pi over the network. [cd]: https://cyberduck.io/ [fz]: https://filezilla-project.org/ [wscp]: https://winscp.net/eng/ 4. **Clone the Fossil repository** using the instructions in the - [`HACKERS.md` file][hack]. (Best for experts or those who wish to + [`CONTRIBUTING.md` file][ctrb]. (Best for experts or those who wish to become experts.) -[hack]: https://tangentsoft.com/pidp8i/doc/trunk/HACKERS.md - -5. **Switch to the binary OS installation images** available from the - [top-level project page][cprj]. These are default installations of - Raspbian Lite with the PiDP-8/I software already downloaded, built, - and installed. These images were produced in part using option #4 - above, so you can use Fossil to update your software to the current - version at any time, as long as the Pi is connected to the Internet. - - - -### Unpacking the Software on Your Pi - -Having transferred the distribution file onto your Pi, you can unpack it -with one of the two following commands. - -If you grabbed the tarball: - - $ tar xvf /path/to/pidp8i-VERSION.tar.gz - -If you grabbed the Zip file instead: - - $ unzip /path/to/pidp8i-VERSION.zip - -The file name will vary somewhat, depending on when and how you -transferred the file. After unpacking it, you will have a new -directory beginning with `pidp8i`. `cd` into that directory, then -proceed with the [configuration](#configuring) steps below. - - - -### If You Need More Help - -If the above material is not sufficient to get you started, you might -want to look at [the documentation][rpfd] provided by the Raspberry -Pi Foundation. In particular, we recommend their [Linux][rpfl] and -[Raspbian][rpfr] guides. The book "[Make: Linux for Makers][lfm]" -by Aaron Newcomb is also supposed to be good. - - -[rpfd]: https://www.raspberrypi.org/documentation/ -[rpfl]: https://www.raspberrypi.org/documentation/linux/ -[rpfr]: https://www.raspberrypi.org/documentation/raspbian - -[lfm]: https://www.makershed.com/products/make-linux-for-makers - - - -## Configuring, Building and Installing - -This software distribution builds and installs in the same way as most -other Linux/Unix software these days. The short-and-sweet is: - - $ ./configure && make && sudo make install - -The `configure` step is generally needed only the first time you build -the software in a new directory. You may want to add options after it, -as described [below](#options). - -After that initial configuration, the software normally auto-reconfigures -itself on updates using the same options you gave before, but occasionally -we make some change that prevents this from happening. If you get a -build error after updating to a new version of the software, try saying: +Alternatively, switch to [the binary OS installation images][bosi], +which are a copy of Raspberry Pi OS as of our latest stable release, +with the PiDP-8/I software already downloaded, configured, and installed +for you. + + +### Unpacking the Software on Your Pi + +Having transferred the distribution file onto your Pi, unpack it with: + + $ tar xf pidp8i.tar.gz + + +## Configuring, Building and Installing + +For a stock build, say: + + $ cd ~/pidp8i + $ ./configure && tools/mmake && sudo make install + +You may want to add options to the `configure` step, described +[below](#options). + +Subsequent software updates and rebuilds should not require that you +re-run the `configure` step manually, but if automatic re-configuration +fails, you can force it: $ make reconfig -...and then continuing with the `make && sudo make install` steps before -reporting a build error. - -If `make reconfig` also fails, you can try running the `configure` -script again manually. - - - -### Running the Software - -For the most part, this is covered in the documentation linked from the -[Learning More](/#learning) section of the project home page. - -The only tricky bit is that if this is the first time you have -configured, built and installed the software as above on a given system, -you will have to log out and back in before commands like `pidp8i` will -be in your user's `PATH`. - - - -### Configure Script Options +The “`mmake`” step above will take quite a while to run, especially on +the slower Pi boards. The longest single step is building the OS/8 disk +packs from source media. Be patient; the build process almost certainly +isn’t frozen. + +Only the `make install` step needs to be done via “`sudo`”. No other +step requires root privileges. + +After running “`sudo make install`” the first time, you will have to log +out and back in to get the installation’s “bin” directory into your +`PATH`. + + +## Using the Software + +For the most part, this software distribution works like the [old stable +2015.12.15 distribution][osd]. Its [documentation][oprj] therefore +describes this software too, though there are [significant +differences][mdif]. + +Quick start: + +1. To start the simulator running in the background: + + $ pidp8i start + + This will happen automatically on reboot unless you disable the + service, such as in order to run one of the various [forks of Deeper + Thought][dt2]. + +2. To attach your terminal to the running simulator, run the same + script without an argument: + + $ pidp8i + +3. To detach from the simulator's terminal interface while leaving the + PiDP-8/I simulator running, type Ctrl-A d. You can + re-attach to it later with a `pidp8i` command. + +4. To shut the simulator down while attached to its terminal interface, + type Ctrl-E to pause the simulator, then at the `simh>` + prompt type `quit`. Type `help` at that prompt to get some idea of + what else you can do with the simulator command language, or read + the [SIMH Users' Guide][sdoc]. + +5. To shut the simulator down from the command line: + + $ pidp8i stop + + That then lets you run something like [Incandescent Thought][ith] + without conflict. + +You might also find our [Learning More](/#learning) links helpful. + +[ith]: https://tangentsoft.com/pidp8i/wiki?name=Incandescent+Thought + + +## The Background Simulator Service + +The PiDP-8/I software distribution uses [systemd] to run the background +PDP-8 simulator as user-level service, so you needn’t give `sudo` on any +command to interact with that service, as you did in older versions of +the software. + +Although you can give verbose `systemctl` commands like this: + + $ systemctl --user start pidp8i + +…we’ve provided a wrapper for such commands: + + $ pidp8i start + $ pidp8i stop + $ pidp8i restart + $ pidp8i status -l + +*All* arguments are passed to `systemctl`, not just the first, so you +can pass any flags that `systemctl` accepts, as in the last example. + +[systemd]: https://www.freedesktop.org/wiki/Software/systemd/ + + + +## Configure Script Options You can change many things about the way the software is built and installed by giving options to the `configure` script: - -#### --prefix +### --prefix Perhaps the most widely useful `configure` script option is `--prefix`, which lets you override the default installation directory, `/opt/pidp8i`. There are many good reasons to change where the software gets installed, but the default is also a good one, so unless you know for a fact that @@ -214,12 +263,11 @@ mark a few of the executables as having permission to run at high priority levels, which improves the quality of the display, particularly with the [incandescent lamp simulator][ils] feature enabled. - -#### --lowercase +### --lowercase The American Standards Association (predecessor to ANSI) delivered the second major version of the ASCII character encoding standard the same year the first PDP-8 came out, 1965. The big new addition? Lowercase. @@ -246,52 +294,54 @@ need, and time for it, we have [patched][tty] some of the software we distribute that otherwise would not do the right thing with lowercase input to make it do so. This is *not* the option you want if you are a purist. + +* **pass** — This passes keyboard input through to the simulator + unchanged, and no patches are applied to the PDP-8 software we + distribute. + + This is the option for historical purists. If you run into trouble + getting the software to work as you expect when built in this mode, + try enabling CAPS LOCK. * **upper** — This option tells the PDP-8 simulator to turn lowercase input into upper case. This is the behavior we used for all versions of the PiDP-8/I software up through v2017.04.04. Essentially, it tells the software that you want it to behave as through you've got - it connected to a Teletype Model 33 ASR. + it connected to an uppercase-only terminal like the Teletype Model 33 ASR. The advantage of this mode is that you will have no problems running PDP-8 software that does not understand lowercase ASCII text. The disadvantage is obvious: you won't be able to input lowercase - ASCII text. The SIMH option we enable in this mode is - bidirectional, so that if you run a program that does emit lowercase - ASCII text — such as Rick Murphy's version of Adventure — it will be - uppercased, just like an ASR-33 would do. + ASCII text. + + The SIMH option we enable in this mode is bidirectional, so that if + you run a program that does emit lowercase ASCII text — such as Rick + Murphy's version of Adventure — it will be uppercased, just like an + ASR-33 would do. Another trap here is that the C programming language requires lowercase text, so you will get a warning if you leave the default option **--enable-os8-cc8** set. Pass **--disable-os8-cc8** when enabling **upper** mode. -* **none** — This passes 7-bit ASCII text through to the software - running on the simulator unchanged, and no patches are applied to - the PDP-8 software we distribute. - - This is the option for historical purists. If you run into trouble - getting the software to work as you expect when built in this mode, - try enabling CAPS LOCK. - [sa]: http://homepage.cs.uiowa.edu/~jones/pdp8/faqs/#charsets [tty]: https://tangentsoft.com/pidp8i/wiki?name=OS/8+Console+TTY+Setup - -#### --no-lamp-simulator +### --no-lamp-simulator If you build the software on a multi-core host, the PDP-8/I simulator is normally built with the [incandescent lamp simulator][ils] feature, which drives the LEDs in a way that mimics the incandescent lamps used in the original PDP-8/I. (We call this the ILS for short.) This feature -currently takes too much CPU power to run on anything but a multi-core -Raspberry Pi, currently limited to the Pi 2 and Pi 3 series. +takes too much CPU power to run on anything but a multi-core +Raspberry Pi, being the Pi 2 and newer full-sized boards, excluding +the Zero series. If you configure the software on a single-core Pi — models A+, B+, and Zero — the simulator uses the original low-CPU-usage LED driving method instead. (a.k.a. NLS for short, named after this configuration option.) @@ -300,12 +350,11 @@ method not only uses less CPU, which may be helpful if you're trying to run a lot of background tasks on your Pi 2 or Pi 3, it can also be helpful when the CPU is [heavily throttled][thro]. - -#### --serial-mod +### --serial-mod If you have done [Oscar's serial mod][sm1] to your PiDP-8/I PCB and the Raspberry Pi you have connected to it, add `--serial-mod` to the `configure` command above. @@ -316,12 +365,11 @@ If you give this flag and your PCBs are *not* modified, most of the hardware will work correctly, but several lights and switches will not work correctly. - -#### --alt-serial-mod +### --alt-serial-mod This flag is for an [alternative serial mod by James L-W][sm2]. It doesn't require mods to the Pi, and the mods to the PiDP-8/I board are different from Oscar's. This flag changes the GPIO code to work with these modifications to the PiDP-8/I circuit design. @@ -333,19 +381,17 @@ This option is a pure alternative to [`--serial-mod`](#serial-mod): you can leave both off, but you cannot pass both. -#### --throttle +### --throttle See [`README-throttle.md`][thro] for the values this option takes. If -you don't give this option, the simulator runs as fast as possible, more -or less. +you don't give this option, the simulator runs as fast as possible. - -#### --enable-savestate +### --enable-savestate By default, the PiDP-8/I starts up with the core state undefined and runs the boot script you’ve selected either with the IF switches or by passing it on the command line to `pidp8i-sim` or `pdp8`. This brings the simulator up in a known state, with no persistence between restarts @@ -360,12 +406,12 @@ switch register (SR), load it into the program counter (PC) with the Load Addr switch, then START the CPU to restart their program without having to reload it from tape or disk. There were also several power fail and restart options designed and made -available for the PDP-8 series throughout its lifetime. One of these, -the KP8-I for the PDP-8/I would detect a power fail condition, then in +available for the PDP-8 series throughout its lifetime. One of these — +the KP8-I for the PDP-8/I — would detect a power fail condition, then in the brief time window while the power supply’s reservoir capacitors kept the computer running, this option card would raise an interrupt, giving a user-written routine up to 1 millisecond to save important registers to core so they would persist through the power outage. Then on power-up, it would start executing at core location 00000, where another @@ -376,11 +422,11 @@ scripts: any time the simulator is shut down gracefully, it saves all key simulator state — registers, core, device assignments, etc. — to a disk file. Then on restart, that script will reload that saved state if it finds the saved state file. -This is not identical to a KP8-I, in that it doesn’t require any +This is not identical to a KP8-I in that it doesn’t require any user-written PDP-8 code to run, which is why it’s optional: it’s ahistoric with respect to the way the included OSes normally ran. In absence of a hardware option like the KP8-I, a more accurate simulation would only save the core memory state to a host-side disk @@ -398,13 +444,13 @@ That zeroes the key registers and prevents the CPU from running as it normally would after giving the `RESTORE` command to SIMH. -#### --disable-usb-automount +### --disable-usb-automount -When you install the software on a [systemd][systemd]-based Linux +When you install the software on a [systemd]-based Linux system, we normally configure the OS to automatically mount USB drives when they are initially plugged in, which allows the `SING_STEP` + `DF` media image auto-attach feature to work smoothly. That is, if you plug in a USB memory stick holding a `*.pt` file containing a paper tape image, you want the simulator to be able to find it if you have the DF @@ -418,11 +464,11 @@ (Alternately, you could modify our `etc/udev.rules` and/or `bin/usb-mount` scripts so that they work cooperatively with your local USB setup rather than conflicting with it.) -#### --disable-cc8-cross +### --disable-cc8-cross Give this option if you do not want to build Ian Schofield's `cc8` C cross-compiler on the host. Because the cross-compiler is needed to build the CC8 native OS/8 @@ -429,40 +475,52 @@ compiler, disabling the cross-compiler also causes the native compiler to be left off the bootable OS/8 RK05 disk image, as if you’d passed the `--disable-os8-cc8` configuration option. - -#### --disable-os8-\* +### --use-ock + +By default, the boot media used for the IF=0 and IF=7 cases is an +extended version of OS/8 V3D, as distributed by DEC, plus some patches +and third-party software additions, per the following sections. + +For the late 2020 release, we have another more ambituous option, being +[the OS/8 Combined Kit][ock], which is the last complete release of OS/8 +released by DEC. (See that link for details.) + +Pass this option to boot OCK rather than OS/8 V3D. + +[ock]: https://tangentsoft.com/pidp8i/dir?ci=tip&name=src/os8/ock + + + +### --disable-os8-\* Several default components of the [OS/8 RK05 disk image](#os8di) used by boot options IF=0 and IF=7 can be left out to save space and build time: * **--disable-os8-advent** — Leave out the [Adventure][advent] game. -* **--disable-os8-ba** - Leave out the BASIC games and demos which - come from DEC's book "101 BASIC Computer Games." These are normally - installed to `RKB0:` as `*.BA`, thus the option's name. - - (We considered naming it `--disable-os8-basic-games-and-demos`, but - that's too long, and it can't be `--disable-os8-basic` because that - implies that it is the OS/8 BASIC subsystem that is being left out, - which is not even currently an option.) +* **--disable-os8-basic-games** - Leave out the BASIC games and demos which + primarily come from DEC's book "101 BASIC Computer Games." * **--disable-os8-cc8** - Leave out Ian Schofield's native OS/8 CC8 compiler and all of its ancillary files. -* **--disable-os8-chess** — Leave out John Comeau's +* **--disable-os8-chekmo** — Leave out John Comeau's [CHECKMO-II chess implementation][chess]. * **--disable-os8-crt** — Suppress the [console rubout behavior][tty] enabled while building the OS/8 binary RK05 disk image. You probably only want to do this if you have attached a real teletype to your PiDP-8/I, and thus do not want video terminal style rubout processing. * **--disable-os8-dcp** — Leave out the DCP disassembler. + +* **--disable-os8-e8** — Leave out [Bill Silver’s E8][e8], an + Emacs-like screen editor. * **--disable-os8-focal** - Do not install any version of FOCAL on the OS/8 system disk. This option sets `--disable-os8-uwfocal` and overrides `--enable-os8-focal69`, both discussed below. @@ -477,11 +535,11 @@ * **--disable-os8-init** - Do not install `RKB0:INIT.TX` or its “show on boot” script, `INIT.CM`. Rather than disable the default on-boot init message, you may want to edit `media/os8/init.tx.in` to taste and rebuild. -* **--disable-os8-k12** - Leave out the Kermit-12 implementation +* **--disable-os8-kermit-12** - Leave out the Kermit-12 implementation normally installed to `RKA0:` * **--disable-os8-macrel** - Leave the MACREL v2 assembler and its associated FUTIL V8B tool out. @@ -495,18 +553,22 @@ Note that the default installation only installs `UWF16K.SV`, not the rest of the files on `media/os8/subsys/uwfocal*.tu56`. There is much more to explore here, but we cannot include it in the default installation set because that would overrun OS/8's limitation on the number of files on a volume. + +You can later remove each of these after installation using +[our package manager][os8pkg]. [advent]: http://www.rickmurphy.net/advent [chess]: https://chessprogramming.wikispaces.com/CHEKMO-II -[os8p]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-patching.md +[e8]: https://tangentsoft.com/e8/ +[os8pat]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-patching.md +[os8pkg]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8pkg.md - -#### --enable-os8-\* +### --enable-os8-\* There are a few file sets not normally installed to the [OS/8 RK05 disk image](#os8di) used by boot options IF=0 and IF=7. You can install them with the following options: @@ -533,24 +595,22 @@ That having been said, people don't go to a ren fair and expect to experience the historical ubiquity of typhoid fever, so do not feel guilty if you choose to try this option. -[uvte]: https://tangentsoft.com/pidp8i/wiki?name=Using+VTEDIT - * **--enable-os8-focal69** — Because the default installation includes - U/W FOCAL, we have chosen to leave FOCAL 69 out by default to save - space on the O/S 8 system disk. You can give this option to install - this implementation alongside U/W FOCAL, or you can couple this - option with `--disable-os8-uwfocal` to reverse our choice of which - FOCAL implementation to install by default. + U/W FOCAL, we have chosen to leave [FOCAL,1969][f69] out by default + to save space on the O/S 8 system disk. You can give this option to + install this implementation alongside U/W FOCAL, or you can couple + this option with `--disable-os8-uwfocal` to reverse our choice of + which FOCAL implementation to install by default. You should know that the reason we made this choice is that the - version of FOCAL 69 we are currently shipping is fairly minimal: we - believe we are shipping the original DEC version of FOCAL 69 plus a + version of FOCAL,1969 we are currently shipping is fairly minimal: we + believe we are shipping the original DEC version of FOCAL,1969 plus a few carefully-selected overlays. There are many more overlays and - patches available on the Internet for FOCAL 69, but we have not had + patches available on the Internet for FOCAL,1969, but we have not had time to sort through these and make choices of which ones to ship or how to manage which ones get installed. Thus our choice: we want to provide the most functional version of FOCAL by default, and within the limitations of the time we have chosen to spend on this, that is U/W FOCAL today. @@ -558,112 +618,194 @@ (See our [U/W FOCAL manual supplement][suppd] for a list of differences between these versions of FOCAL, which implicitly explains why we chose it.) It is possible that we will eventually add enough patches and - overlays to FOCAL 69 that it will become more powerful than U/W + overlays to FOCAL,1969 that it will become more powerful than U/W FOCAL, so we might then choose to switch the defaults, but that is just speculation at the time of this writing. +You can later add each of these after installation using +[our package manager][os8pkg]. + +[f69]: https://tangentsoft.com/pidp8i/wiki?name=Running+FOCAL%2C1969 [suppd]: https://tangentsoft.com/pidp8i/doc/trunk/doc/uwfocal-manual-supp.md#diffs - - -#### --os8-minimal - -If you set this flag, it sets all `--enable-os8-*` flags to false and -all `--disable-os8-*` flags to true. If you give this along with any -`--enable-os8-*` option, minimal mode overrides it. Alas, the only way -to get "minimal plus one or two features" is to explicitly disable all -of the optional OS/8 features you don't want. - -This flag's name is aspirational, rather than accurate: our current -"minimal" installation could still be stripped down some more. We -expect to add more `--disable-os8-*` flags later to reduce the delta -between the ideal "minimal OS/8" and our current offering. These -options would then be included in `--os8-minimal`. An example of this -is OS/8's BASIC interpreter, which currently cannot be left out. - -This option does not control some things you might think it should: - -1. This option does not affect the `--lowercase` option because that - affects only OS/8's command interpreter and OS/8's BASIC +[uvte]: https://tangentsoft.com/pidp8i/wiki?name=Using+VTEDIT + + +### --os8-minimal + +This sets all `--enable-os8-*` flags to false and all `--disable-os8-*` +flags to true. This mode overrides any `--enable-os8-*` flag, so if you +want a minimal install plus just one or two features, it’s simplest to +give this flag and then use [our package manager][os8pkg] to add in the +elements you want rather than pass a bunch of `--disable-os8-*` options. + +This option may not do some things you think it should: + +1. This flag's name is aspirational, not a promise of an ideal: our + current "minimal" installation could be stripped down further. For + example, we currently have no way to leave out OS/8's BASIC + interpreter, even though no core OS services depend on it. + +2. This option does not affect [the `--lowercase` option](#lowercase) + because that affects only OS/8's command interpreter and OS/8's BASIC implementation, so we deem it to be orthogonal to the purpose of the `--os8-minimal` flag, which only affects the optional post-`BUILD` - features. If you want a *truly* pristime OS/8 disk, you should - therefore also give `--lowercase=none`. - -2. This option does not affect `--disable-os8-src`, because it only - suppresses optional features in the "bin" media. If you want a - minimal OS/8 bin disk and no src disk, give that option as well. - -3. Although it disables *display* of the `INIT.TX` file on boot, the - file is still generated in case you later want to enable it, since - the file acts as build documentation as well as a "welcome" message. + features. You may therefore wish to give `--lowercase=none` along + with `--os8-minimal`. + +3. This option does not affect `--disable-os8-src`, because it only + suppresses optional features in the primary bootable OS/8 media. If + you want minimal OS/8 boot media without a separate source code + data disk, give this option as well. + +4. Although this option disables *display* of the `INIT.TX` file on + boot, the file is still generated, on purpose. First, it acts as + build documentation, recording what was built and when. Second, + you may wish to enable this welcome message later, and it’s rather + painful to go back through the build process to generate it after + the fact. -#### --help +### --help Run `./configure --help` for more information on your options here. -## The OS/8 RK05 Disk Image +## Runtime Configuration + +The `pidp8i` command sources a Bourne shell script called `pidp8i.rc` — +normally installed in `/opt/pidp8i/etc` — which you may edit to override +certain details of the way that script runs. The intended purpose is to +give you a place to define local overrides for default variables: + + +### `SCREEN_MANAGER=screen` + +By default, the PiDP-8/I software distribution installs and uses [GNU +`screen(1)`][gscr] to allow the simulator to run in the background yet be +reattached from a later terminal session, then possibly later to be +backgrounded once again. Without the intermediation of something like +`screen`, the simulator would either forever be in the background — so +we’d have to export the console [another way][scons] — or we’d have to +give up on background startup, requiring that users fire the simulator +up interactively any time they wanted to use it. Using a screen manager +lets us have it both ways. + +The `SCREEN_MANAGER` setting is for use by those that want to use +one of the alternatives to GNU `screen`: + +* **screen**: The default, per above. + +* [**tmux**][tmux]: A popular alternative to `screen`, especially on + on BSD platforms. Note that the "attention" character for `tmux` + is Ctrl-B by default, not Ctrl-A as with + `screen`. + +* **none**: This mode is for interactive use, allowing you to + run the installed simulator with the installed media without any + screen manager at all. + + In this mode, the `pidp8i` and `pidp8i start` commands do the + same thing: run the simulator directly attached to your current + interactive terminal. The `pidp8i stop` command becomes a no-op, + since stopping the simulator is then done in the standard SIMH way: + Ctrl-E, quit. + +Note that the alternative screen managers are not installed by default. +If you set `SCREEN_MANAGER=tmux`, you must then ensure that `tmux` is in +fact installed before the `pidp8i` script goes to try and use it. From +the Pi’s command line: + + $ sudo apt install tmux + +Switching between configured screen managers must be done while the +simulator is stopped. + +[gscr]: https://www.gnu.org/software/screen/ +[scons]: /wiki?name=Serial+or+Telnet+PDP-8+Console +[tmux]: https://tmux.github.io/ + + +## Simplifying Boot and Login + +The setup and installation instructions above assume you will be using +base the Raspberry Pi OS as a network server, offering SSH if nothing +else. Thus, we do not try to bypass any Linux security mechanisms, not +wanting to create an insecure island on your network. + +However, if you want to run your system more as an appliance, you can +cast away some of this security to get auto-login and other convenient +behaviors: + +* [Serial or Telnet PDP-8 Console](https://tangentsoft.com/pidp8i/wiki?name=Serial+or+Telnet+PDP-8+Console) +* [How to Run a Naked PiDP-8/i](https://tangentsoft.com/pidp8i/wiki?name=How+to+Run+a+Naked+PiDP-8/I) +* [VNC for Remote GUI Access](https://www.raspberrypi.org/documentation/remote-access/vnc/) + + +## The OS/8 Disk Images For the first several years of the PiDP-8/I project, the OS/8 RK05 disk image included with the PiDP-8/I software (called `os8.rk05`) was based on an image of a real RK05 disk pack that someone allegedly found in a salvaged PDP-8 system. Parts of the image were corrupt, and not all of -the pieces of software on the disk worked properly with the other parts. +the pieces of software worked properly with the other parts. It was also a reflection of the time it was created and used out in the world, which was not always what we would wish to use today. -In late 2017 [several of us][aut] created the `mkos8` tool, which was -replaced during 2018 by Bill Cattey with the `os8-run` interpreter -and its stock scripts. The `--*-os8-*` options documented above get -passed into `os8-run` during the PiDP-8/I software build process, -which controls how it generates the `v3d*.rk05` RK05 disk image files. - -This set of disk images entirely replaces the old `os8.rk05` disk image, -in that all features of the old disk image are still available. In some -cases, features present on the old `os8.rk05` disk are now left out or -disabled by default, and in other cases we have changed the behavior of -features from the way they used to be on the old disk. Mostly, though, -the new disk images are simply more functional than the old ones. - -If you wish to know the full details of how these disk images are +Starting in late 2017, [several of us][aut] built a series of tools to +generate OS/8 media images from pristine source files in a repeatable, +[testable][pkgtst] way, culminating in [Bill Cattey’s `os8-run`][ori], +which backs other features like [the `--disable-os8-*` configuration +options](#disable-os8). + +The resulting set of media images entirely replace the old ones and go +well beyond each besides. All prior features are still available, +though some features present on the old images are disabled by default, +requiring either [`--enable-os8-*` configure options](#enable-os8) or +[package manager commands][os8pkg] to add features back in. Mostly, +though, the new media images are more functional than the old ones. + +If you wish to know the full details of how these media images are created, see the documentation for [`os8-run`][ori] and that for [`class simh`][cs]. -The remainder of this section describes some aspects of these disk +The remainder of this section describes some aspects of these media images which are not clear from the descriptions of the `--*-os8-*` configuration options above. -[aut]: https://tangentsoft.com/pidp8i/doc/trunk/AUTHORS.md -[ori]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-run.md +[aut]: https://tangentsoft.com/pidp8i/doc/trunk/AUTHORS.md +[ori]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-run.md +[pkgtst]: https://tangentsoft.com/pidp8i/doc/trunk/doc/testing.md ### Baseline -The baseline for the bootable OS/8 disk images comes from a set of +The baseline for the bootable OS/8 media images comes from a set of DECtapes distributed by Digital Equipment Corporation which are now included with the PiDP-8/I software; see the [`media/os8/*.tu56` files][os8mf]. From these files and your configuration options, the -`os8-run` script creates the baseline `v3d-dist.rk05` disk image. +`os8-run` script creates the baseline bootable `v3d-dist.rk05` and +`ock-dist.rk05` disk images. The default build creates a complete OS/8 V3D system including `BUILD` -support, FORTRAN IV, MACREL v2, and more. +support, FORTRAN IV, MACREL v2, and more, but you can switch to an +[OCK build at compile time](#ock) if you prefer. ### Subtractions -It turns out that it's pretty easy to run out of directory space on an -OS/8 RK05 disk due to a limitation in the number of files on an OS/8 -filesystem. For this reason, the archive of device drivers and TD8E -system are left off the system packs. They can be found in [OS/8 -Binary Distribution DECtape #2][bdt2]. - -If you do fancy work with `BUILD`, you may need to attach that DECtape -image and copy files in from it. +It's pretty easy to run out of space on an OS/8 RK05 disk, not just +because of its [2 × 0.8 MWord limit][rk05td], but also because of an +OS/8 limitation in the number of files on an OS/8 filesystem. We leave +the archive of device drivers and the TD8E subsystem off the system +packs to avoid hitting this second limit. You can add them later from +[OS/8 Binary Distribution DECtape #2][bdt2], such as to create media +for a TD8E based PDP-8/e. + +[rk05td]: https://en.wikipedia.org/wiki/RK05#Technical_details ### Default Additions The OS/8 RK05 disk image build process normally installs many software @@ -696,21 +838,21 @@ In keeping with the standards of good systm management this image incorporates all mandatory patches, as well as optional patches appropriate to proper operation of the system. For details on the available patches, the selection criteria, -and information about other optional patches see the [OS/8 system patches][os8p] +and information about other optional patches see the [OS/8 system patches][os8pat] document. [bdt2]: https://tangentsoft.com/pidp8i/file/media/os8/al-4712c-ba-os8-v3d-2.1978.tu56 [cl]: https://tangentsoft.com/pidp8i/doc/trunk/ChangeLog.md [cs]: https://tangentsoft.com/pidp8i/doc/trunk/doc/class-simh.md [os8mf]: https://tangentsoft.com/pidp8i/file/media/os8 [tlrm]: https://tangentsoft.com/pidp8i/doc/trunk/README.md -## The OS/8 TU56 Tape Image +## The OS/8 TU56 Tape Image As with the [OS/8 disk image](#os8di), this distribution’s build system can create custom TU56 tape images from pristine source media. This replaces the old `os8.tu56` binary image previously distributed with this software. @@ -731,12 +873,11 @@ [os8td]: https://tangentsoft.com/pidp8i/wiki?name=TD8E+vs+TC08 [os8ver]: https://tangentsoft.com/pidp8i/wiki?name=OS/8+V3D+vs+V3F - -## Overwriting the Local Simulator Setup +## Overwriting the Local Simulator Setup When you run `sudo make install` step on a system that already has an existing installation, it purposely does not overwrite two classes of files: @@ -778,20 +919,19 @@ `$prefix/share/boot`. (See the `--prefix` option above for the meaning of `$prefix`.) 4. If neither your previously installed simulator configuration files nor the binary media images are precious, you can force the - installation script to overwrite them both with a `sudo make - mediainstall` command after `sudo make install`. + installation script to overwrite them both with a + `sudo make mediainstall` command after `sudo make install`. Beware that this is potentially destructive! If you've made changes to your PDP-8 operating systems or have saved files to your OS system disks, this option will overwrite those changes! - -## Testing Your PiDP-8/I Hardware +## Testing Your PiDP-8/I Hardware You can test your PiDP-8/I LED and switch functions with these commands: $ pidp8i stop $ pidp8i-test @@ -805,157 +945,28 @@ switches on the front panel. After you are done testing, you can start the PiDP-8/I simulator back up with: $ pidp8i start -See [its documentation][test] for more details. - - - -## Using the Software - -For the most part, this software distribution works like the [old stable -2015.12.15 distribution][osd]. Its [documentation][oprj] therefore -describes this software too, for the most part. - -The largest user-visible difference between the two software -distributions is that many of the shell commands are different: - -1. To start the simulator running in the background: - - $ pidp8i start - - This will happen automatically on reboot unless you disable the - service, such as in order to run one of the various [forks of Deeper - Thought][dt2]. - -2. To attach the terminal you're working on to the simulator: - - $ pidp8i - - (Yes, it's the same base command as above. The `pidp8i` script uses - its first argument to determine what you want it to do. Without - arguments, this is what it does.) - -3. To detach from the simulator's terminal interface while leaving the - PiDP-8/I simulator running, type Ctrl-A d. You can - re-attach to it later with a `pidp8i` command. - -4. To shut the simulator down while attached to its terminal interface, - type Ctrl-E to pause the simulator, then at the `simh>` - prompt type `quit`. Type `help` at that prompt to get some idea of - what else you can do with the simulator command language, or read - the [SIMH Users' Guide][sdoc]. - -5. To shut the simulator down from the Raspbian command line: - - $ pidp8i stop - -There are [other major differences][mdif] between the old stable -distribution and this one. See that linked wiki article for details. - - - -## Enabling the SSH Server on the Binary OS Images - -The OpenSSH server is enabled and running by default on the PiDP-8/I -binary OS images, but for security reasons, the build process we use -to create these OS images wipes out the SSH host keys generated here -on our build system, else everyone's PiDP-8/I would have the same -host keys, which would be a massive security hole. Unfortunately, -the Raspbian `sshd` service is not smart enough to regenerate these -keys if they are missing on boot, so you need to do this once by hand: - - $ sudo dpkg-reconfigure openssh-server - -You should be able to log in via SSH immediately after that command -completes. - -You may be wondering why we don’t do this automatically, somehow. It’s -because, over time, we’ve removed all dependence on root access in our -software in the name of security, so that we no longer have permission -to make system-wide changes like this in our startup scripts. We now -rely on you, the system’s administrator, to do it interactively with -`sudo` permissions. - - - -## The systemd Unit File - -Older stable releases of the PiDP-8/I software used an [old-style System -V init script][svinit] to start the PiDP-8/I service. This includes -Oscar Vermeulen's final stable release. - -Starting with release v2019.04.25, we have now switched to a -[systemd][systemd] unit file, since Raspbian has been systemd-based for -years. (It also supports SysV init scripts, but only as a second-class -mechanism intended for backwards compatibility only.) - -One of the features systemd gives us is the ability to set the unit -to run as user-level service rather than as a system-wide service, -which means you no longer need the `sudo` prefix on commands to start, -stop, restart, and query the service. The only time you now need root -privileges is when installing the software. After that, the software -runs under your normal user account, as do all of the commands you -use to manipulate the background simulator service. - -As a result of these changes, none of these commands work any longer: - - $ sudo /etc/init.d/pidp8i start - $ sudo service pidp8i stop - $ sudo systemctl restart pidp8i - -The correct forms, respectively, are: - - $ systemctl --user start pidp8i - $ systemctl --user stop pidp8i - $ systemctl --user restart pidp8i - -These commands are long, so we have extended the `pidp8i` command to -build and run `systemctl` commands for you when you pass it arguments: - - $ pidp8i start - $ pidp8i stop - $ pidp8i restart - $ pidp8i status -l - -If you run it without arguments, it attaches to the GNU screen(1) -session, just as before. - -The last command above shows that *all* arguments are passed to -`systemctl`, not just the first, so you can pass flags and such. - -The service is still set to start at boot, just as before. - -To disable the service so you can run something else against the -PiDP-8/I front panel hardware instead, such as Deeper Thought 2: - - $ pidp8i stop - $ pidp8i disable - -If you install this release on a system that has the old SysV init -script on it, that service will be disabled and removed before we -install and enable the replacement systemd user service. - -[svinit]: https://en.wikipedia.org/wiki/Init#SysV-style -[systemd]: https://www.freedesktop.org/wiki/Software/systemd/ - +See [its documentation][pitest] for more details. ## License -Copyright © 2016-2019 by Warren Young. This document is licensed under +Copyright © 2016-2020 by Warren Young. This document is licensed under the terms of [the SIMH license][sl]. - -[cprj]: https://tangentsoft.com/pidp8i/ -[sm1]: http://obsolescence.wixsite.com/obsolescence/2016-pidp-8-building-instructions -[sm2]: https://groups.google.com/d/msg/pidp-8/-leCRMKqI1Q/Dy5RiELIFAAJ -[osd]: http://obsolescence.wixsite.com/obsolescence/pidp-8-details -[dt2]: https://github.com/VentureKing/Deeper-Thought-2 -[sdoc]: https://tangentsoft.com/pidp8i/uv/doc/simh/main.pdf -[oprj]: http://obsolescence.wixsite.com/obsolescence/pidp-8 -[test]: https://tangentsoft.com/pidp8i/doc/trunk/doc/pidp8i-test.md -[thro]: https://tangentsoft.com/pidp8i/doc/trunk/README-throttle.md -[mdif]: https://tangentsoft.com/pidp8i/wiki?name=Major+Differences -[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md -[ils]: https://tangentsoft.com/pidp8i/wiki?name=Incandescent+Lamp+Simulator +
+ + +[cprj]: https://tangentsoft.com/pidp8i/ +[sm1]: https://obsolescence.wixsite.com/obsolescence/pidp-8-details#i7g9qvpr +[sm2]: https://groups.google.com/d/msg/pidp-8/-leCRMKqI1Q/Dy5RiELIFAAJ +[osd]: http://obsolescence.wixsite.com/obsolescence/pidp-8-details +[dt2]: https://github.com/VentureKing/Deeper-Thought-2 +[sdoc]: https://tangentsoft.com/pidp8i/uv/doc/simh/main.pdf +[oprj]: http://obsolescence.wixsite.com/obsolescence/pidp-8 +[pitest]: https://tangentsoft.com/pidp8i/doc/trunk/doc/pidp8i-test.md +[thro]: https://tangentsoft.com/pidp8i/doc/trunk/README-throttle.md +[mdif]: https://tangentsoft.com/pidp8i/wiki?name=Major+Differences +[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md +[ils]: https://tangentsoft.com/pidp8i/wiki?name=Incandescent+Lamp+Simulator Index: SIMH-LICENSE.md ================================================================== --- SIMH-LICENSE.md +++ SIMH-LICENSE.md @@ -1,6 +1,6 @@ -Copyright © 2015-2017 by various authors +Copyright © 2015-2020 by various authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, Index: auto.def ================================================================== --- auto.def +++ auto.def @@ -1,10 +1,10 @@ ######################################################################## # auto.def - Configure file for the PiDP-8/I software build system, # based on autosetup. # -# Copyright © 2016-2019 Warren Young +# Copyright © 2016-2020 Warren Young # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, @@ -34,12 +34,14 @@ use cc use cc-lib use cc-shared # Canonicalize some paths which may be relative and generate others from them -set abspfx [file-normalize [get-define prefix]] +set abspfx [file-normalize [get-define prefix]] +set abssrcdir [file-normalize [get-define srcdir]] define ABSPREFIX $abspfx +define ABSSRCDIR $abssrcdir define SHAREDIR "$abspfx/share" define BOOTDIR "$abspfx/share/boot" define MEDIADIR "$abspfx/share/media" # Define options the configure script shares with os8-run. We insert a @@ -52,20 +54,21 @@ # of some of those we do define here, or they aren't passed as-is to the # os8-run script, but instead must be translated. (e.g. --disable-os8-src # suppresses creation of the OS/8 src rk05 by the Makefile.) set os8opts { advent 1 "Adventure" - ba 1 "*.BA BASIC games and demos" + basic-games 1 "BASIC games and demos" cc8 1 "the native OS/8 CC8 compiler" - chess 1 "the CHECKMO-II game of chess" + chekmo 1 "the CHECKMO-II game of chess" crt 1 "CRT-style rubout processing" dcp 1 "the DCP disassembler" - focal69 0 "FOCAL 69" + e8 1 "Emacs-like Editor" + focal69 0 "FOCAL,1969" fortran-ii 1 "FORTRAN II" fortran-iv 1 "FORTRAN IV" init 1 "the OS/8 INIT message" - k12 1 "12-bit Kermit" + kermit-12 1 "12-bit Kermit" macrel 1 "the MACREL assembler" music 0 "*.MU files" uwfocal 1 "U/W FOCAL (only)" vtedit 0 "the TECO VTEDIT setup" } @@ -81,24 +84,27 @@ append alloptions [list os8-$opt=$def => "$prefix $desc in the built OS/8 RK05 image"] \n } # Now define those command line options that belong only to us. append alloptions { - alt-serial-mod => "use GPIO drive scheme suitable for James L-W's serial mod method" - boot-tape-config: => "Boot tape configuration: tc08, or td12k" - boot-tape-version: => "OS/8 version for boot tape, either v3d or v3f" - cc8-cross=1 => "do not build the cc8 cross-compiler on the host" - debug-mode => "create a debug build (default is release)" - lowercase: => "select how lowercase input is to be handled" - no-lamp-simulator => "use simple LED driver instead of incandescent lamp simulator" - os8-focal=1 => "leave FOCAL 69 and U/W FOCAL off the built OS/8 RK05 image" - os8-minimal => "set all --disable-os8-* options, giving minimal OS/8 bin disk" - os8-src=1 => "do not build v3d-src.rk05 from OS/8 source tapes" - savestate => "save simulator state (regs, core, devices) on exit; restore on restart" - serial-mod => "use GPIO drive scheme suitable for Oscar Vermeulen's serial mod method" - throttle: => "override the throttle values in the boot scripts" - usb-automount=1 => "do not automatically mount USB drives for SING_STEP + DF" + alt-serial-mod => "use GPIO drive scheme suitable for James L-W's serial mod method" + boot-tape-config: => "boot tape configuration: tc08, or td12k" + boot-tape-version: => "OS/8 version for boot tape, either v3d or v3f" + cc8-cross=1 => "do not build the cc8 cross-compiler on the host" + debug-mode => "create a debug build (default is release)" + e8-screen-width:=80 => "set E8 terminal width" + e8-screen-height:=24 => "set E8 terminal height" + lowercase: => "select how lowercase input is to be handled" + no-lamp-simulator => "use simple LED driver instead of incandescent lamp simulator" + os8-focal=1 => "leave FOCAL,1969 and U/W FOCAL off the built OS/8 RK05 image" + os8-minimal => "set all --disable-os8-* options, giving minimal OS/8 bin disk" + os8-src=1 => "do not build v3d-src.rk05 from OS/8 source tapes" + savestate => "save simulator state (regs, core, devices) on exit; restore on restart" + serial-mod => "use GPIO drive scheme suitable for Oscar Vermeulen's serial mod method" + throttle: => "override the throttle values in the boot scripts" + usb-automount=1 => "do not automatically mount USB drives for SING_STEP + DF" + use-ock => "boot the OS/8 Combined Kit built from source instead of binary v3d." } options $alloptions # use btc and btv to set defaults because I can't get the documented @@ -118,20 +124,35 @@ foreach {opt def desc} $os8opts { set os8bool($opt) [opt-bool os8-$opt] } set os8bool(src) [opt-bool os8-src] -# Handle meta-options +# Handle OS/8 meta-options set os8min [opt-bool os8-minimal] set os8src [opt-bool os8-src] if {![opt-bool os8-focal]} { set os8bool(focal69) "0" set os8bool(uwfocal) "0" } - # -- do not use opt-bool os8-* below this point # -- use the os8bool() array + +# Handle E8 related options +if {$os8bool(e8)} { + define E8_TU56 bin/e8.tu56 + + set w [opt-val e8-screen-width 80] + set h [opt-val e8-screen-height 24] + + # Have to use Unix line endings for write-if-changed to work + # properly. We convert them to OS/8 CRLFs in the os8-run step. + set defs "DECIMAL\n" + append defs "SCRWD=$w\n" + append defs "SCRHT=$h\n" + append defs "OCTAL" ;# trailing \n added + write-if-changed "src/e8/e8defs.pa" $defs +} # Handle interdependent options if {$os8bool(cc8) && !$os8bool(fortran-ii)} { set $os8bool(fortran-ii) 1 msg-result "WARNING: Re-enabling OS/8 FORTRAN II: OS/8 CC8 requires it." @@ -193,12 +214,30 @@ define OS8_SRC_RK05 bin/v3d-src.rk05 } else { msg-result "Will not build v3d-src.rk05 from OS/8 source tapes." define OS8_SRC_RK05 {} } -# Define our boot image. (Note, we ALWAYS apply patches.) -define OS8_BOOT_DISK "v3d.rk05" + +# Define boot image used in various places. + +# OS8_BASELINE is used at the lowest levels of building. +define OS8_BASELINE "v3d-dist.rk05" + +# OS8_TOOLTIME is used by tools, it is the patched version of OS8_BASELINE. +# This enables tools and higher levels of building to work with the +# most up-to-date revisions of system and utilities. +define OS8_TOOLTIME "v3d-patched.rk05" + +# OS8_RUNTIME is what the end user boots. It contains the patched OS and utilies. +# It also contains all configured third party components. +# This boot disk is a choice between v3d, and ock. +# The ock image is built from source using OS8_BASELINE and OS8_TOOLTIME. +if {[opt-bool use-ock]} { + define OS8_RUNTIME "ock.rk05" +} else { + define OS8_RUNTIME "v3d.rk05" +} # Compose our boot tape image name from boot-tape-config and boot-tape-version # Pull defaults from $btc for boot-tape-config, and $btv for boot-tape-version. set btn "$btv-$btc.tu56" @@ -339,16 +378,39 @@ } # Check for headers, functions, etc. whose absence we can work around cc-check-decls __progname cc-check-includes time.h +cc-check-includes pcre.h pcreposix.h cc-check-function-in-lib clock_gettime rt cc-check-functions clock_nanosleep nanosleep usleep cc-check-functions sched_yield cc-with {-includes signal.h} { cc-check-types sighandler_t sig_t } + +# Check for libraspberrypi-dev stuff +set old_LIBS [get-define LIBS] ;# don't want LIBS modded directly +if {![file isdirectory "/opt/vc"]} { + msg-result "WARNING: Not building on a Pi or libraspberrypi-dev not installed!" + define PI_CFLAGS "" + define PI_LFLAGS "" + define PI_LIBS "" +} elseif {![cc-with {-cflags "-L/opt/vc/lib"} { + cc-check-function-in-lib bcm_host_get_peripheral_address bcm_host + }]} { + user-error "Found /opt/vc but cannot link to -lbcm_host!" +} elseif {![cc-with {-cflags "-I/opt/vc/include"} { + cc-check-includes bcm_host.h + }]} { + user-error "Found /opt/vc but cannot #include bcm_host.h!" +} else { + define PI_CFLAGS "-I/opt/vc/include" + define PI_LFLAGS "-L/opt/vc/lib" + define PI_LIBS "-lbcm_host" +} +define LIBS $old_LIBS # Ensure we have the libncurses development files installed here, else # pidp8i-test won't build. if {![cc-check-includes curses.h]} { user-error "Could not find curses.h. Try installing libncurses-dev." @@ -445,42 +507,57 @@ catch {exec hostname} host set user $::env(USER) define BUILDUSER "$user@$host" define BUILDTS [clock format [clock seconds] -format "%Y.%m.%d at %T %Z"] -# The os8-run script requires Python and some non-core modules. -set status [catch {exec python -c exit} result] -if {$status != 0} { - user-error "Python 2 does not appear to be installed here. It is required." -} -msg-result "Python 2 is installed here." -set status [catch {exec python -c "import pexpect" 2> /dev/null} result] -if {$status != 0} { - set msg "The Python pexpect module is not installed here. Fix with\n\n" - append msg " sudo apt install python-pip\n" - append msg " sudo pip install pexpect\n" - append msg "\nOR:\n" - append msg "\n sudo easy_install pexpect\n" - append msg "\nOR:\n" - append msg "\n sudo apt install python-pexpect\n" - user-error $msg -} -msg-result "Python module pexpect is installed here." -set status [catch {exec python -c "import pkg_resources" 2> /dev/null} result] -if {$status != 0} { - set msg "The Python pkg_resources module is not installed here. Fix with\n" - append msg "\n sudo pip install pkg_resources\n" - append msg "\nOR:\n" - append msg "\n sudo easy_install pkg_resources\n" - append msg "\nOR:\n" - append msg "\n sudo apt install python-pkg-resources\n" - user-error $msg -} -msg-result "Python module pkg_resources is installed here." +# The os8-run script requires Python 2 or 3 and some non-core modules. +set status [catch {exec python3 -c exit} result] +if {$status == 0} { + set pyver 3 + set pycmd "python3" +} else { + set status [catch {exec python2 -c exit} result] + if {$status == 0} { + set pyver 2 + set pycmd "python2" + } else { + set status [catch {exec python -c exit} result] + if {$status == 0} { + set status [catch {exec python --version | grep -q 'Version 2'} result] + set pyver [expr $status == 0 ? 2 : 3] + set pycmd "python" + } + } +} +if {$pyver == ""} { + user-error "Python does not appear to be installed here. It is required." +} +define PYCMD $pycmd +define PYVER $pyver +msg-result "Python $pyver is installed here as '$pycmd'." +foreach mfull {pexpect pkg_resources pyyaml} { + set mshort [regsub "py" $mfull ""] + set mapt [regsub "_" $mshort "-"] + set test "import $mshort" + set status [catch {exec $pycmd -c $test 2> /dev/null} result] + if {$status != 0} { + set msg "The Python $mfull module is not installed here. Fix with\n\n" + append msg " sudo apt install $pycmd-pip$pyver\n" + append msg " pip$pyver install --user $mfull\n" + append msg "\nOR on Debian type systems:\n\n" + append msg " sudo apt install $pycmd-$mapt\n" + user-error $msg + } + msg-result "Found Python module $mfull." +} # Check for Perl and that it can run the test corpus builder. Not fatal # if it can't, since only developers and deep testers need it. +# +# We generate os8-run early here because test-os8-run requires it. We +# have a chicken-and-egg on initial configure in a clean tree otherwise. +make-template bin/os8-run.in set status [catch {exec perl -e exit} result] if {$status == 0} { set status [catch {exec perl -c "[get-define srcdir]/tools/test-os8-run" 2> /dev/null} result] if {$status == 0} { set status [catch {exec lz4 -h 2> /dev/null} result] @@ -527,10 +604,33 @@ msg-result $result } else { user-error "Failed to generate autodependency rules: $result!" } +# Create file symlinks. Fossil can store these for us, but its +# allow-symlinks setting is off by default for belt-and-suspenders +# security reasons, so if we make use of it, we complicate the +# process for making checkouts on new machines and on existing one +# where this hasn't been set to "1" globally. It's simpler to just +# re-create them at configure time, leaving Fossil to manage only the +# actual files. +proc mklink {subdir name} { + set olddir [pwd] + cd $subdir + if {![file exists $name]} { + set target "../include/$name" + msg-result "Symlinking $name -> $target in $subdir..." + exec ln -s $target $name + } + cd $olddir +} +set base "[get-define srcdir]/src/cc8" +mklink "$base/examples" "libc.h" +mklink "$base/examples" "init.h" +mklink "$base/os8" "libc.h" +mklink "$base/os8" "init.h" + # Write outputs. # # NOTE: If you change the list of files here, change INFILES in # Makefile.in, too. # @@ -543,10 +643,12 @@ make-config-header src/config.h \ -auto {ENABLE_* HAVE_* PACKAGE_* SIZEOF_*} \ -bare {ILS_MODE PCB_*} make-template bin/pidp8i.in make-template bin/os8-cp.in +make-template tools/os8-cmp.in +make-template bin/teco-pi-demo.in make-template boot/common.script.in make-template boot/0.script.in make-template boot/2.script.in make-template boot/3.script.in make-template boot/4.script.in @@ -557,20 +659,73 @@ make-template boot/tss8.script.in make-template etc/pidp8i.service.in make-template etc/sudoers.in make-template etc/usb-mount@.service.in make-template examples/Makefile.in +make-template lib/os8script.py.in make-template lib/pidp8i/__init__.py.in make-template lib/pidp8i/dirs.py.in make-template lib/pidp8i/ips.py.in +make-template lib/simh.py.in +make-template bin/os8pkg.in +make-template tools/os8-progtest.in make-template media/os8/init.tx.in make-template media/os8/3finit.tx.in +make-template media/os8/ock-init.tx.in make-template src/Makefile.in make-template src/cc8/Makefile.in make-template src/cc8/os8/Makefile.in make-template src/pidp8i/gpio-common.c.in make-template src/pidp8i/main.c.in make-template src/SIMH/Makefile.in make-template src/SIMH/PDP8/Makefile.in +make-template tools/simh-bisect.in make-template tools/simh-update.in +foreach f [concat [glob "$builddir/bin/*"] [glob "$builddir/tools/*"]] { + exec chmod +x $f +} + +# Generate the dependencies for packages to build, the install scripts, and +# the list of packages selected to install. +# We need os8pkg and its prereqs first. So this code appears after those make-template lines. +# However, since we build Makefile.in from what is done here, THAT make-template must be later. +if {![file exists "obj/os8pkg"]} { file mkdir "obj/os8pkg" } +set os8pkgs_all "" +set os8pkgs_selected "" +set os8pkgs_selected_names "" +set os8pkgs_testing "" +foreach pspec [glob "$srcdir/pspec/*.pspec"] { + set pkg_name [file rootname [file tail $pspec]] + set obj_base "obj/os8pkg/$pkg_name" + set dep_path "$obj_base.mk" + set test_path "$srcdir/scripts/os8-progtest/${pkg_name}.yml" + set script_path "$obj_base.os8" + set uc_pkg_name [string toupper $pkg_name] + set pkg_bin_var "\$(${uc_pkg_name}_PKG_BIN)" + + if { ![file exists $dep_path] || \ + [file mtime $pspec] > [file mtime $dep_path] || \ + [file mtime bin/os8pkg] > [file mtime $dep_path] } { + exec bin/os8pkg deps $pspec + } + + append os8pkgs_all " $pkg_bin_var" + + if {$os8bool($pkg_name)} { + append os8pkgs_selected_names " $pkg_name" + append os8pkgs_selected " $pkg_bin_var" + } + + if {[file exists $test_path]} { + append os8pkgs_testing " $pkg_name" + } +} + +msg-result "Packages selected for OS/8 RUNTIME packs: $os8pkgs_selected_names" +define OS8_PKGS_SELECTED_NAMES $os8pkgs_selected_names +define OS8_PKGS_SELECTED $os8pkgs_selected +define OS8_PKGS_ALL $os8pkgs_all +define OS8_PKGS_TESTING $os8pkgs_testing +msg-result "We can test: $os8pkgs_testing" + +# Must be the last thing we do. make-template Makefile.in -exec chmod +x "$builddir/bin/pidp8i" "$builddir/tools/simh-update" "$builddir/bin/os8-cp" DELETED autosetup/Makefile Index: autosetup/Makefile ================================================================== --- autosetup/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# This is a convenience Makefile to do a few admin tasks -all: - @echo "Try 'make reference' or './autosetup --help'" - -VERSION := $(shell ./autosetup --version) - -dist: clean - @./autosetup --install=tmp/autosetup-$(VERSION) >/dev/null - @tar -C tmp -czf autosetup-$(VERSION).tar.gz autosetup-$(VERSION) - @rm -rf tmp - @echo Created autosetup-$(VERSION).tar.gz - -PAGER ?= less - -help: - ./autosetup --help - -ref reference: - ./autosetup --reference - -html: - ./autosetup --reference=asciidoc | asciidoc -o autosetup-reference.html - - -# Both tclsh8.5 and tclsh8.6 are required to run the top level test suite -test: - @make -C testsuite test subdirtest - @make -C testsuite autosetup_tclsh=tclsh8.6 test subdirtest - @make -C testsuite autosetup_tclsh=tclsh8.5 test subdirtest Index: autosetup/README.autosetup ================================================================== --- autosetup/README.autosetup +++ autosetup/README.autosetup @@ -1,6 +1,6 @@ -README.autosetup created by autosetup v0.6.9 +README.autosetup created by autosetup v0.7.0+ This is the autosetup directory for a local install of autosetup. It contains autosetup, support files and loadable modules. *.tcl files in this directory are optional modules which DELETED autosetup/README.autosetup-lib Index: autosetup/README.autosetup-lib ================================================================== --- autosetup/README.autosetup-lib +++ /dev/null @@ -1,15 +0,0 @@ -This README documents the 'lib' directory in the autosetup source repository. - -*.tcl files in this directory are optional modules which -can be loaded with the 'use' directive. - -Files named *.auto are auto-load modules. - -Modules which are publically documented (those that contain @synopsis: ...), and auto-load modules are installed -stand-alone in a local autosetup installation to facilitate understanding by autosetup -end-users. - -All other modules are private/internal and are combined with the -main autosetup script when installed. - -A system-installed version of autosetup (--sysinstall) contains all modules. DELETED autosetup/README.md Index: autosetup/README.md ================================================================== --- autosetup/README.md +++ /dev/null @@ -1,52 +0,0 @@ -From the autosetup v0.6.2 User Manual... -======================================== - -autosetup is a tool, similar to autoconf, to configure a build system for -the appropriate environment, according to the system capabilities and the user -configuration. - -autosetup is designed to be light-weight, fast, simple and flexible. - -Notable features include: - - * Easily check for headers, functions, types for C/C++ - * Easily support user configuration options - * Can generate files based on templates, such as Makefile.in => Makefile - * Can generate header files based on checked features - * Excellent support for cross compilation - * Replacement for autoconf in many situations - * Runs with either Tcl 8.5+, Jim Tcl or just a C compiler (using the - included Jim Tcl source code!) - * autosetup is intended to be distributed with projects - no version - issues - -autosetup is particularly targeted towards building C/C++ applications on Unix -systems, however it can be extended for other environments as needed. - -autosetup is *not*: - - * A build system - * A replacement for automake - * Intended to replace all possible uses of autoconf - -Try: ./autosetup --help or ./autosetup --reference - -Or view the manual on github at: - - - -Quick Start ------------ - -To install autosetup into your project, 'cd' to the top level -of your project and run: - - <path-to-autosetup>/autosetup --install - -Once autosetup is installed, create auto.def, run: - - ./configure - -To migrate an autoconf-enabled project to autosetup: - - <path-to-autosetup>/migrate-autoconf DELETED autosetup/TODO Index: autosetup/TODO ================================================================== --- autosetup/TODO +++ /dev/null @@ -1,15 +0,0 @@ -Wed 15 Dec 2010 07:31:39 EST ----------------------------- - -Expand the examples - -Have 'autosetup --init' generate a typical Makefile.in if one doesn't exist. - -autosetup should have a "meta-parse" phase to check that auto.def -includes modules before options, and has an options section. - -Consider if we can get away without config.sub and config.guess. -Projects which need them could provide their own. -Many projects do not. - -Unit tests. DELETED autosetup/asciidoc-formatting.tcl Index: autosetup/asciidoc-formatting.tcl ================================================================== --- autosetup/asciidoc-formatting.tcl +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module which provides text formatting -# asciidoc format - -use formatting - -proc para {text} { - regsub -all "\[ \t\n\]+" [string trim $text] " " -} -proc title {text} { - underline [para $text] = - nl -} -proc p {text} { - puts [para $text] - nl -} -proc code {text} { - foreach line [parse_code_block $text] { - puts " $line" - } - nl -} -proc codelines {lines} { - foreach line $lines { - puts " $line" - } - nl -} -proc nl {} { - puts "" -} -proc underline {text char} { - regexp "^(\[ \t\]*)(.*)" $text -> indent words - puts $text - puts $indent[string repeat $char [string length $words]] -} -proc section {text} { - underline "[para $text]" - - nl -} -proc subsection {text} { - underline "$text" ~ - nl -} -proc bullet {text} { - puts "* [para $text]" -} -proc indent {text} { - puts " :: " - puts [para $text] -} -proc defn {first args} { - set sep "" - if {$first ne ""} { - puts "${first}::" - } else { - puts " :: " - } - set defn [string trim [join $args \n]] - regsub -all "\n\n" $defn "\n ::\n" defn - puts $defn -} Index: autosetup/autosetup ================================================================== --- autosetup/autosetup +++ autosetup/autosetup @@ -3,11 +3,12 @@ # All rights reserved # vim:se syntax=tcl: # \ dir=`dirname "$0"`; exec "`$dir/autosetup-find-tclsh`" "$0" "$@" -set autosetup(version) 0.6.9 +# Note that the version has a trailing + on unreleased versions +set autosetup(version) 0.7.0+ # Can be set to 1 to debug early-init problems set autosetup(debug) [expr {"--debug" in $argv}] ################################################################## @@ -90,17 +91,17 @@ # We simply parse anything that looks like an option set autosetup(getopt) [getopt argv] #"=Core Options:" options-add { - help:=local => "display help and options. Optionally specify a module name, such as --help=system" + help:=all => "display help and options. Optional: module name, such as --help=system" licence license => "display the autosetup license" - version => "display the version of autosetup" + version => "display the version of autosetup" ref:=text manual:=text reference:=text => "display the autosetup command reference. 'text', 'wiki', 'asciidoc' or 'markdown'" - debug => "display debugging output as autosetup runs" - install:=. => "install autosetup to the current or given directory" + debug => "display debugging output as autosetup runs" + install:=. => "install autosetup to the current or given directory" } if {$autosetup(installed)} { # hidden options so we can produce a nice error options-add { sysinstall:path @@ -201,23 +202,30 @@ } } autosetup_add_dep $autosetup(autodef) - define CONFIGURE_OPTS "" + # Add $argv to CONFIGURE_OPTS, but ignore duplicates and quote if needed + set configure_opts {} foreach arg $autosetup(argv) { - define-append CONFIGURE_OPTS [quote-if-needed $arg] + set quoted [quote-if-needed $arg] + # O(n^2), but n will be small + if {$quoted ni $configure_opts} { + lappend configure_opts $quoted + } } + define CONFIGURE_OPTS [join $configure_opts] define AUTOREMAKE [file-normalize $autosetup(exe)] define-append AUTOREMAKE [get-define CONFIGURE_OPTS] # Log how we were invoked configlog "Invoked as: [getenv WRAPPER $::argv0] [quote-argv $autosetup(argv)]" + configlog "Tclsh: [info nameofexecutable]" - # Note that auto.def is *not* loaded in the global scope - source $autosetup(autodef) + # Load auto.def as module "auto.def" + autosetup_load_module auto.def source $autosetup(autodef) # Could warn here if options {} was not specified show-notices @@ -338,12 +346,12 @@ } if {![info exists result]} { # No user-specified value. Has options-defaults been set? foreach opt $names { - if {[dict exists $::autosetup(options-defaults) $opt]} { - set result [dict get $autosetup(options-defaults) $opt] + if {[dict exists $::autosetup(optdefault) $opt]} { + set result [dict get $autosetup(optdefault) $opt] } } } if {[info exists result]} { @@ -371,11 +379,11 @@ } # Parse the option definition in $opts and update # ::autosetup(setoptions) and ::autosetup(optionhelp) appropriately # -proc options-add {opts {header ""}} { +proc options-add {opts} { global autosetup # First weed out comment lines set realopts {} foreach line [split $opts \n] { @@ -387,12 +395,11 @@ for {set i 0} {$i < [llength $opts]} {incr i} { set opt [lindex $opts $i] if {[string match =* $opt]} { # This is a special heading - lappend autosetup(optionhelp) $opt "" - set header {} + lappend autosetup(optionhelp) [list $opt $autosetup(module)] continue } unset -nocomplain defaultvalue equal value #puts "i=$i, opt=$opt" @@ -449,12 +456,12 @@ } } else { # String option. lappend autosetup(options) $name - if {$colon eq ":"} { - # Was ":name=default" given? + if {$equal ne "="} { + # Was the option given as "name:value=default"? # If so, set $value to the display name and $defaultvalue to the default # (This is the preferred way to set a default value for a string option) if {[regexp {^([^=]+)=(.*)$} $value -> value defaultvalue]} { dict set autosetup(optdefault) $name $defaultvalue } @@ -464,13 +471,13 @@ if {[dict exists $autosetup(options-defaults) $name]} { # A default was specified with options-defaults, so use it set defaultvalue [dict get $autosetup(options-defaults) $name] dict set autosetup(optdefault) $name $defaultvalue } elseif {![info exists defaultvalue]} { - # For backward compatibility, if ":name" was given, use name as both - # the display text and the default value, but only if the user - # specified the option without the value + # No default value was given by value=default or options-defaults + # so use the value as the default when the plain option with no + # value is given (.e.g. just --opt instead of --opt=value) set defaultvalue $value } if {$equal eq "="} { # String option with optional value @@ -505,39 +512,22 @@ if {[lindex $opts $i+1] eq "=>"} { set desc [lindex $opts $i+2] if {[info exists defaultvalue]} { set desc [string map [list @default@ $defaultvalue] $desc] } - #string match \n* $desc - if {$header ne ""} { - lappend autosetup(optionhelp) $header "" - set header "" - } # A multi-line description - lappend autosetup(optionhelp) $opthelp $desc + lappend autosetup(optionhelp) [list $opthelp $autosetup(module) $desc] incr i 2 } } } # @module-options optionlist # -# Like 'options', but used within a module. +# Deprecated. Simply use 'options' from within a module. proc module-options {opts} { - set header "" - if {$::autosetup(showhelp) > 1 && [llength $opts]} { - set header "Module Options:" - } - options-add $opts $header - - if {$::autosetup(showhelp)} { - # Ensure that the module isn't executed on --help - # We are running under eval or source, so use break - # to prevent further execution - #return -code break -level 2 - return -code break - } + options $opts } proc max {a b} { expr {$a > $b ? $a : $b} } @@ -562,14 +552,21 @@ if {$len} { puts "" } } -proc options-show {} { +# Display options (from $autosetup(optionhelp)) for modules that match +# glob pattern $what +proc options-show {what} { + set local 0 # Determine the max option width set max 0 - foreach {opt desc} $::autosetup(optionhelp) { + foreach help $::autosetup(optionhelp) { + lassign $help opt module desc + if {![string match $what $module]} { + continue + } if {[string match =* $opt] || [string match \n* $desc]} { continue } set max [max $max [string length $opt]] } @@ -578,17 +575,27 @@ catch { lassign [exec stty size] rows cols } incr cols -1 # Now output - foreach {opt desc} $::autosetup(optionhelp) { + foreach help $::autosetup(optionhelp) { + lassign $help opt module desc + if {![string match $what $module]} { + continue + } + if {$local == 0 && $module eq "auto.def"} { + puts "Local Options:" + incr local + } if {[string match =* $opt]} { + # Output a special heading line" puts [string range $opt 1 end] continue } puts -nonewline " [format %-${max}s $opt]" if {[string match \n* $desc]} { + # Output a pre-formatted help description as-is puts $desc } else { options-wrap-desc [string trim $desc] $cols " " $indent [expr $max + 2] } } @@ -606,16 +613,20 @@ # # The default is 'name=0', meaning that the option is disabled by default. # If 'name=1' is used to make the option enabled by default, the description should reflect # that with text like "Disable support for ...". # -# An argument option (one which takes a parameter) is of the form: +# An argument option (one which takes a parameter) is of one of the following forms: # -## name:[=]value => "Description of this option" +## name:value => "Description of this option" +## name:value=default => "Description of this option with a default value" +## name:=value => "Description of this option with an optional value" # # If the 'name:value' form is used, the value must be provided with the option (as '--name=myvalue'). -# If the 'name:=value' form is used, the value is optional and the given value is used as the default +# If the 'name:value=default' form is used, the option has the given default value even if not +# specified by the user. +# If the 'name:=value' form is used, the value is optional and the given value is used # if it is not provided. # # The description may contain '@default@', in which case it will be replaced with the default # value for the option (taking into account defaults specified with 'options-defaults'. # @@ -625,23 +636,26 @@ # For example, '--disable-lfs' is an alias for '--disable=largefile': # ## lfs=1 largefile=1 => "Disable large file support" # proc options {optlist} { - # Allow options as a list or args - options-add $optlist "Local Options:" + global autosetup - if {$::autosetup(showhelp)} { - options-show - exit 0 + options-add $optlist + + if {$autosetup(showhelp)} { + # If --help, stop now to show help + return -code break } - # Check for invalid options - if {[opt-bool option-checking]} { - foreach o [dict keys $::autosetup(getopt)] { - if {$o ni $::autosetup(options)} { - user-error "Unknown option --$o" + if {$autosetup(module) eq "auto.def"} { + # Check for invalid options + if {[opt-bool option-checking]} { + foreach o [dict keys $::autosetup(getopt)] { + if {$o ni $::autosetup(options)} { + user-error "Unknown option --$o" + } } } } } @@ -1169,12 +1183,13 @@ foreach m $args { if {[info exists libmodule($m)]} { continue } set libmodule($m) 1 + if {[info exists modsource(${m}.tcl)]} { - automf_load eval $modsource(${m}.tcl) + autosetup_load_module $m eval $modsource(${m}.tcl) } else { set locs [list ${m}.tcl ${m}/init.tcl] set found 0 foreach dir $dirs { foreach loc $locs { @@ -1190,11 +1205,11 @@ } if {$found} { # For the convenience of the "use" source, point to the directory # it is being loaded from set ::usedir [file dirname $source] - automf_load source $source + autosetup_load_module $m source $source autosetup_add_dep $source } else { autosetup-error "use: No such module: $m" } } @@ -1203,23 +1218,28 @@ proc autosetup_load_auto_modules {} { global autosetup modsource # First load any embedded auto modules foreach mod [array names modsource *.auto] { - automf_load eval $modsource($mod) + autosetup_load_module $mod eval $modsource($mod) } # Now any external auto modules foreach file [glob -nocomplain $autosetup(libdir)/*.auto $autosetup(libdir)/*/*.auto] { - automf_load source $file + autosetup_load_module [file tail $file] source $file } } # Load module source in the global scope by executing the given command -proc automf_load {args} { +proc autosetup_load_module {module args} { + global autosetup + set prev $autosetup(module) + set autosetup(module) $module + if {[catch [list uplevel #0 $args] msg opts] ni {0 2 3}} { autosetup-full-error [error-dump $msg $opts $::autosetup(debug)] } + set autosetup(module) $prev } # Initial settings set autosetup(exe) $::argv0 set autosetup(istcl) 1 @@ -1227,10 +1247,11 @@ set autosetup(installed) 0 set autosetup(sysinstall) 0 set autosetup(msg-checking) 0 set autosetup(msg-quiet) 0 set autosetup(inittypes) {} +set autosetup(module) autosetup # Embedded modules are inserted below here set autosetup(installed) 1 set autosetup(sysinstall) 0 # ----- @module asciidoc-formatting.tcl ----- @@ -1432,26 +1453,26 @@ puts "Usage: [file tail $::autosetup(exe)] \[options\] \[settings\]\n" puts "This is [autosetup_version], a build environment \"autoconfigurator\"" puts "See the documentation online at http://msteveb.github.com/autosetup/\n" - if {$what eq "local"} { - if {[file exists $::autosetup(autodef)]} { - # This relies on auto.def having a call to 'options' - # which will display options and quit - source $::autosetup(autodef) - } else { - options-show - } - } else { - incr ::autosetup(showhelp) - if {[catch {use $what}]} { - user-error "Unknown module: $what" - } else { - options-show - } - } + if {$what in {all local}} { + # Need to load auto.def now + if {[file exists $::autosetup(autodef)]} { + # Load auto.def as module "auto.def" + autosetup_load_module auto.def source $::autosetup(autodef) + } + if {$what eq "all"} { + set what * + } else { + set what auto.def + } + } else { + use $what + puts "Options for module $what:" + } + options-show $what exit 0 } proc autosetup_show_license {} { global modsource autosetup Index: autosetup/autosetup-find-tclsh ================================================================== --- autosetup/autosetup-find-tclsh +++ autosetup/autosetup-find-tclsh @@ -1,17 +1,15 @@ #!/bin/sh # Looks for a suitable tclsh or jimsh in the PATH -# If not found, builds a bootstrap jimsh from source -# Prefer $autosetup_tclsh if is set in the environment -d=`dirname "$0"` -{ "$d/jimsh0" "$d/autosetup-test-tclsh"; } 2>/dev/null && exit 0 -PATH="$PATH:$d"; export PATH -for tclsh in $autosetup_tclsh jimsh tclsh tclsh8.5 tclsh8.6; do +# If not found, builds a bootstrap jimsh in current dir from source +# Prefer $autosetup_tclsh if is set in the environment (unless ./jimsh0 works) +d="`dirname "$0"`" +for tclsh in ./jimsh0 $autosetup_tclsh jimsh tclsh tclsh8.5 tclsh8.6 tclsh8.7; do { $tclsh "$d/autosetup-test-tclsh"; } 2>/dev/null && exit 0 done echo 1>&2 "No installed jimsh or tclsh, building local bootstrap jimsh0" for cc in ${CC_FOR_BUILD:-cc} gcc; do - { $cc -o "$d/jimsh0" "$d/jimsh0.c"; } 2>/dev/null || continue - "$d/jimsh0" "$d/autosetup-test-tclsh" && exit 0 + { $cc -o jimsh0 "$d/jimsh0.c"; } 2>/dev/null || continue + ./jimsh0 "$d/autosetup-test-tclsh" && exit 0 done echo 1>&2 "No working C compiler found. Tried ${CC_FOR_BUILD:-cc} and gcc." echo false Index: autosetup/cc-db.tcl ================================================================== --- autosetup/cc-db.tcl +++ autosetup/cc-db.tcl @@ -6,10 +6,10 @@ # The 'cc-db' module provides a knowledge-base of system idiosyncrasies. # In general, this module can always be included. use cc -module-options {} +options {} # openbsd needs sys/types.h to detect some system headers cc-include-needs sys/socket.h sys/types.h cc-include-needs netinet/in.h sys/types.h Index: autosetup/cc-lib.tcl ================================================================== --- autosetup/cc-lib.tcl +++ autosetup/cc-lib.tcl @@ -5,12 +5,10 @@ # # Provides a library of common tests on top of the 'cc' module. use cc -module-options {} - # @cc-check-lfs # # The equivalent of the 'AC_SYS_LARGEFILE' macro. # # defines 'HAVE_LFS' if LFS is available, Index: autosetup/cc-shared.tcl ================================================================== --- autosetup/cc-shared.tcl +++ autosetup/cc-shared.tcl @@ -18,11 +18,11 @@ ## SH_LINKRPATH Format for setting the rpath when linking an executable, %s = path ## SH_LINKFLAGS Flags to use linking an executable which will load shared objects ## LD_LIBRARY_PATH Environment variable which specifies path to shared libraries ## STRIPLIBFLAGS Arguments to strip a dynamic library -module-options {} +options {} # Defaults: gcc on unix define SHOBJ_CFLAGS -fPIC define SHOBJ_LDFLAGS -shared define SH_CFLAGS -fPIC Index: autosetup/cc.tcl ================================================================== --- autosetup/cc.tcl +++ autosetup/cc.tcl @@ -27,11 +27,11 @@ ## CC_FOR_BUILD ## LD use system -module-options {} +options {} # Checks for the existence of the given function by linking # proc cctest_function {function} { cctest -link 1 -declare "extern void $function\(void);" -code "$function\();" @@ -678,15 +678,15 @@ } define CPP [get-env CPP "[get-define CC] -E"] # XXX: Could avoid looking for a C++ compiler until requested -# Note that if CXX isn't found, we just set it to "false". It might not be needed. +# If CXX isn't found, it is set to the empty string. if {[env-is-set CXX]} { define CXX [find-an-executable -required [get-env CXX ""]] } else { - define CXX [find-an-executable [get-define cross]c++ [get-define cross]g++ false] + define CXX [find-an-executable [get-define cross]c++ [get-define cross]g++] } # CXXFLAGS default to CFLAGS if not specified define CXXFLAGS [get-env CXXFLAGS [get-define CFLAGS]] DELETED autosetup/formatting.tcl Index: autosetup/formatting.tcl ================================================================== --- autosetup/formatting.tcl +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module which provides common text formatting - -# This is designed for documenation which looks like: -# code {...} -# or -# code { -# ... -# ... -# } -# In the second case, we need to work out the indenting -# and strip it from all lines but preserve the remaining indenting. -# Note that all lines need to be indented with the same initial -# spaces/tabs. -# -# Returns a list of lines with the indenting removed. -# -proc parse_code_block {text} { - # If the text begins with newline, take the following text, - # otherwise just return the original - if {![regexp "^\n(.*)" $text -> text]} { - return [list [string trim $text]] - } - - # And trip spaces off the end - set text [string trimright $text] - - set min 100 - # Examine each line to determine the minimum indent - foreach line [split $text \n] { - if {$line eq ""} { - # Ignore empty lines for the indent calculation - continue - } - regexp "^(\[ \t\]*)" $line -> indent - set len [string length $indent] - if {$len < $min} { - set min $len - } - } - - # Now make a list of lines with this indent removed - set lines {} - foreach line [split $text \n] { - lappend lines [string range $line $min end] - } - - # Return the result - return $lines -} DELETED autosetup/getopt.tcl Index: autosetup/getopt.tcl ================================================================== --- autosetup/getopt.tcl +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (c) 2006 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Simple getopt module - -# Parse everything out of the argv list which looks like an option -# Everything which doesn't look like an option, or is after --, is left unchanged -# Understands --enable-xxx as a synonym for --xxx to enable the boolean option xxx. -# Understands --disable-xxx to disable the boolean option xxx. -# -# The returned value is a dictionary keyed by option name -# Each value is a list of {type value} ... where type is "bool" or "str". -# The value for a boolean option is 0 or 1. The value of a string option is the value given. -proc getopt {argvname} { - upvar $argvname argv - set nargv {} - - set opts {} - - for {set i 0} {$i < [llength $argv]} {incr i} { - set arg [lindex $argv $i] - - #dputs arg=$arg - - if {$arg eq "--"} { - # End of options - incr i - lappend nargv {*}[lrange $argv $i end] - break - } - - if {[regexp {^--([^=][^=]+)=(.*)$} $arg -> name value]} { - # --name=value - dict lappend opts $name [list str $value] - } elseif {[regexp {^--(enable-|disable-)?([^=]*)$} $arg -> prefix name]} { - if {$prefix in {enable- ""}} { - set value 1 - } else { - set value 0 - } - dict lappend opts $name [list bool $value] - } else { - lappend nargv $arg - } - } - - #puts "getopt: argv=[join $argv] => [join $nargv]" - #array set getopt $opts - #parray getopt - - set argv $nargv - - return $opts -} DELETED autosetup/help.tcl Index: autosetup/help.tcl ================================================================== --- autosetup/help.tcl +++ /dev/null @@ -1,210 +0,0 @@ -# Copyright (c) 2010 WorkWare Systems http://workware.net.au/ -# All rights reserved - -# Module which provides usage, help and the command reference - -proc autosetup_help {what} { - use_pager - - puts "Usage: [file tail $::autosetup(exe)] \[options\] \[settings\]\n" - puts "This is [autosetup_version], a build environment \"autoconfigurator\"" - puts "See the documentation online at http://msteveb.github.com/autosetup/\n" - - if {$what eq "local"} { - if {[file exists $::autosetup(autodef)]} { - # This relies on auto.def having a call to 'options' - # which will display options and quit - source $::autosetup(autodef) - } else { - options-show - } - } else { - incr ::autosetup(showhelp) - if {[catch {use $what}]} { - user-error "Unknown module: $what" - } else { - options-show - } - } - exit 0 -} - -proc autosetup_show_license {} { - global modsource autosetup - use_pager - - if {[info exists modsource(LICENSE)]} { - puts $modsource(LICENSE) - return - } - foreach dir [list $autosetup(libdir) $autosetup(srcdir)] { - set path [file join $dir LICENSE] - if {[file exists $path]} { - puts [readfile $path] - return - } - } - puts "LICENSE not found" -} - -# If not already paged and stdout is a tty, pipe the output through the pager -# This is done by reinvoking autosetup with --nopager added -proc use_pager {} { - if {![opt-bool nopager] && [getenv PAGER ""] ne "" && [isatty? stdin] && [isatty? stdout]} { - if {[catch { - exec [info nameofexecutable] $::argv0 --nopager {*}$::argv |& {*}[getenv PAGER] >@stdout <@stdin 2>@stderr - } msg opts] == 1} { - if {[dict get $opts -errorcode] eq "NONE"} { - # an internal/exec error - puts stderr $msg - exit 1 - } - } - exit 0 - } -} - -# Outputs the autosetup references in one of several formats -proc autosetup_reference {{type text}} { - - use_pager - - switch -glob -- $type { - wiki {use wiki-formatting} - ascii* {use asciidoc-formatting} - md - markdown {use markdown-formatting} - default {use text-formatting} - } - - title "[autosetup_version] -- Command Reference" - - section {Introduction} - - p { - See http://msteveb.github.com/autosetup/ for the online documentation for 'autosetup' - } - - p { - 'autosetup' provides a number of built-in commands which - are documented below. These may be used from 'auto.def' to test - for features, define variables, create files from templates and - other similar actions. - } - - automf_command_reference - - exit 0 -} - -proc autosetup_output_block {type lines} { - if {[llength $lines]} { - switch $type { - section { - section $lines - } - subsection { - subsection $lines - } - code { - codelines $lines - } - p { - p [join $lines] - } - list { - foreach line $lines { - bullet $line - } - nl - } - } - } -} - -# Generate a command reference from inline documentation -proc automf_command_reference {} { - lappend files $::autosetup(prog) - lappend files {*}[lsort [glob -nocomplain $::autosetup(libdir)/*.tcl]] - - # We want to process all non-module files before module files - # and then modules in alphabetical order. - # So examine all files and extract docs into doc($modulename) and doc(_core_) - # - # Each entry is a list of {type data} where $type is one of: section, subsection, code, list, p - # and $data is a string for section, subsection or a list of text lines for other types. - - # XXX: Should commands be in alphabetical order too? Currently they are in file order. - - set doc(_core_) {} - lappend doc(_core_) [list section "Core Commands"] - - foreach file $files { - set modulename [file rootname [file tail $file]] - set current _core_ - set f [open $file] - while {![eof $f]} { - set line [gets $f] - - # Find embedded module names - if {[regexp {^#.*@module ([^ ]*)} $line -> modulename]} { - continue - } - - # Find lines starting with "# @*" and continuing through the remaining comment lines - if {![regexp {^# @(.*)} $line -> cmd]} { - continue - } - - # Synopsis or command? - if {$cmd eq "synopsis:"} { - set current $modulename - lappend doc($current) [list section "Module: $modulename"] - } else { - lappend doc($current) [list subsection $cmd] - } - - set lines {} - set type p - - # Now the description - while {![eof $f]} { - set line [gets $f] - - if {![regexp {^#(#)? ?(.*)} $line -> hash cmd]} { - break - } - if {$hash eq "#"} { - set t code - } elseif {[regexp {^- (.*)} $cmd -> cmd]} { - set t list - } else { - set t p - } - - #puts "hash=$hash, oldhash=$oldhash, lines=[llength $lines], cmd=$cmd" - - if {$t ne $type || $cmd eq ""} { - # Finish the current block - lappend doc($current) [list $type $lines] - set lines {} - set type $t - } - if {$cmd ne ""} { - lappend lines $cmd - } - } - - lappend doc($current) [list $type $lines] - } - close $f - } - - # Now format and output the results - - # _core_ will sort first - foreach module [lsort [array names doc]] { - foreach item $doc($module) { - autosetup_output_block {*}$item - } - } -} DELETED autosetup/init.tcl Index: autosetup/init.tcl ================================================================== --- autosetup/init.tcl +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module to help create auto.def and configure - -proc autosetup_init {type} { - set help 0 - if {$type in {? help}} { - incr help - } elseif {![dict exists $::autosetup(inittypes) $type]} { - puts "Unknown type, --init=$type" - incr help - } - if {$help} { - puts "Use one of the following types (e.g. --init=make)\n" - foreach type [lsort [dict keys $::autosetup(inittypes)]] { - lassign [dict get $::autosetup(inittypes) $type] desc - # XXX: Use the options-show code to wrap the description - puts [format "%-10s %s" $type $desc] - } - return - } - lassign [dict get $::autosetup(inittypes) $type] desc script - - puts "Initialising $type: $desc\n" - - # All initialisations happens in the top level srcdir - cd $::autosetup(srcdir) - - uplevel #0 $script -} - -proc autosetup_add_init_type {type desc script} { - dict set ::autosetup(inittypes) $type [list $desc $script] -} - -# This is for in creating build-system init scripts -# -# If the file doesn't exist, create it containing $contents -# If the file does exist, only overwrite if --force is specified. -# -proc autosetup_check_create {filename contents} { - if {[file exists $filename]} { - if {!$::autosetup(force)} { - puts "I see $filename already exists." - return - } else { - puts "I will overwrite the existing $filename because you used --force." - } - } else { - puts "I don't see $filename, so I will create it." - } - writefile $filename $contents -} DELETED autosetup/install.tcl Index: autosetup/install.tcl ================================================================== --- autosetup/install.tcl +++ /dev/null @@ -1,211 +0,0 @@ -# Copyright (c) 2006-2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module which can install autosetup - -# autosetup(installed)=1 means that autosetup is not running from source -# autosetup(sysinstall)=1 means that autosetup is running from a sysinstall verion -# shared=1 means that we are trying to do a sysinstall. This is only possible from the development source. - -proc autosetup_install {dir {shared 0}} { - if {$shared && $::autosetup(installed)} { - user-error "Can only --sysinstall from development sources" - } - - if {$::autosetup(sysinstall)} { - # This is the sysinstall version, so install just uses references - cd $dir - - puts "[autosetup_version] creating configure to use system-installed autosetup" - autosetup_create_configure 1 - puts "Creating autosetup/README.autosetup" - file mkdir autosetup - autosetup_install_readme autosetup/README.autosetup 1 - return - } - - if {[catch { - if {$shared} { - set target $dir/bin/autosetup - set installedas $target - } else { - if {$dir eq "."} { - set installedas autosetup - } else { - set installedas $dir/autosetup - } - cd $dir - file mkdir autosetup - set target autosetup/autosetup - } - set targetdir [file dirname $target] - file mkdir $targetdir - - set f [open $target w] - - set publicmodules {} - - # First the main script, but only up until "CUT HERE" - set in [open $::autosetup(dir)/autosetup] - while {[gets $in buf] >= 0} { - if {$buf ne "##-- CUT HERE --##"} { - puts $f $buf - continue - } - - # Insert the static modules here - # i.e. those which don't contain @synopsis: - # All modules are inserted if $shared is set - puts $f "set autosetup(installed) 1" - puts $f "set autosetup(sysinstall) $shared" - foreach file [lsort [glob $::autosetup(libdir)/*.{tcl,auto}]] { - set modname [file tail $file] - set ext [file ext $modname] - set buf [readfile $file] - if {!$shared} { - if {$ext eq ".auto" || [string match "*\n# @synopsis:*" $buf]} { - lappend publicmodules $file - continue - } - } - dputs "install: importing lib/[file tail $file]" - puts $f "# ----- @module $modname -----" - puts $f "\nset modsource($modname) \{" - puts $f $buf - puts $f "\}\n" - } - if {$shared} { - foreach {srcname destname} [list $::autosetup(libdir)/README.autosetup-lib README.autosetup \ - $::autosetup(srcdir)/LICENSE LICENSE] { - dputs "install: importing $srcname as $destname" - puts $f "\nset modsource($destname) \\\n[list [readfile $srcname]\n]\n" - } - } - } - close $in - close $f - exec chmod 755 $target - - set installfiles {autosetup-config.guess autosetup-config.sub autosetup-test-tclsh} - set removefiles {} - - if {!$shared} { - autosetup_install_readme $targetdir/README.autosetup 0 - - # Install public modules - foreach file $publicmodules { - set tail [file tail $file] - autosetup_install_file $file $targetdir/$tail - } - lappend installfiles jimsh0.c autosetup-find-tclsh LICENSE - lappend removefiles config.guess config.sub test-tclsh find-tclsh - } else { - lappend installfiles {sys-find-tclsh autosetup-find-tclsh} - } - - # Install support files - foreach fileinfo $installfiles { - if {[llength $fileinfo] == 2} { - lassign $fileinfo source dest - } else { - lassign $fileinfo source - set dest $source - } - autosetup_install_file $::autosetup(dir)/$source $targetdir/$dest - exec chmod 755 $targetdir/$dest - } - - # Remove obsolete files - foreach file $removefiles { - if {[file exists $targetdir/$file]} { - file delete $targetdir/$file - } - } - } error]} { - user-error "Failed to install autosetup: $error" - } - if {$shared} { - set type "system" - } else { - set type "local" - } - puts "Installed $type [autosetup_version] to $installedas" - - if {!$shared} { - # Now create 'configure' if necessary - autosetup_create_configure 0 - } -} - -proc autosetup_create_configure {shared} { - if {[file exists configure]} { - if {!$::autosetup(force)} { - # Could this be an autosetup configure? - if {![string match "*\nWRAPPER=*" [readfile configure]]} { - puts "I see configure, but not created by autosetup, so I won't overwrite it." - puts "Remove it or use --force to overwrite." - return - } - } else { - puts "I will overwrite the existing configure because you used --force." - } - } else { - puts "I don't see configure, so I will create it." - } - if {$shared} { - writefile configure \ -{#!/bin/sh -# Note that WRAPPER is set here purely to detect an autosetup-created script -WRAPPER="-"; "autosetup" "$@" -} - } else { - writefile configure \ -{#!/bin/sh -dir="`dirname "$0"`/autosetup" -WRAPPER="$0"; export WRAPPER; exec "`$dir/autosetup-find-tclsh`" "$dir/autosetup" "$@" -} - } - catch {exec chmod 755 configure} -} - -# Append the contents of $file to filehandle $f -proc autosetup_install_append {f file} { - dputs "install: include $file" - set in [open $file] - puts $f [read $in] - close $in -} - -proc autosetup_install_file {source target} { - dputs "install: $source => $target" - if {![file exists $source]} { - error "Missing installation file '$source'" - } - writefile $target [readfile $source]\n -} - -proc autosetup_install_readme {target sysinstall} { - set readme "README.autosetup created by [autosetup_version]\n\n" - if {$sysinstall} { - append readme \ -{This is the autosetup directory for a system install of autosetup. -Loadable modules can be added here. -} - } else { - append readme \ -{This is the autosetup directory for a local install of autosetup. -It contains autosetup, support files and loadable modules. -} -} - - append readme { -*.tcl files in this directory are optional modules which -can be loaded with the 'use' directive. - -*.auto files in this directory are auto-loaded. - -For more information, see http://msteveb.github.com/autosetup/ -} - dputs "install: autosetup/README.autosetup" - writefile $target $readme -} Index: autosetup/jimsh0.c ================================================================== --- autosetup/jimsh0.c +++ autosetup/jimsh0.c @@ -57,11 +57,11 @@ #define HAVE_SYS_TIME_H #define HAVE_DIRENT_H #define HAVE_UNISTD_H #define HAVE_UMASK #endif -#define JIM_VERSION 77 +#define JIM_VERSION 78 #ifndef JIM_WIN32COMPAT_H #define JIM_WIN32COMPAT_H @@ -127,15 +127,10 @@ DIR *opendir(const char *name); int closedir(DIR *dir); struct dirent *readdir(DIR *dir); -#elif defined(__MINGW32__) - -#include -#define strtod __strtod - #endif #endif #ifdef __cplusplus @@ -373,10 +368,16 @@ struct { void *ptr1; void *ptr2; } twoPtrValue; + struct { + void *ptr; + int int1; + int int2; + } ptrIntValue; + struct { struct Jim_Var *varPtr; unsigned long callFrameId; int global; } varValue; @@ -410,15 +411,10 @@ struct { struct Jim_Obj *varNameObjPtr; struct Jim_Obj *indexObjPtr; } dictSubstValue; - - struct { - void *compre; - unsigned flags; - } regexpValue; struct { int line; int argc; } scriptLineValue; } internalRep; @@ -572,11 +568,11 @@ Jim_Obj *trueObj; Jim_Obj *falseObj; unsigned long referenceNextId; struct Jim_HashTable references; unsigned long lastCollectId; /* reference max Id of the last GC - execution. It's set to -1 while the collection + execution. It's set to ~0 while the collection is running as sentinel to avoid to recursive calls via the [collect] command inside finalizers. */ time_t lastCollectTime; Jim_Obj *stackTrace; @@ -637,11 +633,11 @@ JIM_EXPORT char *Jim_StrDupLen(const char *s, int l); JIM_EXPORT char **Jim_GetEnviron(void); JIM_EXPORT void Jim_SetEnviron(char **env); -JIM_EXPORT int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template); +JIM_EXPORT int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template, int unlink_file); JIM_EXPORT int Jim_Eval(Jim_Interp *interp, const char *script); @@ -845,11 +841,11 @@ JIM_EXPORT int Jim_GetReturnCode (Jim_Interp *interp, Jim_Obj *objPtr, int *intPtr); JIM_EXPORT int Jim_EvalExpression (Jim_Interp *interp, - Jim_Obj *exprObjPtr, Jim_Obj **exprResultPtrPtr); + Jim_Obj *exprObjPtr); JIM_EXPORT int Jim_GetBoolFromExpr (Jim_Interp *interp, Jim_Obj *exprObjPtr, int *boolPtr); JIM_EXPORT int Jim_GetBoolean(Jim_Interp *interp, Jim_Obj *objPtr, @@ -902,11 +898,12 @@ JIM_EXPORT int Jim_InteractivePrompt (Jim_Interp *interp); JIM_EXPORT void Jim_HistoryLoad(const char *filename); JIM_EXPORT void Jim_HistorySave(const char *filename); -JIM_EXPORT char *Jim_HistoryGetline(const char *prompt); +JIM_EXPORT char *Jim_HistoryGetline(Jim_Interp *interp, const char *prompt); +JIM_EXPORT void Jim_HistorySetCompletion(Jim_Interp *interp, Jim_Obj *commandObj); JIM_EXPORT void Jim_HistoryAdd(const char *line); JIM_EXPORT void Jim_HistoryShow(void); JIM_EXPORT int Jim_InitStaticExtensions(Jim_Interp *interp); @@ -1052,24 +1049,101 @@ #ifdef __cplusplus } #endif +#endif +#ifndef JIM_SIGNAL_H +#define JIM_SIGNAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +const char *Jim_SignalId(int sig); + +#ifdef __cplusplus +} +#endif + +#endif +#ifndef JIMIOCOMPAT_H +#define JIMIOCOMPAT_H + + +#include +#include + + +void Jim_SetResultErrno(Jim_Interp *interp, const char *msg); + +int Jim_OpenForWrite(const char *filename, int append); + +int Jim_OpenForRead(const char *filename); + +#if defined(__MINGW32__) + #ifndef STRICT + #define STRICT + #endif + #define WIN32_LEAN_AND_MEAN + #include + #include + #include + #include + + typedef HANDLE pidtype; + #define JIM_BAD_PID INVALID_HANDLE_VALUE + + #define JIM_NO_PID INVALID_HANDLE_VALUE + + + #define WIFEXITED(STATUS) (((STATUS) & 0xff00) == 0) + #define WEXITSTATUS(STATUS) ((STATUS) & 0x00ff) + #define WIFSIGNALED(STATUS) (((STATUS) & 0xff00) != 0) + #define WTERMSIG(STATUS) (((STATUS) >> 8) & 0xff) + #define WNOHANG 1 + + int Jim_Errno(void); + pidtype waitpid(pidtype pid, int *status, int nohang); + + #define HAVE_PIPE + #define pipe(P) _pipe((P), 0, O_NOINHERIT) + +#elif defined(HAVE_UNISTD_H) + #include + #include + #include + #include + + typedef int pidtype; + #define Jim_Errno() errno + #define JIM_BAD_PID -1 + #define JIM_NO_PID 0 + + #ifndef HAVE_EXECVPE + #define execvpe(ARG0, ARGV, ENV) execvp(ARG0, ARGV) + #endif +#endif + #endif int Jim_bootstrapInit(Jim_Interp *interp) { if (Jim_PackageProvide(interp, "bootstrap", "1.0", JIM_ERRMSG)) return JIM_ERR; return Jim_EvalSource(interp, "bootstrap.tcl", 1, "\n" "\n" -"proc package {cmd pkg} {\n" +"proc package {cmd pkg args} {\n" " if {$cmd eq \"require\"} {\n" " foreach path $::auto_path {\n" -" if {[file exists $path/$pkg.tcl]} {\n" -" uplevel #0 [list source $path/$pkg.tcl]\n" +" set pkgpath $path/$pkg.tcl\n" +" if {$path eq \".\"} {\n" +" set pkgpath $pkg.tcl\n" +" }\n" +" if {[file exists $pkgpath]} {\n" +" uplevel #0 [list source $pkgpath]\n" " return\n" " }\n" " }\n" " }\n" "}\n" @@ -1372,10 +1446,17 @@ return JIM_ERR; return Jim_EvalSource(interp, "stdlib.tcl", 1, "\n" "\n" +"if {![exists -command ref]} {\n" +"\n" +" proc ref {args} {{count 0}} {\n" +" format %08x [incr count]\n" +" }\n" +"}\n" +"\n" "\n" "proc lambda {arglist args} {\n" " tailcall proc [ref {} function lambda.finalizer] $arglist {*}$args\n" "}\n" "\n" @@ -1431,10 +1512,17 @@ " }\n" " }\n" " join $lines \\n\n" "}\n" "\n" +"\n" +"\n" +"proc defer {script} {\n" +" upvar jim::defer v\n" +" lappend v $script\n" +"}\n" +"\n" "\n" "\n" "proc errorInfo {msg {stacktrace \"\"}} {\n" " if {$stacktrace eq \"\"} {\n" "\n" @@ -1664,11 +1752,11 @@ "}\n" "\n" "\n" "\n" "proc popen {cmd {mode r}} {\n" -" lassign [socket pipe] r w\n" +" lassign [pipe] r w\n" " try {\n" " if {[string match \"w*\" $mode]} {\n" " lappend cmd <@$r &\n" " set pids [exec {*}$cmd]\n" " $r close\n" @@ -1680,16 +1768,31 @@ " set f $r\n" " }\n" " lambda {cmd args} {f pids} {\n" " if {$cmd eq \"pid\"} {\n" " return $pids\n" +" }\n" +" if {$cmd eq \"getfd\"} {\n" +" $f getfd\n" " }\n" " if {$cmd eq \"close\"} {\n" " $f close\n" "\n" -" foreach p $pids { os.wait $p }\n" -" return\n" +" set retopts {}\n" +" foreach p $pids {\n" +" lassign [wait $p] status - rc\n" +" if {$status eq \"CHILDSTATUS\"} {\n" +" if {$rc == 0} {\n" +" continue\n" +" }\n" +" set msg \"child process exited abnormally\"\n" +" } else {\n" +" set msg \"child killed: received signal\"\n" +" }\n" +" set retopts [list -code error -errorcode [list $status $p $rc] $msg]\n" +" }\n" +" return {*}$retopts\n" " }\n" " tailcall $f $cmd {*}$args\n" " }\n" " } on error {error opts} {\n" " $r close\n" @@ -1709,10 +1812,11 @@ " if {[catch {$channelId pid} pids]} {\n" " return \"\"\n" " }\n" " return $pids\n" "}\n" +"\n" "\n" "\n" "\n" "\n" "\n" @@ -1808,15 +1912,19 @@ #if defined(HAVE_SYS_SOCKET_H) && defined(HAVE_SELECT) && defined(HAVE_NETINET_IN_H) && defined(HAVE_NETDB_H) && defined(HAVE_ARPA_INET_H) #include #include +#include #include #include #ifdef HAVE_SYS_UN_H #include #endif +#define HAVE_SOCKETS +#elif defined (__MINGW32__) + #else #define JIM_ANSIC #endif #if defined(JIM_SSL) @@ -1847,11 +1955,15 @@ #ifndef PF_INET6 #define PF_INET6 0 #endif #endif -#define JimCheckStreamError(interp, af) af->fops->error(af) +#ifdef JIM_ANSIC + +#undef HAVE_PIPE +#undef HAVE_SOCKETPAIR +#endif struct AioFile; typedef struct { @@ -1953,10 +2065,19 @@ } else { Jim_SetResultString(interp, JimAioErrorString(af), -1); } } + +static int JimCheckStreamError(Jim_Interp *interp, AioFile *af) +{ + int ret = af->fops->error(af); + if (ret) { + JimAioSetError(interp, af->filename); + } + return ret; +} static void JimAioDelProc(Jim_Interp *interp, void *privData) { AioFile *af = privData; @@ -2065,10 +2186,20 @@ return NULL; } return af->fp; } + +static int aio_cmd_getfd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + AioFile *af = Jim_CmdPrivData(interp); + + fflush(af->fp); + Jim_SetResultInt(interp, fileno(af->fp)); + + return JIM_OK; +} static int aio_cmd_copy(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); jim_wide count = 0; @@ -2224,11 +2355,11 @@ } static int aio_cmd_close(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { if (argc == 3) { -#if !defined(JIM_ANSIC) && defined(HAVE_SHUTDOWN) +#if defined(HAVE_SOCKETS) && defined(HAVE_SHUTDOWN) static const char * const options[] = { "r", "w", NULL }; enum { OPT_R, OPT_W, }; int option; AioFile *af = Jim_CmdPrivData(interp); @@ -2314,10 +2445,11 @@ } Jim_SetResultInt(interp, (fmode & O_NONBLOCK) ? 1 : 0); return JIM_OK; } #endif + #ifdef HAVE_FSYNC static int aio_cmd_sync(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); @@ -2448,10 +2580,17 @@ "handle ?size?", aio_cmd_copy, 1, 2, + }, + { "getfd", + NULL, + aio_cmd_getfd, + 0, + 0, + }, { "gets", "?var?", aio_cmd_gets, 0, @@ -2622,21 +2761,21 @@ } Jim_IncrRefCount(filename); if (fh == NULL) { -#if !defined(JIM_ANSIC) if (fd >= 0) { +#ifndef JIM_ANSIC fh = fdopen(fd, mode); +#endif } else -#endif fh = fopen(Jim_String(filename), mode); if (fh == NULL) { JimAioSetError(interp, filename); -#if !defined(JIM_ANSIC) +#ifndef JIM_ANSIC if (fd >= 0) { close(fd); } #endif Jim_DecrRefCount(interp, filename); @@ -2646,18 +2785,20 @@ af = Jim_Alloc(sizeof(*af)); memset(af, 0, sizeof(*af)); af->fp = fh; - af->fd = fileno(fh); af->filename = filename; + af->openFlags = openFlags; +#ifndef JIM_ANSIC + af->fd = fileno(fh); #ifdef FD_CLOEXEC if ((openFlags & AIO_KEEPOPEN) == 0) { (void)fcntl(af->fd, F_SETFD, FD_CLOEXEC); } #endif - af->openFlags = openFlags; +#endif af->addr_family = family; af->fops = &stdio_fops; af->ssl = NULL; Jim_CreateCommand(interp, buf, JimAioSubCmdProc, af, JimAioDelProc); @@ -2672,11 +2813,10 @@ const char *hdlfmt, int family, const char *mode[2]) { if (JimMakeChannel(interp, NULL, p[0], filename, hdlfmt, family, mode[0])) { Jim_Obj *objPtr = Jim_NewListObj(interp, NULL, 0); Jim_ListAppendElement(interp, objPtr, Jim_GetResult(interp)); - if (JimMakeChannel(interp, NULL, p[1], filename, hdlfmt, family, mode[1])) { Jim_ListAppendElement(interp, objPtr, Jim_GetResult(interp)); Jim_SetResult(interp, objPtr); return JIM_OK; } @@ -2688,50 +2828,30 @@ JimAioSetError(interp, NULL); return JIM_ERR; } #endif - -int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template) -{ -#ifdef HAVE_MKSTEMP - int fd; - mode_t mask; - Jim_Obj *filenameObj; - - if (filename_template == NULL) { - const char *tmpdir = getenv("TMPDIR"); - if (tmpdir == NULL || *tmpdir == '\0' || access(tmpdir, W_OK) != 0) { - tmpdir = "/tmp/"; - } - filenameObj = Jim_NewStringObj(interp, tmpdir, -1); - if (tmpdir[0] && tmpdir[strlen(tmpdir) - 1] != '/') { - Jim_AppendString(interp, filenameObj, "/", 1); - } - Jim_AppendString(interp, filenameObj, "tcl.tmp.XXXXXX", -1); - } - else { - filenameObj = Jim_NewStringObj(interp, filename_template, -1); - } - - - mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); - fd = mkstemp(filenameObj->bytes); - umask(mask); - if (fd < 0) { - JimAioSetError(interp, filenameObj); - Jim_FreeNewObj(interp, filenameObj); - return -1; - } - - Jim_SetResult(interp, filenameObj); - return fd; -#else - Jim_SetResultString(interp, "platform has no tempfile support", -1); - return -1; -#endif -} +#ifdef HAVE_PIPE +static int JimAioPipeCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + int p[2]; + static const char *mode[2] = { "r", "w" }; + + if (argc != 1) { + Jim_WrongNumArgs(interp, 1, argv, ""); + return JIM_ERR; + } + + if (pipe(p) != 0) { + JimAioSetError(interp, NULL); + return JIM_ERR; + } + + return JimMakeChannelPair(interp, p, argv[0], "aio.pipe%ld", 0, mode); +} +#endif + int Jim_aioInit(Jim_Interp *interp) { if (Jim_PackageProvide(interp, "aio", "1.0", JIM_ERRMSG)) @@ -2740,13 +2860,16 @@ #if defined(JIM_SSL) Jim_CreateCommand(interp, "load_ssl_certs", JimAioLoadSSLCertsCommand, NULL, NULL); #endif Jim_CreateCommand(interp, "open", JimAioOpenCommand, NULL, NULL); -#ifndef JIM_ANSIC +#ifdef HAVE_SOCKETS Jim_CreateCommand(interp, "socket", JimAioSockCommand, NULL, NULL); #endif +#ifdef HAVE_PIPE + Jim_CreateCommand(interp, "pipe", JimAioPipeCommand, NULL, NULL); +#endif JimMakeChannel(interp, stdin, -1, NULL, "stdin", 0, "r"); JimMakeChannel(interp, stdout, -1, NULL, "stdout", 0, "w"); JimMakeChannel(interp, stderr, -1, NULL, "stderr", 0, "w"); @@ -2826,12 +2949,12 @@ #include #endif static void FreeRegexpInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { - regfree(objPtr->internalRep.regexpValue.compre); - Jim_Free(objPtr->internalRep.regexpValue.compre); + regfree(objPtr->internalRep.ptrIntValue.ptr); + Jim_Free(objPtr->internalRep.ptrIntValue.ptr); } static const Jim_ObjType regexpObjType = { "regexp", FreeRegexpInternalRep, @@ -2846,13 +2969,13 @@ const char *pattern; int ret; if (objPtr->typePtr == ®expObjType && - objPtr->internalRep.regexpValue.compre && objPtr->internalRep.regexpValue.flags == flags) { + objPtr->internalRep.ptrIntValue.ptr && objPtr->internalRep.ptrIntValue.int1 == flags) { - return objPtr->internalRep.regexpValue.compre; + return objPtr->internalRep.ptrIntValue.ptr; } @@ -2870,12 +2993,12 @@ } Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = ®expObjType; - objPtr->internalRep.regexpValue.flags = flags; - objPtr->internalRep.regexpValue.compre = compre; + objPtr->internalRep.ptrIntValue.int1 = flags; + objPtr->internalRep.ptrIntValue.ptr = compre; return compre; } int Jim_RegexpCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) @@ -3333,16 +3456,23 @@ # ifndef MAXPATHLEN # define MAXPATHLEN JIM_PATH_LEN # endif -#if defined(__MINGW32__) || defined(_MSC_VER) +#if defined(__MINGW32__) || defined(__MSYS__) || defined(_MSC_VER) #define ISWINDOWS 1 #else #define ISWINDOWS 0 #endif + +#if defined(HAVE_STRUCT_STAT_ST_MTIMESPEC) + #define STAT_MTIME_US(STAT) ((STAT).st_mtimespec.tv_sec * 1000000ll + (STAT).st_mtimespec.tv_nsec / 1000) +#elif defined(HAVE_STRUCT_STAT_ST_MTIM) + #define STAT_MTIME_US(STAT) ((STAT).st_mtim.tv_sec * 1000000ll + (STAT).st_mtim.tv_nsec / 1000) +#endif + static const char *JimGetFileType(int mode) { if (S_ISREG(mode)) { return "file"; @@ -3397,10 +3527,13 @@ AppendStatElement(interp, listObj, "gid", sb->st_gid); AppendStatElement(interp, listObj, "size", sb->st_size); AppendStatElement(interp, listObj, "atime", sb->st_atime); AppendStatElement(interp, listObj, "mtime", sb->st_mtime); AppendStatElement(interp, listObj, "ctime", sb->st_ctime); +#ifdef STAT_MTIME_US + AppendStatElement(interp, listObj, "mtimeus", STAT_MTIME_US(*sb)); +#endif Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, "type", -1)); Jim_ListAppendElement(interp, listObj, Jim_NewStringObj(interp, JimGetFileType((int)sb->st_mode), -1)); if (varName) { @@ -3713,11 +3846,11 @@ return JIM_OK; } static int file_cmd_tempfile(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { - int fd = Jim_MakeTempFile(interp, (argc >= 1) ? Jim_String(argv[0]) : NULL); + int fd = Jim_MakeTempFile(interp, (argc >= 1) ? Jim_String(argv[0]) : NULL, 0); if (fd < 0) { return JIM_ERR; } close(fd); @@ -3830,42 +3963,67 @@ return JIM_ERR; } Jim_SetResultInt(interp, sb.st_atime); return JIM_OK; } + +static int JimSetFileTimes(Jim_Interp *interp, const char *filename, jim_wide us) +{ +#ifdef HAVE_UTIMES + struct timeval times[2]; + + times[1].tv_sec = times[0].tv_sec = us / 1000000; + times[1].tv_usec = times[0].tv_usec = us % 1000000; + + if (utimes(filename, times) != 0) { + Jim_SetResultFormatted(interp, "can't set time on \"%s\": %s", filename, strerror(errno)); + return JIM_ERR; + } + return JIM_OK; +#else + Jim_SetResultString(interp, "Not implemented", -1); + return JIM_ERR; +#endif +} static int file_cmd_mtime(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { struct stat sb; if (argc == 2) { -#ifdef HAVE_UTIMES - jim_wide newtime; - struct timeval times[2]; - - if (Jim_GetWide(interp, argv[1], &newtime) != JIM_OK) { - return JIM_ERR; - } - - times[1].tv_sec = times[0].tv_sec = newtime; - times[1].tv_usec = times[0].tv_usec = 0; - - if (utimes(Jim_String(argv[0]), times) != 0) { - Jim_SetResultFormatted(interp, "can't set time on \"%#s\": %s", argv[0], strerror(errno)); - return JIM_ERR; - } -#else - Jim_SetResultString(interp, "Not implemented", -1); - return JIM_ERR; -#endif + jim_wide secs; + if (Jim_GetWide(interp, argv[1], &secs) != JIM_OK) { + return JIM_ERR; + } + return JimSetFileTimes(interp, Jim_String(argv[0]), secs * 1000000); } if (file_stat(interp, argv[0], &sb) != JIM_OK) { return JIM_ERR; } Jim_SetResultInt(interp, sb.st_mtime); return JIM_OK; } + +#ifdef STAT_MTIME_US +static int file_cmd_mtimeus(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + struct stat sb; + + if (argc == 2) { + jim_wide us; + if (Jim_GetWide(interp, argv[1], &us) != JIM_OK) { + return JIM_ERR; + } + return JimSetFileTimes(interp, Jim_String(argv[0]), us); + } + if (file_stat(interp, argv[0], &sb) != JIM_OK) { + return JIM_ERR; + } + Jim_SetResultInt(interp, STAT_MTIME_US(sb)); + return JIM_OK; +} +#endif static int file_cmd_copy(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { return Jim_EvalPrefix(interp, "file copy", argc, argv); } @@ -3986,10 +4144,19 @@ file_cmd_mtime, 1, 2, }, +#ifdef STAT_MTIME_US + { "mtimeus", + "name ?time?", + file_cmd_mtimeus, + 1, + 2, + + }, +#endif { "copy", "?-force? source dest", file_cmd_copy, 2, 3, @@ -4284,87 +4451,26 @@ #else #include #include - -#if defined(__MINGW32__) - - #ifndef STRICT - #define STRICT - #endif - #define WIN32_LEAN_AND_MEAN - #include - #include - - typedef HANDLE fdtype; - typedef HANDLE pidtype; - #define JIM_BAD_FD INVALID_HANDLE_VALUE - #define JIM_BAD_PID INVALID_HANDLE_VALUE - #define JimCloseFd CloseHandle - - #define WIFEXITED(STATUS) 1 - #define WEXITSTATUS(STATUS) (STATUS) - #define WIFSIGNALED(STATUS) 0 - #define WTERMSIG(STATUS) 0 - #define WNOHANG 1 - - static fdtype JimFileno(FILE *fh); - static pidtype JimWaitPid(pidtype pid, int *status, int nohang); - static fdtype JimDupFd(fdtype infd); - static fdtype JimOpenForRead(const char *filename); - static FILE *JimFdOpenForRead(fdtype fd); - static int JimPipe(fdtype pipefd[2]); - static pidtype JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, - fdtype inputId, fdtype outputId, fdtype errorId); - static int JimErrno(void); -#else - #include - #include - #include - #include - - typedef int fdtype; - typedef int pidtype; - #define JimPipe pipe - #define JimErrno() errno - #define JIM_BAD_FD -1 - #define JIM_BAD_PID -1 - #define JimFileno fileno - #define JimReadFd read - #define JimCloseFd close - #define JimWaitPid waitpid - #define JimDupFd dup - #define JimFdOpenForRead(FD) fdopen((FD), "r") - #define JimOpenForRead(NAME) open((NAME), O_RDONLY, 0) - - #ifndef HAVE_EXECVPE - #define execvpe(ARG0, ARGV, ENV) execvp(ARG0, ARGV) - #endif -#endif - -static const char *JimStrError(void); +#include + +struct WaitInfoTable; + static char **JimOriginalEnviron(void); static char **JimSaveEnv(char **env); static void JimRestoreEnv(char **env); static int JimCreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, - pidtype **pidArrayPtr, fdtype *inPipePtr, fdtype *outPipePtr, fdtype *errFilePtr); -static void JimDetachPids(Jim_Interp *interp, int numPids, const pidtype *pidPtr); + pidtype **pidArrayPtr, int *inPipePtr, int *outPipePtr, int *errFilePtr); +static void JimDetachPids(struct WaitInfoTable *table, int numPids, const pidtype *pidPtr); static int JimCleanupChildren(Jim_Interp *interp, int numPids, pidtype *pidPtr, Jim_Obj *errStrObj); -static fdtype JimCreateTemp(Jim_Interp *interp, const char *contents, int len); -static fdtype JimOpenForWrite(const char *filename, int append); -static int JimRewindFd(fdtype fd); - -static void Jim_SetResultErrno(Jim_Interp *interp, const char *msg) -{ - Jim_SetResultFormatted(interp, "%s: %s", msg, JimStrError()); -} - -static const char *JimStrError(void) -{ - return strerror(JimErrno()); -} +static int Jim_WaitCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv); + +#if defined(__MINGW32__) +static pidtype JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, int inputId, int outputId, int errorId); +#endif static void Jim_RemoveTrailingNewline(Jim_Obj *objPtr) { int len; const char *s = Jim_GetString(objPtr, &len); @@ -4373,14 +4479,14 @@ objPtr->length--; objPtr->bytes[objPtr->length] = '\0'; } } -static int JimAppendStreamToString(Jim_Interp *interp, fdtype fd, Jim_Obj *strObj) +static int JimAppendStreamToString(Jim_Interp *interp, int fd, Jim_Obj *strObj) { char buf[256]; - FILE *fh = JimFdOpenForRead(fd); + FILE *fh = fdopen(fd, "r"); int ret = 0; if (fh == NULL) { return -1; } @@ -4452,63 +4558,58 @@ if (env != original_environ) { Jim_Free(env); } } -#ifndef jim_ext_signal - -const char *Jim_SignalId(int sig) -{ - static char buf[10]; - snprintf(buf, sizeof(buf), "%d", sig); - return buf; -} - -const char *Jim_SignalName(int sig) -{ - return Jim_SignalId(sig); -} -#endif - -static int JimCheckWaitStatus(Jim_Interp *interp, pidtype pid, int waitStatus, Jim_Obj *errStrObj) -{ - Jim_Obj *errorCode; - - if (WIFEXITED(waitStatus) && WEXITSTATUS(waitStatus) == 0) { - return JIM_OK; - } - errorCode = Jim_NewListObj(interp, NULL, 0); - - if (WIFEXITED(waitStatus)) { +static Jim_Obj *JimMakeErrorCode(Jim_Interp *interp, pidtype pid, int waitStatus, Jim_Obj *errStrObj) +{ + Jim_Obj *errorCode = Jim_NewListObj(interp, NULL, 0); + + if (pid == JIM_BAD_PID || pid == JIM_NO_PID) { + Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "NONE", -1)); + Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, (long)pid)); + Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, -1)); + } + else if (WIFEXITED(waitStatus)) { Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, "CHILDSTATUS", -1)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, (long)pid)); Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, WEXITSTATUS(waitStatus))); } else { const char *type; const char *action; + const char *signame; if (WIFSIGNALED(waitStatus)) { type = "CHILDKILLED"; action = "killed"; + signame = Jim_SignalId(WTERMSIG(waitStatus)); } else { type = "CHILDSUSP"; action = "suspended"; + signame = "none"; } Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, type, -1)); if (errStrObj) { Jim_AppendStrings(interp, errStrObj, "child ", action, " by signal ", Jim_SignalId(WTERMSIG(waitStatus)), "\n", NULL); } Jim_ListAppendElement(interp, errorCode, Jim_NewIntObj(interp, (long)pid)); - Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, Jim_SignalId(WTERMSIG(waitStatus)), -1)); - Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, Jim_SignalName(WTERMSIG(waitStatus)), -1)); + Jim_ListAppendElement(interp, errorCode, Jim_NewStringObj(interp, signame, -1)); } - Jim_SetGlobalVariableStr(interp, "errorCode", errorCode); + return errorCode; +} + +static int JimCheckWaitStatus(Jim_Interp *interp, pidtype pid, int waitStatus, Jim_Obj *errStrObj) +{ + if (WIFEXITED(waitStatus) && WEXITSTATUS(waitStatus) == 0) { + return JIM_OK; + } + Jim_SetGlobalVariableStr(interp, "errorCode", JimMakeErrorCode(interp, pid, waitStatus, errStrObj)); return JIM_ERR; } @@ -4516,15 +4617,17 @@ { pidtype pid; int status; int flags; }; + struct WaitInfoTable { struct WaitInfo *info; int size; int used; + int refcount; }; #define WI_DETACHED 2 @@ -4532,32 +4635,53 @@ static void JimFreeWaitInfoTable(struct Jim_Interp *interp, void *privData) { struct WaitInfoTable *table = privData; - Jim_Free(table->info); - Jim_Free(table); + if (--table->refcount == 0) { + Jim_Free(table->info); + Jim_Free(table); + } } static struct WaitInfoTable *JimAllocWaitInfoTable(void) { struct WaitInfoTable *table = Jim_Alloc(sizeof(*table)); table->info = NULL; table->size = table->used = 0; + table->refcount = 1; return table; } + +static int JimWaitRemove(struct WaitInfoTable *table, pidtype pid) +{ + int i; + + + for (i = 0; i < table->used; i++) { + if (pid == table->info[i].pid) { + if (i != table->used - 1) { + table->info[i] = table->info[table->used - 1]; + } + table->used--; + return 0; + } + } + return -1; +} static int Jim_ExecCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { - fdtype outputId; - fdtype errorId; + int outputId; + int errorId; pidtype *pidPtr; int numPids, result; int child_siginfo = 1; Jim_Obj *childErrObj; Jim_Obj *errStrObj; + struct WaitInfoTable *table = Jim_CmdPrivData(interp); if (argc > 1 && Jim_CompareStringImmediate(interp, argv[argc - 1], "&")) { Jim_Obj *listObj; int i; @@ -4570,11 +4694,11 @@ listObj = Jim_NewListObj(interp, NULL, 0); for (i = 0; i < numPids; i++) { Jim_ListAppendElement(interp, listObj, Jim_NewIntObj(interp, (long)pidPtr[i])); } Jim_SetResult(interp, listObj); - JimDetachPids(interp, numPids, pidPtr); + JimDetachPids(table, numPids, pidPtr); Jim_Free(pidPtr); return JIM_OK; } numPids = @@ -4587,11 +4711,11 @@ result = JIM_OK; errStrObj = Jim_NewStringObj(interp, "", 0); - if (outputId != JIM_BAD_FD) { + if (outputId != -1) { if (JimAppendStreamToString(interp, outputId, errStrObj) < 0) { result = JIM_ERR; Jim_SetResultErrno(interp, "error reading from output pipe"); } } @@ -4602,13 +4726,13 @@ if (JimCleanupChildren(interp, numPids, pidPtr, childErrObj) != JIM_OK) { result = JIM_ERR; } - if (errorId != JIM_BAD_FD) { + if (errorId != -1) { int ret; - JimRewindFd(errorId); + lseek(errorId, 0, SEEK_SET); ret = JimAppendStreamToString(interp, errorId, errStrObj); if (ret < 0) { Jim_SetResultErrno(interp, "error reading from error pipe"); result = JIM_ERR; } @@ -4630,10 +4754,54 @@ Jim_SetResult(interp, errStrObj); return result; } + +static pidtype JimWaitForProcess(struct WaitInfoTable *table, pidtype pid, int *statusPtr) +{ + if (JimWaitRemove(table, pid) == 0) { + + waitpid(pid, statusPtr, 0); + return pid; + } + + + return JIM_BAD_PID; +} + +static void JimDetachPids(struct WaitInfoTable *table, int numPids, const pidtype *pidPtr) +{ + int j; + + for (j = 0; j < numPids; j++) { + + int i; + for (i = 0; i < table->used; i++) { + if (pidPtr[j] == table->info[i].pid) { + table->info[i].flags |= WI_DETACHED; + break; + } + } + } +} + +static int JimGetChannelFd(Jim_Interp *interp, const char *name) +{ + Jim_Obj *objv[2]; + + objv[0] = Jim_NewStringObj(interp, name, -1); + objv[1] = Jim_NewStringObj(interp, "getfd", -1); + + if (Jim_EvalObjVector(interp, 2, objv) == JIM_OK) { + jim_wide fd; + if (Jim_GetWide(interp, Jim_GetResult(interp), &fd) == JIM_OK) { + return fd; + } + } + return -1; +} static void JimReapDetachedPids(struct WaitInfoTable *table) { struct WaitInfo *waitPtr; int count; @@ -4646,11 +4814,11 @@ waitPtr = table->info; dest = 0; for (count = table->used; count > 0; waitPtr++, count--) { if (waitPtr->flags & WI_DETACHED) { int status; - pidtype pid = JimWaitPid(waitPtr->pid, &status, WNOHANG); + pidtype pid = waitpid(waitPtr->pid, &status, WNOHANG); if (pid == waitPtr->pid) { table->used--; continue; } @@ -4660,66 +4828,62 @@ } dest++; } } -static pidtype JimWaitForProcess(struct WaitInfoTable *table, pidtype pid, int *statusPtr) -{ - int i; - - - for (i = 0; i < table->used; i++) { - if (pid == table->info[i].pid) { - - JimWaitPid(pid, statusPtr, 0); - - - if (i != table->used - 1) { - table->info[i] = table->info[table->used - 1]; - } - table->used--; - return pid; - } - } - - - return JIM_BAD_PID; -} - -static void JimDetachPids(Jim_Interp *interp, int numPids, const pidtype *pidPtr) -{ - int j; +static int Jim_WaitCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ struct WaitInfoTable *table = Jim_CmdPrivData(interp); - - for (j = 0; j < numPids; j++) { - - int i; - for (i = 0; i < table->used; i++) { - if (pidPtr[j] == table->info[i].pid) { - table->info[i].flags |= WI_DETACHED; - break; - } - } - } -} - -static FILE *JimGetAioFilehandle(Jim_Interp *interp, const char *name) -{ - FILE *fh; - Jim_Obj *fhObj; - - fhObj = Jim_NewStringObj(interp, name, -1); - Jim_IncrRefCount(fhObj); - fh = Jim_AioFilehandle(interp, fhObj); - Jim_DecrRefCount(interp, fhObj); - - return fh; + int nohang = 0; + pidtype pid; + long pidarg; + int status; + Jim_Obj *errCodeObj; + + + if (argc == 1) { + JimReapDetachedPids(table); + return JIM_OK; + } + + if (argc > 1 && Jim_CompareStringImmediate(interp, argv[1], "-nohang")) { + nohang = 1; + } + if (argc != nohang + 2) { + Jim_WrongNumArgs(interp, 1, argv, "?-nohang? ?pid?"); + return JIM_ERR; + } + if (Jim_GetLong(interp, argv[nohang + 1], &pidarg) != JIM_OK) { + return JIM_ERR; + } + + pid = waitpid((pidtype)pidarg, &status, nohang ? WNOHANG : 0); + + errCodeObj = JimMakeErrorCode(interp, pid, status, NULL); + + if (pid != JIM_BAD_PID && (WIFEXITED(status) || WIFSIGNALED(status))) { + + JimWaitRemove(table, pid); + } + Jim_SetResult(interp, errCodeObj); + return JIM_OK; +} + +static int Jim_PidCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) +{ + if (argc != 1) { + Jim_WrongNumArgs(interp, 1, argv, ""); + return JIM_ERR; + } + + Jim_SetResultInt(interp, (jim_wide)getpid()); + return JIM_OK; } static int JimCreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, pidtype **pidArrayPtr, - fdtype *inPipePtr, fdtype *outPipePtr, fdtype *errFilePtr) + int *inPipePtr, int *outPipePtr, int *errFilePtr) { pidtype *pidPtr = NULL; /* Points to malloc-ed array holding all * the pids of child processes. */ int numPids = 0; /* Actual number of processes that exist * at *pidPtr right now. */ @@ -4752,39 +4916,40 @@ */ const char *output = NULL; /* Holds name of output file to pipe to, * or NULL if output goes to stdout/pipe. */ const char *error = NULL; /* Holds name of stderr file to pipe to, * or NULL if stderr goes to stderr/pipe. */ - fdtype inputId = JIM_BAD_FD; - fdtype outputId = JIM_BAD_FD; - fdtype errorId = JIM_BAD_FD; - fdtype lastOutputId = JIM_BAD_FD; - fdtype pipeIds[2]; + int inputId = -1; + int outputId = -1; + int errorId = -1; + int lastOutputId = -1; + int pipeIds[2]; int firstArg, lastArg; /* Indexes of first and last arguments in * current command. */ int lastBar; int i; pidtype pid; char **save_environ; +#ifndef __MINGW32__ + char **child_environ; +#endif struct WaitInfoTable *table = Jim_CmdPrivData(interp); char **arg_array = Jim_Alloc(sizeof(*arg_array) * (argc + 1)); int arg_count = 0; - JimReapDetachedPids(table); - if (inPipePtr != NULL) { - *inPipePtr = JIM_BAD_FD; + *inPipePtr = -1; } if (outPipePtr != NULL) { - *outPipePtr = JIM_BAD_FD; + *outPipePtr = -1; } if (errFilePtr != NULL) { - *errFilePtr = JIM_BAD_FD; + *errFilePtr = -1; } - pipeIds[0] = pipeIds[1] = JIM_BAD_FD; + pipeIds[0] = pipeIds[1] = -1; cmdCount = 1; lastBar = -1; for (i = 0; i < argc; i++) { const char *arg = Jim_String(argv[i]); @@ -4879,130 +5044,141 @@ save_environ = JimSaveEnv(JimBuildEnv(interp)); if (input != NULL) { if (inputFile == FILE_TEXT) { - inputId = JimCreateTemp(interp, input, input_len); - if (inputId == JIM_BAD_FD) { + inputId = Jim_MakeTempFile(interp, NULL, 1); + if (inputId == -1) { + goto error; + } + if (write(inputId, input, input_len) != input_len) { + Jim_SetResultErrno(interp, "couldn't write temp file"); + close(inputId); goto error; } + lseek(inputId, 0L, SEEK_SET); } else if (inputFile == FILE_HANDLE) { + int fd = JimGetChannelFd(interp, input); - FILE *fh = JimGetAioFilehandle(interp, input); - - if (fh == NULL) { + if (fd < 0) { goto error; } - inputId = JimDupFd(JimFileno(fh)); + inputId = dup(fd); } else { - inputId = JimOpenForRead(input); - if (inputId == JIM_BAD_FD) { - Jim_SetResultFormatted(interp, "couldn't read file \"%s\": %s", input, JimStrError()); + inputId = Jim_OpenForRead(input); + if (inputId == -1) { + Jim_SetResultFormatted(interp, "couldn't read file \"%s\": %s", input, strerror(Jim_Errno())); goto error; } } } else if (inPipePtr != NULL) { - if (JimPipe(pipeIds) != 0) { + if (pipe(pipeIds) != 0) { Jim_SetResultErrno(interp, "couldn't create input pipe for command"); goto error; } inputId = pipeIds[0]; *inPipePtr = pipeIds[1]; - pipeIds[0] = pipeIds[1] = JIM_BAD_FD; + pipeIds[0] = pipeIds[1] = -1; } if (output != NULL) { if (outputFile == FILE_HANDLE) { - FILE *fh = JimGetAioFilehandle(interp, output); - if (fh == NULL) { + int fd = JimGetChannelFd(interp, output); + if (fd < 0) { goto error; } - fflush(fh); - lastOutputId = JimDupFd(JimFileno(fh)); + lastOutputId = dup(fd); } else { - lastOutputId = JimOpenForWrite(output, outputFile == FILE_APPEND); - if (lastOutputId == JIM_BAD_FD) { - Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", output, JimStrError()); + lastOutputId = Jim_OpenForWrite(output, outputFile == FILE_APPEND); + if (lastOutputId == -1) { + Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", output, strerror(Jim_Errno())); goto error; } } } else if (outPipePtr != NULL) { - if (JimPipe(pipeIds) != 0) { + if (pipe(pipeIds) != 0) { Jim_SetResultErrno(interp, "couldn't create output pipe"); goto error; } lastOutputId = pipeIds[1]; *outPipePtr = pipeIds[0]; - pipeIds[0] = pipeIds[1] = JIM_BAD_FD; + pipeIds[0] = pipeIds[1] = -1; } if (error != NULL) { if (errorFile == FILE_HANDLE) { if (strcmp(error, "1") == 0) { - if (lastOutputId != JIM_BAD_FD) { - errorId = JimDupFd(lastOutputId); + if (lastOutputId != -1) { + errorId = dup(lastOutputId); } else { error = "stdout"; } } - if (errorId == JIM_BAD_FD) { - FILE *fh = JimGetAioFilehandle(interp, error); - if (fh == NULL) { + if (errorId == -1) { + int fd = JimGetChannelFd(interp, error); + if (fd < 0) { goto error; } - fflush(fh); - errorId = JimDupFd(JimFileno(fh)); + errorId = dup(fd); } } else { - errorId = JimOpenForWrite(error, errorFile == FILE_APPEND); - if (errorId == JIM_BAD_FD) { - Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", error, JimStrError()); + errorId = Jim_OpenForWrite(error, errorFile == FILE_APPEND); + if (errorId == -1) { + Jim_SetResultFormatted(interp, "couldn't write file \"%s\": %s", error, strerror(Jim_Errno())); goto error; } } } else if (errFilePtr != NULL) { - errorId = JimCreateTemp(interp, NULL, 0); - if (errorId == JIM_BAD_FD) { + errorId = Jim_MakeTempFile(interp, NULL, 1); + if (errorId == -1) { goto error; } - *errFilePtr = JimDupFd(errorId); + *errFilePtr = dup(errorId); } pidPtr = Jim_Alloc(cmdCount * sizeof(*pidPtr)); for (i = 0; i < numPids; i++) { pidPtr[i] = JIM_BAD_PID; } for (firstArg = 0; firstArg < arg_count; numPids++, firstArg = lastArg + 1) { int pipe_dup_err = 0; - fdtype origErrorId = errorId; + int origErrorId = errorId; for (lastArg = firstArg; lastArg < arg_count; lastArg++) { - if (arg_array[lastArg][0] == '|') { - if (arg_array[lastArg][1] == '&') { - pipe_dup_err = 1; - } + if (strcmp(arg_array[lastArg], "|") == 0) { + break; + } + if (strcmp(arg_array[lastArg], "|&") == 0) { + pipe_dup_err = 1; break; } } + + if (lastArg == firstArg) { + Jim_SetResultString(interp, "missing command to exec", -1); + goto error; + } + arg_array[lastArg] = NULL; if (lastArg == arg_count) { outputId = lastOutputId; + lastOutputId = -1; } else { - if (JimPipe(pipeIds) != 0) { + if (pipe(pipeIds) != 0) { Jim_SetResultErrno(interp, "couldn't create pipe"); goto error; } outputId = pipeIds[1]; } @@ -5019,33 +5195,59 @@ if (pid == JIM_BAD_PID) { Jim_SetResultFormatted(interp, "couldn't exec \"%s\"", arg_array[firstArg]); goto error; } #else + i = strlen(arg_array[firstArg]); + + child_environ = Jim_GetEnviron(); pid = vfork(); if (pid < 0) { Jim_SetResultErrno(interp, "couldn't fork child process"); goto error; } if (pid == 0) { - if (inputId != -1) dup2(inputId, 0); - if (outputId != -1) dup2(outputId, 1); - if (errorId != -1) dup2(errorId, 2); + if (inputId != -1) { + dup2(inputId, fileno(stdin)); + close(inputId); + } + if (outputId != -1) { + dup2(outputId, fileno(stdout)); + if (outputId != errorId) { + close(outputId); + } + } + if (errorId != -1) { + dup2(errorId, fileno(stderr)); + close(errorId); + } - for (i = 3; (i <= outputId) || (i <= inputId) || (i <= errorId); i++) { - close(i); + if (outPipePtr) { + close(*outPipePtr); + } + if (errFilePtr) { + close(*errFilePtr); + } + if (pipeIds[0] != -1) { + close(pipeIds[0]); + } + if (lastOutputId != -1) { + close(lastOutputId); } (void)signal(SIGPIPE, SIG_DFL); - execvpe(arg_array[firstArg], &arg_array[firstArg], Jim_GetEnviron()); + execvpe(arg_array[firstArg], &arg_array[firstArg], child_environ); + if (write(fileno(stderr), "couldn't exec \"", 15) && + write(fileno(stderr), arg_array[firstArg], i) && + write(fileno(stderr), "\"\n", 2)) { - fprintf(stderr, "couldn't exec \"%s\"\n", arg_array[firstArg]); + } #ifdef JIM_MAINTAINER { static char *const false_argv[2] = {"false", NULL}; execvp(false_argv[0],false_argv); @@ -5070,63 +5272,62 @@ errorId = origErrorId; - if (inputId != JIM_BAD_FD) { - JimCloseFd(inputId); + if (inputId != -1) { + close(inputId); } - if (outputId != JIM_BAD_FD) { - JimCloseFd(outputId); - outputId = JIM_BAD_FD; + if (outputId != -1) { + close(outputId); } inputId = pipeIds[0]; - pipeIds[0] = pipeIds[1] = JIM_BAD_FD; + pipeIds[0] = pipeIds[1] = -1; } *pidArrayPtr = pidPtr; cleanup: - if (inputId != JIM_BAD_FD) { - JimCloseFd(inputId); - } - if (lastOutputId != JIM_BAD_FD) { - JimCloseFd(lastOutputId); - } - if (errorId != JIM_BAD_FD) { - JimCloseFd(errorId); + if (inputId != -1) { + close(inputId); + } + if (lastOutputId != -1) { + close(lastOutputId); + } + if (errorId != -1) { + close(errorId); } Jim_Free(arg_array); JimRestoreEnv(save_environ); return numPids; error: - if ((inPipePtr != NULL) && (*inPipePtr != JIM_BAD_FD)) { - JimCloseFd(*inPipePtr); - *inPipePtr = JIM_BAD_FD; - } - if ((outPipePtr != NULL) && (*outPipePtr != JIM_BAD_FD)) { - JimCloseFd(*outPipePtr); - *outPipePtr = JIM_BAD_FD; - } - if ((errFilePtr != NULL) && (*errFilePtr != JIM_BAD_FD)) { - JimCloseFd(*errFilePtr); - *errFilePtr = JIM_BAD_FD; - } - if (pipeIds[0] != JIM_BAD_FD) { - JimCloseFd(pipeIds[0]); - } - if (pipeIds[1] != JIM_BAD_FD) { - JimCloseFd(pipeIds[1]); + if ((inPipePtr != NULL) && (*inPipePtr != -1)) { + close(*inPipePtr); + *inPipePtr = -1; + } + if ((outPipePtr != NULL) && (*outPipePtr != -1)) { + close(*outPipePtr); + *outPipePtr = -1; + } + if ((errFilePtr != NULL) && (*errFilePtr != -1)) { + close(*errFilePtr); + *errFilePtr = -1; + } + if (pipeIds[0] != -1) { + close(pipeIds[0]); + } + if (pipeIds[1] != -1) { + close(pipeIds[1]); } if (pidPtr != NULL) { for (i = 0; i < numPids; i++) { if (pidPtr[i] != JIM_BAD_PID) { - JimDetachPids(interp, 1, &pidPtr[i]); + JimDetachPids(table, 1, &pidPtr[i]); } } Jim_Free(pidPtr); } numPids = -1; @@ -5154,238 +5355,30 @@ return result; } int Jim_execInit(Jim_Interp *interp) { + struct WaitInfoTable *waitinfo; if (Jim_PackageProvide(interp, "exec", "1.0", JIM_ERRMSG)) return JIM_ERR; #ifdef SIGPIPE (void)signal(SIGPIPE, SIG_IGN); #endif - Jim_CreateCommand(interp, "exec", Jim_ExecCmd, JimAllocWaitInfoTable(), JimFreeWaitInfoTable); + waitinfo = JimAllocWaitInfoTable(); + Jim_CreateCommand(interp, "exec", Jim_ExecCmd, waitinfo, JimFreeWaitInfoTable); + waitinfo->refcount++; + Jim_CreateCommand(interp, "wait", Jim_WaitCommand, waitinfo, JimFreeWaitInfoTable); + Jim_CreateCommand(interp, "pid", Jim_PidCommand, 0, 0); + return JIM_OK; } #if defined(__MINGW32__) -static SECURITY_ATTRIBUTES *JimStdSecAttrs(void) -{ - static SECURITY_ATTRIBUTES secAtts; - - secAtts.nLength = sizeof(SECURITY_ATTRIBUTES); - secAtts.lpSecurityDescriptor = NULL; - secAtts.bInheritHandle = TRUE; - return &secAtts; -} - -static int JimErrno(void) -{ - switch (GetLastError()) { - case ERROR_FILE_NOT_FOUND: return ENOENT; - case ERROR_PATH_NOT_FOUND: return ENOENT; - case ERROR_TOO_MANY_OPEN_FILES: return EMFILE; - case ERROR_ACCESS_DENIED: return EACCES; - case ERROR_INVALID_HANDLE: return EBADF; - case ERROR_BAD_ENVIRONMENT: return E2BIG; - case ERROR_BAD_FORMAT: return ENOEXEC; - case ERROR_INVALID_ACCESS: return EACCES; - case ERROR_INVALID_DRIVE: return ENOENT; - case ERROR_CURRENT_DIRECTORY: return EACCES; - case ERROR_NOT_SAME_DEVICE: return EXDEV; - case ERROR_NO_MORE_FILES: return ENOENT; - case ERROR_WRITE_PROTECT: return EROFS; - case ERROR_BAD_UNIT: return ENXIO; - case ERROR_NOT_READY: return EBUSY; - case ERROR_BAD_COMMAND: return EIO; - case ERROR_CRC: return EIO; - case ERROR_BAD_LENGTH: return EIO; - case ERROR_SEEK: return EIO; - case ERROR_WRITE_FAULT: return EIO; - case ERROR_READ_FAULT: return EIO; - case ERROR_GEN_FAILURE: return EIO; - case ERROR_SHARING_VIOLATION: return EACCES; - case ERROR_LOCK_VIOLATION: return EACCES; - case ERROR_SHARING_BUFFER_EXCEEDED: return ENFILE; - case ERROR_HANDLE_DISK_FULL: return ENOSPC; - case ERROR_NOT_SUPPORTED: return ENODEV; - case ERROR_REM_NOT_LIST: return EBUSY; - case ERROR_DUP_NAME: return EEXIST; - case ERROR_BAD_NETPATH: return ENOENT; - case ERROR_NETWORK_BUSY: return EBUSY; - case ERROR_DEV_NOT_EXIST: return ENODEV; - case ERROR_TOO_MANY_CMDS: return EAGAIN; - case ERROR_ADAP_HDW_ERR: return EIO; - case ERROR_BAD_NET_RESP: return EIO; - case ERROR_UNEXP_NET_ERR: return EIO; - case ERROR_NETNAME_DELETED: return ENOENT; - case ERROR_NETWORK_ACCESS_DENIED: return EACCES; - case ERROR_BAD_DEV_TYPE: return ENODEV; - case ERROR_BAD_NET_NAME: return ENOENT; - case ERROR_TOO_MANY_NAMES: return ENFILE; - case ERROR_TOO_MANY_SESS: return EIO; - case ERROR_SHARING_PAUSED: return EAGAIN; - case ERROR_REDIR_PAUSED: return EAGAIN; - case ERROR_FILE_EXISTS: return EEXIST; - case ERROR_CANNOT_MAKE: return ENOSPC; - case ERROR_OUT_OF_STRUCTURES: return ENFILE; - case ERROR_ALREADY_ASSIGNED: return EEXIST; - case ERROR_INVALID_PASSWORD: return EPERM; - case ERROR_NET_WRITE_FAULT: return EIO; - case ERROR_NO_PROC_SLOTS: return EAGAIN; - case ERROR_DISK_CHANGE: return EXDEV; - case ERROR_BROKEN_PIPE: return EPIPE; - case ERROR_OPEN_FAILED: return ENOENT; - case ERROR_DISK_FULL: return ENOSPC; - case ERROR_NO_MORE_SEARCH_HANDLES: return EMFILE; - case ERROR_INVALID_TARGET_HANDLE: return EBADF; - case ERROR_INVALID_NAME: return ENOENT; - case ERROR_PROC_NOT_FOUND: return ESRCH; - case ERROR_WAIT_NO_CHILDREN: return ECHILD; - case ERROR_CHILD_NOT_COMPLETE: return ECHILD; - case ERROR_DIRECT_ACCESS_HANDLE: return EBADF; - case ERROR_SEEK_ON_DEVICE: return ESPIPE; - case ERROR_BUSY_DRIVE: return EAGAIN; - case ERROR_DIR_NOT_EMPTY: return EEXIST; - case ERROR_NOT_LOCKED: return EACCES; - case ERROR_BAD_PATHNAME: return ENOENT; - case ERROR_LOCK_FAILED: return EACCES; - case ERROR_ALREADY_EXISTS: return EEXIST; - case ERROR_FILENAME_EXCED_RANGE: return ENAMETOOLONG; - case ERROR_BAD_PIPE: return EPIPE; - case ERROR_PIPE_BUSY: return EAGAIN; - case ERROR_PIPE_NOT_CONNECTED: return EPIPE; - case ERROR_DIRECTORY: return ENOTDIR; - } - return EINVAL; -} - -static int JimPipe(fdtype pipefd[2]) -{ - if (CreatePipe(&pipefd[0], &pipefd[1], NULL, 0)) { - return 0; - } - return -1; -} - -static fdtype JimDupFd(fdtype infd) -{ - fdtype dupfd; - pidtype pid = GetCurrentProcess(); - - if (DuplicateHandle(pid, infd, pid, &dupfd, 0, TRUE, DUPLICATE_SAME_ACCESS)) { - return dupfd; - } - return JIM_BAD_FD; -} - -static int JimRewindFd(fdtype fd) -{ - return SetFilePointer(fd, 0, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER ? -1 : 0; -} - -#if 0 -static int JimReadFd(fdtype fd, char *buffer, size_t len) -{ - DWORD num; - - if (ReadFile(fd, buffer, len, &num, NULL)) { - return num; - } - if (GetLastError() == ERROR_HANDLE_EOF || GetLastError() == ERROR_BROKEN_PIPE) { - return 0; - } - return -1; -} -#endif - -static FILE *JimFdOpenForRead(fdtype fd) -{ - return _fdopen(_open_osfhandle((int)fd, _O_RDONLY | _O_TEXT), "r"); -} - -static fdtype JimFileno(FILE *fh) -{ - return (fdtype)_get_osfhandle(_fileno(fh)); -} - -static fdtype JimOpenForRead(const char *filename) -{ - return CreateFile(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, - JimStdSecAttrs(), OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); -} - -static fdtype JimOpenForWrite(const char *filename, int append) -{ - fdtype fd = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, - JimStdSecAttrs(), append ? OPEN_ALWAYS : CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); - if (append && fd != JIM_BAD_FD) { - SetFilePointer(fd, 0, NULL, FILE_END); - } - return fd; -} - -static FILE *JimFdOpenForWrite(fdtype fd) -{ - return _fdopen(_open_osfhandle((int)fd, _O_TEXT), "w"); -} - -static pidtype JimWaitPid(pidtype pid, int *status, int nohang) -{ - DWORD ret = WaitForSingleObject(pid, nohang ? 0 : INFINITE); - if (ret == WAIT_TIMEOUT || ret == WAIT_FAILED) { - - return JIM_BAD_PID; - } - GetExitCodeProcess(pid, &ret); - *status = ret; - CloseHandle(pid); - return pid; -} - -static HANDLE JimCreateTemp(Jim_Interp *interp, const char *contents, int len) -{ - char name[MAX_PATH]; - HANDLE handle; - - if (!GetTempPath(MAX_PATH, name) || !GetTempFileName(name, "JIM", 0, name)) { - return JIM_BAD_FD; - } - - handle = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, JimStdSecAttrs(), - CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, - NULL); - - if (handle == INVALID_HANDLE_VALUE) { - goto error; - } - - if (contents != NULL) { - - FILE *fh = JimFdOpenForWrite(JimDupFd(handle)); - if (fh == NULL) { - goto error; - } - - if (fwrite(contents, len, 1, fh) != 1) { - fclose(fh); - goto error; - } - fseek(fh, 0, SEEK_SET); - fclose(fh); - } - return handle; - - error: - Jim_SetResultErrno(interp, "failed to create temp file"); - CloseHandle(handle); - DeleteFile(name); - return JIM_BAD_FD; -} - static int JimWinFindExecutable(const char *originalName, char fullPath[MAX_PATH]) { int i; static char extensions[][5] = {".exe", "", ".bat"}; @@ -5491,15 +5484,15 @@ } return strObj; } static pidtype -JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, fdtype inputId, fdtype outputId, fdtype errorId) +JimStartWinProcess(Jim_Interp *interp, char **argv, char **env, int inputId, int outputId, int errorId) { STARTUPINFO startInfo; PROCESS_INFORMATION procInfo; - HANDLE hProcess, h; + HANDLE hProcess; char execPath[MAX_PATH]; pidtype pid = JIM_BAD_PID; Jim_Obj *cmdLineObj; char *winenv; @@ -5517,42 +5510,35 @@ startInfo.dwFlags = STARTF_USESTDHANDLES; startInfo.hStdInput = INVALID_HANDLE_VALUE; startInfo.hStdOutput= INVALID_HANDLE_VALUE; startInfo.hStdError = INVALID_HANDLE_VALUE; - if (inputId == JIM_BAD_FD) { - if (CreatePipe(&startInfo.hStdInput, &h, JimStdSecAttrs(), 0) != FALSE) { - CloseHandle(h); - } - } else { - DuplicateHandle(hProcess, inputId, hProcess, &startInfo.hStdInput, - 0, TRUE, DUPLICATE_SAME_ACCESS); - } - if (startInfo.hStdInput == JIM_BAD_FD) { - goto end; - } - - if (outputId == JIM_BAD_FD) { - startInfo.hStdOutput = CreateFile("NUL:", GENERIC_WRITE, 0, - JimStdSecAttrs(), OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - } else { - DuplicateHandle(hProcess, outputId, hProcess, &startInfo.hStdOutput, - 0, TRUE, DUPLICATE_SAME_ACCESS); - } - if (startInfo.hStdOutput == JIM_BAD_FD) { - goto end; - } - - if (errorId == JIM_BAD_FD) { - - startInfo.hStdError = CreateFile("NUL:", GENERIC_WRITE, 0, - JimStdSecAttrs(), OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - } else { - DuplicateHandle(hProcess, errorId, hProcess, &startInfo.hStdError, - 0, TRUE, DUPLICATE_SAME_ACCESS); - } - if (startInfo.hStdError == JIM_BAD_FD) { + if (inputId == -1) { + inputId = _fileno(stdin); + } + DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(inputId), hProcess, &startInfo.hStdInput, + 0, TRUE, DUPLICATE_SAME_ACCESS); + if (startInfo.hStdInput == INVALID_HANDLE_VALUE) { + goto end; + } + + if (outputId == -1) { + outputId = _fileno(stdout); + } + DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(outputId), hProcess, &startInfo.hStdOutput, + 0, TRUE, DUPLICATE_SAME_ACCESS); + if (startInfo.hStdOutput == INVALID_HANDLE_VALUE) { + goto end; + } + + + if (errorId == -1) { + errorId = _fileno(stderr); + } + DuplicateHandle(hProcess, (HANDLE)_get_osfhandle(errorId), hProcess, &startInfo.hStdError, + 0, TRUE, DUPLICATE_SAME_ACCESS); + if (startInfo.hStdError == INVALID_HANDLE_VALUE) { goto end; } if (env == NULL) { @@ -5576,51 +5562,24 @@ pid = procInfo.hProcess; end: Jim_FreeNewObj(interp, cmdLineObj); - if (startInfo.hStdInput != JIM_BAD_FD) { + if (startInfo.hStdInput != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdInput); } - if (startInfo.hStdOutput != JIM_BAD_FD) { + if (startInfo.hStdOutput != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdOutput); } - if (startInfo.hStdError != JIM_BAD_FD) { + if (startInfo.hStdError != INVALID_HANDLE_VALUE) { CloseHandle(startInfo.hStdError); } return pid; } + #else -static int JimOpenForWrite(const char *filename, int append) -{ - return open(filename, O_WRONLY | O_CREAT | (append ? O_APPEND : O_TRUNC), 0666); -} - -static int JimRewindFd(int fd) -{ - return lseek(fd, 0L, SEEK_SET); -} - -static int JimCreateTemp(Jim_Interp *interp, const char *contents, int len) -{ - int fd = Jim_MakeTempFile(interp, NULL); - - if (fd != JIM_BAD_FD) { - unlink(Jim_String(Jim_GetResult(interp))); - if (contents) { - if (write(fd, contents, len) != len) { - Jim_SetResultErrno(interp, "couldn't write temp file"); - close(fd); - return -1; - } - lseek(fd, 0L, SEEK_SET); - } - } - return fd; -} - static char **JimOriginalEnviron(void) { return Jim_GetEnviron(); } @@ -5638,13 +5597,21 @@ } #endif #endif + +#ifdef STRPTIME_NEEDS_XOPEN_SOURCE #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE 500 #endif +#endif + + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif #include #include #include #include @@ -5651,65 +5618,117 @@ #ifdef HAVE_SYS_TIME_H #include #endif + +struct clock_options { + int gmt; + const char *format; +}; + +static int parse_clock_options(Jim_Interp *interp, int argc, Jim_Obj *const *argv, struct clock_options *opts) +{ + static const char * const options[] = { "-gmt", "-format", NULL }; + enum { OPT_GMT, OPT_FORMAT, }; + int i; + + for (i = 0; i < argc; i += 2) { + int option; + if (Jim_GetEnum(interp, argv[i], options, &option, NULL, JIM_ERRMSG | JIM_ENUM_ABBREV) != JIM_OK) { + return JIM_ERR; + } + switch (option) { + case OPT_GMT: + if (Jim_GetBoolean(interp, argv[i + 1], &opts->gmt) != JIM_OK) { + return JIM_ERR; + } + break; + case OPT_FORMAT: + opts->format = Jim_String(argv[i + 1]); + break; + } + } + return JIM_OK; +} static int clock_cmd_format(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char buf[100]; time_t t; - long seconds; + jim_wide seconds; + struct clock_options options = { 0, "%a %b %d %H:%M:%S %Z %Y" }; + struct tm *tm; - const char *format = "%a %b %d %H:%M:%S %Z %Y"; - - if (argc == 2 || (argc == 3 && !Jim_CompareStringImmediate(interp, argv[1], "-format"))) { + if (Jim_GetWide(interp, argv[0], &seconds) != JIM_OK) { + return JIM_ERR; + } + if (argc % 2 == 0) { return -1; } - - if (argc == 3) { - format = Jim_String(argv[2]); + if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { + return JIM_ERR; } - if (Jim_GetLong(interp, argv[0], &seconds) != JIM_OK) { - return JIM_ERR; - } t = seconds; + tm = options.gmt ? gmtime(&t) : localtime(&t); - if (strftime(buf, sizeof(buf), format, localtime(&t)) == 0) { - Jim_SetResultString(interp, "format string too long", -1); + if (tm == NULL || strftime(buf, sizeof(buf), options.format, tm) == 0) { + Jim_SetResultString(interp, "format string too long or invalid time", -1); return JIM_ERR; } Jim_SetResultString(interp, buf, -1); return JIM_OK; } #ifdef HAVE_STRPTIME +static time_t jim_timegm(const struct tm *tm) +{ + int m = tm->tm_mon + 1; + int y = 1900 + tm->tm_year - (m <= 2); + int era = (y >= 0 ? y : y - 399) / 400; + unsigned yoe = (unsigned)(y - era * 400); + unsigned doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + tm->tm_mday - 1; + unsigned doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; + long days = (era * 146097 + (int)doe - 719468); + int secs = tm->tm_hour * 3600 + tm->tm_min * 60 + tm->tm_sec; + + return days * 24 * 60 * 60 + secs; +} + static int clock_cmd_scan(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { char *pt; struct tm tm; - time_t now = time(0); + time_t now = time(NULL); - if (!Jim_CompareStringImmediate(interp, argv[1], "-format")) { + struct clock_options options = { 0, NULL }; + + if (argc % 2 == 0) { + return -1; + } + + if (parse_clock_options(interp, argc - 1, argv + 1, &options) == JIM_ERR) { + return JIM_ERR; + } + if (options.format == NULL) { return -1; } - localtime_r(&now, &tm); - pt = strptime(Jim_String(argv[0]), Jim_String(argv[2]), &tm); + pt = strptime(Jim_String(argv[0]), options.format, &tm); if (pt == 0 || *pt != 0) { Jim_SetResultString(interp, "Failed to parse time according to format", -1); return JIM_ERR; } - Jim_SetResultInt(interp, mktime(&tm)); + Jim_SetResultInt(interp, options.gmt ? jim_timegm(&tm) : mktime(&tm)); return JIM_OK; } #endif @@ -5741,23 +5760,23 @@ return JIM_OK; } static const jim_subcmd_type clock_command_table[] = { - { "seconds", - NULL, - clock_cmd_seconds, - 0, - 0, - - }, { "clicks", NULL, clock_cmd_micros, 0, 0, + }, + { "format", + "seconds ?-format string? ?-gmt boolean?", + clock_cmd_format, + 1, + 5, + }, { "microseconds", NULL, clock_cmd_micros, 0, @@ -5768,27 +5787,27 @@ NULL, clock_cmd_millis, 0, 0, - }, - { "format", - "seconds ?-format format?", - clock_cmd_format, - 1, - 3, - }, #ifdef HAVE_STRPTIME { "scan", - "str -format format", + "str -format format ?-gmt boolean?", clock_cmd_scan, 3, - 3, + 5, }, #endif + { "seconds", + NULL, + clock_cmd_seconds, + 0, + 0, + + }, { NULL } }; int Jim_clockInit(Jim_Interp *interp) { @@ -6198,11 +6217,11 @@ int end; pattern += utf8_tounicode_case(pattern, &start, nocase); if (pattern[0] == '-' && pattern[1]) { - pattern += utf8_tounicode(pattern, &pchar); + pattern++; pattern += utf8_tounicode_case(pattern, &end, nocase); if ((c >= start && c <= end) || (c >= end && c <= start)) { match = 1; @@ -7793,27 +7812,23 @@ char *token; int len; start = pc->tstart; end = pc->tend; - if (start > end) { + len = (end - start) + 1; + if (len < 0) { len = 0; - token = Jim_Alloc(1); - token[0] = '\0'; - } - else { - len = (end - start) + 1; - token = Jim_Alloc(len + 1); - if (pc->tt != JIM_TT_ESC) { - - memcpy(token, start, len); - token[len] = '\0'; - } - else { - - len = JimEscape(token, start, len); - } + } + token = Jim_Alloc(len + 1); + if (pc->tt != JIM_TT_ESC) { + + memcpy(token, start, len); + token[len] = '\0'; + } + else { + + len = JimEscape(token, start, len); } return Jim_NewStringObjNoAlloc(interp, token, len); } @@ -8008,11 +8023,10 @@ if (objPtr->bytes == NULL) { dupPtr->bytes = NULL; } else if (objPtr->length == 0) { - dupPtr->bytes = JimEmptyStringRep; dupPtr->length = 0; dupPtr->typePtr = NULL; return dupPtr; } @@ -8052,24 +8066,21 @@ int Jim_Length(Jim_Obj *objPtr) { if (objPtr->bytes == NULL) { - JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.", objPtr->typePtr->name)); - objPtr->typePtr->updateStringProc(objPtr); + Jim_GetString(objPtr, NULL); } return objPtr->length; } const char *Jim_String(Jim_Obj *objPtr) { if (objPtr->bytes == NULL) { - JimPanic((objPtr->typePtr == NULL, "UpdateStringProc called against typeless value.")); - JimPanic((objPtr->typePtr->updateStringProc == NULL, "UpdateStringProc called against '%s' type.", objPtr->typePtr->name)); - objPtr->typePtr->updateStringProc(objPtr); + Jim_GetString(objPtr, NULL); } return objPtr->bytes; } static void JimSetStringBytes(Jim_Obj *objPtr, const char *str) @@ -8086,23 +8097,34 @@ FreeDictSubstInternalRep, DupDictSubstInternalRep, NULL, JIM_TYPE_NONE, }; + +static void FreeInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *objPtr); +static void DupInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); + +static const Jim_ObjType interpolatedObjType = { + "interpolated", + FreeInterpolatedInternalRep, + DupInterpolatedInternalRep, + NULL, + JIM_TYPE_NONE, +}; static void FreeInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.indexObjPtr); } -static const Jim_ObjType interpolatedObjType = { - "interpolated", - FreeInterpolatedInternalRep, - NULL, - NULL, - JIM_TYPE_NONE, -}; +static void DupInterpolatedInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) +{ + + dupPtr->internalRep = srcPtr->internalRep; + + Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.indexObjPtr); +} static void DupStringInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr); static int SetStringFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr); static const Jim_ObjType stringObjType = { @@ -8166,13 +8188,11 @@ if (len == 0) { objPtr->bytes = JimEmptyStringRep; } else { - objPtr->bytes = Jim_Alloc(len + 1); - memcpy(objPtr->bytes, s, len); - objPtr->bytes[len] = '\0'; + objPtr->bytes = Jim_StrDupLen(s, len); } objPtr->length = len; objPtr->typePtr = NULL; @@ -8456,12 +8476,10 @@ { char *buf; int len; const char *str; - SetStringFromAny(interp, strObjPtr); - str = Jim_GetString(strObjPtr, &len); #ifdef JIM_UTF8 len *= 2; #endif @@ -8474,14 +8492,10 @@ { char *buf; const char *str; int len; - if (strObjPtr->typePtr != &stringObjType) { - SetStringFromAny(interp, strObjPtr); - } - str = Jim_GetString(strObjPtr, &len); #ifdef JIM_UTF8 len *= 2; #endif @@ -8496,13 +8510,11 @@ int len; int c; const char *str; str = Jim_GetString(strObjPtr, &len); - if (len == 0) { - return strObjPtr; - } + #ifdef JIM_UTF8 len *= 2; #endif buf = p = Jim_Alloc(len + 1); @@ -8748,13 +8760,11 @@ { if (objPtr->typePtr == &comparedStringObjType && objPtr->internalRep.ptr == str) { return 1; } else { - const char *objStr = Jim_String(objPtr); - - if (strcmp(str, objStr) != 0) + if (strcmp(str, Jim_String(objPtr)) != 0) return 0; if (objPtr->typePtr != &comparedStringObjType) { Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &comparedStringObjType; @@ -8946,11 +8956,11 @@ t->len = len; t->type = type; t->line = line; } -static int JimCountWordTokens(ParseToken *t) +static int JimCountWordTokens(struct ScriptObj *script, ParseToken *t) { int expand = 1; int count = 0; @@ -8957,10 +8967,17 @@ if (t->type == JIM_TT_STR && !TOKEN_IS_SEP(t[1].type)) { if ((t->len == 1 && *t->token == '*') || (t->len == 6 && strncmp(t->token, "expand", 6) == 0)) { expand = -1; t++; + } + else { + if (script->missing == ' ') { + + script->missing = '}'; + script->linenr = t[1].line; + } } } while (!TOKEN_IS_SEP(t->type)) { @@ -9029,11 +9046,11 @@ while (tokenlist->list[i].type == JIM_TT_SEP) { i++; } - wordtokens = JimCountWordTokens(tokenlist->list + i); + wordtokens = JimCountWordTokens(script, tokenlist->list + i); if (wordtokens == 0) { if (lineargs) { linefirst->type = JIM_TT_LINE; @@ -9102,11 +9119,11 @@ { ScriptObj *script = JimGetScript(interp, scriptObj); if (stateCharPtr) { *stateCharPtr = script->missing; } - return (script->missing == ' '); + return script->missing == ' ' || script->missing == '}'; } static int JimParseCheckMissing(Jim_Interp *interp, int ch) { const char *msg; @@ -9120,10 +9137,13 @@ msg = "unmatched \"[\""; break; case '{': msg = "missing close-brace"; break; + case '}': + msg = "extra characters after close-brace"; + break; case '"': default: msg = "missing quote"; break; } @@ -9259,11 +9279,10 @@ JimDecrCmdRefCount(interp, cmdPtr->prevCmd); } Jim_Free(cmdPtr); } } - static void JimVariablesHTValDestructor(void *interp, void *val) { Jim_DecrRefCount(interp, ((Jim_Var *)val)->objPtr); Jim_Free(val); @@ -9914,19 +9933,16 @@ return result; } int Jim_SetVariableStrWithStr(Jim_Interp *interp, const char *name, const char *val) { - Jim_Obj *nameObjPtr, *valObjPtr; + Jim_Obj *valObjPtr; int result; - nameObjPtr = Jim_NewStringObj(interp, name, -1); valObjPtr = Jim_NewStringObj(interp, val, -1); - Jim_IncrRefCount(nameObjPtr); Jim_IncrRefCount(valObjPtr); - result = Jim_SetVariable(interp, nameObjPtr, valObjPtr); - Jim_DecrRefCount(interp, nameObjPtr); + result = Jim_SetVariableStr(interp, name, valObjPtr); Jim_DecrRefCount(interp, valObjPtr); return result; } int Jim_SetVariableLink(Jim_Interp *interp, Jim_Obj *nameObjPtr, @@ -10235,18 +10251,17 @@ { Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.varNameObjPtr); Jim_DecrRefCount(interp, objPtr->internalRep.dictSubstValue.indexObjPtr); } -void DupDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) -{ - JIM_NOTUSED(interp); - - dupPtr->internalRep.dictSubstValue.varNameObjPtr = - srcPtr->internalRep.dictSubstValue.varNameObjPtr; - dupPtr->internalRep.dictSubstValue.indexObjPtr = srcPtr->internalRep.dictSubstValue.indexObjPtr; - dupPtr->typePtr = &dictSubstObjType; +static void DupDictSubstInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) +{ + + dupPtr->internalRep = srcPtr->internalRep; + + Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.varNameObjPtr); + Jim_IncrRefCount(dupPtr->internalRep.dictSubstValue.indexObjPtr); } static void SetDictSubstFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { @@ -10294,16 +10309,12 @@ return resObjPtr; } static Jim_Obj *JimExpandExprSugar(Jim_Interp *interp, Jim_Obj *objPtr) { - Jim_Obj *resultObjPtr; - - if (Jim_EvalExpression(interp, objPtr, &resultObjPtr) == JIM_OK) { - - resultObjPtr->refCount--; - return resultObjPtr; + if (Jim_EvalExpression(interp, objPtr) == JIM_OK) { + return Jim_GetResult(interp); } return NULL; } @@ -10380,10 +10391,56 @@ Jim_Free(localCommands); } return JIM_OK; } +static int JimInvokeDefer(Jim_Interp *interp, int retcode) +{ + Jim_Obj *objPtr; + + + if (Jim_FindHashEntry(&interp->framePtr->vars, "jim::defer") == NULL) { + return retcode; + } + + objPtr = Jim_GetVariableStr(interp, "jim::defer", JIM_NONE); + + if (objPtr) { + int ret = JIM_OK; + int i; + int listLen = Jim_ListLength(interp, objPtr); + Jim_Obj *resultObjPtr; + + Jim_IncrRefCount(objPtr); + + resultObjPtr = Jim_GetResult(interp); + Jim_IncrRefCount(resultObjPtr); + Jim_SetEmptyResult(interp); + + + for (i = listLen; i > 0; i--) { + + Jim_Obj *scriptObjPtr = Jim_ListGetIndex(interp, objPtr, i - 1); + ret = Jim_EvalObj(interp, scriptObjPtr); + if (ret != JIM_OK) { + break; + } + } + + if (ret == JIM_OK || retcode == JIM_ERR) { + + Jim_SetResult(interp, resultObjPtr); + } + else { + retcode = ret; + } + + Jim_DecrRefCount(interp, resultObjPtr); + Jim_DecrRefCount(interp, objPtr); + } + return retcode; +} #define JIM_FCF_FULL 0 #define JIM_FCF_REUSE 1 static void JimFreeCallFrame(Jim_Interp *interp, Jim_CallFrame *cf, int action) { @@ -10493,10 +10550,12 @@ Jim_Obj *objPtr, *nextObjPtr; for (cf = i->framePtr; cf; cf = cfx) { + + JimInvokeDefer(i, JIM_OK); cfx = cf->parent; JimFreeCallFrame(i, cf, JIM_FCF_FULL); } Jim_DecrRefCount(i, i->emptyObj); @@ -10523,10 +10582,11 @@ printf("\n-------------------------------------\n"); printf("Objects still in the free list:\n"); while (objPtr) { const char *type = objPtr->typePtr ? objPtr->typePtr->name : "string"; + Jim_String(objPtr); if (objPtr->bytes && strlen(objPtr->bytes) > 20) { printf("%p (%d) %-10s: '%.20s...'\n", (void *)objPtr, objPtr->refCount, type, objPtr->bytes); } @@ -10943,12 +11003,10 @@ { double doubleValue; jim_wide wideValue; const char *str; - str = Jim_String(objPtr); - #ifdef HAVE_LONG_LONG #define MIN_INT_IN_DOUBLE -(1LL << 53) #define MAX_INT_IN_DOUBLE -(MIN_INT_IN_DOUBLE + 1) @@ -10958,12 +11016,13 @@ objPtr->typePtr = &coercedDoubleObjType; return JIM_OK; } - else #endif + str = Jim_String(objPtr); + if (Jim_StringToWide(str, &wideValue, 10) == JIM_OK) { Jim_FreeIntRep(interp, objPtr); objPtr->typePtr = &coercedDoubleObjType; objPtr->internalRep.wideValue = wideValue; @@ -11552,11 +11611,15 @@ dst++; } ele[dst] = ele[src]; } - ele[++dst] = ele[src]; + + dst++; + if (dst < listObjPtr->internalRep.listValue.len) { + ele[dst] = ele[src]; + } listObjPtr->internalRep.listValue.len = dst; } @@ -12329,11 +12392,11 @@ "exit", "eval", NULL }; -#define jimReturnCodesSize (sizeof(jimReturnCodes)/sizeof(*jimReturnCodes)) +#define jimReturnCodesSize (sizeof(jimReturnCodes)/sizeof(*jimReturnCodes) - 1) static const Jim_ObjType returnCodeObjType = { "return-code", NULL, NULL, @@ -12382,14 +12445,13 @@ static int JimParseExprNumber(struct JimParserCtx *pc); static int JimParseExprIrrational(struct JimParserCtx *pc); static int JimParseExprBoolean(struct JimParserCtx *pc); - - enum { + JIM_EXPROP_MUL = JIM_TT_EXPR_OP, JIM_EXPROP_DIV, JIM_EXPROP_MOD, @@ -12406,32 +12468,14 @@ JIM_EXPROP_NUMEQ, JIM_EXPROP_NUMNE, JIM_EXPROP_BITAND, JIM_EXPROP_BITXOR, JIM_EXPROP_BITOR, - - JIM_EXPROP_LOGICAND, - JIM_EXPROP_LOGICAND_LEFT, - JIM_EXPROP_LOGICAND_RIGHT, - - JIM_EXPROP_LOGICOR, - JIM_EXPROP_LOGICOR_LEFT, - JIM_EXPROP_LOGICOR_RIGHT, - - - JIM_EXPROP_TERNARY, - JIM_EXPROP_TERNARY_LEFT, - JIM_EXPROP_TERNARY_RIGHT, - - JIM_EXPROP_COLON, - JIM_EXPROP_COLON_LEFT, - JIM_EXPROP_COLON_RIGHT, - JIM_EXPROP_POW, JIM_EXPROP_STREQ, JIM_EXPROP_STRNE, @@ -12443,12 +12487,11 @@ JIM_EXPROP_BITNOT, JIM_EXPROP_UNARYMINUS, JIM_EXPROP_UNARYPLUS, - JIM_EXPROP_FUNC_FIRST, - JIM_EXPROP_FUNC_INT = JIM_EXPROP_FUNC_FIRST, + JIM_EXPROP_FUNC_INT, JIM_EXPROP_FUNC_WIDE, JIM_EXPROP_FUNC_ABS, JIM_EXPROP_FUNC_DOUBLE, JIM_EXPROP_FUNC_ROUND, JIM_EXPROP_FUNC_RAND, @@ -12474,50 +12517,48 @@ JIM_EXPROP_FUNC_POW, JIM_EXPROP_FUNC_HYPOT, JIM_EXPROP_FUNC_FMOD, }; -struct JimExprState -{ - Jim_Obj **stack; - int stacklen; - int opcode; - int skip; +struct JimExprNode { + int type; + struct Jim_Obj *objPtr; + + struct JimExprNode *left; + struct JimExprNode *right; + struct JimExprNode *ternary; }; typedef struct Jim_ExprOperator { const char *name; - int (*funcop) (Jim_Interp *interp, struct JimExprState * e); + int (*funcop) (Jim_Interp *interp, struct JimExprNode *opnode); unsigned char precedence; unsigned char arity; - unsigned char lazy; + unsigned char attr; unsigned char namelen; } Jim_ExprOperator; -static void ExprPush(struct JimExprState *e, Jim_Obj *obj) -{ - Jim_IncrRefCount(obj); - e->stack[e->stacklen++] = obj; -} - -static Jim_Obj *ExprPop(struct JimExprState *e) -{ - return e->stack[--e->stacklen]; -} - -static int JimExprOpNumUnary(Jim_Interp *interp, struct JimExprState *e) +static int JimExprGetTerm(Jim_Interp *interp, struct JimExprNode *node, Jim_Obj **objPtrPtr); +static int JimExprGetTermBoolean(Jim_Interp *interp, struct JimExprNode *node); +static int JimExprEvalTermNode(Jim_Interp *interp, struct JimExprNode *node); + +static int JimExprOpNumUnary(Jim_Interp *interp, struct JimExprNode *node) { int intresult = 1; - int rc = JIM_OK; - Jim_Obj *A = ExprPop(e); + int rc; double dA, dC = 0; jim_wide wA, wC = 0; + Jim_Obj *A; + + if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { + return rc; + } if ((A->typePtr != &doubleObjType || A->bytes) && JimGetWideNoErr(interp, A, &wA) == JIM_OK) { - switch (e->opcode) { + switch (node->type) { case JIM_EXPROP_FUNC_INT: case JIM_EXPROP_FUNC_WIDE: case JIM_EXPROP_FUNC_ROUND: case JIM_EXPROP_UNARYPLUS: wC = wA; @@ -12538,11 +12579,11 @@ default: abort(); } } else if ((rc = Jim_GetDouble(interp, A, &dA)) == JIM_OK) { - switch (e->opcode) { + switch (node->type) { case JIM_EXPROP_FUNC_INT: case JIM_EXPROP_FUNC_WIDE: wC = dA; break; case JIM_EXPROP_FUNC_ROUND: @@ -12573,14 +12614,14 @@ } } if (rc == JIM_OK) { if (intresult) { - ExprPush(e, Jim_NewIntObj(interp, wC)); + Jim_SetResultInt(interp, wC); } else { - ExprPush(e, Jim_NewDoubleObj(interp, dC)); + Jim_SetResult(interp, Jim_NewDoubleObj(interp, dC)); } } Jim_DecrRefCount(interp, A); @@ -12593,24 +12634,29 @@ JimRandomBytes(interp, &x, sizeof(x)); return (double)x / (unsigned long)~0; } -static int JimExprOpIntUnary(Jim_Interp *interp, struct JimExprState *e) +static int JimExprOpIntUnary(Jim_Interp *interp, struct JimExprNode *node) { - Jim_Obj *A = ExprPop(e); jim_wide wA; + Jim_Obj *A; + int rc; - int rc = Jim_GetWide(interp, A, &wA); + if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { + return rc; + } + + rc = Jim_GetWide(interp, A, &wA); if (rc == JIM_OK) { - switch (e->opcode) { + switch (node->type) { case JIM_EXPROP_BITNOT: - ExprPush(e, Jim_NewIntObj(interp, ~wA)); + Jim_SetResultInt(interp, ~wA); break; case JIM_EXPROP_FUNC_SRAND: JimPrngSeed(interp, (unsigned char *)&wA, sizeof(wA)); - ExprPush(e, Jim_NewDoubleObj(interp, JimRandDouble(interp))); + Jim_SetResult(interp, Jim_NewDoubleObj(interp, JimRandDouble(interp))); break; default: abort(); } } @@ -12618,29 +12664,33 @@ Jim_DecrRefCount(interp, A); return rc; } -static int JimExprOpNone(Jim_Interp *interp, struct JimExprState *e) +static int JimExprOpNone(Jim_Interp *interp, struct JimExprNode *node) { - JimPanic((e->opcode != JIM_EXPROP_FUNC_RAND, "JimExprOpNone only support rand()")); + JimPanic((node->type != JIM_EXPROP_FUNC_RAND, "JimExprOpNone only support rand()")); - ExprPush(e, Jim_NewDoubleObj(interp, JimRandDouble(interp))); + Jim_SetResult(interp, Jim_NewDoubleObj(interp, JimRandDouble(interp))); return JIM_OK; } #ifdef JIM_MATH_FUNCTIONS -static int JimExprOpDoubleUnary(Jim_Interp *interp, struct JimExprState *e) +static int JimExprOpDoubleUnary(Jim_Interp *interp, struct JimExprNode *node) { int rc; - Jim_Obj *A = ExprPop(e); double dA, dC; + Jim_Obj *A; + + if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { + return rc; + } rc = Jim_GetDouble(interp, A, &dA); if (rc == JIM_OK) { - switch (e->opcode) { + switch (node->type) { case JIM_EXPROP_FUNC_SIN: dC = sin(dA); break; case JIM_EXPROP_FUNC_COS: dC = cos(dA); @@ -12685,33 +12735,42 @@ dC = sqrt(dA); break; default: abort(); } - ExprPush(e, Jim_NewDoubleObj(interp, dC)); + Jim_SetResult(interp, Jim_NewDoubleObj(interp, dC)); } Jim_DecrRefCount(interp, A); return rc; } #endif -static int JimExprOpIntBin(Jim_Interp *interp, struct JimExprState *e) +static int JimExprOpIntBin(Jim_Interp *interp, struct JimExprNode *node) { - Jim_Obj *B = ExprPop(e); - Jim_Obj *A = ExprPop(e); jim_wide wA, wB; - int rc = JIM_ERR; + int rc; + Jim_Obj *A, *B; + + if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { + return rc; + } + if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { + Jim_DecrRefCount(interp, A); + return rc; + } + + rc = JIM_ERR; if (Jim_GetWide(interp, A, &wA) == JIM_OK && Jim_GetWide(interp, B, &wB) == JIM_OK) { jim_wide wC; rc = JIM_OK; - switch (e->opcode) { + switch (node->type) { case JIM_EXPROP_LSHIFT: wC = wA << wB; break; case JIM_EXPROP_RSHIFT: wC = wA >> wB; @@ -12756,21 +12815,20 @@ const unsigned int S = sizeof(unsigned long) * 8; uB %= S; - if (e->opcode == JIM_EXPROP_ROTR) { + if (node->type == JIM_EXPROP_ROTR) { uB = S - uB; } wC = (unsigned long)(uA << uB) | (uA >> (S - uB)); break; } default: abort(); } - ExprPush(e, Jim_NewIntObj(interp, wC)); - + Jim_SetResultInt(interp, wC); } Jim_DecrRefCount(interp, A); Jim_DecrRefCount(interp, B); @@ -12777,26 +12835,32 @@ return rc; } -static int JimExprOpBin(Jim_Interp *interp, struct JimExprState *e) +static int JimExprOpBin(Jim_Interp *interp, struct JimExprNode *node) { int rc = JIM_OK; double dA, dB, dC = 0; jim_wide wA, wB, wC = 0; + Jim_Obj *A, *B; - Jim_Obj *B = ExprPop(e); - Jim_Obj *A = ExprPop(e); + if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { + return rc; + } + if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { + Jim_DecrRefCount(interp, A); + return rc; + } if ((A->typePtr != &doubleObjType || A->bytes) && (B->typePtr != &doubleObjType || B->bytes) && JimGetWideNoErr(interp, A, &wA) == JIM_OK && JimGetWideNoErr(interp, B, &wB) == JIM_OK) { - switch (e->opcode) { + switch (node->type) { case JIM_EXPROP_POW: case JIM_EXPROP_FUNC_POW: if (wA == 0 && wB < 0) { Jim_SetResultString(interp, "exponentiation of zero by negative power", -1); rc = JIM_ERR; @@ -12849,11 +12913,11 @@ wC = wA != wB; goto intresult; } } if (Jim_GetDouble(interp, A, &dA) == JIM_OK && Jim_GetDouble(interp, B, &dB) == JIM_OK) { - switch (e->opcode) { + switch (node->type) { #ifndef JIM_MATH_FUNCTIONS case JIM_EXPROP_POW: case JIM_EXPROP_FUNC_POW: case JIM_EXPROP_FUNC_ATAN2: case JIM_EXPROP_FUNC_HYPOT: @@ -12921,11 +12985,11 @@ int i = Jim_StringCompareObj(interp, A, B, 0); - switch (e->opcode) { + switch (node->type) { case JIM_EXPROP_LT: wC = i < 0; goto intresult; case JIM_EXPROP_GT: wC = i > 0; @@ -12949,14 +13013,14 @@ done: Jim_DecrRefCount(interp, A); Jim_DecrRefCount(interp, B); return rc; intresult: - ExprPush(e, Jim_NewIntObj(interp, wC)); + Jim_SetResultInt(interp, wC); goto done; doubleresult: - ExprPush(e, Jim_NewDoubleObj(interp, dC)); + Jim_SetResult(interp, Jim_NewDoubleObj(interp, dC)); goto done; } static int JimSearchList(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *valObj) { @@ -12970,22 +13034,31 @@ } } return 0; } -static int JimExprOpStrBin(Jim_Interp *interp, struct JimExprState *e) + + +static int JimExprOpStrBin(Jim_Interp *interp, struct JimExprNode *node) { - Jim_Obj *B = ExprPop(e); - Jim_Obj *A = ExprPop(e); - + Jim_Obj *A, *B; jim_wide wC; + int rc; - switch (e->opcode) { + if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) { + return rc; + } + if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) { + Jim_DecrRefCount(interp, A); + return rc; + } + + switch (node->type) { case JIM_EXPROP_STREQ: case JIM_EXPROP_STRNE: wC = Jim_StringEqObj(A, B); - if (e->opcode == JIM_EXPROP_STRNE) { + if (node->type == JIM_EXPROP_STRNE) { wC = !wC; } break; case JIM_EXPROP_STRIN: wC = JimSearchList(interp, B, A); @@ -12994,183 +13067,99 @@ wC = !JimSearchList(interp, B, A); break; default: abort(); } - ExprPush(e, Jim_NewIntObj(interp, wC)); + Jim_SetResultInt(interp, wC); Jim_DecrRefCount(interp, A); Jim_DecrRefCount(interp, B); - return JIM_OK; + return rc; } static int ExprBool(Jim_Interp *interp, Jim_Obj *obj) { long l; double d; int b; + int ret = -1; + + + Jim_IncrRefCount(obj); if (Jim_GetLong(interp, obj, &l) == JIM_OK) { - return l != 0; - } - if (Jim_GetDouble(interp, obj, &d) == JIM_OK) { - return d != 0; - } - if (Jim_GetBoolean(interp, obj, &b) == JIM_OK) { - return b != 0; - } - return -1; -} - -static int JimExprOpAndLeft(Jim_Interp *interp, struct JimExprState *e) -{ - Jim_Obj *skip = ExprPop(e); - Jim_Obj *A = ExprPop(e); - int rc = JIM_OK; - - switch (ExprBool(interp, A)) { - case 0: - - e->skip = JimWideValue(skip); - ExprPush(e, Jim_NewIntObj(interp, 0)); - break; - - case 1: - - break; - - case -1: - - rc = JIM_ERR; - } - Jim_DecrRefCount(interp, A); - Jim_DecrRefCount(interp, skip); - - return rc; -} - -static int JimExprOpOrLeft(Jim_Interp *interp, struct JimExprState *e) -{ - Jim_Obj *skip = ExprPop(e); - Jim_Obj *A = ExprPop(e); - int rc = JIM_OK; - - switch (ExprBool(interp, A)) { - case 0: - - break; - - case 1: - - e->skip = JimWideValue(skip); - ExprPush(e, Jim_NewIntObj(interp, 1)); - break; - - case -1: - - rc = JIM_ERR; - break; - } - Jim_DecrRefCount(interp, A); - Jim_DecrRefCount(interp, skip); - - return rc; -} - -static int JimExprOpAndOrRight(Jim_Interp *interp, struct JimExprState *e) -{ - Jim_Obj *A = ExprPop(e); - int rc = JIM_OK; - - switch (ExprBool(interp, A)) { - case 0: - ExprPush(e, Jim_NewIntObj(interp, 0)); - break; - - case 1: - ExprPush(e, Jim_NewIntObj(interp, 1)); - break; - - case -1: - - rc = JIM_ERR; - break; - } - Jim_DecrRefCount(interp, A); - - return rc; -} - -static int JimExprOpTernaryLeft(Jim_Interp *interp, struct JimExprState *e) -{ - Jim_Obj *skip = ExprPop(e); - Jim_Obj *A = ExprPop(e); - int rc = JIM_OK; - - - ExprPush(e, A); - - switch (ExprBool(interp, A)) { - case 0: - - e->skip = JimWideValue(skip); - - ExprPush(e, Jim_NewIntObj(interp, 0)); - break; - - case 1: - - break; - - case -1: - - rc = JIM_ERR; - break; - } - Jim_DecrRefCount(interp, A); - Jim_DecrRefCount(interp, skip); - - return rc; -} - -static int JimExprOpColonLeft(Jim_Interp *interp, struct JimExprState *e) -{ - Jim_Obj *skip = ExprPop(e); - Jim_Obj *B = ExprPop(e); - Jim_Obj *A = ExprPop(e); - - - if (ExprBool(interp, A)) { - - e->skip = JimWideValue(skip); - - ExprPush(e, B); - } - - Jim_DecrRefCount(interp, skip); - Jim_DecrRefCount(interp, A); - Jim_DecrRefCount(interp, B); - return JIM_OK; -} - -static int JimExprOpNull(Jim_Interp *interp, struct JimExprState *e) -{ - return JIM_OK; + ret = (l != 0); + } + else if (Jim_GetDouble(interp, obj, &d) == JIM_OK) { + ret = (d != 0); + } + else if (Jim_GetBoolean(interp, obj, &b) == JIM_OK) { + ret = (b != 0); + } + + Jim_DecrRefCount(interp, obj); + return ret; +} + +static int JimExprOpAnd(Jim_Interp *interp, struct JimExprNode *node) +{ + + int result = JimExprGetTermBoolean(interp, node->left); + + if (result == 1) { + + result = JimExprGetTermBoolean(interp, node->right); + } + if (result == -1) { + return JIM_ERR; + } + Jim_SetResultInt(interp, result); + return JIM_OK; +} + +static int JimExprOpOr(Jim_Interp *interp, struct JimExprNode *node) +{ + + int result = JimExprGetTermBoolean(interp, node->left); + + if (result == 0) { + + result = JimExprGetTermBoolean(interp, node->right); + } + if (result == -1) { + return JIM_ERR; + } + Jim_SetResultInt(interp, result); + return JIM_OK; +} + +static int JimExprOpTernary(Jim_Interp *interp, struct JimExprNode *node) +{ + + int result = JimExprGetTermBoolean(interp, node->left); + + if (result == 1) { + + return JimExprEvalTermNode(interp, node->right); + } + else if (result == 0) { + + return JimExprEvalTermNode(interp, node->ternary); + } + + return JIM_ERR; } enum { - LAZY_NONE, - LAZY_OP, - LAZY_LEFT, - LAZY_RIGHT, - RIGHT_ASSOC, + OP_FUNC = 0x0001, + OP_RIGHT_ASSOC = 0x0002, }; #define OPRINIT_ATTR(N, P, ARITY, F, ATTR) {N, F, P, ARITY, ATTR, sizeof(N) - 1} -#define OPRINIT(N, P, ARITY, F) OPRINIT_ATTR(N, P, ARITY, F, LAZY_NONE) +#define OPRINIT(N, P, ARITY, F) OPRINIT_ATTR(N, P, ARITY, F, 0) static const struct Jim_ExprOperator Jim_ExprOperators[] = { OPRINIT("*", 110, 2, JimExprOpBin), OPRINIT("/", 110, 2, JimExprOpBin), OPRINIT("%", 110, 2, JimExprOpIntBin), @@ -13194,74 +13183,63 @@ OPRINIT("&", 50, 2, JimExprOpIntBin), OPRINIT("^", 49, 2, JimExprOpIntBin), OPRINIT("|", 48, 2, JimExprOpIntBin), - OPRINIT_ATTR("&&", 10, 2, NULL, LAZY_OP), - OPRINIT_ATTR(NULL, 10, 2, JimExprOpAndLeft, LAZY_LEFT), - OPRINIT_ATTR(NULL, 10, 2, JimExprOpAndOrRight, LAZY_RIGHT), - - OPRINIT_ATTR("||", 9, 2, NULL, LAZY_OP), - OPRINIT_ATTR(NULL, 9, 2, JimExprOpOrLeft, LAZY_LEFT), - OPRINIT_ATTR(NULL, 9, 2, JimExprOpAndOrRight, LAZY_RIGHT), - - OPRINIT_ATTR("?", 5, 2, JimExprOpNull, LAZY_OP), - OPRINIT_ATTR(NULL, 5, 2, JimExprOpTernaryLeft, LAZY_LEFT), - OPRINIT_ATTR(NULL, 5, 2, JimExprOpNull, LAZY_RIGHT), - - OPRINIT_ATTR(":", 5, 2, JimExprOpNull, LAZY_OP), - OPRINIT_ATTR(NULL, 5, 2, JimExprOpColonLeft, LAZY_LEFT), - OPRINIT_ATTR(NULL, 5, 2, JimExprOpNull, LAZY_RIGHT), - - - OPRINIT_ATTR("**", 120, 2, JimExprOpBin, RIGHT_ASSOC), + OPRINIT("&&", 10, 2, JimExprOpAnd), + OPRINIT("||", 9, 2, JimExprOpOr), + OPRINIT_ATTR("?", 5, 3, JimExprOpTernary, OP_RIGHT_ASSOC), + OPRINIT_ATTR(":", 5, 3, NULL, OP_RIGHT_ASSOC), + + + OPRINIT_ATTR("**", 120, 2, JimExprOpBin, OP_RIGHT_ASSOC), OPRINIT("eq", 60, 2, JimExprOpStrBin), OPRINIT("ne", 60, 2, JimExprOpStrBin), OPRINIT("in", 55, 2, JimExprOpStrBin), OPRINIT("ni", 55, 2, JimExprOpStrBin), - OPRINIT("!", 150, 1, JimExprOpNumUnary), - OPRINIT("~", 150, 1, JimExprOpIntUnary), - OPRINIT(NULL, 150, 1, JimExprOpNumUnary), - OPRINIT(NULL, 150, 1, JimExprOpNumUnary), + OPRINIT_ATTR("!", 150, 1, JimExprOpNumUnary, OP_RIGHT_ASSOC), + OPRINIT_ATTR("~", 150, 1, JimExprOpIntUnary, OP_RIGHT_ASSOC), + OPRINIT_ATTR(" -", 150, 1, JimExprOpNumUnary, OP_RIGHT_ASSOC), + OPRINIT_ATTR(" +", 150, 1, JimExprOpNumUnary, OP_RIGHT_ASSOC), - OPRINIT("int", 200, 1, JimExprOpNumUnary), - OPRINIT("wide", 200, 1, JimExprOpNumUnary), - OPRINIT("abs", 200, 1, JimExprOpNumUnary), - OPRINIT("double", 200, 1, JimExprOpNumUnary), - OPRINIT("round", 200, 1, JimExprOpNumUnary), - OPRINIT("rand", 200, 0, JimExprOpNone), - OPRINIT("srand", 200, 1, JimExprOpIntUnary), + OPRINIT_ATTR("int", 200, 1, JimExprOpNumUnary, OP_FUNC), + OPRINIT_ATTR("wide", 200, 1, JimExprOpNumUnary, OP_FUNC), + OPRINIT_ATTR("abs", 200, 1, JimExprOpNumUnary, OP_FUNC), + OPRINIT_ATTR("double", 200, 1, JimExprOpNumUnary, OP_FUNC), + OPRINIT_ATTR("round", 200, 1, JimExprOpNumUnary, OP_FUNC), + OPRINIT_ATTR("rand", 200, 0, JimExprOpNone, OP_FUNC), + OPRINIT_ATTR("srand", 200, 1, JimExprOpIntUnary, OP_FUNC), #ifdef JIM_MATH_FUNCTIONS - OPRINIT("sin", 200, 1, JimExprOpDoubleUnary), - OPRINIT("cos", 200, 1, JimExprOpDoubleUnary), - OPRINIT("tan", 200, 1, JimExprOpDoubleUnary), - OPRINIT("asin", 200, 1, JimExprOpDoubleUnary), - OPRINIT("acos", 200, 1, JimExprOpDoubleUnary), - OPRINIT("atan", 200, 1, JimExprOpDoubleUnary), - OPRINIT("atan2", 200, 2, JimExprOpBin), - OPRINIT("sinh", 200, 1, JimExprOpDoubleUnary), - OPRINIT("cosh", 200, 1, JimExprOpDoubleUnary), - OPRINIT("tanh", 200, 1, JimExprOpDoubleUnary), - OPRINIT("ceil", 200, 1, JimExprOpDoubleUnary), - OPRINIT("floor", 200, 1, JimExprOpDoubleUnary), - OPRINIT("exp", 200, 1, JimExprOpDoubleUnary), - OPRINIT("log", 200, 1, JimExprOpDoubleUnary), - OPRINIT("log10", 200, 1, JimExprOpDoubleUnary), - OPRINIT("sqrt", 200, 1, JimExprOpDoubleUnary), - OPRINIT("pow", 200, 2, JimExprOpBin), - OPRINIT("hypot", 200, 2, JimExprOpBin), - OPRINIT("fmod", 200, 2, JimExprOpBin), + OPRINIT_ATTR("sin", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("cos", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("tan", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("asin", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("acos", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("atan", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("atan2", 200, 2, JimExprOpBin, OP_FUNC), + OPRINIT_ATTR("sinh", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("cosh", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("tanh", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("ceil", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("floor", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("exp", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("log", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("log10", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("sqrt", 200, 1, JimExprOpDoubleUnary, OP_FUNC), + OPRINIT_ATTR("pow", 200, 2, JimExprOpBin, OP_FUNC), + OPRINIT_ATTR("hypot", 200, 2, JimExprOpBin, OP_FUNC), + OPRINIT_ATTR("fmod", 200, 2, JimExprOpBin, OP_FUNC), #endif }; #undef OPRINIT -#undef OPRINIT_LAZY +#undef OPRINIT_ATTR #define JIM_EXPR_OPERATORS_NUM \ (sizeof(Jim_ExprOperators)/sizeof(struct Jim_ExprOperator)) static int JimParseExpression(struct JimParserCtx *pc) @@ -13412,36 +13390,45 @@ return JIM_OK; } } return JIM_ERR; } + +static const struct Jim_ExprOperator *JimExprOperatorInfoByOpcode(int opcode) +{ + static Jim_ExprOperator dummy_op; + if (opcode < JIM_TT_EXPR_OP) { + return &dummy_op; + } + return &Jim_ExprOperators[opcode - JIM_TT_EXPR_OP]; +} static int JimParseExprOperator(struct JimParserCtx *pc) { int i; - int bestIdx = -1, bestLen = 0; + const struct Jim_ExprOperator *bestOp = NULL; + int bestLen = 0; for (i = 0; i < (signed)JIM_EXPR_OPERATORS_NUM; i++) { - const char * const opname = Jim_ExprOperators[i].name; - const int oplen = Jim_ExprOperators[i].namelen; + const struct Jim_ExprOperator *op = &Jim_ExprOperators[i]; - if (opname == NULL || opname[0] != pc->p[0]) { + if (op->name[0] != pc->p[0]) { continue; } - if (oplen > bestLen && strncmp(opname, pc->p, oplen) == 0) { - bestIdx = i + JIM_TT_EXPR_OP; - bestLen = oplen; + if (op->namelen > bestLen && strncmp(op->name, pc->p, op->namelen) == 0) { + bestOp = op; + bestLen = op->namelen; } } - if (bestIdx == -1) { + if (bestOp == NULL) { return JIM_ERR; } - if (bestIdx >= JIM_EXPROP_FUNC_FIRST) { + if (bestOp->attr & OP_FUNC) { const char *p = pc->p + bestLen; int len = pc->len - bestLen; while (len && isspace(UCHAR(*p))) { len--; @@ -13453,23 +13440,14 @@ } pc->tend = pc->p + bestLen - 1; pc->p += bestLen; pc->len -= bestLen; - pc->tt = bestIdx; + pc->tt = (bestOp - Jim_ExprOperators) + JIM_TT_EXPR_OP; return JIM_OK; } -static const struct Jim_ExprOperator *JimExprOperatorInfoByOpcode(int opcode) -{ - static Jim_ExprOperator dummy_op; - if (opcode < JIM_TT_EXPR_OP) { - return &dummy_op; - } - return &Jim_ExprOperators[opcode - JIM_TT_EXPR_OP]; -} - const char *jim_tt_name(int type) { static const char * const tt_names[JIM_TT_EXPR_OP] = { "NIL", "STR", "ESC", "VAR", "ARY", "CMD", "SEP", "EOL", "EOF", "LIN", "WRD", "(((", ")))", ",,,", "INT", "DBL", "BOO", "$()" }; @@ -13505,38 +13483,45 @@ NULL, JIM_TYPE_REFERENCES, }; -typedef struct ExprByteCode +struct ExprTree { - ScriptToken *token; + struct JimExprNode *expr; + struct JimExprNode *nodes; int len; int inUse; -} ExprByteCode; +}; -static void ExprFreeByteCode(Jim_Interp *interp, ExprByteCode * expr) +static void ExprTreeFreeNodes(Jim_Interp *interp, struct JimExprNode *nodes, int num) { int i; + for (i = 0; i < num; i++) { + if (nodes[i].objPtr) { + Jim_DecrRefCount(interp, nodes[i].objPtr); + } + } + Jim_Free(nodes); +} - for (i = 0; i < expr->len; i++) { - Jim_DecrRefCount(interp, expr->token[i].objPtr); - } - Jim_Free(expr->token); +static void ExprTreeFree(Jim_Interp *interp, struct ExprTree *expr) +{ + ExprTreeFreeNodes(interp, expr->nodes, expr->len); Jim_Free(expr); } static void FreeExprInternalRep(Jim_Interp *interp, Jim_Obj *objPtr) { - ExprByteCode *expr = (void *)objPtr->internalRep.ptr; + struct ExprTree *expr = (void *)objPtr->internalRep.ptr; if (expr) { if (--expr->inUse != 0) { return; } - ExprFreeByteCode(interp, expr); + ExprTreeFree(interp, expr); } } static void DupExprInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr) { @@ -13545,264 +13530,146 @@ dupPtr->typePtr = NULL; } -static int ExprCheckCorrectness(Jim_Interp *interp, Jim_Obj *exprObjPtr, ExprByteCode * expr) -{ - int i; - int stacklen = 0; - int ternary = 0; - int lasttt = JIM_TT_NONE; - const char *errmsg; - - for (i = 0; i < expr->len; i++) { - ScriptToken *t = &expr->token[i]; - const struct Jim_ExprOperator *op = JimExprOperatorInfoByOpcode(t->type); - lasttt = t->type; - - stacklen -= op->arity; - - if (stacklen < 0) { - break; - } - if (t->type == JIM_EXPROP_TERNARY || t->type == JIM_EXPROP_TERNARY_LEFT) { - ternary++; - } - else if (t->type == JIM_EXPROP_COLON || t->type == JIM_EXPROP_COLON_LEFT) { - ternary--; - } - - - stacklen++; - } - if (stacklen == 1 && ternary == 0) { - return JIM_OK; - } - - if (stacklen <= 0) { - - if (lasttt >= JIM_EXPROP_FUNC_FIRST) { - errmsg = "too few arguments for math function"; - Jim_SetResultString(interp, "too few arguments for math function", -1); - } else { - errmsg = "premature end of expression"; - } - } - else if (stacklen > 1) { - if (lasttt >= JIM_EXPROP_FUNC_FIRST) { - errmsg = "too many arguments for math function"; - } else { - errmsg = "extra tokens at end of expression"; - } - } - else { - errmsg = "invalid ternary expression"; - } - Jim_SetResultFormatted(interp, "syntax error in expression \"%#s\": %s", exprObjPtr, errmsg); - return JIM_ERR; -} - -static int ExprAddLazyOperator(Jim_Interp *interp, ExprByteCode * expr, ParseToken *t) -{ - int i; - - int leftindex, arity, offset; - - - leftindex = expr->len - 1; - - arity = 1; - while (arity) { - ScriptToken *tt = &expr->token[leftindex]; - - if (tt->type >= JIM_TT_EXPR_OP) { - arity += JimExprOperatorInfoByOpcode(tt->type)->arity; - } - arity--; - if (--leftindex < 0) { - return JIM_ERR; - } - } - leftindex++; - - - memmove(&expr->token[leftindex + 2], &expr->token[leftindex], - sizeof(*expr->token) * (expr->len - leftindex)); - expr->len += 2; - offset = (expr->len - leftindex) - 1; - - expr->token[leftindex + 1].type = t->type + 1; - expr->token[leftindex + 1].objPtr = interp->emptyObj; - - expr->token[leftindex].type = JIM_TT_EXPR_INT; - expr->token[leftindex].objPtr = Jim_NewIntObj(interp, offset); - - - expr->token[expr->len].objPtr = interp->emptyObj; - expr->token[expr->len].type = t->type + 2; - expr->len++; - - - for (i = leftindex - 1; i > 0; i--) { - const struct Jim_ExprOperator *op = JimExprOperatorInfoByOpcode(expr->token[i].type); - if (op->lazy == LAZY_LEFT) { - if (JimWideValue(expr->token[i - 1].objPtr) + i - 1 >= leftindex) { - JimWideValue(expr->token[i - 1].objPtr) += 2; - } - } - } - return JIM_OK; -} - -static int ExprAddOperator(Jim_Interp *interp, ExprByteCode * expr, ParseToken *t) -{ - struct ScriptToken *token = &expr->token[expr->len]; - const struct Jim_ExprOperator *op = JimExprOperatorInfoByOpcode(t->type); - - if (op->lazy == LAZY_OP) { - if (ExprAddLazyOperator(interp, expr, t) != JIM_OK) { - Jim_SetResultFormatted(interp, "Expression has bad operands to %s", op->name); - return JIM_ERR; - } - } - else { - token->objPtr = interp->emptyObj; - token->type = t->type; - expr->len++; - } - return JIM_OK; -} - -static int ExprTernaryGetColonLeftIndex(ExprByteCode *expr, int right_index) -{ - int ternary_count = 1; - - right_index--; - - while (right_index > 1) { - if (expr->token[right_index].type == JIM_EXPROP_TERNARY_LEFT) { - ternary_count--; - } - else if (expr->token[right_index].type == JIM_EXPROP_COLON_RIGHT) { - ternary_count++; - } - else if (expr->token[right_index].type == JIM_EXPROP_COLON_LEFT && ternary_count == 1) { - return right_index; - } - right_index--; - } - - - return -1; -} - -static int ExprTernaryGetMoveIndices(ExprByteCode *expr, int right_index, int *prev_right_index, int *prev_left_index) -{ - int i = right_index - 1; - int ternary_count = 1; - - while (i > 1) { - if (expr->token[i].type == JIM_EXPROP_TERNARY_LEFT) { - if (--ternary_count == 0 && expr->token[i - 2].type == JIM_EXPROP_COLON_RIGHT) { - *prev_right_index = i - 2; - *prev_left_index = ExprTernaryGetColonLeftIndex(expr, *prev_right_index); - return 1; - } - } - else if (expr->token[i].type == JIM_EXPROP_COLON_RIGHT) { - if (ternary_count == 0) { - return 0; - } - ternary_count++; - } - i--; - } - return 0; -} - -static void ExprTernaryReorderExpression(Jim_Interp *interp, ExprByteCode *expr) -{ - int i; - - for (i = expr->len - 1; i > 1; i--) { - int prev_right_index; - int prev_left_index; - int j; - ScriptToken tmp; - - if (expr->token[i].type != JIM_EXPROP_COLON_RIGHT) { - continue; - } - - - if (ExprTernaryGetMoveIndices(expr, i, &prev_right_index, &prev_left_index) == 0) { - continue; - } - - tmp = expr->token[prev_right_index]; - for (j = prev_right_index; j < i; j++) { - expr->token[j] = expr->token[j + 1]; - } - expr->token[i] = tmp; - - JimWideValue(expr->token[prev_left_index-1].objPtr) += (i - prev_right_index); - - - i++; - } -} - -static ExprByteCode *ExprCreateByteCode(Jim_Interp *interp, const ParseTokenList *tokenlist, Jim_Obj *exprObjPtr, Jim_Obj *fileNameObj) -{ +struct ExprBuilder { + int parencount; + int level; + ParseToken *token; + ParseToken *first_token; Jim_Stack stack; - ExprByteCode *expr; - int ok = 1; + Jim_Obj *exprObjPtr; + Jim_Obj *fileNameObj; + struct JimExprNode *nodes; + struct JimExprNode *next; +}; + +#ifdef DEBUG_SHOW_EXPR +static void JimShowExprNode(struct JimExprNode *node, int level) +{ int i; - int prevtt = JIM_TT_NONE; - int have_ternary = 0; - - - int count = tokenlist->count - 1; - - expr = Jim_Alloc(sizeof(*expr)); - expr->inUse = 1; - expr->len = 0; - - Jim_InitStack(&stack); - - for (i = 0; i < tokenlist->count; i++) { - ParseToken *t = &tokenlist->list[i]; - const struct Jim_ExprOperator *op = JimExprOperatorInfoByOpcode(t->type); - - if (op->lazy == LAZY_OP) { - count += 2; - - if (t->type == JIM_EXPROP_TERNARY) { - have_ternary = 1; - } - } - } - - expr->token = Jim_Alloc(sizeof(ScriptToken) * count); - - for (i = 0; i < tokenlist->count && ok; i++) { - ParseToken *t = &tokenlist->list[i]; - - - struct ScriptToken *token = &expr->token[expr->len]; - - if (t->type == JIM_TT_EOL) { - break; - } - - if (TOKEN_IS_EXPR_OP(t->type)) { + for (i = 0; i < level; i++) { + printf(" "); + } + if (TOKEN_IS_EXPR_OP(node->type)) { + printf("%s\n", jim_tt_name(node->type)); + if (node->left) { + JimShowExprNode(node->left, level + 1); + } + if (node->right) { + JimShowExprNode(node->right, level + 1); + } + if (node->ternary) { + JimShowExprNode(node->ternary, level + 1); + } + } + else { + printf("[%s] %s\n", jim_tt_name(node->type), Jim_String(node->objPtr)); + } +} +#endif + +#define EXPR_UNTIL_CLOSE 0x0001 +#define EXPR_FUNC_ARGS 0x0002 +#define EXPR_TERNARY 0x0004 + +static int ExprTreeBuildTree(Jim_Interp *interp, struct ExprBuilder *builder, int precedence, int flags, int exp_numterms) +{ + int rc; + struct JimExprNode *node; + + int exp_stacklen = builder->stack.len + exp_numterms; + + if (builder->level++ > 200) { + Jim_SetResultString(interp, "Expression too complex", -1); + return JIM_ERR; + } + + while (builder->token->type != JIM_TT_EOL) { + ParseToken *t = builder->token++; + int prevtt; + + if (t == builder->first_token) { + prevtt = JIM_TT_NONE; + } + else { + prevtt = t[-1].type; + } + + if (t->type == JIM_TT_SUBEXPR_START) { + if (builder->stack.len == exp_stacklen) { + Jim_SetResultFormatted(interp, "unexpected open parenthesis in expression: \"%#s\"", builder->exprObjPtr); + return JIM_ERR; + } + builder->parencount++; + rc = ExprTreeBuildTree(interp, builder, 0, EXPR_UNTIL_CLOSE, 1); + if (rc != JIM_OK) { + return rc; + } + + } + else if (t->type == JIM_TT_SUBEXPR_END) { + if (!(flags & EXPR_UNTIL_CLOSE)) { + if (builder->stack.len == exp_stacklen && builder->level > 1) { + builder->token--; + builder->level--; + return JIM_OK; + } + Jim_SetResultFormatted(interp, "unexpected closing parenthesis in expression: \"%#s\"", builder->exprObjPtr); + return JIM_ERR; + } + builder->parencount--; + if (builder->stack.len == exp_stacklen) { + + break; + } + } + else if (t->type == JIM_TT_SUBEXPR_COMMA) { + if (!(flags & EXPR_FUNC_ARGS)) { + if (builder->stack.len == exp_stacklen) { + + builder->token--; + builder->level--; + return JIM_OK; + } + Jim_SetResultFormatted(interp, "unexpected comma in expression: \"%#s\"", builder->exprObjPtr); + return JIM_ERR; + } + else { + + if (builder->stack.len > exp_stacklen) { + Jim_SetResultFormatted(interp, "too many arguments to math function"); + return JIM_ERR; + } + } + + } + else if (t->type == JIM_EXPROP_COLON) { + if (!(flags & EXPR_TERNARY)) { + if (builder->level != 1) { + + builder->token--; + builder->level--; + return JIM_OK; + } + Jim_SetResultFormatted(interp, ": without ? in expression: \"%#s\"", builder->exprObjPtr); + return JIM_ERR; + } + if (builder->stack.len == exp_stacklen) { + + builder->token--; + builder->level--; + return JIM_OK; + } + + } + else if (TOKEN_IS_EXPR_OP(t->type)) { const struct Jim_ExprOperator *op; - ParseToken *tt; - if (prevtt == JIM_TT_NONE || prevtt == JIM_TT_SUBEXPR_START || prevtt == JIM_TT_SUBEXPR_COMMA || prevtt >= JIM_TT_EXPR_OP) { + if (TOKEN_IS_EXPR_OP(prevtt) || TOKEN_IS_EXPR_START(prevtt)) { if (t->type == JIM_EXPROP_SUB) { t->type = JIM_EXPROP_UNARYMINUS; } else if (t->type == JIM_EXPROP_ADD) { t->type = JIM_EXPROP_UNARYPLUS; @@ -13809,70 +13676,86 @@ } } op = JimExprOperatorInfoByOpcode(t->type); - - while ((tt = Jim_StackPeek(&stack)) != NULL) { - const struct Jim_ExprOperator *tt_op = - JimExprOperatorInfoByOpcode(tt->type); - - - if (op->arity != 1 && tt_op->precedence >= op->precedence) { - - if (tt_op->precedence == op->precedence && tt_op->lazy == RIGHT_ASSOC) { - break; - } - if (ExprAddOperator(interp, expr, tt) != JIM_OK) { - ok = 0; - goto err; - } - Jim_StackPop(&stack); - } - else { - break; - } - } - Jim_StackPush(&stack, t); - } - else if (t->type == JIM_TT_SUBEXPR_START) { - Jim_StackPush(&stack, t); - } - else if (t->type == JIM_TT_SUBEXPR_END || t->type == JIM_TT_SUBEXPR_COMMA) { - - ok = 0; - while (Jim_StackLen(&stack)) { - ParseToken *tt = Jim_StackPop(&stack); - - if (tt->type == JIM_TT_SUBEXPR_START || tt->type == JIM_TT_SUBEXPR_COMMA) { - if (t->type == JIM_TT_SUBEXPR_COMMA) { - - Jim_StackPush(&stack, tt); - } - ok = 1; - break; - } - if (ExprAddOperator(interp, expr, tt) != JIM_OK) { - goto err; - } - } - if (!ok) { - Jim_SetResultFormatted(interp, "Unexpected close parenthesis in expression: \"%#s\"", exprObjPtr); - goto err; - } + if (op->precedence < precedence || (!(op->attr & OP_RIGHT_ASSOC) && op->precedence == precedence)) { + + builder->token--; + break; + } + + if (op->attr & OP_FUNC) { + if (builder->token->type != JIM_TT_SUBEXPR_START) { + Jim_SetResultString(interp, "missing arguments for math function", -1); + return JIM_ERR; + } + builder->token++; + if (op->arity == 0) { + if (builder->token->type != JIM_TT_SUBEXPR_END) { + Jim_SetResultString(interp, "too many arguments for math function", -1); + return JIM_ERR; + } + builder->token++; + goto noargs; + } + builder->parencount++; + + + rc = ExprTreeBuildTree(interp, builder, 0, EXPR_FUNC_ARGS | EXPR_UNTIL_CLOSE, op->arity); + } + else if (t->type == JIM_EXPROP_TERNARY) { + + rc = ExprTreeBuildTree(interp, builder, op->precedence, EXPR_TERNARY, 2); + } + else { + rc = ExprTreeBuildTree(interp, builder, op->precedence, 0, 1); + } + + if (rc != JIM_OK) { + return rc; + } + +noargs: + node = builder->next++; + node->type = t->type; + + if (op->arity >= 3) { + node->ternary = Jim_StackPop(&builder->stack); + if (node->ternary == NULL) { + goto missingoperand; + } + } + if (op->arity >= 2) { + node->right = Jim_StackPop(&builder->stack); + if (node->right == NULL) { + goto missingoperand; + } + } + if (op->arity >= 1) { + node->left = Jim_StackPop(&builder->stack); + if (node->left == NULL) { +missingoperand: + Jim_SetResultFormatted(interp, "missing operand to %s in expression: \"%#s\"", op->name, builder->exprObjPtr); + builder->next--; + return JIM_ERR; + + } + } + + + Jim_StackPush(&builder->stack, node); } else { Jim_Obj *objPtr = NULL; - token->type = t->type; if (!TOKEN_IS_EXPR_START(prevtt) && !TOKEN_IS_EXPR_OP(prevtt)) { - Jim_SetResultFormatted(interp, "missing operator in expression: \"%#s\"", exprObjPtr); - ok = 0; - goto err; + Jim_SetResultFormatted(interp, "missing operator in expression: \"%#s\"", builder->exprObjPtr); + return JIM_ERR; } if (t->type == JIM_TT_EXPR_INT || t->type == JIM_TT_EXPR_DOUBLE) { char *endptr; @@ -13887,68 +13770,107 @@ Jim_FreeNewObj(interp, objPtr); objPtr = NULL; } } - if (objPtr) { - token->objPtr = objPtr; - } - else { + if (!objPtr) { - token->objPtr = Jim_NewStringObj(interp, t->token, t->len); + objPtr = Jim_NewStringObj(interp, t->token, t->len); if (t->type == JIM_TT_CMD) { - JimSetSourceInfo(interp, token->objPtr, fileNameObj, t->line); - } - } - expr->len++; - } - prevtt = t->type; - } - - - while (Jim_StackLen(&stack)) { - ParseToken *tt = Jim_StackPop(&stack); - - if (tt->type == JIM_TT_SUBEXPR_START) { - ok = 0; - Jim_SetResultString(interp, "Missing close parenthesis", -1); - goto err; - } - if (ExprAddOperator(interp, expr, tt) != JIM_OK) { - ok = 0; - goto err; - } - } - - if (have_ternary) { - ExprTernaryReorderExpression(interp, expr); - } - - err: - - Jim_FreeStack(&stack); - - for (i = 0; i < expr->len; i++) { - Jim_IncrRefCount(expr->token[i].objPtr); - } - - if (!ok) { - ExprFreeByteCode(interp, expr); + JimSetSourceInfo(interp, objPtr, builder->fileNameObj, t->line); + } + } + + + node = builder->next++; + node->objPtr = objPtr; + Jim_IncrRefCount(node->objPtr); + node->type = t->type; + Jim_StackPush(&builder->stack, node); + } + } + + if (builder->stack.len == exp_stacklen) { + builder->level--; + return JIM_OK; + } + + if ((flags & EXPR_FUNC_ARGS)) { + Jim_SetResultFormatted(interp, "too %s arguments for math function", (builder->stack.len < exp_stacklen) ? "few" : "many"); + } + else { + if (builder->stack.len < exp_stacklen) { + if (builder->level == 0) { + Jim_SetResultFormatted(interp, "empty expression"); + } + else { + Jim_SetResultFormatted(interp, "syntax error in expression \"%#s\": premature end of expression", builder->exprObjPtr); + } + } + else { + Jim_SetResultFormatted(interp, "extra terms after expression"); + } + } + + return JIM_ERR; +} + +static struct ExprTree *ExprTreeCreateTree(Jim_Interp *interp, const ParseTokenList *tokenlist, Jim_Obj *exprObjPtr, Jim_Obj *fileNameObj) +{ + struct ExprTree *expr; + struct ExprBuilder builder; + int rc; + struct JimExprNode *top = NULL; + + builder.parencount = 0; + builder.level = 0; + builder.token = builder.first_token = tokenlist->list; + builder.exprObjPtr = exprObjPtr; + builder.fileNameObj = fileNameObj; + + builder.nodes = malloc(sizeof(struct JimExprNode) * (tokenlist->count - 1)); + memset(builder.nodes, 0, sizeof(struct JimExprNode) * (tokenlist->count - 1)); + builder.next = builder.nodes; + Jim_InitStack(&builder.stack); + + rc = ExprTreeBuildTree(interp, &builder, 0, 0, 1); + + if (rc == JIM_OK) { + top = Jim_StackPop(&builder.stack); + + if (builder.parencount) { + Jim_SetResultString(interp, "missing close parenthesis", -1); + rc = JIM_ERR; + } + } + + + Jim_FreeStack(&builder.stack); + + if (rc != JIM_OK) { + ExprTreeFreeNodes(interp, builder.nodes, builder.next - builder.nodes); return NULL; } + expr = Jim_Alloc(sizeof(*expr)); + expr->inUse = 1; + expr->expr = top; + expr->nodes = builder.nodes; + expr->len = builder.next - builder.nodes; + + assert(expr->len <= tokenlist->count - 1); + return expr; } - static int SetExprFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr) { int exprTextLen; const char *exprText; struct JimParserCtx parser; - struct ExprByteCode *expr; + struct ExprTree *expr; ParseTokenList tokenlist; int line; Jim_Obj *fileNameObj; int rc = JIM_ERR; @@ -13997,40 +13919,24 @@ Jim_DecrRefCount(interp, fileNameObj); return JIM_ERR; } - expr = ExprCreateByteCode(interp, &tokenlist, objPtr, fileNameObj); + expr = ExprTreeCreateTree(interp, &tokenlist, objPtr, fileNameObj); ScriptTokenListFree(&tokenlist); if (!expr) { goto err; } #ifdef DEBUG_SHOW_EXPR - { - int i; - - printf("==== Expr ====\n"); - for (i = 0; i < expr->len; i++) { - ScriptToken *t = &expr->token[i]; - - printf("[%2d] %s '%s'\n", i, jim_tt_name(t->type), Jim_String(t->objPtr)); - } - } + printf("==== Expr ====\n"); + JimShowExprNode(expr->expr, 0); #endif - - if (ExprCheckCorrectness(interp, objPtr, expr) != JIM_OK) { - - ExprFreeByteCode(interp, expr); - expr = NULL; - goto err; - } - rc = JIM_OK; err: Jim_DecrRefCount(interp, fileNameObj); @@ -14038,43 +13944,108 @@ Jim_SetIntRepPtr(objPtr, expr); objPtr->typePtr = &exprObjType; return rc; } -static ExprByteCode *JimGetExpression(Jim_Interp *interp, Jim_Obj *objPtr) +static struct ExprTree *JimGetExpression(Jim_Interp *interp, Jim_Obj *objPtr) { if (objPtr->typePtr != &exprObjType) { if (SetExprFromAny(interp, objPtr) != JIM_OK) { return NULL; } } - return (ExprByteCode *) Jim_GetIntRepPtr(objPtr); + return (struct ExprTree *) Jim_GetIntRepPtr(objPtr); } #ifdef JIM_OPTIMIZATION -static Jim_Obj *JimExprIntValOrVar(Jim_Interp *interp, const ScriptToken *token) -{ - if (token->type == JIM_TT_EXPR_INT) - return token->objPtr; - else if (token->type == JIM_TT_VAR) - return Jim_GetVariable(interp, token->objPtr, JIM_NONE); - else if (token->type == JIM_TT_DICTSUGAR) - return JimExpandDictSugar(interp, token->objPtr); +static Jim_Obj *JimExprIntValOrVar(Jim_Interp *interp, struct JimExprNode *node) +{ + if (node->type == JIM_TT_EXPR_INT) + return node->objPtr; + else if (node->type == JIM_TT_VAR) + return Jim_GetVariable(interp, node->objPtr, JIM_NONE); + else if (node->type == JIM_TT_DICTSUGAR) + return JimExpandDictSugar(interp, node->objPtr); else return NULL; } #endif -#define JIM_EE_STATICSTACK_LEN 10 - -int Jim_EvalExpression(Jim_Interp *interp, Jim_Obj *exprObjPtr, Jim_Obj **exprResultPtrPtr) -{ - ExprByteCode *expr; - Jim_Obj *staticStack[JIM_EE_STATICSTACK_LEN]; - int i; - int retcode = JIM_OK; - struct JimExprState e; + +static int JimExprEvalTermNode(Jim_Interp *interp, struct JimExprNode *node) +{ + if (TOKEN_IS_EXPR_OP(node->type)) { + const struct Jim_ExprOperator *op = JimExprOperatorInfoByOpcode(node->type); + return op->funcop(interp, node); + } + else { + Jim_Obj *objPtr; + + + switch (node->type) { + case JIM_TT_EXPR_INT: + case JIM_TT_EXPR_DOUBLE: + case JIM_TT_EXPR_BOOLEAN: + case JIM_TT_STR: + Jim_SetResult(interp, node->objPtr); + return JIM_OK; + + case JIM_TT_VAR: + objPtr = Jim_GetVariable(interp, node->objPtr, JIM_ERRMSG); + if (objPtr) { + Jim_SetResult(interp, objPtr); + return JIM_OK; + } + return JIM_ERR; + + case JIM_TT_DICTSUGAR: + objPtr = JimExpandDictSugar(interp, node->objPtr); + if (objPtr) { + Jim_SetResult(interp, objPtr); + return JIM_OK; + } + return JIM_ERR; + + case JIM_TT_ESC: + if (Jim_SubstObj(interp, node->objPtr, &objPtr, JIM_NONE) == JIM_OK) { + Jim_SetResult(interp, objPtr); + return JIM_OK; + } + return JIM_ERR; + + case JIM_TT_CMD: + return Jim_EvalObj(interp, node->objPtr); + + default: + + return JIM_ERR; + } + } +} + +static int JimExprGetTerm(Jim_Interp *interp, struct JimExprNode *node, Jim_Obj **objPtrPtr) +{ + int rc = JimExprEvalTermNode(interp, node); + if (rc == JIM_OK) { + *objPtrPtr = Jim_GetResult(interp); + Jim_IncrRefCount(*objPtrPtr); + } + return rc; +} + +static int JimExprGetTermBoolean(Jim_Interp *interp, struct JimExprNode *node) +{ + if (JimExprEvalTermNode(interp, node) == JIM_OK) { + return ExprBool(interp, Jim_GetResult(interp)); + } + return -1; +} + +int Jim_EvalExpression(Jim_Interp *interp, Jim_Obj *exprObjPtr) +{ + struct ExprTree *expr; + int retcode = JIM_OK; expr = JimGetExpression(interp, exprObjPtr); if (!expr) { return JIM_ERR; } @@ -14084,39 +14055,37 @@ Jim_Obj *objPtr; switch (expr->len) { case 1: - objPtr = JimExprIntValOrVar(interp, &expr->token[0]); + objPtr = JimExprIntValOrVar(interp, expr->expr); if (objPtr) { - Jim_IncrRefCount(objPtr); - *exprResultPtrPtr = objPtr; + Jim_SetResult(interp, objPtr); return JIM_OK; } break; case 2: - if (expr->token[1].type == JIM_EXPROP_NOT) { - objPtr = JimExprIntValOrVar(interp, &expr->token[0]); + if (expr->expr->type == JIM_EXPROP_NOT) { + objPtr = JimExprIntValOrVar(interp, expr->expr->left); if (objPtr && JimIsWide(objPtr)) { - *exprResultPtrPtr = JimWideValue(objPtr) ? interp->falseObj : interp->trueObj; - Jim_IncrRefCount(*exprResultPtrPtr); + Jim_SetResult(interp, JimWideValue(objPtr) ? interp->falseObj : interp->trueObj); return JIM_OK; } } break; case 3: - objPtr = JimExprIntValOrVar(interp, &expr->token[0]); + objPtr = JimExprIntValOrVar(interp, expr->expr->left); if (objPtr && JimIsWide(objPtr)) { - Jim_Obj *objPtr2 = JimExprIntValOrVar(interp, &expr->token[1]); + Jim_Obj *objPtr2 = JimExprIntValOrVar(interp, expr->expr->right); if (objPtr2 && JimIsWide(objPtr2)) { jim_wide wideValueA = JimWideValue(objPtr); jim_wide wideValueB = JimWideValue(objPtr2); int cmpRes; - switch (expr->token[2].type) { + switch (expr->expr->type) { case JIM_EXPROP_LT: cmpRes = wideValueA < wideValueB; break; case JIM_EXPROP_LTE: cmpRes = wideValueA <= wideValueB; @@ -14134,12 +14103,11 @@ cmpRes = wideValueA != wideValueB; break; default: goto noopt; } - *exprResultPtrPtr = cmpRes ? interp->trueObj : interp->falseObj; - Jim_IncrRefCount(*exprResultPtrPtr); + Jim_SetResult(interp, cmpRes ? interp->trueObj : interp->falseObj); return JIM_OK; } } break; } @@ -14148,135 +14116,46 @@ #endif expr->inUse++; - - if (expr->len > JIM_EE_STATICSTACK_LEN) - e.stack = Jim_Alloc(sizeof(Jim_Obj *) * expr->len); - else - e.stack = staticStack; - - e.stacklen = 0; - - - for (i = 0; i < expr->len && retcode == JIM_OK; i++) { - Jim_Obj *objPtr; - - switch (expr->token[i].type) { - case JIM_TT_EXPR_INT: - case JIM_TT_EXPR_DOUBLE: - case JIM_TT_EXPR_BOOLEAN: - case JIM_TT_STR: - ExprPush(&e, expr->token[i].objPtr); - break; - - case JIM_TT_VAR: - objPtr = Jim_GetVariable(interp, expr->token[i].objPtr, JIM_ERRMSG); - if (objPtr) { - ExprPush(&e, objPtr); - } - else { - retcode = JIM_ERR; - } - break; - - case JIM_TT_DICTSUGAR: - objPtr = JimExpandDictSugar(interp, expr->token[i].objPtr); - if (objPtr) { - ExprPush(&e, objPtr); - } - else { - retcode = JIM_ERR; - } - break; - - case JIM_TT_ESC: - retcode = Jim_SubstObj(interp, expr->token[i].objPtr, &objPtr, JIM_NONE); - if (retcode == JIM_OK) { - ExprPush(&e, objPtr); - } - break; - - case JIM_TT_CMD: - retcode = Jim_EvalObj(interp, expr->token[i].objPtr); - if (retcode == JIM_OK) { - ExprPush(&e, Jim_GetResult(interp)); - } - break; - - default:{ - - e.skip = 0; - e.opcode = expr->token[i].type; - - retcode = JimExprOperatorInfoByOpcode(e.opcode)->funcop(interp, &e); - - i += e.skip; - continue; - } - } - } + retcode = JimExprEvalTermNode(interp, expr->expr); expr->inUse--; - if (retcode == JIM_OK) { - *exprResultPtrPtr = ExprPop(&e); - } - else { - for (i = 0; i < e.stacklen; i++) { - Jim_DecrRefCount(interp, e.stack[i]); - } - } - if (e.stack != staticStack) { - Jim_Free(e.stack); - } return retcode; } int Jim_GetBoolFromExpr(Jim_Interp *interp, Jim_Obj *exprObjPtr, int *boolPtr) { - int retcode; - jim_wide wideValue; - double doubleValue; - int booleanValue; - Jim_Obj *exprResultPtr; - - retcode = Jim_EvalExpression(interp, exprObjPtr, &exprResultPtr); - if (retcode != JIM_OK) - return retcode; - - if (JimGetWideNoErr(interp, exprResultPtr, &wideValue) != JIM_OK) { - if (Jim_GetDouble(interp, exprResultPtr, &doubleValue) != JIM_OK) { - if (Jim_GetBoolean(interp, exprResultPtr, &booleanValue) != JIM_OK) { - Jim_DecrRefCount(interp, exprResultPtr); - return JIM_ERR; - } else { - Jim_DecrRefCount(interp, exprResultPtr); - *boolPtr = booleanValue; - return JIM_OK; - } - } - else { - Jim_DecrRefCount(interp, exprResultPtr); - *boolPtr = doubleValue != 0; - return JIM_OK; - } - } - *boolPtr = wideValue != 0; - - Jim_DecrRefCount(interp, exprResultPtr); - return JIM_OK; + int retcode = Jim_EvalExpression(interp, exprObjPtr); + + if (retcode == JIM_OK) { + switch (ExprBool(interp, Jim_GetResult(interp))) { + case 0: + *boolPtr = 0; + break; + + case 1: + *boolPtr = 1; + break; + + case -1: + retcode = JIM_ERR; + break; + } + } + return retcode; } typedef struct ScanFmtPartDescr { - char *arg; - char *prefix; + const char *arg; + const char *prefix; size_t width; int pos; char type; char modifier; } ScanFmtPartDescr; @@ -14334,12 +14213,12 @@ static int SetScanFmtFromAny(Jim_Interp *interp, Jim_Obj *objPtr) { ScanFmtStringObj *fmtObj; char *buffer; int maxCount, i, approxSize, lastPos = -1; - const char *fmt = objPtr->bytes; - int maxFmtLen = objPtr->length; + const char *fmt = Jim_String(objPtr); + int maxFmtLen = Jim_Length(objPtr); const char *fmtEnd = fmt + maxFmtLen; int curr; Jim_FreeIntRep(interp, objPtr); @@ -14420,10 +14299,15 @@ fmtObj->error = "variable is assigned by multiple \"%n$\" conversion specifiers"; return JIM_ERR; } } + if (descr->pos < 0) { + fmtObj->error = + "\"%n$\" conversion specifier is negative"; + return JIM_ERR; + } if (sscanf(fmt, "%d%n", &width, &skip) == 1) { descr->width = width; fmt += skip; } @@ -14471,12 +14355,17 @@ } } } else { - if (strchr("hlL", *fmt) != 0) + if (fmt < fmtEnd && strchr("hlL", *fmt)) descr->modifier = tolower((int)*fmt++); + + if (fmt >= fmtEnd) { + fmtObj->error = "missing scan conversion character"; + return JIM_ERR; + } descr->type = *fmt; if (strchr("efgcsndoxui", *fmt) == 0) { fmtObj->error = "bad scan conversion character"; return JIM_ERR; @@ -14880,10 +14769,11 @@ static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { int retcode; Jim_Cmd *cmdPtr; + void *prevPrivData; #if 0 printf("invoke"); int j; for (j = 0; j < objc; j++) { @@ -14909,10 +14799,11 @@ Jim_SetResultString(interp, "Infinite eval recursion", -1); retcode = JIM_ERR; goto out; } interp->evalDepth++; + prevPrivData = interp->cmdPrivData; Jim_SetEmptyResult(interp); if (cmdPtr->isproc) { retcode = JimCallProcedure(interp, cmdPtr, objc, objv); @@ -14919,10 +14810,11 @@ } else { interp->cmdPrivData = cmdPtr->u.native.privData; retcode = cmdPtr->u.native.cmdProc(interp, objc, objv); } + interp->cmdPrivData = prevPrivData; interp->evalDepth--; out: JimDecrCmdRefCount(interp, cmdPtr); @@ -15083,11 +14975,12 @@ totlen += intv[i]->length; } if (tokens == 1 && intv[0] && intv == sintv) { - Jim_DecrRefCount(interp, intv[0]); + + intv[0]->refCount--; return intv[0]; } objPtr = Jim_NewStringObjNoAlloc(interp, NULL, 0); @@ -15538,10 +15431,11 @@ retcode = Jim_EvalObj(interp, cmd->u.proc.bodyObjPtr); badargset: + retcode = JimInvokeDefer(interp, retcode); interp->framePtr = interp->framePtr->parent; JimFreeCallFrame(interp, callFramePtr, JIM_FCF_REUSE); if (interp->framePtr->tailcallObj) { @@ -15826,11 +15720,11 @@ JimPanic((argc == 0, "Jim_WrongNumArgs() called with argc=0")); listObjPtr = Jim_NewListObj(interp, argv, argc); - if (*msg) { + if (msg && *msg) { Jim_ListAppendElement(interp, listObjPtr, Jim_NewStringObj(interp, msg, -1)); } Jim_IncrRefCount(listObjPtr); objPtr = Jim_ListJoin(interp, listObjPtr, " ", 1); Jim_DecrRefCount(interp, listObjPtr); @@ -16066,12 +15960,17 @@ doubleRes = (double)res; goto trydouble; } if (op == JIM_EXPROP_SUB) res -= wideValue; - else + else { + if (wideValue == 0) { + Jim_SetResultString(interp, "Division by zero", -1); + return JIM_ERR; + } res /= wideValue; + } } Jim_SetResultInt(interp, res); return JIM_OK; trydouble: for (; i < argc; i++) { @@ -16219,11 +16118,11 @@ #ifdef JIM_OPTIMIZATION if (retval == JIM_OK && boolean) { ScriptObj *incrScript; - ExprByteCode *expr; + struct ExprTree *expr; jim_wide stop, currentVal; Jim_Obj *objPtr; int cmpOffset; @@ -16233,51 +16132,57 @@ if (incrScript == NULL || incrScript->len != 3 || !expr || expr->len != 3) { goto evalstart; } - if (incrScript->token[1].type != JIM_TT_ESC || - expr->token[0].type != JIM_TT_VAR || - (expr->token[1].type != JIM_TT_EXPR_INT && expr->token[1].type != JIM_TT_VAR)) { + if (incrScript->token[1].type != JIM_TT_ESC) { goto evalstart; } - if (expr->token[2].type == JIM_EXPROP_LT) { + if (expr->expr->type == JIM_EXPROP_LT) { cmpOffset = 0; } - else if (expr->token[2].type == JIM_EXPROP_LTE) { + else if (expr->expr->type == JIM_EXPROP_LTE) { cmpOffset = 1; } else { goto evalstart; } + + if (expr->expr->left->type != JIM_TT_VAR) { + goto evalstart; + } + + if (expr->expr->right->type != JIM_TT_VAR && expr->expr->right->type != JIM_TT_EXPR_INT) { + goto evalstart; + } if (!Jim_CompareStringImmediate(interp, incrScript->token[1].objPtr, "incr")) { goto evalstart; } - if (!Jim_StringEqObj(incrScript->token[2].objPtr, expr->token[0].objPtr)) { + if (!Jim_StringEqObj(incrScript->token[2].objPtr, expr->expr->left->objPtr)) { goto evalstart; } - if (expr->token[1].type == JIM_TT_EXPR_INT) { - if (Jim_GetWide(interp, expr->token[1].objPtr, &stop) == JIM_ERR) { + if (expr->expr->right->type == JIM_TT_EXPR_INT) { + if (Jim_GetWide(interp, expr->expr->right->objPtr, &stop) == JIM_ERR) { goto evalstart; } } else { - stopVarNamePtr = expr->token[1].objPtr; + stopVarNamePtr = expr->expr->right->objPtr; Jim_IncrRefCount(stopVarNamePtr); stop = 0; } - varNamePtr = expr->token[0].objPtr; + varNamePtr = expr->expr->left->objPtr; Jim_IncrRefCount(varNamePtr); objPtr = Jim_GetVariable(interp, varNamePtr, JIM_NONE); if (objPtr == NULL || Jim_GetWide(interp, objPtr, ¤tVal) != JIM_OK) { goto testcond; @@ -16480,11 +16385,11 @@ result = JIM_ERR; } } if (result != JIM_OK) { Jim_SetResultString(interp, "foreach varlist is empty", -1); - return result; + goto empty_varlist; } if (doMap) { resultObj = Jim_NewListObj(interp, NULL, 0); } @@ -16543,10 +16448,11 @@ out: result = JIM_OK; Jim_SetResult(interp, resultObj); err: Jim_DecrRefCount(interp, resultObj); + empty_varlist: if (numargs > 2) { Jim_Free(iters); } return result; } @@ -16669,19 +16575,17 @@ } return eq; } -enum -{ SWITCH_EXACT, SWITCH_GLOB, SWITCH_RE, SWITCH_CMD }; - static int Jim_SwitchCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { + enum { SWITCH_EXACT, SWITCH_GLOB, SWITCH_RE, SWITCH_CMD }; int matchOpt = SWITCH_EXACT, opt = 1, patCount, i; - Jim_Obj *command = 0, *const *caseList = 0, *strObj; - Jim_Obj *script = 0; + Jim_Obj *command = NULL, *scriptObj = NULL, *strObj; + Jim_Obj **caseList; if (argc < 3) { wrongnumargs: Jim_WrongNumArgs(interp, 1, argv, "?options? string " "pattern body ... ?default body? or " "{pattern body ?pattern body ...?}"); @@ -16718,68 +16622,62 @@ goto wrongnumargs; } strObj = argv[opt++]; patCount = argc - opt; if (patCount == 1) { - Jim_Obj **vector; - - JimListGetElements(interp, argv[opt], &patCount, &vector); - caseList = vector; + JimListGetElements(interp, argv[opt], &patCount, &caseList); } else - caseList = &argv[opt]; + caseList = (Jim_Obj **)&argv[opt]; if (patCount == 0 || patCount % 2 != 0) goto wrongnumargs; - for (i = 0; script == 0 && i < patCount; i += 2) { + for (i = 0; scriptObj == NULL && i < patCount; i += 2) { Jim_Obj *patObj = caseList[i]; if (!Jim_CompareStringImmediate(interp, patObj, "default") || i < (patCount - 2)) { switch (matchOpt) { case SWITCH_EXACT: if (Jim_StringEqObj(strObj, patObj)) - script = caseList[i + 1]; + scriptObj = caseList[i + 1]; break; case SWITCH_GLOB: if (Jim_StringMatchObj(interp, patObj, strObj, 0)) - script = caseList[i + 1]; + scriptObj = caseList[i + 1]; break; case SWITCH_RE: command = Jim_NewStringObj(interp, "regexp", -1); case SWITCH_CMD:{ int rc = Jim_CommandMatchObj(interp, command, patObj, strObj, 0); if (argc - opt == 1) { - Jim_Obj **vector; - - JimListGetElements(interp, argv[opt], &patCount, &vector); - caseList = vector; + JimListGetElements(interp, argv[opt], &patCount, &caseList); } if (rc < 0) { return -rc; } if (rc) - script = caseList[i + 1]; + scriptObj = caseList[i + 1]; break; } } } else { - script = caseList[i + 1]; + scriptObj = caseList[i + 1]; } } - for (; i < patCount && Jim_CompareStringImmediate(interp, script, "-"); i += 2) - script = caseList[i + 1]; - if (script && Jim_CompareStringImmediate(interp, script, "-")) { + for (; i < patCount && Jim_CompareStringImmediate(interp, scriptObj, "-"); i += 2) + scriptObj = caseList[i + 1]; + if (scriptObj && Jim_CompareStringImmediate(interp, scriptObj, "-")) { Jim_SetResultFormatted(interp, "no body specified for pattern \"%#s\"", caseList[i - 2]); return JIM_ERR; } Jim_SetEmptyResult(interp); - if (script) { - return Jim_EvalObj(interp, script); + if (scriptObj) { + return Jim_EvalObj(interp, scriptObj); } return JIM_OK; } @@ -17074,22 +16972,12 @@ first = JimRelToAbsIndex(len, first); last = JimRelToAbsIndex(len, last); JimRelToAbsRange(len, &first, &last, &rangeLen); - - if (first < len) { - - } - else if (len == 0) { - - first = 0; - } - else { - Jim_SetResultString(interp, "list doesn't contain element ", -1); - Jim_AppendObj(interp, Jim_GetResult(interp), argv[2]); - return JIM_ERR; + if (first > len) { + first = len; } newListObj = Jim_NewListObj(interp, listObj->internalRep.listValue.ele, first); @@ -17129,10 +17017,11 @@ enum { OPT_ASCII, OPT_NOCASE, OPT_INCREASING, OPT_DECREASING, OPT_COMMAND, OPT_INTEGER, OPT_REAL, OPT_INDEX, OPT_UNIQUE }; Jim_Obj *resObj; int i; int retCode; + int shared; struct lsort_info info; if (argc < 2) { Jim_WrongNumArgs(interp, 1, argv, "?options? list"); @@ -17194,16 +17083,18 @@ info.indexed = 1; i++; break; } } - resObj = Jim_DuplicateObj(interp, argv[argc - 1]); + resObj = argv[argc - 1]; + if ((shared = Jim_IsShared(resObj))) + resObj = Jim_DuplicateObj(interp, resObj); retCode = ListSortElements(interp, resObj, &info); if (retCode == JIM_OK) { Jim_SetResult(interp, resObj); } - else { + else if (shared) { Jim_FreeNewObj(interp, resObj); } return retCode; } @@ -17245,10 +17136,11 @@ } } Jim_SetResult(interp, stringObjPtr); return JIM_OK; } + static int Jim_DebugCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { #if !defined(JIM_DEBUG_COMMAND) @@ -17327,32 +17219,29 @@ } static int Jim_ExprCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { - Jim_Obj *exprResultPtr; int retcode; if (argc == 2) { - retcode = Jim_EvalExpression(interp, argv[1], &exprResultPtr); + retcode = Jim_EvalExpression(interp, argv[1]); } else if (argc > 2) { Jim_Obj *objPtr; objPtr = Jim_ConcatObj(interp, argc - 1, argv + 1); Jim_IncrRefCount(objPtr); - retcode = Jim_EvalExpression(interp, objPtr, &exprResultPtr); + retcode = Jim_EvalExpression(interp, objPtr); Jim_DecrRefCount(interp, objPtr); } else { Jim_WrongNumArgs(interp, 1, argv, "expression ?...?"); return JIM_ERR; } if (retcode != JIM_OK) return retcode; - Jim_SetResult(interp, exprResultPtr); - Jim_DecrRefCount(interp, exprResultPtr); return JIM_OK; } static int Jim_BreakCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) @@ -19652,28 +19541,45 @@ Jim_Free(tablePtrSorted); return JIM_OK; } return JIM_ERR; } + +static const Jim_ObjType getEnumObjType = { + "get-enum", + NULL, + NULL, + NULL, + JIM_TYPE_REFERENCES +}; int Jim_GetEnum(Jim_Interp *interp, Jim_Obj *objPtr, const char *const *tablePtr, int *indexPtr, const char *name, int flags) { const char *bad = "bad "; const char *const *entryPtr = NULL; int i; int match = -1; int arglen; - const char *arg = Jim_GetString(objPtr, &arglen); + const char *arg; + + if (objPtr->typePtr == &getEnumObjType) { + if (objPtr->internalRep.ptrIntValue.ptr == tablePtr && objPtr->internalRep.ptrIntValue.int1 == flags) { + *indexPtr = objPtr->internalRep.ptrIntValue.int2; + return JIM_OK; + } + } + + arg = Jim_GetString(objPtr, &arglen); *indexPtr = -1; for (entryPtr = tablePtr, i = 0; *entryPtr != NULL; entryPtr++, i++) { if (Jim_CompareStringImmediate(interp, objPtr, *entryPtr)) { - *indexPtr = i; - return JIM_OK; + match = i; + goto found; } if (flags & JIM_ENUM_ABBREV) { if (strncmp(arg, *entryPtr, arglen) == 0) { if (*arg == '-' && arglen == 1) { break; @@ -19687,10 +19593,18 @@ } } if (match >= 0) { + found: + + Jim_FreeIntRep(interp, objPtr); + objPtr->typePtr = &getEnumObjType; + objPtr->internalRep.ptrIntValue.ptr = (void *)tablePtr; + objPtr->internalRep.ptrIntValue.int1 = flags; + objPtr->internalRep.ptrIntValue.int2 = match; + *indexPtr = match; return JIM_OK; } ambiguous: @@ -19818,22 +19732,18 @@ } static void bad_subcmd(Jim_Interp *interp, const jim_subcmd_type * command_table, const char *type, Jim_Obj *cmd, Jim_Obj *subcmd) { - Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - Jim_AppendStrings(interp, Jim_GetResult(interp), Jim_String(cmd), ", ", type, - " command \"", Jim_String(subcmd), "\": should be ", NULL); + Jim_SetResultFormatted(interp, "%#s, %s command \"%#s\": should be ", cmd, type, subcmd); add_commands(interp, command_table, ", "); } static void show_cmd_usage(Jim_Interp *interp, const jim_subcmd_type * command_table, int argc, Jim_Obj *const *argv) { - Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - Jim_AppendStrings(interp, Jim_GetResult(interp), "Usage: \"", Jim_String(argv[0]), - " command ... \", where command is one of: ", NULL); + Jim_SetResultFormatted(interp, "Usage: \"%#s command ... \", where command is one of: ", argv[0]); add_commands(interp, command_table, ", "); } static void add_cmd_usage(Jim_Interp *interp, const jim_subcmd_type * ct, Jim_Obj *cmd) { @@ -19850,34 +19760,45 @@ { Jim_SetResultString(interp, "wrong # args: should be \"", -1); add_cmd_usage(interp, command_table, subcmd); Jim_AppendStrings(interp, Jim_GetResult(interp), "\"", NULL); } + +static const Jim_ObjType subcmdLookupObjType = { + "subcmd-lookup", + NULL, + NULL, + NULL, + JIM_TYPE_REFERENCES +}; const jim_subcmd_type *Jim_ParseSubCmd(Jim_Interp *interp, const jim_subcmd_type * command_table, int argc, Jim_Obj *const *argv) { const jim_subcmd_type *ct; const jim_subcmd_type *partial = 0; int cmdlen; Jim_Obj *cmd; const char *cmdstr; - const char *cmdname; int help = 0; - cmdname = Jim_String(argv[0]); - if (argc < 2) { - Jim_SetResult(interp, Jim_NewEmptyStringObj(interp)); - Jim_AppendStrings(interp, Jim_GetResult(interp), "wrong # args: should be \"", cmdname, - " command ...\"\n", NULL); - Jim_AppendStrings(interp, Jim_GetResult(interp), "Use \"", cmdname, " -help ?command?\" for help", NULL); + Jim_SetResultFormatted(interp, "wrong # args: should be \"%#s command ...\"\n" + "Use \"%#s -help ?command?\" for help", argv[0], argv[0]); return 0; } cmd = argv[1]; + + if (cmd->typePtr == &subcmdLookupObjType) { + if (cmd->internalRep.ptrIntValue.ptr == command_table) { + ct = command_table + cmd->internalRep.ptrIntValue.int1; + goto found; + } + } + if (Jim_CompareStringImmediate(interp, cmd, "-help")) { if (argc == 2) { show_cmd_usage(interp, command_table, argc, argv); @@ -19941,10 +19862,17 @@ add_cmd_usage(interp, ct, argv[0]); return &dummy_subcmd; } + + Jim_FreeIntRep(interp, cmd); + cmd->typePtr = &subcmdLookupObjType; + cmd->internalRep.ptrIntValue.ptr = (void *)command_table; + cmd->internalRep.ptrIntValue.int1 = ct - command_table; + +found: if (argc - 2 < ct->minargs || (ct->maxargs >= 0 && argc - 2 > ct->maxargs)) { Jim_SetResultString(interp, "wrong # args: should be \"", -1); add_cmd_usage(interp, ct, argv[0]); @@ -20133,11 +20061,12 @@ continue; } *p++ = ch; format += step; step = utf8_tounicode(format, &ch); - } while (sawFlag); + + } while (sawFlag && (p - spec <= 5)); width = 0; if (isdigit(ch)) { width = strtoul(format, &end, 10); @@ -20330,10 +20259,17 @@ #endif } *p++ = (char) ch; *p = '\0'; + + + if (width > 10000 || length > 10000 || precision > 10000) { + Jim_SetResultString(interp, "format too long", -1); + goto error; + } + if (width > length) { length = width; } @@ -20704,10 +20640,14 @@ return 0; } if (*end == '}') { max = min; } + else if (*end == '\0') { + preg->err = REG_ERR_UNMATCHED_BRACES; + return 0; + } else { preg->regparse = end; max = strtoul(preg->regparse + 1, &end, 10); if (*end != '}') { preg->err = REG_ERR_UNMATCHED_BRACES; @@ -20908,12 +20848,35 @@ while (*pattern && *pattern != ']') { int start; int end; + enum { + CC_ALPHA, CC_ALNUM, CC_SPACE, CC_BLANK, CC_UPPER, CC_LOWER, + CC_DIGIT, CC_XDIGIT, CC_CNTRL, CC_GRAPH, CC_PRINT, CC_PUNCT, + CC_NUM + }; + int cc; + pattern += reg_utf8_tounicode_case(pattern, &start, nocase); if (start == '\\') { + + switch (*pattern) { + case 's': + pattern++; + cc = CC_SPACE; + goto cc_switch; + case 'd': + pattern++; + cc = CC_DIGIT; + goto cc_switch; + case 'w': + pattern++; + reg_addrange(preg, '_', '_'); + cc = CC_ALNUM; + goto cc_switch; + } pattern += reg_decode_escape(pattern, &start); if (start == 0) { preg->err = REG_ERR_NULL_CHAR; return 0; } @@ -20936,27 +20899,22 @@ if (start == '[' && pattern[0] == ':') { static const char *character_class[] = { ":alpha:", ":alnum:", ":space:", ":blank:", ":upper:", ":lower:", ":digit:", ":xdigit:", ":cntrl:", ":graph:", ":print:", ":punct:", }; - enum { - CC_ALPHA, CC_ALNUM, CC_SPACE, CC_BLANK, CC_UPPER, CC_LOWER, - CC_DIGIT, CC_XDIGIT, CC_CNTRL, CC_GRAPH, CC_PRINT, CC_PUNCT, - CC_NUM - }; - int i; - - for (i = 0; i < CC_NUM; i++) { - n = strlen(character_class[i]); - if (strncmp(pattern, character_class[i], n) == 0) { + + for (cc = 0; cc < CC_NUM; cc++) { + n = strlen(character_class[cc]); + if (strncmp(pattern, character_class[cc], n) == 0) { pattern += n + 1; break; } } - if (i != CC_NUM) { - switch (i) { + if (cc != CC_NUM) { +cc_switch: + switch (cc) { case CC_ALNUM: reg_addrange(preg, '0', '9'); case CC_ALPHA: if ((preg->cflags & REG_ICASE) == 0) { @@ -21807,10 +21765,223 @@ { free(preg->program); } #endif +#include + +void Jim_SetResultErrno(Jim_Interp *interp, const char *msg) +{ + Jim_SetResultFormatted(interp, "%s: %s", msg, strerror(Jim_Errno())); +} + +#if defined(__MINGW32__) +#include + +int Jim_Errno(void) +{ + switch (GetLastError()) { + case ERROR_FILE_NOT_FOUND: return ENOENT; + case ERROR_PATH_NOT_FOUND: return ENOENT; + case ERROR_TOO_MANY_OPEN_FILES: return EMFILE; + case ERROR_ACCESS_DENIED: return EACCES; + case ERROR_INVALID_HANDLE: return EBADF; + case ERROR_BAD_ENVIRONMENT: return E2BIG; + case ERROR_BAD_FORMAT: return ENOEXEC; + case ERROR_INVALID_ACCESS: return EACCES; + case ERROR_INVALID_DRIVE: return ENOENT; + case ERROR_CURRENT_DIRECTORY: return EACCES; + case ERROR_NOT_SAME_DEVICE: return EXDEV; + case ERROR_NO_MORE_FILES: return ENOENT; + case ERROR_WRITE_PROTECT: return EROFS; + case ERROR_BAD_UNIT: return ENXIO; + case ERROR_NOT_READY: return EBUSY; + case ERROR_BAD_COMMAND: return EIO; + case ERROR_CRC: return EIO; + case ERROR_BAD_LENGTH: return EIO; + case ERROR_SEEK: return EIO; + case ERROR_WRITE_FAULT: return EIO; + case ERROR_READ_FAULT: return EIO; + case ERROR_GEN_FAILURE: return EIO; + case ERROR_SHARING_VIOLATION: return EACCES; + case ERROR_LOCK_VIOLATION: return EACCES; + case ERROR_SHARING_BUFFER_EXCEEDED: return ENFILE; + case ERROR_HANDLE_DISK_FULL: return ENOSPC; + case ERROR_NOT_SUPPORTED: return ENODEV; + case ERROR_REM_NOT_LIST: return EBUSY; + case ERROR_DUP_NAME: return EEXIST; + case ERROR_BAD_NETPATH: return ENOENT; + case ERROR_NETWORK_BUSY: return EBUSY; + case ERROR_DEV_NOT_EXIST: return ENODEV; + case ERROR_TOO_MANY_CMDS: return EAGAIN; + case ERROR_ADAP_HDW_ERR: return EIO; + case ERROR_BAD_NET_RESP: return EIO; + case ERROR_UNEXP_NET_ERR: return EIO; + case ERROR_NETNAME_DELETED: return ENOENT; + case ERROR_NETWORK_ACCESS_DENIED: return EACCES; + case ERROR_BAD_DEV_TYPE: return ENODEV; + case ERROR_BAD_NET_NAME: return ENOENT; + case ERROR_TOO_MANY_NAMES: return ENFILE; + case ERROR_TOO_MANY_SESS: return EIO; + case ERROR_SHARING_PAUSED: return EAGAIN; + case ERROR_REDIR_PAUSED: return EAGAIN; + case ERROR_FILE_EXISTS: return EEXIST; + case ERROR_CANNOT_MAKE: return ENOSPC; + case ERROR_OUT_OF_STRUCTURES: return ENFILE; + case ERROR_ALREADY_ASSIGNED: return EEXIST; + case ERROR_INVALID_PASSWORD: return EPERM; + case ERROR_NET_WRITE_FAULT: return EIO; + case ERROR_NO_PROC_SLOTS: return EAGAIN; + case ERROR_DISK_CHANGE: return EXDEV; + case ERROR_BROKEN_PIPE: return EPIPE; + case ERROR_OPEN_FAILED: return ENOENT; + case ERROR_DISK_FULL: return ENOSPC; + case ERROR_NO_MORE_SEARCH_HANDLES: return EMFILE; + case ERROR_INVALID_TARGET_HANDLE: return EBADF; + case ERROR_INVALID_NAME: return ENOENT; + case ERROR_PROC_NOT_FOUND: return ESRCH; + case ERROR_WAIT_NO_CHILDREN: return ECHILD; + case ERROR_CHILD_NOT_COMPLETE: return ECHILD; + case ERROR_DIRECT_ACCESS_HANDLE: return EBADF; + case ERROR_SEEK_ON_DEVICE: return ESPIPE; + case ERROR_BUSY_DRIVE: return EAGAIN; + case ERROR_DIR_NOT_EMPTY: return EEXIST; + case ERROR_NOT_LOCKED: return EACCES; + case ERROR_BAD_PATHNAME: return ENOENT; + case ERROR_LOCK_FAILED: return EACCES; + case ERROR_ALREADY_EXISTS: return EEXIST; + case ERROR_FILENAME_EXCED_RANGE: return ENAMETOOLONG; + case ERROR_BAD_PIPE: return EPIPE; + case ERROR_PIPE_BUSY: return EAGAIN; + case ERROR_PIPE_NOT_CONNECTED: return EPIPE; + case ERROR_DIRECTORY: return ENOTDIR; + } + return EINVAL; +} + +pidtype waitpid(pidtype pid, int *status, int nohang) +{ + DWORD ret = WaitForSingleObject(pid, nohang ? 0 : INFINITE); + if (ret == WAIT_TIMEOUT || ret == WAIT_FAILED) { + + return JIM_BAD_PID; + } + GetExitCodeProcess(pid, &ret); + *status = ret; + CloseHandle(pid); + return pid; +} + +int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template, int unlink_file) +{ + char name[MAX_PATH]; + HANDLE handle; + + if (!GetTempPath(MAX_PATH, name) || !GetTempFileName(name, filename_template ? filename_template : "JIM", 0, name)) { + return -1; + } + + handle = CreateFile(name, GENERIC_READ | GENERIC_WRITE, 0, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY | (unlink_file ? FILE_FLAG_DELETE_ON_CLOSE : 0), + NULL); + + if (handle == INVALID_HANDLE_VALUE) { + goto error; + } + + Jim_SetResultString(interp, name, -1); + return _open_osfhandle((int)handle, _O_RDWR | _O_TEXT); + + error: + Jim_SetResultErrno(interp, name); + DeleteFile(name); + return -1; +} + +int Jim_OpenForWrite(const char *filename, int append) +{ + if (strcmp(filename, "/dev/null") == 0) { + filename = "nul:"; + } + int fd = _open(filename, _O_WRONLY | _O_CREAT | _O_TEXT | (append ? _O_APPEND : _O_TRUNC), _S_IREAD | _S_IWRITE); + if (fd >= 0 && append) { + + _lseek(fd, 0L, SEEK_END); + } + return fd; +} + +int Jim_OpenForRead(const char *filename) +{ + if (strcmp(filename, "/dev/null") == 0) { + filename = "nul:"; + } + return _open(filename, _O_RDONLY | _O_TEXT, 0); +} + +#elif defined(HAVE_UNISTD_H) + + + +int Jim_MakeTempFile(Jim_Interp *interp, const char *filename_template, int unlink_file) +{ + int fd; + mode_t mask; + Jim_Obj *filenameObj; + + if (filename_template == NULL) { + const char *tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL || *tmpdir == '\0' || access(tmpdir, W_OK) != 0) { + tmpdir = "/tmp/"; + } + filenameObj = Jim_NewStringObj(interp, tmpdir, -1); + if (tmpdir[0] && tmpdir[strlen(tmpdir) - 1] != '/') { + Jim_AppendString(interp, filenameObj, "/", 1); + } + Jim_AppendString(interp, filenameObj, "tcl.tmp.XXXXXX", -1); + } + else { + filenameObj = Jim_NewStringObj(interp, filename_template, -1); + } + + + mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); +#ifdef HAVE_MKSTEMP + fd = mkstemp(filenameObj->bytes); +#else + if (mktemp(filenameObj->bytes) == NULL) { + fd = -1; + } + else { + fd = open(filenameObj->bytes, O_RDWR | O_CREAT | O_TRUNC); + } +#endif + umask(mask); + if (fd < 0) { + Jim_SetResultErrno(interp, Jim_String(filenameObj)); + Jim_FreeNewObj(interp, filenameObj); + return -1; + } + if (unlink_file) { + remove(Jim_String(filenameObj)); + } + + Jim_SetResult(interp, filenameObj); + return fd; +} + +int Jim_OpenForWrite(const char *filename, int append) +{ + return open(filename, O_WRONLY | O_CREAT | (append ? O_APPEND : O_TRUNC), 0666); +} + +int Jim_OpenForRead(const char *filename) +{ + return open(filename, O_RDONLY, 0); +} + +#endif #if defined(_WIN32) || defined(WIN32) #ifndef STRICT #define STRICT #endif @@ -21925,10 +22096,36 @@ } return result; } #endif #endif +#include +#include + + + + + + +#ifndef SIGPIPE +#define SIGPIPE 13 +#endif +#ifndef SIGINT +#define SIGINT 2 +#endif + +const char *Jim_SignalId(int sig) +{ + static char buf[10]; + switch (sig) { + case SIGINT: return "SIGINT"; + case SIGPIPE: return "SIGPIPE"; + + } + snprintf(buf, sizeof(buf), "%d", sig); + return buf; +} #ifndef JIM_BOOTSTRAP_LIB_ONLY #include #include @@ -21942,14 +22139,34 @@ #include "linenoise.h" #else #define MAX_LINE_LEN 512 #endif -char *Jim_HistoryGetline(const char *prompt) +#ifdef USE_LINENOISE +static void JimCompletionCallback(const char *prefix, linenoiseCompletions *comp, void *userdata); +static const char completion_callback_assoc_key[] = "interactive-completion"; +#endif + +char *Jim_HistoryGetline(Jim_Interp *interp, const char *prompt) { #ifdef USE_LINENOISE - return linenoise(prompt); + struct JimCompletionInfo *compinfo = Jim_GetAssocData(interp, completion_callback_assoc_key); + char *result; + Jim_Obj *objPtr; + long mlmode = 0; + if (compinfo) { + linenoiseSetCompletionCallback(JimCompletionCallback, compinfo); + } + objPtr = Jim_GetVariableStr(interp, "history::multiline", JIM_NONE); + if (objPtr && Jim_GetLong(interp, objPtr, &mlmode) == JIM_NONE) { + linenoiseSetMultiLine(mlmode); + } + + result = linenoise(prompt); + + linenoiseSetCompletionCallback(NULL, NULL); + return result; #else int len; char *line = malloc(MAX_LINE_LEN); fputs(prompt, stdout); @@ -21989,11 +22206,11 @@ mask = umask(S_IXUSR | S_IRWXG | S_IRWXO); #endif linenoiseHistorySave(filename); #ifdef HAVE_UMASK - mask = umask(mask); + umask(mask); #endif #endif } void Jim_HistoryShow(void) @@ -22013,11 +22230,11 @@ struct JimCompletionInfo { Jim_Interp *interp; Jim_Obj *command; }; -void JimCompletionCallback(const char *prefix, linenoiseCompletions *comp, void *userdata) +static void JimCompletionCallback(const char *prefix, linenoiseCompletions *comp, void *userdata) { struct JimCompletionInfo *info = (struct JimCompletionInfo *)userdata; Jim_Obj *objv[2]; int ret; @@ -22034,34 +22251,57 @@ for (i = 0; i < len; i++) { linenoiseAddCompletion(comp, Jim_String(Jim_ListGetIndex(info->interp, listObj, i))); } } } + +static void JimHistoryFreeCompletion(Jim_Interp *interp, void *data) +{ + struct JimCompletionInfo *compinfo = data; + + Jim_DecrRefCount(interp, compinfo->command); + + Jim_Free(compinfo); +} +#endif + +void Jim_HistorySetCompletion(Jim_Interp *interp, Jim_Obj *commandObj) +{ +#ifdef USE_LINENOISE + if (commandObj) { + + Jim_IncrRefCount(commandObj); + } + + Jim_DeleteAssocData(interp, completion_callback_assoc_key); + + if (commandObj) { + struct JimCompletionInfo *compinfo = Jim_Alloc(sizeof(*compinfo)); + compinfo->interp = interp; + compinfo->command = commandObj; + + Jim_SetAssocData(interp, completion_callback_assoc_key, JimHistoryFreeCompletion, compinfo); + } #endif +} int Jim_InteractivePrompt(Jim_Interp *interp) { int retcode = JIM_OK; char *history_file = NULL; #ifdef USE_LINENOISE const char *home; - struct JimCompletionInfo compinfo; home = getenv("HOME"); if (home && isatty(STDIN_FILENO)) { int history_len = strlen(home) + sizeof("/.jim_history"); history_file = Jim_Alloc(history_len); snprintf(history_file, history_len, "%s/.jim_history", home); Jim_HistoryLoad(history_file); } - compinfo.interp = interp; - compinfo.command = Jim_NewStringObj(interp, "tcl::autocomplete", -1); - Jim_IncrRefCount(compinfo.command); - - - linenoiseSetCompletionCallback(JimCompletionCallback, &compinfo); + Jim_HistorySetCompletion(interp, Jim_NewStringObj(interp, "tcl::autocomplete", -1)); #endif printf("Welcome to Jim version %d.%d\n", JIM_VERSION / 100, JIM_VERSION % 100); Jim_SetVariableStrWithStr(interp, JIM_INTERACTIVE, "1"); @@ -22090,11 +22330,11 @@ Jim_IncrRefCount(scriptObjPtr); while (1) { char state; char *line; - line = Jim_HistoryGetline(prompt); + line = Jim_HistoryGetline(interp, prompt); if (line == NULL) { if (errno == EINTR) { continue; } Jim_DecrRefCount(interp, scriptObjPtr); @@ -22140,15 +22380,10 @@ } } out: Jim_Free(history_file); -#ifdef USE_LINENOISE - Jim_DecrRefCount(interp, compinfo.command); - linenoiseSetCompletionCallback(NULL, NULL); -#endif - return retcode; } #include #include DELETED autosetup/markdown-formatting.tcl Index: autosetup/markdown-formatting.tcl ================================================================== --- autosetup/markdown-formatting.tcl +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module which provides text formatting -# markdown format (kramdown syntax) - -use formatting - -proc para {text} { - regsub -all "\[ \t\n\]+" [string trim $text] " " text - regsub -all {([^a-zA-Z])'([^']*)'} $text {\1**`\2`**} text - regsub -all {^'([^']*)'} $text {**`\1`**} text - regsub -all {(http[^ \t\n]*)} $text {[\1](\1)} text - return $text -} -proc title {text} { - underline [para $text] = - nl -} -proc p {text} { - puts [para $text] - nl -} -proc codelines {lines} { - puts "~~~~~~~~~~~~" - foreach line $lines { - puts $line - } - puts "~~~~~~~~~~~~" - nl -} -proc code {text} { - puts "~~~~~~~~~~~~" - foreach line [parse_code_block $text] { - puts $line - } - puts "~~~~~~~~~~~~" - nl -} -proc nl {} { - puts "" -} -proc underline {text char} { - regexp "^(\[ \t\]*)(.*)" $text -> indent words - puts $text - puts $indent[string repeat $char [string length $words]] -} -proc section {text} { - underline "[para $text]" - - nl -} -proc subsection {text} { - puts "### `$text`" - nl -} -proc bullet {text} { - puts "* [para $text]" -} -proc defn {first args} { - puts "^" - set defn [string trim [join $args \n]] - if {$first ne ""} { - puts "**${first}**" - puts -nonewline ": " - regsub -all "\n\n" $defn "\n: " defn - } - puts "$defn" -} DELETED autosetup/migrate-autoconf Index: autosetup/migrate-autoconf ================================================================== --- autosetup/migrate-autoconf +++ /dev/null @@ -1,718 +0,0 @@ -#!/bin/sh -# Copyright (c) 2011 WorkWare Systems http://www.workware.net.au/ -# All rights reserved -# vim:se syntax=tcl: -# \ -dir=`dirname "$0"`; exec "`$dir/find-tclsh`" "$0" "$@" - -# Migrates configure.in or configure.ac to auto.def - -proc dputs {msg} { - # Uncomment this for debugging - #puts $msg -} -proc make-quoted-string {str} { - return \"[string map {\" \\" \[ \\[ \] \\]} $str]\" -} - -# Remove white space and trailing backslash -proc clean-arg {str} { - set str [string trim $str] - if {[string index $str end] eq "\\"} { - set str [string trim [string range $str 0 end-1]] - } - return $str -} - -# Parse m4 macro args into a list, removing brackets -proc split-comma-args {str} { - #dputs "split-comma-args $str" - set args {} - # Step one char at a time and keep track of if we are in a bracketed expression - set inbracket 0 - set inparen 0 - foreach c [split $str {}] { - if {!$inbracket} { - if {$inparen} { - if {$c eq ")"} { - incr inparen -1 - } - } elseif {$c eq "("} { - incr inparen - } elseif {$c eq {[}} { - incr inbracket - continue - } elseif {$c eq ","} { - append arg "" - lappend args [clean-arg $arg] - unset arg - continue - } - } else { - if {$c eq {[}} { - incr inbracket - } elseif {$c eq {]}} { - if {[incr inbracket -1] == 0} { - continue - } - } - } - append arg $c - } - if {[info exists arg]} { - lappend args [clean-arg $arg] - } - #dputs "===> $args" - return $args -} - -proc count-chars {str c} { - set i 0 - set n 0 - while {[set i [string first $c $str $i]] >= 0} { - incr i - incr n - } - return $n -} - -proc check-complete {str} { - if {[count-chars $str (] != [count-chars $str )]} { - return 0 - } - if {[count-chars $str \[] != [count-chars $str \]]} { - return 0 - } - return 1 -} - -proc add-complete-statement {n statement} { - if {![regexp {^(.*?)\((.*?)\)$} $statement -> cmd args]} { - # Maybe there is something after ) - if {![regexp {^(.*?)\((.*?)\)(.*)$} $statement -> cmd args rest]} { - puts stderr "*** On line $n, failed to interpret:" - puts stderr $statement - puts stderr "\n*** If this is a nested macro, try indenting embedded macros" - exit 1 - } else { - lappend args [list # $rest] - } - } - if {[string match {*,*} $args] || [string match {*\[*} $args]} { - # Contains brackets and/or commas. - # Need to split on commas and remove brackets - set args [split-comma-args $args] - } else { - set args [list $args] - } - return [list ! $n $cmd $args] -} - -# Converts a list of lines into a "program" -proc parse-autoconf {lines} { - set n 0 - set statement {} - set prog {} - foreach line $lines { - incr n - set line [string trimright $line] - regsub {\mdnl\M.*$} $line "" line - if {$statement eq {}} { - set statement [string trimleft $line] - if {![string match {A[SCMX]_*} $statement]} { - lappend prog [list # $statement] - set statement {} - continue - } - } elseif {[string match {A[SCMX]_*} $line]} { - # Found a macro call in the left column, so assume the previous - # statement is complete - lappend prog [add-complete-statement [expr {$n - 1}] $statement] - set statement $line - } else { - if {[string index $statement end] eq "\\"} { - # Got a trailing backslash on the previous line, so combine the lines - set statement [string range $statement 0 end-1] - append statement " " [string trim $line] - } else { - append statement \n $line - } - } - - if {![string match *(* $statement]} { - lappend prog [list ! $n $statement {}] - set statement {} - continue - } - - # Is this statement complete? - if {![string match *)* $statement]} { - continue - } - - if {[check-complete $statement]} { - lappend prog [add-complete-statement $n $statement] - set statement {} - } - } - if {$statement ne ""} { - dputs "Got some leftover: $statement" - #exit 1 - } - return $prog -} - -proc output {msg} { - puts $::outf "$::indent$msg" -} - -# Finds AC_ARG_WITH and AC_ARG_ENABLE to -# output an appropriate options declaration -proc output-options {prog} { - output "options {" - - # options - foreach l $prog { - set l [lassign $l type n cmd args] - if {$type ne "#" && $cmd eq "AC_ARG_WITH"} { - lassign $args opt help true false - if {![regexp {=(.*?)\s+(.*)} $help -> arg desc]} { - # This is actually a boolean option - set arg "" - set desc $help - regexp {\s+(.*)} $desc -> desc - } else { - # Strip off any trailing ] or , - set arg :[string map [list \] "" , ""] $arg] - } - regsub -all {[()\[\]]} $desc "" desc - output [format "\t%-15s => %s" with-$opt$arg [list $desc]] - continue - } - if {$type ne "#" && $cmd eq "AC_ARG_ENABLE"} { - lassign $args opt help true false - set def 0 - if {[regexp -- {--(enable|disable)-(.*?)\s+(.*)} $help -> ed arg desc]} { - if {$ed eq "disable"} { - set def 1 - } - } else { - set desc $help - } - # Remember the sense of this option - set ::boolopts($opt) $def - regsub -all {[()\[\]]} $desc "" desc - output [format "\t%-15s => %s" $opt=$def [list $desc]] - } - } - output "}\n" -} - -proc output-unknown {action} { - set lines [lassign [split $action \n] first] - output "# XXX $first" - foreach l $lines { - output "# $l" - } -} - -proc output-auto-def {prog} { - foreach l $prog { - set l [lassign $l type] - if {$type eq "#"} { - lassign $l line - set line [string trim $line] - if {$line eq "" || [string match "#*" $line]} { - output $line - } elseif {[string match "dnl *" $line]} { - output "# [string range $line 4 end]" - } elseif {[regexp {([a-z0-9_]+)=(.*)} $line -> name val]} { - output "set $name $val" - } else { - output-unknown $line - } - } else { - lassign $l n cmd args - dputs "! $n $cmd [llength $args] [join $args |]" - if {[info procs $cmd] eq ""} { - output-unknown [concat $cmd {*}$args] - puts stderr "Unknown: $cmd" - } else { - if {[catch {$cmd {*}$args} msg]} { - puts stderr "At line $n, could not understand $cmd" - output-unknown [concat $cmd {*}$args] - } - } - } - } -} - -proc split-comma-fields {str} { - set result {} - foreach i [split $str ,] { - lappend result [string trim $i] - } - return $result -} - -proc incr-level {} { - append ::indent \t -} - -proc decr-level {} { - set ::indent [string range $::indent 0 end-1] -} - -proc output-shell-action {action} { - set prog [parse-autoconf [split $action \n]] - incr-level - output-auto-def $prog - decr-level -} - -proc AC_MSG_NOTICE {args} { - output "msg-result [make-quoted-string [join $args]]" -} - -proc AC_MSG_RESULT {args} { - output "msg-result [make-quoted-string [join $args]]" -} - -proc AC_MSG_WARN {args} { - output "msg-result Warning: [make-quoted-string [join $args]]" -} - -proc AC_MSG_ERROR {args} { - output "user-error [make-quoted-string [join $args]]" -} - -proc AC_MSG_CHECKING {args} { - output "msg-checking [make-quoted-string "Checking [join $args]..."]" -} - -proc AC_CONFIG_FILES {files} { - foreach file $files { - # XXX input file can have a different name - output "make-template $file.in" - } -} - - -proc AC_OUTPUT {{filename {}}} { - AC_CONFIG_FILES $filename - foreach header $::output_headers { - output "make-config-header $header" - } - set ::output_headers {} -} - -proc AC_CONFIG_HEADER {filename} { - lappend ::output_headers $filename -} - -proc AC_CONFIG_HEADERS {{filename config.h} args} { - AC_CONFIG_HEADER $filename -} - -proc AS_MKDIR_P {dir} { - output [list file mkdir $dir] -} - -proc AC_SYS_LARGEFILE {args} { - output "use cc-lib" - output "cc-check-lfs" -} - -proc AC_CHECK_TOOL {define name {false ""}} { - do-true-false "cc-check-tools $name" "" $false -} -proc AC_CHECK_PROG {define name def args} { - output "if {!\[cc-check-progs $name\]} { define $define $def }" -} - -proc AC_PROG_INSTALL {} { - output "cc-check-progs install" -} -proc AC_PROG_LIBTOOL {} { - output "cc-check-progs libtool" -} -proc AC_PROG_RANLIB {} { - output "cc-check-tools ranlib" -} -proc AM_PROG_AR {} { - output "cc-check-tools ar" -} -proc AC_PROG_CPP {} { - output "cc-check-tools cpp" -} -proc AC_PROG_YACC {} { - output "foreach prog {bison yacc} { if {\[cc-check-progs \$prog\]} { define YACC \$prog; break } }" -} - -proc check-headers {args} { - output "cc-check-includes $args" -} - -proc AC_HEADER_STDC {args} {} -proc AC_HEADER_SYS_WAIT {args} { - check-headers sys/wait.h -} -proc AC_HEADER_DIRENT {args} { - check-headers dirent.h -} -proc AC_HEADER_TIME {args} { - check-headers sys/time.h time.h -} -proc AC_HEADER_STAT {args} { - check-headers sys/stat.h stat.h -} -proc AC_HEADER_STDBOOL {args} { - check-headers stdbool.h -} -proc ac_type_xxx {type} { - output "cc-with {-includes {stdlib.h unistd.h fcntl.h sys/types.h netinet/in.h}} {\n\tcc-check-types $type\n}" -} - -proc AC_CHECK_HEADERS {hdrlist {true {}} {false {}} {decl {}}} { - do-true-false "cc-check-includes $hdrlist" $true $false $decl -} - -proc AC_CHECK_HEADER {header {true {}} {false {}}} { - AC_CHECK_HEADERS $header $true $false -} - -proc AC_TYPE_UID_T {args} { - ac_type_xxx uid_t -} - -proc AC_TYPE_MODE_T {args} { - ac_type_xxx mode_t -} - -proc AC_TYPE_PID_T {args} { - ac_type_xxx pid_t -} - -proc AC_TYPE_SIZE_T {args} { - ac_type_xxx size_t -} - -proc AC_TYPE_SSIZE_T {args} { - ac_type_xxx ssize_t -} - -proc AC_TYPE_OFF_T {args} { - ac_type_xxx off_t -} - -proc AC_CHECK_MEMBERS {typelist {true {}} {false {}} {decl {}}} { - do-true-false [list cc-check-members {*}[split-comma-fields $typelist]] $true $false $decl -} -proc do-true-false {cmd true false {decl {}}} { - if {$decl ne ""} { - output "cc-with {[examine-cc-decl $decl]} \{" - incr-level - } - if {$true eq "" && $false eq ""} { - output $cmd - } else { - set not "" - if {$true eq ""} { - set not ! - set true $false - set false "" - } - output "if {$not\[$cmd\]} \{" - output-shell-action $true - if {$false ne ""} { - output "\} else \{" - output-shell-action $false - } - output "\}" - } - if {$decl ne ""} { - decr-level - output "\}" - } -} - -proc AC_CHECK_TYPE {types {true ""} {false ""} {decl ""}} { - do-true-false "cc-check-types $types" $true $false $decl -} - -proc AC_CHECK_TYPES {types {true {}} {false {}} {decl {}}} { - AC_CHECK_TYPE [split-comma-fields $types] $true $false $decl -} - -proc AC_CHECK_FUNCS {funcs {true {}} {false {}}} { - do-true-false "cc-check-functions $funcs" $true $false -} - -proc AC_CHECK_DECLS {symbols {true {}} {false {}} {decl {}}} { - do-true-false "cc-check-decls [split-comma-fields $symbols]" $true $false $decl -} - - -proc AC_FUNC_MEMCMP {args} { - output "cc-check-functions memcmp" -} - -proc AC_FUNC_FORK {args} { - output "cc-check-functions fork" -} - -proc AC_TYPE_SIGNAL {args} { - output "cc-signal-return-type" -} - -proc AC_CHECK_LIB {libname funcname {true {}} {false {}} {extralibs {}}} { - if {$extralibs ne ""} { - output "cc-with {-libs {$extralibs}} \{" - incr-level - } - do-true-false "cc-check-function-in-lib $funcname $libname" $true $false - if {$extralibs ne ""} { - output "\}" - decr-level - } -} - -proc AC_SEARCH_LIBS {funcname libnames {true {}} {false {}}} { - AC_CHECK_LIB $libnames $funcname $true $false -} - -proc AC_ARG_WITH {opt help true {false {}}} { - output "if {\[opt-val with-$opt\] ne {}} {" - output "\tset withval \[lindex \[opt-val with-$opt\] end\]" - output-shell-action $true - if {$false ne ""} { - output "\} else \{" - output-shell-action $false - } - output "}" -} - -proc AC_ARG_ENABLE {opt help {true {}} {false {}}} { - set not "" - if {$::boolopts($opt)} { - set not ! - } - output "if {$not\[opt-bool $opt\]} {" - output-shell-action $true - if {$false ne ""} { - output "\} else \{" - output-shell-action $false - } - output "}" -} - -proc AC_CACHE_CHECK {desc var action} { - output-shell-action $action -} -proc AC_COMPILE_IFELSE {action {true {}} {false {}}} { - # The macro definition here is nested, so we need to "unnest" it - set action [split [string map {[[ [ ]] ]} $action] \n] - set prog [parse-autoconf $action] - lassign [lindex $prog 0] type n cmd args - - if {$cmd ne "AC_LANG_PROGRAM"} { - output-unknown "AC_COMPILE_IFELSE $action $true $false" - } else { - lassign $args decl code - AC_TRY_COMPILE $decl $code $true $false - } -} - -proc AC_LINK_IFELSE {action {true {}} {false {}}} { - # The macro definition here is nested, so we need to "unnest" it - set action [split [string map {[[ [ ]] ]} $action] \n] - set prog [parse-autoconf $action] - lassign [lindex $prog 0] type n cmd args - - if {$cmd ne "AC_LANG_PROGRAM"} { - output-unknown "AC_COMPILE_IFELSE $action $true $false" - } else { - lassign $args decl code - AC_TRY_LINK $decl $code $true $false - } -} - -proc AC_CACHE_VAL {var action args} { - output-shell-action $action -} - -proc AC_DEFINE {def args} { - output "define $def" -} - -proc AC_DEFINE_UNQUOTED {def value args} { - output "define $def [make-quoted-string $value ]" -} - -proc AC_CHECK_DECL {def {true {}} {false {}} {decl {}}} { - do-true-false "cc-check-decls $def" $true $false $decl -} - -proc AC_CHECK_SIZEOF {type {def ""}} { - output "cc-check-sizeof [make-quoted-string $type]" -} - -proc AC_FUNC_ALLOCA {args} { - output "cc-check-alloca" -} -proc AC_FUNC_GETPGRP {} { - output "cc-check-functions getpgrp" -} -proc AC_FUNC_VPRINTF {} { - output "cc-check-functions vprintf" -} -proc AC_FUNC_WAIT3 {} { - output "cc-check-functions wait3" -} -proc AC_FUNC_STRCOLL {} { - output "cc-check-functions strcoll" -} -proc AC_CHECK_FUNC {func {true {}} {false {}}} { - do-true-false "cc-check-functions $func" $true $false -} - -# Examine declarations and try to pull out things like: -# #include -# and -# #ifdef HAVE_ABC_DEF_H -# #include -# #endif -# -# Returns a list like: -# -includes {list} -declare {list} -# -proc examine-cc-decl {decl} { - set omit_endif 0 - set includes {} - set decls {} - foreach line [split $decl \n] { - if {$line eq ""} { - continue - } - set line [string trimleft $line \[] - set line [string trimright $line \]] - if {[regexp {#\s*if(def)?\s+HAVE_} $line]} { - incr omit_endif - continue - } - if {$omit_endif && [string match "*#*endif*" $line]} { - set omit_endif 0 - continue - } - if {[regexp {#\s*include.*<(.*)>} $line -> i]} { - lappend includes $i - continue - } - regsub -all {[\[\]} $line "" line - lappend decls [string trim $line] - } - set result {} - if {[llength $includes]} { - lappend result -includes $includes - } - if {[llength $decls]} { - lappend result -declare [join $decls \n] - } - return $result -} - -proc AC_TRY_LINK {decl code {true {}} {false {}}} { - if {[string match *\n* $code]} { - set code \n$code\n - } - do-true-false "cctest -link 1 [examine-cc-decl $decl] -code {$code}" $true $false -} - -proc AC_TRY_COMPILE {decl code {true {}} {false {}}} { - if {[string match *\n* $code]} { - set code \n$code\n - } - do-true-false "cctest [examine-cc-decl $decl] -code {$code}" $true $false -} - -proc AC_LANG_WERROR {args} { - output "define-append CFLAGS -Werror" -} - -proc AC_GNU_SOURCE {args} { - output "define-append CFLAGS -D_GNU_SOURCE" -} - -proc AC_C_BIGENDIAN {args} { - output "cc-check-endian" -} - -set subst_msg 0 -proc AC_SUBST {args} { - if {$::subst_msg == 0} { - incr ::subst_msg - output "# XXX autosetup automatically substitutes all define'd values" - output "# In general, simply 'define' the value rather than using a shell" - output "# variable and AC_SUBST." - output "#" - } - output-unknown [concat AC_SUBST {*}$args] -} - -proc AC_PREREQ {version} {} -proc AC_INIT {filename args} {} -proc AC_PROG_CC {args} {} -proc AC_PROG_MAKE_SET {args} {} -proc AC_CANONICAL_HOST {args} {} -proc AC_C_CONST {args} {} -proc AC_PROG_GCC_TRADITIONAL {args} {} -proc AC_CONFIG_SRCDIR {args} {} -proc AC_CANONICAL_SYSTEM {args} {} -proc AC_EXEEXT {args} {} - -# ------------------------- - -set infile [glob -nocomplain configure.in configure.ac] -switch [llength $infile] { - 0 { - puts stderr "Could not find either configure.in or configure.ac" - exit 1 - } - 2 { - puts stderr "Both configure.in and configure.ac found. Please remove one" - exit 1 - } -} - -lassign $argv autodef -if {$autodef eq ""} { - set autodef auto.def -} - -if {[file exists $autodef]} { - puts stderr "$autodef already exists. Will not overwrite it" - exit 1 -} - -puts "Migrating $infile to $autodef" - -set f [open $infile] -set lines [split [read $f] \n] -close $f - -set prog [parse-autoconf $lines] - -set outf [open $autodef w] - -set indent "" -set output_headers {} - -output "# Created by [file tail $argv0] - fix items marked XXX\n" -output "use cc cc-lib\n" - -output-options $prog - -output-auto-def $prog -close $outf - -puts "Created $autodef. Now edit to resolve items marked XXX" DELETED autosetup/misc.tcl Index: autosetup/misc.tcl ================================================================== --- autosetup/misc.tcl +++ /dev/null @@ -1,173 +0,0 @@ -# Copyright (c) 2007-2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module containing misc procs useful to modules -# Largely for platform compatibility - -set autosetup(istcl) [info exists ::tcl_library] -set autosetup(iswin) [string equal windows $tcl_platform(platform)] - -if {$autosetup(iswin)} { - # mingw/windows separates $PATH with semicolons - # and doesn't have an executable bit - proc split-path {} { - split [getenv PATH .] {;} - } - proc file-isexec {exec} { - # Basic test for windows. We ignore .bat - if {[file isfile $exec] || [file isfile $exec.exe]} { - return 1 - } - return 0 - } -} else { - # unix separates $PATH with colons and has and executable bit - proc split-path {} { - split [getenv PATH .] : - } - proc file-isexec {exec} { - file executable $exec - } -} - -# Assume that exec can return stdout and stderr -proc exec-with-stderr {args} { - exec {*}$args 2>@1 -} - -if {$autosetup(istcl)} { - # Tcl doesn't have the env command - proc getenv {name args} { - if {[info exists ::env($name)]} { - return $::env($name) - } - if {[llength $args]} { - return [lindex $args 0] - } - return -code error "environment variable \"$name\" does not exist" - } - proc isatty? {channel} { - dict exists [fconfigure $channel] -xchar - } -} else { - if {$autosetup(iswin)} { - # On Windows, backslash convert all environment variables - # (Assume that Tcl does this for us) - proc getenv {name args} { - string map {\\ /} [env $name {*}$args] - } - } else { - # Jim on unix is simple - alias getenv env - } - proc isatty? {channel} { - set tty 0 - catch { - # isatty is a recent addition to Jim Tcl - set tty [$channel isatty] - } - return $tty - } -} - -# In case 'file normalize' doesn't exist -# -proc file-normalize {path} { - if {[catch {file normalize $path} result]} { - if {$path eq ""} { - return "" - } - set oldpwd [pwd] - if {[file isdir $path]} { - cd $path - set result [pwd] - } else { - cd [file dirname $path] - set result [file join [pwd] [file tail $path]] - } - cd $oldpwd - } - return $result -} - -# If everything is working properly, the only errors which occur -# should be generated in user code (e.g. auto.def). -# By default, we only want to show the error location in user code. -# We use [info frame] to achieve this, but it works differently on Tcl and Jim. -# -# This is designed to be called for incorrect usage in auto.def, via autosetup-error -# -proc error-location {msg} { - if {$::autosetup(debug)} { - return -code error $msg - } - # Search back through the stack trace for the first error in a .def file - for {set i 1} {$i < [info level]} {incr i} { - if {$::autosetup(istcl)} { - array set info [info frame -$i] - } else { - lassign [info frame -$i] info(caller) info(file) info(line) - } - if {[string match *.def $info(file)]} { - return "[relative-path $info(file)]:$info(line): Error: $msg" - } - #puts "Skipping $info(file):$info(line)" - } - return $msg -} - -# If everything is working properly, the only errors which occur -# should be generated in user code (e.g. auto.def). -# By default, we only want to show the error location in user code. -# We use [info frame] to achieve this, but it works differently on Tcl and Jim. -# -# This is designed to be called for incorrect usage in auto.def, via autosetup-error -# -proc error-stacktrace {msg} { - if {$::autosetup(debug)} { - return -code error $msg - } - # Search back through the stack trace for the first error in a .def file - for {set i 1} {$i < [info level]} {incr i} { - if {$::autosetup(istcl)} { - array set info [info frame -$i] - } else { - lassign [info frame -$i] info(caller) info(file) info(line) - } - if {[string match *.def $info(file)]} { - return "[relative-path $info(file)]:$info(line): Error: $msg" - } - #puts "Skipping $info(file):$info(line)" - } - return $msg -} - -# Given the return from [catch {...} msg opts], returns an appropriate -# error message. A nice one for Jim and a less-nice one for Tcl. -# If 'fulltrace' is set, a full stack trace is provided. -# Otherwise a simple message is provided. -# -# This is designed for developer errors, e.g. in module code or auto.def code -# -# -proc error-dump {msg opts fulltrace} { - if {$::autosetup(istcl)} { - if {$fulltrace} { - return "Error: [dict get $opts -errorinfo]" - } else { - return "Error: $msg" - } - } else { - lassign $opts(-errorinfo) p f l - if {$f ne ""} { - set result "$f:$l: Error: " - } - append result "$msg\n" - if {$fulltrace} { - append result [stackdump $opts(-errorinfo)] - } - - # Remove the trailing newline - string trim $result - } -} Index: autosetup/pkg-config.tcl ================================================================== --- autosetup/pkg-config.tcl +++ autosetup/pkg-config.tcl @@ -13,11 +13,11 @@ # # 'PKG_CONFIG' may be set to use an alternative to 'pkg-config'. use cc -module-options { +options { sysroot:dir => "Override compiler sysroot for pkg-config search path" } # @pkg-config-init ?required? # @@ -51,15 +51,16 @@ if {[opt-str sysroot o]} { define SYSROOT [file-normalize $o] msg-result "Using specified sysroot [get-define SYSROOT]" } elseif {[get-define build] ne [get-define host]} { - if {[catch {exec-with-stderr [get-define CC] -print-sysroot} result errinfo] == 0} { + if {[catch {exec-with-stderr {*}[get-define CC] -print-sysroot} result errinfo] == 0} { # Use the compiler sysroot, if there is one define SYSROOT $result msg-result "Found compiler sysroot $result" } else { + configlog "[get-define CC] -print-sysroot: $result" set msg "pkg-config: Cross compiling, but no compiler sysroot and no --sysroot supplied" if {$required} { user-error $msg } else { msg-result $msg @@ -71,10 +72,13 @@ set sysroot [get-define SYSROOT] # XXX: It's possible that these should be set only when invoking pkg-config global env set env(PKG_CONFIG_DIR) "" + # Supposedly setting PKG_CONFIG_LIBDIR means that PKG_CONFIG_PATH is ignored, + # but it doesn't seem to work that way in practice + set env(PKG_CONFIG_PATH) "" # Do we need to try /usr/local as well or instead? set env(PKG_CONFIG_LIBDIR) $sysroot/usr/lib/pkgconfig:$sysroot/usr/share/pkgconfig set env(PKG_CONFIG_SYSROOT_DIR) $sysroot } } @@ -106,22 +110,34 @@ if {!$ok} { msg-result "no pkg-config" return 0 } - if {[catch {exec [get-define PKG_CONFIG] --modversion "$module $args"} version]} { + set pkgconfig [get-define PKG_CONFIG] + + set ret [catch {exec $pkgconfig --modversion "$module $args"} version] + configlog "$pkgconfig --modversion $module $args: $version" + if {$ret} { msg-result "not found" - configlog "pkg-config --modversion $module $args: $version" + return 0 + } + # Sometimes --modversion succeeds but because of dependencies it isn't usable + # This seems to show up with --cflags + set ret [catch {exec $pkgconfig --cflags $module} cflags] + if {$ret} { + msg-result "unusable ($version - see config.log)" + configlog "$pkgconfig --cflags $module" + configlog $cflags return 0 } msg-result $version set prefix [feature-define-name $module PKG_] define HAVE_${prefix} define ${prefix}_VERSION $version - define ${prefix}_LIBS [exec pkg-config --libs-only-l $module] - define ${prefix}_LDFLAGS [exec pkg-config --libs-only-L $module] - define ${prefix}_CFLAGS [exec pkg-config --cflags $module] + define ${prefix}_CFLAGS $cflags + define ${prefix}_LIBS [exec $pkgconfig --libs-only-l $module] + define ${prefix}_LDFLAGS [exec $pkgconfig --libs-only-L $module] return 1 } # @pkg-config-get module setting # @@ -131,5 +147,22 @@ # the value of 'PKG_PANGO_CFLAGS', or '""' if not defined. proc pkg-config-get {module name} { set prefix [feature-define-name $module PKG_] get-define ${prefix}_${name} "" } + +# @pkg-config-get-var module variable +# +# Return the value of the given variable from the given pkg-config module. +# The module must already have been successfully detected with pkg-config. +# e.g. +# +## if {[pkg-config harfbuzz >= 2.5]} { +## define harfbuzz_libdir [pkg-config-get-var harfbuzz libdir] +## } +# +# Returns the empty string if the variable isn't defined. +proc pkg-config-get-var {module variable} { + set pkgconfig [get-define PKG_CONFIG] + set prefix [feature-define-name $module HAVE_PKG_] + exec $pkgconfig $module --variable $variable +} DELETED autosetup/sys-find-tclsh Index: autosetup/sys-find-tclsh ================================================================== --- autosetup/sys-find-tclsh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# Looks for a suitable tclsh or jimsh in the PATH -d=`dirname "$0"` -{ "$d/jimsh0" "$d/autosetup-test-tclsh"; } 2>/dev/null && exit 0 -PATH="$PATH:$d"; export PATH -for tclsh in jimsh tclsh tclsh8.5 tclsh8.6; do - { $tclsh "$d/autosetup-test-tclsh"; } 2>/dev/null && exit 0 -done -echo 1>&2 "No installed jimsh or tclsh" -echo false Index: autosetup/system.tcl ================================================================== --- autosetup/system.tcl +++ autosetup/system.tcl @@ -25,11 +25,11 @@ if {[is-defined defaultprefix]} { user-notice "Note: defaultprefix is deprecated. Use options-defaults to set default options" options-defaults [list prefix [get-define defaultprefix]] } -module-options [subst -noc -nob { +options { host:host-alias => {a complete or partial cpu-vendor-opsys for the system where the application will run (defaults to the same value as --build)} build:build-alias => {a complete or partial cpu-vendor-opsys for the system where the application will be built (defaults to the result of running config.guess)} @@ -50,11 +50,11 @@ localstatedir: runstatedir: maintainer-mode=0 dependency-tracking=0 silent-rules=0 -}] +} # @check-feature name { script } # # defines feature '$name' to the return value of '$script', # which should be 1 if found or 0 if not found. @@ -143,11 +143,11 @@ # The mapping parameter is how we expand @varname@ within the template. # We do that inline within this step only for @include directives which # can have variables in the filename arg. A separate substitution pass # happens when this recursive function returns, expanding the rest of # the variables. -# +# proc include-file {infile mapping} { # A stack of true/false conditions, one for each nested conditional # starting with "true" set condstack {1} set result {} @@ -181,11 +181,11 @@ dputs "@$condtype: $condexpr => $condval" } if {$condtype ne "if"} { if {[llength $condstack] <= 1} { autosetup-error "$infile:$linenum: Error: @$condtype missing @if" - } elseif {[string length $condargs]} { + } elseif {[string length $condargs] && [string index $condargs 0] ne "#"} { autosetup-error "$infile:$linenum: Error: Extra arguments after @$condtype" } } switch -exact $condtype { if { DELETED autosetup/text-formatting.tcl Index: autosetup/text-formatting.tcl ================================================================== --- autosetup/text-formatting.tcl +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module which provides text formatting - -use formatting - -proc wordwrap {text length {firstprefix ""} {nextprefix ""}} { - set len 0 - set space $firstprefix - - foreach word [split $text] { - set word [string trim $word] - if {$word eq ""} { - continue - } - if {[info exists partial]} { - append partial " " $word - if {[string first $quote $word] < 0} { - # Haven't found end of quoted word - continue - } - # Finished quoted word - set word $partial - unset partial - unset quote - } else { - set quote [string index $word 0] - if {$quote in {' *}} { - if {[string first $quote $word 1] < 0} { - # Haven't found end of quoted word - # Not a whole word. - set first [string index $word 0] - # Start of quoted word - set partial $word - continue - } - } - } - - if {$len && [string length $space$word] + $len >= $length} { - puts "" - set len 0 - set space $nextprefix - } - incr len [string length $space$word] - - # Use man-page conventions for highlighting 'quoted' and *quoted* - # single words. - # Use x^Hx for *bold* and _^Hx for 'underline'. - # - # less and more will both understand this. - # Pipe through 'col -b' to remove them. - if {[regexp {^'(.*)'(.*)} $word -> quoted after]} { - set quoted [string map {~ " "} $quoted] - regsub -all . $quoted "&\b&" quoted - set word $quoted$after - } elseif {[regexp {^[*](.*)[*](.*)} $word -> quoted after]} { - set quoted [string map {~ " "} $quoted] - regsub -all . $quoted "_\b&" quoted - set word $quoted$after - } - puts -nonewline $space$word - set space " " - } - if {[info exists partial]} { - # Missing end of quote - puts -nonewline $space$partial - } - if {$len} { - puts "" - } -} -proc title {text} { - underline [string trim $text] = - nl -} -proc p {text} { - wordwrap $text 80 - nl -} -proc codelines {lines} { - foreach line $lines { - puts " $line" - } - nl -} -proc nl {} { - puts "" -} -proc underline {text char} { - regexp "^(\[ \t\]*)(.*)" $text -> indent words - puts $text - puts $indent[string repeat $char [string length $words]] -} -proc section {text} { - underline "[string trim $text]" - - nl -} -proc subsection {text} { - underline "$text" ~ - nl -} -proc bullet {text} { - wordwrap $text 76 " * " " " -} -proc indent {text} { - wordwrap $text 76 " " " " -} -proc defn {first args} { - if {$first ne ""} { - underline " $first" ~ - } - foreach p $args { - if {$p ne ""} { - indent $p - } - } -} Index: autosetup/tmake.tcl ================================================================== --- autosetup/tmake.tcl +++ autosetup/tmake.tcl @@ -9,11 +9,11 @@ # ## CONFIGURED - to indicate that the project is configured use system -module-options {} +options {} define CONFIGURED # @make-tmake-settings outfile patterns ... # DELETED autosetup/util.tcl Index: autosetup/util.tcl ================================================================== --- autosetup/util.tcl +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (c) 2012 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module which contains miscellaneous utility functions - -# @compare-versions version1 version2 -# -# Versions are of the form 'a.b.c' (may be any number of numeric components) -# -# Compares the two versions and returns: -## -1 if v1 < v2 -## 0 if v1 == v2 -## 1 if v1 > v2 -# -# If one version has fewer components than the other, 0 is substituted to the right. e.g. -## 0.2 < 0.3 -## 0.2.5 > 0.2 -## 1.1 == 1.1.0 -# -proc compare-versions {v1 v2} { - foreach c1 [split $v1 .] c2 [split $v2 .] { - if {$c1 eq ""} { - set c1 0 - } - if {$c2 eq ""} { - set c2 0 - } - if {$c1 < $c2} { - return -1 - } - if {$c1 > $c2} { - return 1 - } - } - return 0 -} - -# @suffix suf list -# -# Takes a list and returns a new list with '$suf' appended -# to each element -# -## suffix .c {a b c} => {a.c b.c c.c} -# -proc suffix {suf list} { - set result {} - foreach p $list { - lappend result $p$suf - } - return $result -} - -# @prefix pre list -# -# Takes a list and returns a new list with '$pre' prepended -# to each element -# -## prefix jim- {a.c b.c} => {jim-a.c jim-b.c} -# -proc prefix {pre list} { - set result {} - foreach p $list { - lappend result $pre$p - } - return $result -} DELETED autosetup/wiki-formatting.tcl Index: autosetup/wiki-formatting.tcl ================================================================== --- autosetup/wiki-formatting.tcl +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/ -# All rights reserved - -# Module which provides text formatting -# wiki.tcl.tk format output - -use formatting - -proc joinlines {text} { - set lines {} - foreach l [split [string trim $text] \n] { - lappend lines [string trim $l] - } - join $lines -} -proc p {text} { - puts [joinlines $text] - puts "" -} -proc title {text} { - puts "*** [joinlines $text] ***" - puts "" -} -proc codelines {lines} { - puts "======" - foreach line $lines { - puts " $line" - } - puts "======" -} -proc code {text} { - puts "======" - foreach line [parse_code_block $text] { - puts " $line" - } - puts "======" -} -proc nl {} { -} -proc section {text} { - puts "'''$text'''" - puts "" -} -proc subsection {text} { - puts "''$text''" - puts "" -} -proc bullet {text} { - puts " * [joinlines $text]" -} -proc indent {text} { - puts " : [joinlines $text]" -} -proc defn {first args} { - if {$first ne ""} { - indent '''$first''' - } - - foreach p $args { - p $p - } -} DELETED bin/.agignore Index: bin/.agignore ================================================================== --- bin/.agignore +++ /dev/null @@ -1,2 +0,0 @@ -*.pt -*.rk05 Index: bin/.ignore ================================================================== --- bin/.ignore +++ bin/.ignore @@ -1,1 +1,2 @@ -.agignore +*.pt +*.rk05 Index: bin/os8-cp.in ================================================================== --- bin/os8-cp.in +++ bin/os8-cp.in @@ -1,14 +1,14 @@ -#!/usr/bin/env python +#!/usr/bin/env @PYCMD@ # -*- coding: utf-8 -*- ######################################################################## # Generalized facility to manipulate os8 device images from the POSIX # (host) side using OS/8 system programs under SIMH. # # See USAGE message below for details. # -# Copyright © 2018 by Bill Cattey and Warren Young +# Copyright © 2018-2019 by Bill Cattey and Warren Young # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, @@ -57,11 +57,11 @@ DEBUG = False VERBOSE = False QUIET = False # Default RK05 system image to attach if no sys specified. -_default_sys_image = "@OS8_BOOT_DISK@" +_default_sys_image = "@OS8_TOOLTIME@" _default_sys_path = dirs.os8mo + _default_sys_image _default_att_spec = ["rk", "0", _default_sys_path] # Regex for parsing an argument string into a sys device _dev_arg_regex_str = "-(rk|td|dt|rx)(\d?)(s)?" @@ -110,11 +110,11 @@ #### abort_prog ######################################################## # Print err_string and exit with -1 return status. def abort_prog (err_str): - print "Abort: " + err_str + print("Abort: " + err_str) sys.exit(-1) #### parse_attach ###################################################### # Parser for OS/8 attach spec. @@ -124,11 +124,11 @@ abort_prog ("Need unit number for: " + match.group(1) + ".") image_spec = [match.group(1), match.group(2), imagename] if match.group(3) == 's': if action_plan ["sys"] != None: - print ("Already specified system device. Ignoring sys mount of: " + imagename) + print("Already specified system device. Ignoring sys mount of: " + imagename) else: action_plan["sys"] = image_spec else: action_plan["mount"].append(image_spec) @@ -194,11 +194,11 @@ def parse_action_file(fname): try: manifest = open(fname, "r") except IOError: - print fname + " not found. Skipping." + print(fname + " not found. Skipping.") return None ioline_re = re.compile("(\S+)\s+(\S+)\s+(\S+)") action_plan = {} @@ -206,37 +206,38 @@ action_plan["mount"] = [] action_plan["copy"] = [] for line in manifest: ioline = line.strip() - if DEBUG: print "parse_action_file: ioline: " + ioline + if DEBUG: print("parse_action_file: ioline: " + ioline) if ioline == "": continue if ioline[0] == '#': continue # Allow comments m=re.match(ioline_re, ioline) if m== None: - print "Ignoring line: " + ioline + print("Ignoring line: " + ioline) continue option = m.group(1) source = m.group(2) destination = m.group(3) if option == "att": m = re.match(_dev_actfile_re, source) - if m== None: + if m == None: abort_prog ("Could not parse attach spec: " + source) parse_attach (action_plan, m, path_expand(destination)) else: if len(option) != 1: - print "Format options are only 1 letter in size. Ignoring line: " + ioline + print("Format options are only 1 letter in size. " + \ + "Ignoring line: " + ioline) elif option[0] not in _valid_pip_options: - print "Unrecognize option in line: " + ioline + print("Unrecognize option in line: " + ioline) elif source == None: - print "Null value of source. Ignoring line: " + ioline + print("Null value of source. Ignoring line: " + ioline) elif destination == None: - print "Null value of destination. Ignoring line: " + ioline + print("Null value of destination. Ignoring line: " + ioline) else: append_copy(action_plan, option, source, destination) return action_plan @@ -254,16 +255,16 @@ def is_directory(path): if DEBUG: "is_directory (" + path + ")" m = re.match(_os8_file_re, path) if m != None: - if DEBUG: print "OS/8 Match: DEV: " + m.group(1) + ", File: " + str(m.group(2)) + if DEBUG: print("OS/8 Match: DEV: " + m.group(1) + ", File: " + str(m.group(2))) if m.group(2) == None or m.group(2) == "": return True # Just a device so yes it's a directory. else: return False if has_os8_wildcards(path): - if DEBUG: print "Has wildcards." + if DEBUG: print("Has wildcards.") return False return os.path.isdir(path) #### has_os8_wildcards ################################################# @@ -286,11 +287,11 @@ for line in lines[1:]: # First line is our command. Skip it. line = line.strip() if line == "": continue m = re.match("(\S+)\s*\.(\S+)", line) if m == None: continue - # if DEBUG: print "file_list_from_expect: group 1: " + m.group(1) + ", group 2: " + m.group(2) + # if DEBUG: print("file_list_from_expect: group 1: " + m.group(1) + ", group 2: " + m.group(2)) fname = m.group(1) + "." + m.group(2) file_list.append(fname) return file_list @@ -310,11 +311,12 @@ if copy_type == "from": copy_type = "within" else: copy_type = "into" if "/" in destination: - print "append_copy, into: Illegal OS/8 file spec containing a slash:" + destination + print("append_copy, into: Illegal OS/8 file spec containing " + \ + "a slash:" + destination) sys.exit(-1) destination = destination.upper() if copy_type == "": abort_prog ("append_copy: No OS/8 file spec found with source: " + source + ", destination: " + destination) @@ -513,13 +515,13 @@ # First the simple bit set options if arg == "-d": DEBUG = True elif arg == "-h": if VERBOSE: - print VERBOSE_USAGE + print(VERBOSE_USAGE) else: - print USAGE + print(USAGE) sys.exit(0) elif arg == "-q": QUIET = True elif arg == "-v": VERBOSE = 1 @@ -526,12 +528,12 @@ # look for option args. elif arg in _arg_to_option: new_opt = _arg_to_option[arg] if mode_opt == new_opt: - print "Warning redundant reset of mode option to " + \ - _pip_option_info[new_opt] + print("Warning redundant reset of mode option to " + \ + _pip_option_info[new_opt]) mode_opt = new_opt # Not a simple bit set option. elif arg == "--action-file": @@ -553,29 +555,34 @@ parse_attach (action_plan, m, sys.argv[idx]) # Do file parser if we didn't get an OS/8 attach spec. else: - if DEBUG: print "File parsing of: " + arg + if DEBUG: print("File parsing of: " + arg) # Need to know if arg is Linux. If so, we need to do globbing. # If you want OS/8 globbing, specify a device to prevent globbing # from being run. m = re.match(_os8_file_re, arg) if m == None: # Yup, it's POSIX. Glob it. - if DEBUG: print arg + " is POSIX." + if DEBUG: print(arg + " is POSIX.") more_files = glob.glob(arg) if more_files == []: - if DEBUG: print "No more files in POSIX Glob. Our file is: " + arg + if DEBUG: + print("No more files in POSIX Glob. Our file is: " + arg) more_files.append(arg) # If file not found may be an OS/8 internal xfer. for new_file in more_files: if filespec_seen == 0: source = new_file first_mode = mode_opt - if DEBUG: print "Globber: Setting initial source: " + source + " and mode: " + first_mode + if DEBUG: + print("Globber: Setting initial source: " + source + \ + " and mode: " + first_mode) elif filespec_seen == 1: - if DEBUG: print "Globber: Setting initial destination: " + destination + if DEBUG: + print("Globber: Setting initial destination: " + \ + destination) destination = new_file else: if DEBUG: "Globber: Appending destination to list. New file is: " + new_file file_and_mode_list.append([mode_opt,destination]) destination = new_file @@ -582,14 +589,16 @@ filespec_seen += 1 else: if filespec_seen == 0: source = arg first_mode = mode_opt - if DEBUG: print "Setting initial source: " + source + " and mode: " + first_mode + if DEBUG: + print("Setting initial source: " + source + \ + " and mode: " + first_mode) elif filespec_seen == 1: destination = arg - if DEBUG: print "Setting initial destination: " + destination + if DEBUG: print("Setting initial destination: " + destination) else: file_and_mode_list.append([mode_opt, destination]) destination = arg if DEBUG: "Appending destination to list. New file is: " + new_file filespec_seen += 1 @@ -603,11 +612,11 @@ # Now it gets a little complicated... # If neither source nor destination is OS/8, pretend they both were OS/8 "DSK:" # If source is OS/8, and has OS/8 wild cards, the destination must be a directory. else: # If more than 2 files, the destination must be either an OS/8 device or a Linux directory. - if DEBUG: print "Destination: " + destination + if DEBUG: print("Destination: " + destination) if filespec_seen > 2 and is_directory(destination) == False: abort_prog ("Destination must be a Linux directory or OS/8 device for multiple source files.") m1 = re.match(_os8_file_re, source) m2 = re.match(_os8_file_re, destination) @@ -638,20 +647,20 @@ def main (): action_plan = parse_args() if action_plan == None: abort_prog ("No action plan was parsed.") - if DEBUG: print str(action_plan) + if DEBUG: print(str(action_plan)) # Create the SIMH child instance and tell it where to send log output try: s = simh (dirs.build, True) except (RuntimeError) as e: - print "Could not start simulator: " + e.message + '!' + print("Could not start simulator: " + e.message + '!') exit (1) - # s.set_logfile (os.fdopen (sys.stdout.fileno (), 'w', 0)) - s.set_logfile (open ("logfile.txt", 'w')) + # s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) + s.set_logfile (open ("logfile.txt", 'wb')) if VERBOSE: s.verbose = True # Perform sys attach att_spec = action_plan["sys"] if att_spec == None: att_spec = _default_att_spec @@ -658,43 +667,51 @@ simh_boot_dev = att_spec[0] + att_spec[1] # Compose simh dev from name and unit. imagename = att_spec[2] if not os.path.exists (imagename): abort_prog ("Requested boot image file: " + imagename + " not found.") if VERBOSE or DEBUG: - print "Attaching " + simh_boot_dev + " to " + imagename - s.send_cmd ("att " + simh_boot_dev + " " + imagename) + print("Attaching " + simh_boot_dev + " to " + imagename) + s.simh_cmd ("att " + simh_boot_dev + " " + imagename, debug=DEBUG) images_to_zero = [] # Attach other mounts for att_spec in action_plan["mount"]: simh_dev = att_spec[0] + att_spec[1] # Compose simh dev from name and unit. imagename = att_spec[2] if os.path.exists (imagename): - if VERBOSE or DEBUG: print "Modifying existing " + simh_dev + " image " + imagename + if VERBOSE or DEBUG: + print("Modifying existing " + simh_dev + " image " + imagename) else: - if VERBOSE or DEBUG: print "Will create a new image file named: " + imagename + if VERBOSE or DEBUG: + print("Will create a new image file named: " + imagename) # Save this att_spec so we can zero it later. images_to_zero.append (att_spec) if VERBOSE or DEBUG: - print "Attaching " + simh_dev + " to " + imagename - s.send_cmd ("att " + simh_dev + " " + imagename) + print("Attaching " + simh_dev + " to " + imagename) + s.simh_cmd ("att " + simh_dev + " " + imagename, debug=DEBUG) - if VERBOSE or DEBUG: print "Booting " + simh_boot_dev + "..." - s.send_cmd ("boot " + simh_boot_dev) + if VERBOSE or DEBUG: print("Booting " + simh_boot_dev + "...") + # Confirm successful boot into OS/8. Note we call simh_cmd with _os8_replies! + reply = s.simh_cmd ("boot " + simh_boot_dev, s._os8_replies_rex, debug=DEBUG) + s.os8_test_result (reply, "Monitor Prompt", "os8-cp") for att_spec in images_to_zero: os8dev = _os8_from_simh_dev[att_spec[0]] if os8dev in _os8_partitions: for partition in _os8_partitions[os8dev]: os8name = os8dev + partition + att_spec[1] + ":" - if VERBOSE or DEBUG: print "Initializing directory of " + os8name + " in " + imagename - s.os8_send_cmd ('\\.', "ZERO " + os8name) + if VERBOSE or DEBUG: + print("Initializing directory of " + os8name + " in " + \ + imagename) + s.os8_cmd ("ZERO " + os8name, debug=DEBUG) else: os8name = os8dev + att_spec[1] + ":" - if VERBOSE or DEBUG: print "Initializing directory of " + os8name + " in " + imagename - s.os8_send_cmd ('\\.', "ZERO " + os8name) + if VERBOSE or DEBUG: + print("Initializing directory of " + os8name + " in " + \ + imagename) + s.os8_cmd ("ZERO " + os8name, debug=DEBUG) # Perform copy operations for do_copy in action_plan["copy"]: mode_opt = do_copy[0] source = do_copy[1] @@ -703,62 +720,68 @@ if mode_opt in _option_to_pip: pip_option = _option_to_pip[mode_opt] else: abort_prog ("Unrecognized mode option: " + mode_opt) - if DEBUG: print "Source: " + source + ", Destination: " + destination + ", Mode: " + mode_opt + "." + if DEBUG: + print("Source: " + source + ", Destination: " + destination + \ + ", Mode: " + mode_opt + ".") # Is this "from" OS/8 to POSIX, "into" OS/8 from POSIX or "within" OS/8? # "into" -- Attach source to simh ptr # If we are operating "from" and source has wild cards, # Use DIRECT to create list of files. # "from" -- Attach destination to ptp. We've already done POSIX globing. # "within" -- Use COPY. if copy_type == "into": - s.os8_pip_to(source, destination, pip_option) + s.os8_pip_to(source, destination, pip_option, debug=DEBUG) elif copy_type == "from": if has_os8_wildcards(source): # Split off device from source: os8dev = source[0:source.index(":")+1] - if DEBUG: print "Wild card dev: " + os8dev + if DEBUG: print("Wild card dev: " + os8dev) # Use OS/8 Direct to enumerate our input files. - if DEBUG: print "Calling OS/8 DIRECT on wild card filespec: " + source - s.os8_send_cmd ('\\.', "DIR " + source + "/F=1") + if DEBUG: + print("Calling OS/8 DIRECT on wild card filespec: " + source) + s.os8_cmd ("DIR " + source + "/F=1", "\d+\s+FREE BLOCKS", debug=DEBUG) # Now harvest direct output. One file per line. Ignore blank lines. # Maybe parse the FREE BLOCKS Output. # Done when we see a dot. - s._child.expect("\d+\s+FREE BLOCKS") - files = file_list_from_expect(s._child.before) + # s._child.expect("\d+\s+FREE BLOCKS") + files = file_list_from_expect(s._child.before.decode()) + # Confirm return to monitor after call to DIR command. + s.os8_cfm_monitor ("os8_cp") for filename in files: if VERBOSE or DEBUG: - print "Wildcard call os8_pip_from: copy from: {" + os8dev + "}{" + filename + "}" + \ - " to: " + destination + ", mode: " + pip_option - s.os8_pip_from(os8dev + filename, destination, pip_option) + print("Wildcard call os8_pip_from: copy from: " + \ + "{" + os8dev + "}{" + filename + "}" + \ + " to: " + destination + ", mode: " + pip_option) + s.os8_pip_from(os8dev + filename, destination, pip_option, debug=DEBUG) else: if VERBOSE or DEBUG: - print "Call os8_pip_from: copy from: " + source + " to " + destination + \ - ", mode: " + pip_option - s.os8_pip_from(source, destination, pip_option) + print("Call os8_pip_from: copy from: " + source + " to " + \ + destination + ", mode: " + pip_option) + s.os8_pip_from(source, destination, pip_option, debug=DEBUG) elif copy_type == "within": if VERBOSE or DEBUG: - print "Call COPY of: " + source + " to " + destination - s.os8_send_cmd ('\\.', "COPY " + destination + "< " + source) + print("Call COPY of: " + source + " to " + destination) + s.os8_cmd ("COPY " + destination + "< " + source) else: abort_prog ("Unrecognized copy type: " + copy_type) # Should never happen. # Detach all mounts and then sys. - s.back_to_cmd ('\\.') + s.esc_to_simh() for att_spec in action_plan["mount"]: simh_dev = att_spec[0] + att_spec[1] # Compose simh dev from name and unit. if VERBOSE or DEBUG: - print "Detaching " + simh_dev - s.send_cmd ("det " + simh_dev) + print("Detaching " + simh_dev) + s.simh_cmd ("det " + simh_dev, debug=DEBUG) if VERBOSE or DEBUG: - print "Detaching " + simh_boot_dev - s.send_cmd ("det " + simh_boot_dev) + print("Detaching " + simh_boot_dev) + s.simh_cmd ("det " + simh_boot_dev, debug=DEBUG) # And shut down the simulator. if VERBOSE or DEBUG: - print "Quitting simh." - s.send_cmd ('quit') + print("Quitting simh.") + s._child.sendline("quit") if __name__ == "__main__": main() DELETED bin/os8-run Index: bin/os8-run ================================================================== --- bin/os8-run +++ /dev/null @@ -1,228 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -######################################################################## -# Script runner for OS/8 under SIMH. -# The library module os8script.py does the heavy lifting. -# -# See USAGE message below for details. -# -# Copyright © 2018 by Bill Cattey and Warren Young -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, -# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the names of the authors above -# shall not be used in advertising or otherwise to promote the sale, -# use or other dealings in this Software without prior written -# authorization from those authors. -######################################################################## - -# Bring in just the basics so we can bring in our local modules -import os -import sys - -sys.path.insert (0, os.path.dirname (__file__) + '/../lib') -sys.path.insert (0, os.getcwd () + '/lib') - -# Remaining Python core modules -import subprocess -import string -import re -import shutil -import argparse -from itertools import chain - -# Our local modules -from pidp8i import * -from simh import * -from os8script import * - - -#### GLOBALS AND CONSTANTS ############################################# - -DEBUG = False -VERBOSE = False -VERY_VERBOSE = False -QUIET = False -SCRIPT_FILE = "" - -USAGE = "usage: " + os.path.basename (__file__) + \ - " [-h] [-d] [-v] [-vv] [--enable enable_option] ... \n\t[--disable disable_option] ... " + \ - "\n \tscript [script] ... " - -_en_dis_arg_re = re.compile("^(enable|disable)_(\S+)$") - - -def opt_set(en_dis, option, options_enabled, options_disabled): - if option == None or en_dis == None: return - # print en_dis + " " + option - if en_dis == "enable": - if option not in options_enabled: - options_enabled.append(option) - if option in options_disabled: - options_disabled.remove(option) - elif en_dis == "disable": - if option not in options_disabled: - options_disabled.append(option) - if option in options_enabled: - options_enabled.remove(option) - else: return - - -def add_bool (self, *args, **kwargs): - kwargs['action'] = 'store_true' - kwargs['default'] = False - self.add_argument (*args, **kwargs) - - -#### parse_args ######################################################## - -def parse_args (script_files, options_enabled, options_disabled): - global DEBUG - global VERBOSE - global VERY_VERBOSE - global USAGE - - enable_usage = "" - disable_usage = "" - - idx = 1 - numargs = len(sys.argv) - - if numargs < 2: - print USAGE - sys.exit(-1) - - # Add arguments corresponding to --*-os8-* configure script options - max_obn_len = 0 - for obn, vals in os8opts.opts.iteritems(): - max_obn_len = max(max_obn_len, len(obn)) - for obn, vals in os8opts.opts.iteritems(): - if vals[0]: - # Enable option - pad_str = (max_obn_len - len (obn)) * " " - new_usage = " " + obn + ": " + pad_str + vals[1] + "\n" - disable_usage += new_usage - else: - # Disable option - pad_str = (max_obn_len - len (obn)) * " " - new_usage = " " + obn + ": " + pad_str + vals[1] + "\n" - enable_usage += new_usage - - if enable_usage != "": - USAGE += "\n Known enable options: \n" - USAGE += enable_usage - - if disable_usage != "": - USAGE += "\n Known disable options: \n" - USAGE += disable_usage - - while idx < numargs: - arg = sys.argv[idx] - # print "idx: " + str(idx) + ", arg: " + arg - # print "Files: " + str(script_files) - # print "Options: " + str(options_enabled) - if arg == "-d" or arg == "--debug": - DEBUG = True - elif arg == "-h" or arg == "--help": - print USAGE - sys.exit(0) - elif arg == "-v" or arg == "--verbose": - VERBOSE = 1 - elif arg == "-vv" or arg == "--very-verbose": - VERY_VERBOSE = 1 - elif arg == "--enable": - idx +=1 - if idx == numargs: - print "expecting an option but got none." - else: - option = sys.argv[idx] - # Only add the option once - if option not in options_enabled: options_enabled.append(option) - elif arg == "--disable": - idx +=1 - if idx == numargs: - print "expecting an option but got none." - else: - option = sys.argv[idx] - # Only add the option once - if option not in options_disabled: options_disabled.append(option) - else: - script_files.append(arg) - idx += 1 - - - -#### main ############################################################## -# Program entry point. Parses the command line and drives the above. - -def main (): - script_files = [] - options_enabled = [] - options_disabled = [] - - parse_args (script_files, options_enabled, options_disabled) - if len(script_files) == 0: - print "Need a script file to run." - sys.exit(-1) - - if VERBOSE: - print "script_files: " + str(script_files) - if DEBUG: - print "options_enabled" + str(options_enabled) - print "options_disabled" + str(options_disabled) - - # Append SIMH and OS/8 output to a file by default. - # - # We append because we're run twice in each test directory via the - # os8-sys Makefile target called by test-os8-run, once for the "dist" - # media and once for the actual RK05 bootable media. So, the second - # run must append its logs to the first run's log file. - # - # Send the log info to the console instead of the progress messages if - # -v was given. See https://stackoverflow.com/questions/21239338 - s = simh (dirs.build, True) - if VERBOSE: s.verbose = True - s.set_logfile (open (dirs.log + 'os8-run' + '.log', 'a') \ - if not VERY_VERBOSE else os.fdopen (sys.stdout.fileno (), 'w', 0)) - - os8 = os8script (s, options_enabled, options_disabled, verbose=VERBOSE, debug=DEBUG) - - for script_file in script_files: - if VERBOSE: - print os.path.basename (__file__) + " -- Language Version: " + os8.lang_version - - print "Running script file: " + script_file - os8.run_script_file (script_file) - - # After all scripts are done, we remove any scratch files, - # detach any mounted devices, and shut down simh gracefully. - - for filename in os8.scratch_list: - if os8.verbose: print "Deleting scratch_copy: " + filename - os.remove(filename) - - s.send_cmd ("detach all") - - s.quit () - if VERBOSE: print "Done!" - - -if __name__ == "__main__": - main() ADDED bin/os8-run.in Index: bin/os8-run.in ================================================================== --- /dev/null +++ bin/os8-run.in @@ -0,0 +1,228 @@ +#!/usr/bin/env @PYCMD@ +# -*- coding: utf-8 -*- +######################################################################## +# Script runner for OS/8 under SIMH. +# The library module os8script.py does the heavy lifting. +# +# See USAGE message below for details. +# +# Copyright © 2018-2019 by Bill Cattey and Warren Young +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the names of the authors above +# shall not be used in advertising or otherwise to promote the sale, +# use or other dealings in this Software without prior written +# authorization from those authors. +######################################################################## + +# Bring in just the basics so we can bring in our local modules +import os +import sys + +sys.path.insert (0, os.path.dirname (__file__) + '/../lib') +sys.path.insert (0, os.getcwd () + '/lib') + +# Remaining Python core modules +import subprocess +import string +import re +import shutil +import argparse +from itertools import chain + +# Our local modules +from pidp8i import * +from simh import * +from os8script import * + + +#### GLOBALS AND CONSTANTS ############################################# + +DEBUG = False +VERBOSE = False +VERY_VERBOSE = False +QUIET = False +SCRIPT_FILE = "" + +USAGE = "usage: " + os.path.basename (__file__) + \ + " [-h] [-d] [-v] [-vv] [--enable enable_option] ... \n\t[--disable disable_option] ... " + \ + "\n \tscript [script] ... " + +_en_dis_arg_re = re.compile("^(enable|disable)_(\S+)$") + + +def opt_set(en_dis, option, options_enabled, options_disabled): + if option == None or en_dis == None: return + # print(en_dis + " " + option) + if en_dis == "enable": + if option not in options_enabled: + options_enabled.append(option) + if option in options_disabled: + options_disabled.remove(option) + elif en_dis == "disable": + if option not in options_disabled: + options_disabled.append(option) + if option in options_enabled: + options_enabled.remove(option) + else: return + + +def add_bool (self, *args, **kwargs): + kwargs['action'] = 'store_true' + kwargs['default'] = False + self.add_argument (*args, **kwargs) + + +#### parse_args ######################################################## + +def parse_args (script_files, options_enabled, options_disabled): + global DEBUG + global VERBOSE + global VERY_VERBOSE + global USAGE + + enable_usage = "" + disable_usage = "" + + idx = 1 + numargs = len(sys.argv) + + if numargs < 2: + print(USAGE) + sys.exit(-1) + + # Add arguments corresponding to --*-os8-* configure script options + max_obn_len = 0 + for obn, vals in os8opts.opts.items(): + max_obn_len = max(max_obn_len, len(obn)) + for obn, vals in os8opts.opts.items(): + if vals[0]: + # Enable option + pad_str = (max_obn_len - len (obn)) * " " + new_usage = " " + obn + ": " + pad_str + vals[1] + "\n" + disable_usage += new_usage + else: + # Disable option + pad_str = (max_obn_len - len (obn)) * " " + new_usage = " " + obn + ": " + pad_str + vals[1] + "\n" + enable_usage += new_usage + + if enable_usage != "": + USAGE += "\n Known enable options: \n" + USAGE += enable_usage + + if disable_usage != "": + USAGE += "\n Known disable options: \n" + USAGE += disable_usage + + while idx < numargs: + arg = sys.argv[idx] + # print("idx: " + str(idx) + ", arg: " + arg) + # print("Files: " + str(script_files)) + # print("Options: " + str(options_enabled)) + if arg == "-d" or arg == "--debug": + DEBUG = True + elif arg == "-h" or arg == "--help": + print(USAGE) + sys.exit(0) + elif arg == "-v" or arg == "--verbose": + VERBOSE = 1 + elif arg == "-vv" or arg == "--very-verbose": + VERY_VERBOSE = 1 + elif arg == "--enable": + idx +=1 + if idx == numargs: + print("expecting an option but got none.") + else: + option = sys.argv[idx] + # Only add the option once + if option not in options_enabled: options_enabled.append(option) + elif arg == "--disable": + idx +=1 + if idx == numargs: + print("expecting an option but got none.") + else: + option = sys.argv[idx] + # Only add the option once + if option not in options_disabled: options_disabled.append(option) + else: + script_files.append(arg) + idx += 1 + + + +#### main ############################################################## +# Program entry point. Parses the command line and drives the above. + +def main (): + script_files = [] + options_enabled = [] + options_disabled = [] + + parse_args (script_files, options_enabled, options_disabled) + if len(script_files) == 0: + print("Need a script file to run.") + sys.exit(-1) + + if VERBOSE: + print("script_files: " + str(script_files)) + if DEBUG: + print("options_enabled" + str(options_enabled)) + print("options_disabled" + str(options_disabled)) + + # Append SIMH and OS/8 output to a file by default. + # + # We append because we're run twice in each test directory via the + # os8-sys Makefile target called by test-os8-run, once for the "dist" + # media and once for the actual RK05 bootable media. So, the second + # run must append its logs to the first run's log file. + # + # Send the log info to the console instead of the progress messages if + # -v was given. See https://stackoverflow.com/questions/21239338 + s = simh (dirs.build, True) + if VERBOSE: s.verbose = True + s.set_logfile (open (dirs.log + 'os8-run' + '.log', 'ab') \ + if not VERY_VERBOSE else os.fdopen (sys.stdout.fileno (), 'wb', 0)) + + os8 = os8script (s, options_enabled, options_disabled, verbose=VERBOSE, debug=DEBUG) + + for script_file in script_files: + if VERBOSE: + print(os.path.basename (__file__) + " -- Language Version: " + os8.lang_version) + + print("Running script file: " + script_file) + os8.run_script_file (script_file) + + # After all scripts are done, we remove any scratch files, + # detach any mounted devices, and shut down simh gracefully. + + for filename in os8.scratch_list: + if os8.verbose: print("Deleting scratch_copy: " + filename) + os.remove(filename) + + s.simh_cmd ("detach all") + + s._child.sendline("quit") + if VERBOSE: print("Done!") + + +if __name__ == "__main__": + main() ADDED bin/os8pkg.in Index: bin/os8pkg.in ================================================================== --- /dev/null +++ bin/os8pkg.in @@ -0,0 +1,644 @@ +#!/usr/bin/env @PYCMD@ +# -*- coding: utf-8 -*- +######################################################################## +# Packaging software for consumption by OS/8 +# Uses os8-cp as a foundation. +# +# See USAGE message below for details. +# +# Copyright © 2020 by Bill Cattey and Warren Young +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the names of the authors above +# shall not be used in advertising or otherwise to promote the sale, +# use or other dealings in this Software without prior written +# authorization from those authors. +######################################################################## + +# Bring in just the basics so we can bring in our local modules +import os +import sys + +sys.path.insert (0, os.path.dirname (__file__) + '/../lib') +sys.path.insert (0, os.getcwd () + '/lib') + +# Our local modules +from pidp8i import * +from simh import * +from os8script import * + +# Other global Python modules +import glob +import subprocess +import string +import re +import argparse +import io + + +#### GLOBALS AND CONSTANTS ############################################# + +progmsg = True +DEBUG = False +VERBOSE = False +QUIET = False + +# Sections found in a pspec file: +_pspec_sections = ["format:", "inputs:", "outputs:", "build:", "cleanups:"] + +# Supported file formats: +_pspec_formats = ["tu56", "rk05"] + +# Default RK05 system image to attach if no sys specified. +_default_sys_image = "@OS8_TOOLTIME@" +_default_sys_path = dirs.os8mo + _default_sys_image +_default_att_spec = ["rk", "0", _default_sys_path] + +_pkg_obj_dir = os.path.join (dirs.obj, "os8pkg/") +_pkg_pspec_dir = os.path.join (dirs.src, "pspec/") +_pkg_builder_dir = os.path.join (dirs.src, "scripts/misc") +_target_dir = dirs.os8mo + +# Regex for parsing an argument string into a sys device +_dev_arg_regex_str = "-(rk|td|dt|rx)(\d?)(s)?" +_dev_arg_re = re.compile(_dev_arg_regex_str) + +# Map of SIMH device names to OS/8 device name prefixes. +_os8_from_simh_dev = {"rk" : "RK", "td" : "DTA", "dt" : "DTA", "rx" : "RX"} + +_os8_partitions = {"RK": ["A", "B"]} + +# OS/8 file name matching regex +_os8_file_re = re.compile("(\S+):(\S+)?") + +# Constrained spec for an outputs: line. +# Group 1 containas the output device: SYS: or DSK: +# Group 2 confirns '<' +# Group 3 contains the input device: DTA1: or RKA1: or RKB1: +# Group 4 contains the input file spec +# Group 5 contains the filename before the dot extension. +# Group 6 contains the dot extension. +_output_spec_re = re.compile("^(SYS:|DSK:)(<)(DTA1:|RKA1:|RKB1:)(([A-Z0-9?]{0,6})(\.[A-Z0-9?]{0,2})?)$") + +# Matches if the string begins with a dollar sign, and has at least +# one slash, returning the string between the dollar sign and the +# first slash in group 1 and the rest in group 2. +# No whitespace in the string. +_expandable_re = re.compile ("^((?:[^/]*/)*)(([^\.]*)(\.pspec)?)$") + +_pspec_strip_re = re.compile("^(\S*)\.pspec$") + +# Commands and their help strings. +_command_set = [["deps", "Create .mk format dependency file from inputs"], + ["include", "Create an include script from selected scripts"], + ["install", "Install pspec outputs on the target image file"], + ["build", "Run package builder"], + ["all", "Perform all of the above."], + ["uninstall", "Delete pspec outputs and cleanups from the target image file"], + ["conflicts", "Report outputs that exist in multiple pspec files"], + ["format", "Display the output format for given package names"], + ["verify", "Verify the fidelity of packages installed on the target image file"], + ] + + +#### abort_prog ######################################################## +# Print err_string and exit with -1 return status. + +def abort_prog (err_str): + print("Abort: " + err_str) + sys.exit(-1) + + +#### path_expand ####################################################### +# Originally developed in os8script.py, but useful here too. +# +# Simple minded variable substitution in a path. +# A path beginning with a dollar sign parses the characters between +# the dollar sign and the first slash seen becomes a name to +# expand with a couple local names: $home and the anchor directories +# defined in lib/pidp8i/dirs.py. +# We abort if the path expansion fails. + +def path_expand (path): + m = re.match(_expandable_re, path) + if m == None: return path + var = m.group(1) + + val = getattr (dirs, var, None) + if val != None: + return os.path.join(val,m.group(2)) + else: + abort_prog ("{$" + var + "} is not a valid path expansion in " + path) + + +#### dest_expand ######################################################## +# Return a full path based either on the --destdir option or +# the default _pkg_obj_dir + +def dest_expand (args, fname, default): + if args.destdir: return os.path.join(args.destdir, fname) + else: return os.path.join(default, fname) + + +#### parse_pspec ######################################################## +# Parse the pspec file named by pkg + +def parse_pspec (pkg_inpath): + try: + pspec_file = open (pkg_inpath, "r") + except IOError: + print(pkg_inpath + " not found. Skipping.") + return None + + pspec = {} + for section in _pspec_sections: + pspec [section] = [] + + pspec["format:"].append("tu56") # Default to tu56 format. + + location = "" + for ioline in pspec_file: + line = ioline.strip() + if line == "": continue + elif line[0] == "#": continue + elif line in _pspec_sections: location = line + else: + if location == "": + print ("Don't know where to put: {" + line + "}.") + elif location == "format:": + if line in _pspec_formats: + pspec[location][0] = line # Last format we see wins. + else: + print ("Unsupported format: " + line) + else: + pspec[location].append(line) + return pspec + + +#### make_mk ########################################################### +# Make the .mk output file + +def make_deps (pkg_name, pspec): + if len(pspec["inputs:"]) == 0: + print ("Nothing to make") + return None + + outstr = "" + + pkg_fmt = pspec["format:"][0] + pkg_ucfmt = pkg_fmt.upper() + pkg_srcs = pkg_name.upper() + "_SRCS" + pkg_script = pkg_name.upper() + "_" + pkg_ucfmt + "_SCRIPT" + pkg_bin = pkg_name.upper() + "_PKG_BIN" + + outstr += (pkg_srcs + ":= ") + for src in pspec["inputs:"]: + outstr += ("\\\n\t@srcdir@/" + src) + + outstr += ("\n\n" + pkg_bin + " = bin/" + pkg_name + "." + pkg_fmt + "\n") + + # If the build section is empty use a default build: + # An os8-run on a script in MISC_SCRIPTS_DIR named like the package and format. + if len(pspec["build:"]) > 0: + outstr += ("\n\n$(" + pkg_bin + ") : $(" + \ + pkg_srcs + ") | $(OS8_TOOLTIME)\n") + for build_line in pspec["build:"]: + outstr += ("\t" + build_line + "\n") + + outstr += "\n" + else: + outstr += ("\n" + pkg_script + " = $(MISC_SCRIPTS_DIR)/" + pkg_name + \ + "-" + pkg_fmt + ".os8\n") + + outstr += ("\n$(" + pkg_bin + ") : $(" + \ + pkg_srcs + ") $(" + pkg_script + ") | $(OS8_TOOLTIME)\n") + outstr += ("\t$(OS8RUN) $(" + pkg_script + ")\n") + + return outstr + +#### run_builder ##################################################### +# Start a sub-process that executes the build: lines from the pspec file, +# or if there aren't any, call os8-run on the builder script. + +def run_builder (pkg_name, pspec, args): + if len(pspec["build:"]) > 0: + # Build lines to execute + # We probably need a chdir here because of assumptions about where the pspec is. + for build_line in pspec["build:"]: + if args.dry_run: + print (build_line) + else: + subprocess.call (build_line, shell = True) + + else: + script_name = pkg_name + "-" + pspec["format:"][0] + ".os8" + script_path = find_script (script_name, args) + if script_path == None: + print ("Could not find script: " + script_name) + return + tool = os.path.join (dirs.build, 'bin', "os8-run") + if args.dry_run: + print (tool + " " + script_path) + else: + subprocess.call (tool + " " + script_path, shell = True) + + +#### script_install ################################################### +# Call os8script commands to eiter perform install of pspec outputs +# or create a file containing the install commands suitable for submission +# to os8-run. +# If inc_file is None, we perform the install. +# If there is an inc_file we do NOT perform install. +# We append to the file. We ignore dry_run. +# The dry_run option under these conditions set stdout to inc_file. +# We do it this way so that only 1 routine is responsible for defining +# the install commands whether the be directly executed or saved in a script. + +def script_install (os8, pspec, pkg_name, args, inc_file): + if len(pspec["outputs:"]) == 0: + print ("Nothing to install from package " + pkg_name) + return + + if inc_file != None: + inc_file.write ("# Install of " + pkg_name + "\n") + + pkg_fmt = pspec["format:"][0] + if pkg_fmt == "tu56": dev = "dt1" + else: dev = "rk1" + + mount_str = dev + " $os8mo/" + pkg_name + "." + pkg_fmt + " ro required\n" + + if inc_file != None: + inc_file.write ("mount " + mount_str) + else: + if args.dry_run: + print ("install of " + pkg_name + ":\nmount " + mount_str) + else: + os8.mount_command (mount_str, None) + + for dest in pspec["outputs:"]: + m = re.match (_output_spec_re, dest) + if m == None: print ("Mal-formed output: spec: " + dest + ". Ignored.") + inst_str = "COPY " + dest + + if args.debug > 0 or args.verbose: print ("output: " + inst_str) + if inc_file != None: + inc_file.write ("os8 " + inst_str + "\n") + else: + if args.dry_run: + print (inst_str) + else: + os8.os8_command (inst_str, None) + + if inc_file != None: + inc_file.write ("umount " + dev + "\n\n") + else: + if args.dry_run and inc_file == None: + print ("umount " + dev) + else: + os8.umount_command (dev, None) + +#### script_delete ################################################### +# Call os8script commands to perform delete of pspect outputs and cleanups + +def script_delete (os8, pspec, pkg_name, args): + if len(pspec["outputs:"]) == 0: + print ("Nothing to delete from package " + pkg_name) + return + + if args.dry_run: + print ("uninstall of " + pkg_name) + + for dest in pspec["outputs:"]: + m = re.match (_output_spec_re, dest) + if m == None: print ("Mal-formed output: spec: " + dest + ". Ignored.") + del_str = "DEL " + m.group(1) + m.group(4) + if args.debug > 0 or args.verbose: print ("output: " + del_str) + if args.dry_run: + print (del_str) + else: + os8.os8_command (del_str, None) + + for dest in pspec["cleanups:"]: + del_str = "DEL " + dest + if args.debug > 0 or args.verbose: print ("cleanup: " + del_str) + if args.dry_run: + print (del_str) + else: + os8.os8_command (del_str, None) + + +#### find_pkg ######################################################### +# Use a search heuristic to find the package given its name. + +def find_pkg (pkg_name, pkg_base, pkg_dir, args): + if args.debug > 5: + print ("find_pkg: Name: " + pkg_name + ", Base: " + pkg_base + ", Dir: " + pkg_dir) + + pkg_path = os.path.join(pkg_dir, pkg_name + ".pspec") + if args.debug > 9: print ("Trying: " + pkg_path) + if os.path.exists (pkg_path): + if args.debug > 4: print ("Initial pkg spec succeeded.") + return pkg_path + + if args.destdir: + pkg_path = os.path.join (args.destdir, pkg_name) + if args.debug > 9: print ("Trying: " + pkg_path) + if os.path.exists (pkg_path): + if args.debug > 4: print ("Found in " + args.destdir + " as " + pkg_ame) + return pkg_path + + pkg_path = os.path.join (args.destdir, pkg_name + ".pspec") + if args.debug > 9: print ("Trying: " + pkg_path) + if os.path.exists (pkg_path): + if args.debug > 4: print ("Found in " + args.destdir + " as " + pkg_name + ".pspec") + return pkg_path + + pkg_path = os.path.join(_pkg_pspec_dir, pkg_name + ".pspec") + if args.debug > 9: print ("Trying: " + pkg_path) + if os.path.exists (pkg_path): + if args.debug > 4: print ("Found in " + _pkg_pspec_dir) + return pkg_path + + return None + +#### find_script ###################################################### +# Use a search heuristic to find the builder script given a package name. + +def find_script (script_name, args): + if args.debug > 5: + print ("find_script: Name: " + script_name) + + if args.destdir: + script_path = os.path.join (args.destdir, script_name) + if args.debug > 9: print ("Trying: " + script_path) + if os.path.exists (script_path): + if args.debug > 4: print ("Found " + script_path) + return script_path + + script_path = os.path.join (args.destdir, _pkg_obj_dir + script_name) + if args.debug > 9: print ("Trying: " + script_path) + if os.path.exists (script_path): + if args.debug > 4: print ("Found " + script_path) + return script_path + + script_path = os.path.join(_pkg_builder_dir, script_name) + if args.debug > 9: print ("Trying: " + script_path) + if os.path.exists (script_path): + if args.debug > 4: print ("Found " + script_path) + return script_path + + return None + +#### start_os8 ######################################################### +# Create and start up an os8 script runner +# Find the default boot image and boot it. +# Return the running os8 object handle. +# If we can't start os8, it's a fatal error. Quit here! + +def start_os8(targ_path, args): + try: + s = simh (dirs.build, True) + except (RuntimeError) as e: + print("Could not start simulator: " + e.message + '!') + sys.exit (1) + + if VERBOSE: + s.verbose = True + s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) + + os8 = os8script (s, [], [], verbose=VERBOSE, debug=args.debug>0) + + if args.debug >0 or args.dry_run: print ("Perform " + args.command + " on " + targ_path) + + os8.mount_command ("rk0 " + targ_path + " required", None) + os8.boot_command ("rk0", None) + + return os8 + + +#### conflicts ########################################################## +# Report any members of this pspec's output: that have been seen before. +# A seen item contains lots of information: +# pkg_name, dev, name + +def conflicts (seen, pspec, pkg_name, args): + if len(pspec["outputs:"]) == 0: + print ("No outputs in package " + pkg_name) + return + + for dest in pspec["outputs:"]: + found = False + m = re.match (_output_spec_re, dest) + if m == None: print ("Mal-formed output: spec: " + dest + ". Ignored.") + output_name = m.group(4) + # Save device and file name as a seen item. + for this in seen: + if this["name"] == output_name: + found = True + print ("Warning: " + output_name + " gets installed on " + this ["dev"] + \ + " by package " + this ["pkg_name"]) + if found == False: + item = {"pkg_name": pkg_name, "dev": m.group(1), "name": output_name} + if args.debug > 9: print ("Adding item: " + str(item)) + seen.append(item) + +#### verify ############################################################ +# Use the OCOMP program in the target to verify that the output: items +# are present and match what is in the package target file. + +def verify (os8, pspec, pkg_name, args): + if len(pspec["outputs:"]) == 0: + print ("No outputs in package " + pkg_name) + return + + pkg_fmt = pspec["format:"][0] + if pkg_fmt == "tu56": dev = "dt1" + else: dev = "rk1" + + mount_str = dev + " $os8mo/" + pkg_name + "." + pkg_fmt + " ro required\n" + if args.debug > 0: print ("Mount: " + mount_str) + os8.mount_command (mount_str, None) + os8.resume_command ("", None) + + for dest in pspec["outputs:"]: + m = re.match (_output_spec_re, dest) + if m == None: print ("Mal-formed output: spec: " + dest + ". Ignored.") + input_name = m.group(3) + m.group(4) + output_name = m.group(1) + m.group(4) + if args.debug > 9: print ("\tChecking: " + output_name) + ocomp_str = "TTY:<" + input_name + "," + output_name + + result = os8.ocomp_command (ocomp_str, None) + if result == "fail": + print ("Failed verify of " + output_name) + else: + if args.verbose: print ("Successful verify of " + output_name) + +#### main ############################################################## + +def main (): + + parser = argparse.ArgumentParser( + description = """ + Package manager for use under PDP-8 OS/8.""", + usage = "%(prog)s [options] [command] [package ...]") + parser.add_argument("-v", "--verbose", help="increase output verbosity", + action="store_true") + parser.add_argument("-d", dest="debug", metavar="DEBUG", type=int, + help="set debug level", default=0) + parser.add_argument("--destdir", help="Destination directory for output files") + parser.add_argument ("--target", help="target image file", default="v3d.rk05") + parser.add_argument ("--dry-run", "-n", action="store_true", help="Dry Run. Print output. Generate no files.") + + subparsers = parser.add_subparsers(title="commands") + + for pair in _command_set: + name = pair[0] + the_help = pair[1] + + the_sub = subparsers.add_parser (name, help=the_help) + the_sub.add_argument ('packages', nargs=argparse.REMAINDER, metavar="one or more package files") + the_sub.set_defaults (command=name) + + args = parser.parse_args() + + if hasattr(args, 'command') == False: + print (parser.print_help()) + sys.exit(-1) + + do_all = args.command == "all" + inst_cmd = args.command in ["install", "uninstall", "verify"] + + if args.command == "include" or do_all: + # We're going to assemble obj/os8pkg/pkgs.os8 from the proffered list of packages. + outpath = dest_expand (args, "pkgs.os8", _pkg_obj_dir) + if args.debug >0 or args.dry_run: print (outpath) + if len(args.packages) == 0: + first_line = "# No packages to include" + else: + first_line = "# Packages to include" + + if args.dry_run: + print (first_line) + else: + incfile = open (outpath, "w") + incfile.write(first_line + "\n") + + else: + # All other commands require one package. + if len(args.packages) == 0: + abort_prog ("Need at least one package to work.") + + # If we need an os8script object, put it here. + os8 = None + seen = [] + + # The pkg_spec from command line may be a package name, or a file path. + # We need the name, and may or may not get the ".pspec" at the end. + for pkg_spec in args.packages: + pkg_dir = os.path.dirname(pkg_spec) + pkg_base = os.path.basename(pkg_spec) + m = re.match(_pspec_strip_re, pkg_base) + if m == None: pkg_name = pkg_base + else: pkg_name = m.group(1) + if args.debug >0: print ("Package name: " + pkg_name) + + pkg_inpath = find_pkg (pkg_name, pkg_base, pkg_dir, args) + if pkg_inpath == None: + print ("Could not find package: " + pkg_spec) + continue + + if args.debug >0: print ("Package path: " + pkg_inpath) + + # We assume all command will require parsing the pspec. + pspec = parse_pspec(pkg_inpath) + if pspec == None: continue + + pkg_fmt = pspec["format:"][0] + if args.command == "format": + if len(args.packages) > 1: line = pkg_name + ": " + else: line = '' + line += pkg_fmt + print (line) + if args.debug >0: print ("Format: " + pkg_fmt) + + if args.command == "deps" or do_all: + print ("Generating deps for " + pkg_name + "...") + outname = (pkg_name + ".mk") + outpath = dest_expand (args, outname, _pkg_obj_dir) + if args.debug >0 or args.dry_run: print (outpath) + outstr = make_deps(pkg_name, pspec) + if args.dry_run: + print (outstr) + else: + depfile = open (outpath, "w") + for line in outstr: + depfile.write(line) + depfile.close() + + if args.command == "include": + # Use the list of pkgnames to generate an os8-run script that performs + # the relevant installs. + print ("Generating include script for " + pkg_name + "...") + if args.dry_run: + print ("Include: " + pkg_name) + script_install (None, pspec, pkg_name, args, sys.stdout) + else: + incfile.write ("# Install: " + pkg_name + "\n") + script_install (None, pspec, pkg_name, args, incfile) + + if args.command == "build" or do_all: + run_builder(pkg_name, pspec, args) + + # This calls start_os8 once if we need it. + if inst_cmd and os8 == None: + targ_path = dest_expand (args, args.target, _target_dir) + os8 = start_os8(targ_path, args) + + if args.command == "install" or do_all: + print ("Installing " + pkg_name + " to " + targ_path + "...") + script_install (os8, pspec, pkg_name, args, None) + + if args.command == "uninstall": + print ("Removing " + pkg_name + " from " + targ_path + "...") + script_delete (os8, pspec, pkg_name, args) + + if args.command == "conflicts": + print ("Checking for conflicts with package " + pkg_name) + conflicts (seen, pspec, pkg_name, args) + + if args.command == "verify": + print ("Verifying package " + pkg_name + " on " + targ_path) + verify (os8, pspec, pkg_name, args) + + if args.command == "include" and args.dry_run == False: + incfile.close() + + + # It is vitally important that we exit gracefully. Otherwise + # The install actions may not be successfully be committed to media. + if inst_cmd and os8 != None: + os8.simh.simh_cmd ("detach all") + os8.simh._child.sendline("quit") + + +if __name__ == "__main__": main() Index: bin/pidp8i.in ================================================================== --- bin/pidp8i.in +++ bin/pidp8i.in @@ -1,11 +1,11 @@ #!/bin/bash ######################################################################## # pidp8i.in - Collection of scriptlets for dealing with the pidp8i -# systemd user service and its associated screen(1) session. +# systemd user service and its associated screen manager session. # -# Copyright © 2015-2019 Oscar Vermeulen and Warren Young +# Copyright © 2015-2020 Oscar Vermeulen and Warren Young # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, @@ -34,31 +34,66 @@ prefix="@ABSPREFIX@" sim="$prefix/bin/pidp8i-sim" scanswitch="$prefix/libexec/scanswitch" systemctl=$(uname -r | grep -qw Microsoft && echo /bin/nothing || echo /bin/systemctl) ggrep=$(which ggrep grep 2> /dev/null | head -1) + +if [ -e "$prefix/etc/pidp8i.rc" ] +then + . "$prefix/etc/pidp8i.rc" +fi +[ -n "$SCREEN_MANAGER" ] || SCREEN_MANAGER=screen +if [ ! -t 1 ] && [ "$SCREEN_MANAGER" = "none" ] +then + echo "The 'none' screen manager mode is meant for interactive use only!" + exit 1 +fi is_running() { - procs=`screen -list pidp8i | $ggrep -Pc '\d\.pidp8i'` - test -n "$procs" && test $procs -gt 0 && return 0 || return 1 + if [ "$SCREEN_MANAGER" = "none" ] + then + return 1 + elif [ "$SCREEN_MANAGER" = "tmux" ] + then + tmux has-session -t pidp8i 2>/dev/null + else + procs=`screen -list pidp8i | $ggrep -Pc '\d\.pidp8i'` + test -n "$procs" && test $procs -gt 0 && return 0 || return 1 + fi } sim_child_pid() { - screen -ls pidp8i | grep -Eo '[[:digit:]]+\.pidp8i' | grep -Eo '^[[:digit:]]+' + if [ "$SCREEN_MANAGER" = "none" ] + then + echo "" + elif [ "$SCREEN_MANAGER" = "tmux" ] + then + tmux list-sessions -F '#{session_name} #{pid}' | awk '/^pidp8i / {print $2}' + else + screen -ls pidp8i | grep -Eo '[[:digit:]]+\.pidp8i' | grep -Eo '^[[:digit:]]+' + fi } # Were we given a command line argument? if [ -z "$1" ] then - # No, so just try to attach to the running simulator - if is_running + # No, so try to run or attach to the running simulator + if [ "$SCREEN_MANAGER" = "none" ] + then + exec $0 start + elif is_running then echo Joining simulator session already in progress... - screen -r -S pidp8i + if [ "$SCREEN_MANAGER" = "tmux" ] + then + exec tmux attach-session -d -t pidp8i + else + exec screen -r -S pidp8i + fi else cat < 1 and sys.argv[1] == '-b' - - # Create the SIMH child instance and tell it where to send log output - try: - s = simh (dirs.build) - except (RuntimeError) as e: - print "Could not start simulator: " + e.message + '!' - exit (1) - s.set_logfile (os.fdopen (sys.stdout.fileno (), 'w', 0)) - - # Find and boot the built OS/8 bin disk - rk = os.path.join (dirs.os8mo, 'v3d.rk05') - if not os.path.isfile (rk): - print "Could not find " + rk + "; OS/8 media not yet built?" - exit (1) - print "Booting " + rk + "..." - s.send_cmd ("att rk0 " + rk) - s.send_cmd ("boot rk0") - - # Start TECO8 in the simulator under OS/8 - s.os8_send_cmd ('\\.', "R TECO") - - # The macro comes from http://www.iwriteiam.nl/HaPi_TECO_macro.html - # and it was created by Stanley Rabinowitz. - # - # The 248 preceding "UN" in the first line of the macro is the number - # of digits of pi to calculate. That value was reached by experiment - # as the largest value that runs without crashing TECO with a - # - # ?MEM STORAGE CAPACITY EXCEEDED - # - # error. You can see that by increasing the value below, commenting - # out the throttle setting below, and running the demo. On a Pi 3, it - # should take a bit over an hour to complete, if it doesn't error out. - # - # With the simulator throttled, generating 248 digits takes 17 years! - # - # That is based on generating 1 digit every ~16 seconds on a Pi 3 when - # running unthrottled, roughly 8 MIPS. When throttled to 59 IPS — or - # 17ms per instruction, as below — you multiply the seconds by the - # factor 8 MIPS / 59 IPS = ~136000, giving about 2.2 million seconds - # per digit. Multiplying that by 248 gives ~17 years. - macro = [ - 'GZ0J\UNQN"E 248UN \' BUH BUV HK', - 'QN< J BUQ QN*10/3UI', - 'QI< \+2*10+(QQ*QI)UA B L K QI*2-1UJ QA/QJUQ', - 'QA-(QQ*QJ)-2\ 10@I// -1%I >', - 'QQ/10UT QH+QT+48UW QW-58"E 48UW %V \' QV"N QV^T \' QWUV QQ-(QT*10)UH >', - 'QV^T @^A/', - '/HKEX', - ] - - # First and last lines are handled specially, so slice them off. - first = macro.pop (0) - last = macro.pop () - - # Send the first line of the macro; implicitly awaits 1st TECO prompt - s.os8_send_cmd ('\\*', first) - - # Blindly send core lines of the macro; TECO gives no prompts for 'em. - for line in macro: - s.os8_send_line (line) - - # Send last line of macro sans CR, followed by two Esc characters to - # start it running. - s.os8_send_str (last) # not os8_send_line! - s.os8_send_ctrl ('[') - s.os8_send_ctrl ('[') - - if benchmark: - # Run demo long enough to get a good sense of the simulator's - # execution rate while unthrottled on this host hardware. If - # you don't run it long enough, the IPS value is untrustworthy. - try: - s.spin (10) - except pexpect.TIMEOUT: - # Explicitly shift back from OS/8 context to SIMH command context. - # We cannot rely on class simh to do this automatically because it - # expects to see a . prompt from the prior command, but we're - # still in TECO here, so we must be explicit. - s.os8_send_ctrl ('e') - - # Ask the simulator what IPS rate we ran that benchmark at. - s.send_cmd ('show clocks') - line = s.read_tail ('Execution Rate:') - curr_ips = int (line.strip().replace(',', '').split(' ')[0]) - pf = open ('lib/pidp8i/ips.py', 'a') - pf.write ('current = ' + str (curr_ips) + ' # ' + \ - str (datetime.today ()) + '\n') - pf.close () - s.send_cmd ('quit') - pdp_ratio = float (curr_ips) / ips.pdp8i - rpi_ratio = float (curr_ips) / ips.raspberry_pi_b_plus - print "\nYour system is " + format (rpi_ratio, '.1f') + \ - " times faster than a Raspberry Pi Model B+" - print "or " + format (pdp_ratio, '.1f') + \ - " times faster than a PDP-8/I.\n" - else: - # Normal mode. Tell SIMH and throttle down to a rate suitable for a - # blinkenlights demo. 1/17 means SIMH runs one instruction then - # waits for 17ms, yielding ~59 IPS. - time.sleep (0.02) # FIXME: simulator chokes on 'cont' without this - s.os8_send_ctrl ('e') # same justification as above - s.send_cmd ('set throttle 1/17') - - # You can't hit Ctrl-E while running this script in the foreground - # since pexpect takes over stdio. Therefore, if you want to be able - # to send commands to the simulator while the demo is running, - # uncomment the line below, which will let you send commands to the - # simulator via telnet. From another terminal or SSH session: - # - # $ telnet localhost 3141 - # - # or from a remote machine: - # - # $ telnet 192.168.1.2 3141 - # - # It's disabled by default because SIMH can't be made to listen only - # on localhost, so doing this may be a security risk. SIMH disables - # obviously-unsafe commands like ! on the remote console, but it is - # possible some mischief may be possible via this path anyway. It - # could be used to exfiltrate a sensitive file via ATTACH, for one - # thing. For another, it's a potential DoS vector. - #s.send_cmd ('set remote telnet=3141') - - # Let it run. Never exits. - s.send_cmd ('cont') - s.spin () - - -if __name__ == "__main__": - main() ADDED bin/teco-pi-demo.in Index: bin/teco-pi-demo.in ================================================================== --- /dev/null +++ bin/teco-pi-demo.in @@ -0,0 +1,189 @@ +#!/usr/bin/env @PYCMD@ +# -*- coding: utf-8 -*- +######################################################################## +# teco-pi-demo - Starts the simulator with the OS/8, sends one of the +# famous TECO "calculate pi" program to it, and starts it running at +# a very slow rate of speed to act as a blinkenlights demo. +# +# Copyright © 2017-2020 by Warren Young. +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT +# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the names of the authors above +# shall not be used in advertising or otherwise to promote the sale, +# use or other dealings in this Software without prior written +# authorization from those authors. +######################################################################## + +# Bring in just the basics so we can bring in our local modules +import os +import sys +sys.path.insert (0, os.path.dirname (__file__) + '/../lib') +sys.path.insert (0, os.getcwd () + '/lib') + +# Other core modules we need +from datetime import datetime +import time + +# Our local modules +from pidp8i import * +from simh import * + + +#### main ############################################################## + +def main (): + # Check for command line flags + benchmark = False + throttle = True + if len (sys.argv) > 1: + if sys.argv[1] == '-b': benchmark = True + elif sys.argv[1] == '-f': throttle = False + + + # Create the SIMH child instance and tell it where to send log output + try: + s = simh (dirs.build) + except (RuntimeError) as e: + print("Could not start simulator: " + e.message + '!') + exit (1) + s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) + + # Find and boot the built OS/8 bin disk + rk = os.path.join (dirs.os8mo, 'v3d.rk05') + if not os.path.isfile (rk): + print("Could not find " + rk + "; OS/8 media not yet built?") + exit (1) + print("Booting " + rk + "...") + reply = s.simh_cmd ("att rk0 " + rk) + s.simh_test_result (reply, "Prompt", "main 1") + reply = s.simh_cmd ("boot rk0", s._os8_replies_rex) + s.os8_test_result (reply, "Monitor Prompt", "main 2") + + # Start TECO8 in the simulator under OS/8 + # Confirm it is running when you receive the Command Decoder Prompt. + reply = s.os8_cmd ("R TECO") + s.os8_test_result (reply, "Command Decoder Prompt", "main 2") + + # The macro comes from http://www.iwriteiam.nl/HaPi_TECO_macro.html + # and it was created by Stanley Rabinowitz. + # + # The 248 preceding "UN" in the first line of the macro is the number + # of digits of pi to calculate. That value was reached by experiment + # as the largest value that runs without crashing TECO with a + # + # ?MEM STORAGE CAPACITY EXCEEDED + # + # error. You can see that by increasing the value below, commenting + # out the throttle setting below, and running the demo. On a Pi 3, it + # should take a bit over an hour to complete, if it doesn't error out. + # + # With the simulator throttled, generating 248 digits takes 17 years! + # + # That is based on generating 1 digit every ~16 seconds on a Pi 3 when + # running unthrottled, roughly 8 MIPS. When throttled to 59 IPS — or + # 17ms per instruction, as below — you multiply the seconds by the + # factor 8 MIPS / 59 IPS = ~136000, giving about 2.2 million seconds + # per digit. Multiplying that by 248 gives ~17 years. + macro = [ + 'GZ0J\\UNQN"E 248UN \' BUH BUV HK', + 'QN< J BUQ QN*10/3UI', + 'QI< \+2*10+(QQ*QI)UA B L K QI*2-1UJ QA/QJUQ', + 'QA-(QQ*QJ)-2\ 10@I// -1%I >', + 'QQ/10UT QH+QT+48UW QW-58"E 48UW %V \' QV"N QV^T \' QWUV QQ-(QT*10)UH >', + 'QV^T @^A/', + '/HKEX', + ] + + # First and last lines are handled specially, so slice them off. + first = macro.pop (0) + last = macro.pop () + + # Send the first line of the macro; implicitly awaits 1st TECO prompt + s.os8_send_line (first) + + # Blindly send core lines of the macro; TECO gives no prompts for 'em. + for line in macro: + s.os8_send_line (line) + + # Send last line of macro sans CR, followed by two Esc characters to + # start it running. + s.os8_send_str (last) # not os8_send_line! + s.os8_send_ctrl ('[') + s.os8_send_ctrl ('[') + + if benchmark: + # Run demo long enough to get a good sense of the simulator's + # execution rate while unthrottled on this host hardware. If + # you don't run it long enough, the IPS value is untrustworthy. + try: + s.spin (10) + except pexpect.TIMEOUT: + # Ask the simulator what IPS rate we ran that benchmark at. + # It knows how to shift context appropriately. + s.simh_send_line ('show clocks') + line = s.read_tail ('Execution Rate:').decode() + curr_ips = int (line.strip().replace(',', '').split(' ')[0]) + pf = open ('lib/pidp8i/ips.py', 'a') + pf.write ('current = ' + str (curr_ips) + ' # ' + \ + str (datetime.today ()) + '\n') + pf.close () + s.quit() + pdp_ratio = float (curr_ips) / ips.pdp8i + rpi_ratio = float (curr_ips) / ips.raspberry_pi_b_plus + print("\nYour system is " + format (rpi_ratio, '.1f') + \ + " times faster than a Raspberry Pi Model B+") + print("or " + format (pdp_ratio, '.1f') + \ + " times faster than a PDP-8/I.\n") + elif throttle: + # Normal mode. Tell SIMH and throttle down to a rate suitable for a + # blinkenlights demo. 1/17 means SIMH runs one instruction then + # waits for 17ms, yielding ~59 IPS. + s.simh_cmd ('set throttle 1/17') + + # You can't hit Ctrl-E while running this script in the foreground + # since pexpect takes over stdio. Therefore, if you want to be able + # to send commands to the simulator while the demo is running, + # uncomment the line below, which will let you send commands to the + # simulator via telnet. From another terminal or SSH session: + # + # $ telnet localhost 3141 + # + # or from a remote machine: + # + # $ telnet 192.168.1.2 3141 + # + # It's disabled by default because SIMH can't be made to listen only + # on localhost, so doing this may be a security risk. SIMH disables + # obviously-unsafe commands like ! on the remote console, but it is + # possible some mischief may be possible via this path anyway. It + # could be used to exfiltrate a sensitive file via ATTACH, for one + # thing. For another, it's a potential DoS vector. + #s.send_cmd ('set remote telnet=3141') + + # Let it run. Never exits. + s.send_line ('cont') + s.spin () + else: + s.spin () + + +if __name__ == "__main__": + main() DELETED bin/txt2os8 Index: bin/txt2os8 ================================================================== --- bin/txt2os8 +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -######################################################################## -# Create a tu56 or rk05 image and fill it with ASCII files, i.e. source code. -# -# It is intended to be be called manually when we have a POSIX -# directory full of ASCII files we want to bulk-copy into SIMH. -# -# The argument is taken both as the name of the image to create -# and the list of files to copy in. -# -# For now, it takes all input and produces all output in the -# current working directory. -# -# IMPORTANT: Currently all input files are mindlessly passed through -# txt2ptp which transforms POSIX ASCII files to OS/8 ASCII files. -# It WILL mutilate non-ASCII files. -# -# This program is based on the old cc8-tu56-update program, last -# shipped by this project in release v20171222. -# -# Copyright © 2017 by Warren Young and Bill Cattey -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, -# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the names of the authors above -# shall not be used in advertising or otherwise to promote the sale, -# use or other dealings in this Software without prior written -# authorization from those authors. -######################################################################## - -# Bring in just the basics so we can bring in our local modules -import os -import sys -import argparse - -sys.path.insert (0, os.path.dirname (__file__) + '/../lib') -sys.path.insert (0, os.getcwd () + '/lib') - -# Our local modules -from pidp8i import * -from simh import * - -# Other global Python modules -import glob -import subprocess - - -#### GLOBALS AND CONSTANTS ############################################# - -progmsg = True - - -#### main ############################################################## - -def main (): - global progmsg - - # Set up the arg parser and use it to parse the command line. - parser = argparse.ArgumentParser() - parser.add_argument("name", - help="Create an OS/8 image from a list of ASCII files.") - group = parser.add_mutually_exclusive_group(required=True) - group.add_argument("--tu56", "-t", action="store_true") - group.add_argument("--rk05a", "-ra", action="store_true") - group.add_argument("--rk05b", "-rb", action="store_true") - - args = parser.parse_args() - - print "Filename: " + args.name - if args.tu56: - sdev = "dt0" - os8dev = "DTA0:" - imagename = args.name + ".tu56" - stat_str = "DECtape" - - if args.rk05a: - sdev = "rk1" - os8dev = "RKA1:" - imagename = args.name + ".rk05" - stat_str = "partition A of" - - if args.rk05b: - sdev = "rk1" - os8dev = "RKB1:" - imagename = args.name + ".rk05" - stat_str = "partition B of" - - listname = args.name + ".list" - - # Create the SIMH child instance and tell it where to send log output - try: - s = simh (dirs.build, True) - except (RuntimeError) as e: - print "Could not start simulator: " + e.message + '!' - exit (1) - s.set_logfile (os.fdopen (sys.stdout.fileno (), 'w', 0)) - - # Attach a clean version of the image to the simulator - if os.path.exists (imagename): - print "Overwriting old " + stat_str + " image " + imagename - - s.send_cmd ("att " + sdev + " " + imagename) - - # Find and boot the bootable OS/8 disk. Use the "patched" version - # because that is what "make run" uses; we use that command to - # inspect this script's work. - rk = os.path.join (dirs.os8mo, 'os8v3d-patched.rk05') - if not os.path.isfile (rk): - print "Could not find " + rk + "; OS/8 media not yet built?" - exit (1) - print "Booting " + rk + "..." - s.send_cmd ("att rk0 " + rk) - s.send_cmd ("boot rk0") - - s.os8_send_cmd ('\\.', "ZERO " + os8dev) - - manifest = open (listname, "r") - - for line in manifest: - src = line.strip() - if src == "": continue - if src[0] == '#': continue # Allow commenting out files - - dest = src.upper () - s.os8_send_file (src, os8dev + dest) - - # Exit simulator nicely so that image detaches cleanly - s.back_to_cmd ('\\.') - s.send_cmd ("det " + sdev) - s.send_cmd ('quit') - - -if __name__ == "__main__": main() Index: boot/0.script.in ================================================================== --- boot/0.script.in +++ boot/0.script.in @@ -20,14 +20,14 @@ ; because toggling Sing_Step with IF = 0 must not be made to restart ; the simulator, else there would be no way to use Sing_Step for any ; of its other functions. See the PiDP-8/I instructions for details. ; echo Loading OS/8 from the RK05 cartridge disk... -@include @srcdir@/boot/common.script +@include boot/common.script @define SHORTNAME 0 -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script -att rk0 @MEDIADIR@/os8/@OS8_BOOT_DISK@ +att rk0 @MEDIADIR@/os8/@OS8_RUNTIME@ boot rk0 :end Index: boot/2.script.in ================================================================== --- boot/2.script.in +++ boot/2.script.in @@ -1,16 +1,16 @@ ; This script initializes a populated TSS/8 environment on an ; RS08 fixed-head hard disk drive (384 kB!) controlled by the ; RF08 disk controller. ; echo Loading TSS/8 from the RS08 fixed-head disk... -@include @srcdir@/boot/common.script +@include boot/common.script set rf enabled @define SHORTNAME 2 -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script load @MEDIADIR@/tss8/tss8_init.bin attach rf @MEDIADIR@/tss8/tss8_rf.dsk attach ttix 4000 run 24200 Index: boot/3.script.in ================================================================== --- boot/3.script.in +++ boot/3.script.in @@ -1,19 +1,19 @@ ; Loads OS/8 from DECtape, as opposed to the RK05 based environment ; in 0.script. ; echo Loading OS/8 from DECtape type @OS8_TAPE_DEVICE@... -@include @srcdir@/boot/common.script +@include boot/common.script @if SIMH_TAPE_DEVICE eq "td" set dt disabled set td enabled ; else, default is correct, per p.4 in SIMH's pdp8_doc.doc. @endif @define SHORTNAME 3 -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script attach @SIMH_TAPE_DEVICE@0 @MEDIADIR@/os8/@OS8_BOOT_TAPE@ boot @SIMH_TAPE_DEVICE@0 :end Index: boot/4.script.in ================================================================== --- boot/4.script.in +++ boot/4.script.in @@ -15,17 +15,17 @@ echo echo Press Ctrl-E to pause the simulator and return to the SimH echo command prompt, where you can say "quit", "help" and other echo things. See the SimH manual for details. echo -@include @srcdir@/boot/common.script +@include boot/common.script at ttix 2222 set ttox0 8b @define SHORTNAME 4 -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script load @MEDIADIR@/spacewar/spacewar.bin g 200 :end Index: boot/6.script.in ================================================================== --- boot/6.script.in +++ boot/6.script.in @@ -1,15 +1,15 @@ ; This script loads ETOS V5B from the RK05 cartridge disk drive. ; echo Loading ETOS from the RK05 cartridge disk drive... -@include @srcdir@/boot/common.script +@include boot/common.script set tsc enabled attach ttix 4000 @define SHORTNAME 6 -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script att rk0 @MEDIADIR@/etos/etosv5b-demo.rk05 boot -d rk0 :end Index: boot/run-v3f.script.in ================================================================== --- boot/run-v3f.script.in +++ boot/run-v3f.script.in @@ -4,20 +4,20 @@ ; OS/8 V3F or V3D. This script also runs the tape image from the build ; directory, rather than from the installation directory, since it's ; normally run as "make run-v3f". ; echo Loading OS/8 from DECtape type @OS8_TAPE_DEVICE@... -@include @srcdir@/boot/common.script +@include boot/common.script @if SIMH_TAPE_DEVICE eq "td" set dt disabled set td enabled ; else, default is correct, per p.4 in SIMH's pdp8_doc.doc. @endif @define SHORTNAME run-v3f -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script attach @SIMH_TAPE_DEVICE@0 bin/v3f-@OS8_TAPE_DEVICE@.tu56 boot @SIMH_TAPE_DEVICE@0 :end Index: boot/run.script.in ================================================================== --- boot/run.script.in +++ boot/run.script.in @@ -1,14 +1,14 @@ ; Same as 0.script, only with RK0 attached to the *.rk05 file in the ; build directory, not the one in the installation directory. Used ; by "make run" so you don't have to "make mediainstall" first. ; echo Loading OS/8 from the RK05 cartridge disk in the build directory... -@include @srcdir@/boot/common.script +@include boot/common.script @define SHORTNAME run -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script -att rk0 bin/@OS8_BOOT_DISK@ +att rk0 bin/@OS8_RUNTIME@ boot rk0 :end Index: boot/tss8.script.in ================================================================== --- boot/tss8.script.in +++ boot/tss8.script.in @@ -4,17 +4,17 @@ ; ; This is used by "make run-tss8" so you don't have to say ; "make mediainstall" then manually start the simulator with 2.script. ; echo Loading TSS/8 from the RS08 fixed-head disk... -@include @srcdir@/boot/common.script +@include boot/common.script set rf enabled !cp -n media/tss8/tss8_rf.dsk bin @define SHORTNAME tss8 -@include @srcdir@/boot/savestate.script +@include @ABSSRCDIR@/boot/savestate.script !cp media/tss8/tss8_init.bin bin load bin/tss8_init.bin attach rf bin/tss8_rf.dsk attach ttix 4000 Index: doc/OS-images.md ================================================================== --- doc/OS-images.md +++ doc/OS-images.md @@ -1,37 +1,71 @@ -The Raspbian OS images you can download from [the PiDP-8/I development -site][1] are based on the [official Raspbian images][2], so the +# Using Our Binary OS Images + +## Imaging the SD Card + +The Raspberry Pi OS OS images you can download from [the PiDP-8/I development +site][1] are based on the [official Raspberry Pi OS images][2], so the Raspberry Pi Foundation’s [installation guide][3] applies just as well to our PiDP-8/I software images. I particularly like using the [Etcher][7] method, even on a POSIX system, since it can write the SD card directly from the Zip file, without requiring that you unpack the `*.img` file within first. -You will need to use a 2 GB or larger SD card. +As of the 2021.02.14 release, you will need to use a 8 GB or larger +SD card. Prior releases allowed use of 2 GB cards, but you can't +even do an "`apt upgrade`" on such a card after flashing it with a +fresh copy of the current "Lite" OS image. We jumped from 2 GB to +8 not only because we don't happen to have any 4 GB cards laying +around, but because the Raspberry Pi Foundation docs recommend 8 GB +for this release. The contents of the Zip file are: | File Name | Description |-------------------------------- | `README.md` | this file -| `pidp8i-*.img` | the OS image, based on Raspbian Stretch Lite +| `pidp8i-*.img` | the OS image, based on Raspberry Pi OS Stretch Lite | `MANIFEST.txt` | SHA-256 hash and file size for the OS image file + +## Logging In + Aside from having the PiDP-8/I software installed and running, the -primary difference between this disk image and the official Raspbian -Lite image is the default user name and password: +primary difference between our OS images those provided by the Raspberry +Pi Foundation is the default user name and password: * **username:** `pidp8i` * **password:** `edsonDeCastro1968` You will be made to change that password on first login. Remember, [the S in IoT stands for Security.][5] If we want security, we have to see to it ourselves! -If you do not want your PiDP-8/I to be secure, see my other guide, "[How -to Run a Naked PiDP-8/I][6]." +If you do not want your PiDP-8/I to be secure, see our +"[How to Run a Naked PiDP-8/I][6]" guide. + + +## Enabling the SSH Server + +The OpenSSH server is enabled and running by default on our OS images, +but for security reasons, our build process wipes out the generated SSH +host keys, else they’d be the same on everyone's PiDP-8/I, which would +be a massive security hole. Unfortunately, the `sshd` service on +Raspberry Pi OS is not smart enough to regenerate these keys if they are +missing on boot, so you need to do this once by hand: + + $ sudo dpkg-reconfigure openssh-server + +You should be able to log in via SSH immediately after that command +completes. + +We can’t do this for you automatically because our software doesn’t run +as root, so our startup script cannot make system-wide changes. This is +properly one of the tasks for you, the system’s administrator. + +
[1]: https://tangentsoft.com/pidp8i/ [2]: https://raspberrypi.org/downloads/raspbian/ [3]: https://raspberrypi.org/documentation/installation/installing-images/ Index: doc/RELEASE-PROCESS.md ================================================================== --- doc/RELEASE-PROCESS.md +++ doc/RELEASE-PROCESS.md @@ -33,10 +33,26 @@ ## Update SIMH If `tools/simh-update` hasn't been run recently, you might want to do that and re-test before publishing a new version. + +## Test + +1. Build the software on the version of Raspberry Pi OS we’ll + [use for BOSI, below](#bosi). Fix any problems. + +2. Run `make test` on the BOSI host. Fix any problems. + +3. Repeat above on [all other platforms previously known to work][oscomp]. + Update the article to list caveats and such, or fix the problems. + +(See “[How the PiDP-8/i Software Is Tested](./testing.md)” for details +on the philosophy and methods behind this process.) + +[oscomp]: https://tangentsoft.com/pidp8i/wiki?name=OS+Compatibility + ## Publish OS/8 RK05s Re-configure the software with default settings, remove `bin/*.rk05`, rebuild, and run `tools/publish-os8` to send the "final" OS/8 disk @@ -53,19 +69,15 @@ release, and write them up in user-focused form into [the `ChangeLog.md` file][cl]. If a regular user of the software cannot see a given change, it shouldn't go in the `ChangeLog.md`; let it be documented via the timeline only. -[cl]: https://tangentsoft.com/pidp8i/doc/trunk/ChangeLog.md - - -## Build and Update the Fossil Binary - -If a new release of Fossil has come out since the last release, the -`wget` link in `tools/bosi` is probably stale. Build an updated binary, -run `tools/publish-fossil`, then replace the file name part of the URL -in `tools/bosi` to pull that new version. +Immediately prior to release, `/doc`, `/dir`, `/file` and similar links +should point to trunk, but immediately prior to release, re-point them +to the `release` branch, since this document describes prior releases. + +[cl]: https://tangentsoft.com/pidp8i/doc/trunk/ChangeLog.md ## Update the Release Branch Run `make release` to check the `ChangeLog.md` file changes in, merge @@ -85,24 +97,27 @@ after tagging it. ## Produce the Normal Binary OS Image -Start with the latest version of [Raspbian Lite][os] on a multi-core +Start with the latest version of [Raspberry Pi OS Lite][os] on a multi-core Raspberry Pi. 1. If the version of the base OS has changed since the last binary OS - image was created, download the new one. + image was created, download the new one. Be sure to update the “`$os`” + variable at the top of `tools/bosi` to match if the major version + has changed. While the OS is downloading, zero the SD card you're going to use for this, so the prior contents don't affect this process. Blast the base OS image onto the cleaned SD card. 2. Boot it up on a multi-core Pi. - Log in, then retreive and initialize BOSI: + Log in as user `pi`, password `raspberry`, then retreive and + initialize BOSI: $ wget https://tangentsoft.com/bosi $ chmod +x bosi $ exec sudo ./bosi init @@ -113,55 +128,57 @@ we ask if there are any running processes owned by user `pi`. It will either reboot the system after completing its tasks successfully or exit early, giving the reason it failed. -3. Clone the software repo and build the softare: +3. Log in as user `pidp8i` since the prior step changed it from `pi`. + The password remains unchanged at this point. + + Clone the software repo and build the software: + + $ ./bosi build [nls] - $ ./bosi build + Adding the “nls” parameter lets the slow single-core Pi build share + the multicore ILS build’s OS/8 images, saving a tremendous amount of + build time. On reboot, say `top -H` to make sure the software is running and - that the CPU percentages are reasonable for the platform. + that the CPU percentages are reasonable for the platform: if the CPU + is mostly idle, the simulator isn’t running, and you need to figure + out why before proceeding. You may also want to check that it is running properly with a `pidp8i` command. Is the configuration line printed by the simulator correct? Does OS/8 run? Are there any complaints from SIMH, such as about insufficient CPU power? -4. Do final inside-the-image steps: +4. Do the final inside-the-image steps: $ ./bosi prepare -5. Move the SD card to a USB reader plugged into the Pi, boot the Pi - from its prior SD card, and shrink the OS image: - - $ wget https://tangentsoft.com/bosi - $ chmod +x bosi - $ ./bosi shrink - -6. Move the USB reader to the Mac,¹ then say: +5. After the Pi shuts down, move the SD card to a micro SD card reader plugged + into the Mac¹ and say: $ bosi image [nls] - For the ILS images, you can give "ils" as a parameter or leave it - blank. + Give "ils" as a parameter or leave it blank for the ILS image. -7. The prior step rewrote the SD card with the image file it created. +6. The prior step rewrote the SD card with the image file it created. Boot it up and make sure it still works. If you're happy with it, - give this command *on the desktop PC*. + give this command *on the Mac*. $ bosi finish [nls] As above, the parameter can be "ils" or left off for the ILS images. -[os]: https://www.raspberrypi.org/downloads/raspbian/ +[os]: https://www.raspberrypi.org/software/operating-systems/ ## Produce the "No Lamp Simulator" Binary OS Image Do the same series of steps above on a single-core Raspberry Pi, except -that you give "nls" parameters to the `image` and `finish` steps. +that you give "nls" parameters to the `build`, `image`, and `finish` steps. ## Publicizing While the NLS image uploads — the ILS image was already sent in step 7 @@ -185,9 +202,9 @@ commands for their own desktop PC. ### License -Copyright © 2016-2017 by Warren Young. This document is licensed under +Copyright © 2016-2021 by Warren Young. This document is licensed under the terms of [the SIMH license][sl]. [sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md Index: doc/cc8-manual.md ================================================================== --- doc/cc8-manual.md +++ doc/cc8-manual.md @@ -30,11 +30,11 @@ later in 1972. Much of PDP-11 Unix remained written in assembly until its developers decided to rewrite the operating system in C, for Version 4 Unix, released in 1973. That decision allowed Unix to be relatively easily ported to a wholly different platform — the Interdata 8/32 — in 1978 by writing a new code generator for the C compiler, then -cross-compiling everything. That success in porting Unix lead to C’s own +cross-compiling everything. That success in porting Unix led to C’s own success first as a systems programming language, and then later as a general-purpose programming language. Although we are not likely to use CC8 to write a portable operating system for the PDP-8, it is powerful enough to fill C’s original niche @@ -81,11 +81,11 @@ ## Requirements The CC8 system generally assumes the availability of: -* [At least 12 kWords of core](#memory) at run time for programs +* [At least 16 kWords of core](#memory) at run time for programs compiled with CC8. The [native OS/8 CC8 compiler passes](#ncpass) require 20 kWords to compile programs. CC8 provides no built-in way to use more memory than this, so you will probably have to resort to [inline assembly](#asm) or FORTRAN @@ -328,32 +328,39 @@ 1. **Recursion:** See [`FIB.C`][fib] for an example of this. 1. **Simple arithmetic operators:** `+`, `-`, `*`, `/`, etc. -1. **Bitwise operators:** `&`, ¦, `~` and `!` +1. **Bitwise operators:** `&`, `|`, `~` and `!` 1. **Simple comparison operators:** False expressions evaluate as 0 and true as -1 in two’s complement form, meaning all 1's in binary form. See the list of limitations below for the operators excluded by our "simple" qualifier. -1. **A few 2-character operators:** `++`, `--` (postfix only) and `==`. +1. **2-character operators:** `++`, `--`, `==`, `!=`,`>=`, `<=`, `&&`, + and `||`. Note that `++` and `--` are postfix only, and + that `&&` and `||` are [implemented as `&` and `|`](#2cbo). + +1. **Ternary operator:** The `?:` operator works as of May 2020; it may + be nested. 1. **Limited library:** See [below](#libc) for a list of library functions provided, including their known limitations relative to Standard C. There are many limitations in this library relative to Standard C or even K&R C, which are documented below. 1. **Limited structuring constructs:** `if`, `while`, `for`, etc. are - supported, but they may not work as expected when deeply nested or - in long `if/else if/...` chains. + supported. There is a nesting limit of 10 which is rarely exceeded in + most applications. In addition, `switch` statements are now supported + via a code re-write in the C pre-processor (cc.sv). See [`FORTH.C`][forth] + for an example. -[fib]: /doc/trunk/src/cc8/examples/fib.c - +[fib]: /doc/trunk/src/os8/examples/fib.c +[forth]: /doc/trunk/src/os8/examples/forth.c ### Known Limitations of the OS/8 CC8 Compiler The OS/8 version of CC8 supports a subset of the C dialect understood by @@ -363,31 +370,33 @@ a 12 bit integer, and any variable/array can interpreted as `int`, `char` or pointer. All variables and arrays must be declared as `int`. As with K&R C, the return type may be left off of a function's definition; it is implicitly `int` in all cases. - Because the types are already known, it is not necessary to give - types when declaring function arguments: + It is not necessary to give argument types when declaring function + arguments, but you must declare a return type with the OS/8 CC8 + compiler: - myfn(n) { /* do something with n */ } + int myfn(n) { /* do something with n */ } This declares a function taking an `int` called `n` and returning an `int`. Contrast the CC8 cross-compiler, which requires function argument - types to be declared, if not the return type, per K&R C rules: + types to be declared but not the return type, per K&R C rules: - myfn(n) + int myfn(n) int n; { - /* do something with n */ + /* do something with n, then _maybe_ return something */ } - The cross-compiler supports `void` as an extension to K&R C, but the - native compiler does not, and it is not yet smart enough to flag - code including it with an error. It will simply generate bad code - when you try to use `void`. + The type int is mandatory for all functions. + + The cross-compiler supports `void` as an extension to K&R C. This type + is converted to `int` in the pre-processor. Similarly, the type `char` is + converted. These type may be used for readability purposes. 2. There must be an `int main()`, and it must be the last function in the single input C file. Since OS/8 has no way to pass command line arguments to a program @@ -422,11 +431,12 @@ pass](#ncpass), implemented in `p8.c`, so it doesn’t need `#include` to make these things work.) * No conditional compilation: `#if`, `#ifdef`, `#else`, etc. - * [Inline assmembly](#asm) via `#asm`. + * [Inline assmembly](#asm) via `#asm` / `#endasm`. See + [`FIB.C`][fib] for an example 5. Variables are implicitly `static`, even when local. 6. Arrays may only be single indexed. See `PS.C` for an example. @@ -438,23 +448,23 @@ must instead be: int i; i = 5; -8. There is no `&&` nor ¦¦, nor are there plans to add - them in the future. Neither is there support for complex relational - operators like `>=` nor even `!=`. Abandon all hope for complex - assignment operators like `+=`. +8. `&&` and `||` work, but because they + are internally converted to `&` and `|`, their precedence has + changed, and they do not short-circuit as in a conforming C + compiler. - Most of this can be worked around through clever coding. For - example, this: + You can work around such differences with clever coding. For + example, this code for a conforming C compiler: if (i != 0 || j == 5) - could be rewritten to avoid both missing operators as: + should be rewritten for CC8 to avoid the precedence changes as: - if (!(i == 0) | (j == 5)) + if (!(i == 0) || (j == 5)) because a true result in each subexpression yields -1 per the previous point, which when bitwise OR'd together means you get -1 if either subexpression is true, which means the whole expression evaluates to true if either subexpression is true. @@ -490,11 +500,41 @@ while (1) { /* do something useful */; if (cond) break; } We have no intention to fix this. -12. `switch` doesn't work. +12. As of May 2020, `switch` is implemented via re-write to cascading + `if`/`then` statements. There are a number of limitations to this + approach that a CC8 user should be aware of. + + The primary one to keep in mind is that that if you use a + memory-mutating expression in the `switch` clause with a conforming + C compiler, it is evaluated just once at the start of the block, but + in CC8, it is evaluated once for each generated `if` sub-expression + that the code visits. That is, you should not say things like this + in code meant to be compiled with the CC8 native compiler: + + switch (*p++) {...} + + Say instead: + + int temp = *p++; + switch (temp) {....} + + Also, there **must** be a `default` case, and cases (including the + default case) must be terminated with a `break`. CC8 does not allow + for cases that fall through to the following case. The following + code has at least three syntax errors: + + switch (x) { + case 1: foo(); + case 2: bar(); + default: qux(); + } + +13. `sizeof()` is not implemented. + #### GOVERNMENT HEALTH WARNING @@ -658,13 +698,14 @@ functions you’d think would go along nicely with those we do provide, such as `feof()` or `fseek()`. Keep in mind that the library is currently restricted to [a single 4 kWord field](#memory), and we don’t want to lift that restriction. Since the current implementation nearly fills that space, it is unlikely that we’ll add much more -functionality beyond the currently provided 33 functions. If we ever fix -any of the limitations we’ve identified below, consider it “gravy” -rather than any kind of obligation fulfilled. +functionality beyond the currently provided 33 LIBC functions plus [the +9 additional functions](#addfn). If we ever fix any of the limitations +we’ve identified below, consider it “gravy” rather than any kind of +obligation fulfilled. Some of these missing functions are less useful in the CC8 world than in more modern C environments. The low-memory nature of this world encourages writing loops over [word strings](#wordstr) in terms of pointer arithmetic and implicit zero testing (e.g. `while (*p++) { /* @@ -710,23 +751,30 @@ [iot]: /wiki?name=IOT+Device+Assignments [libch]: /doc/trunk/src/cc8/include/libc.h [libcsrc]: /doc/trunk/src/cc8/os8/libc.c -### `atoi(s, outlen)` +### `int atoi(s, *result)` -Takes a null-terminated ASCII character string pointer `s` and returns a -12-bit PDP-8 two’s complement signed integer. The length of the numeric -string is returned in `*outlen`. +Takes a null-terminated ASCII character string pointer `s` and tries to +interpret it as a 12-bit PDP-8 two’s complement signed integer, storing +the value in `*result` and returning the number of bytes in `s` +consumed. **Standard Violations:** + +* Instead of returning the converted integer, this function stores + that value in `*result`. + +* Whereas `atoi()` in Standard C returns the converted value, in this + function, `s[retval]` is the first invalid — non-sign, non-digit, + non-space — character in the string, where `retval` is the return + value. * Skips leading ASCII 32 (space) characters only, not those matched by [`isspace()`](#isspace), as the Standard requires. -* The `outlen` parameter is nonstandard. - ### `cupper(p)` Implements this loop more efficiently: @@ -898,11 +946,11 @@ requires you to open the input file before opening an output file when you need both. It may not be possible to fix this within the current limitations on the library, but if you come up with something, [we accept patches][hakp]. -[hakp]: /doc/trunk/HACKERS.md#patches +[hakp]: /doc/trunk/CONTRIBUTING.md#patches ### `fprintf(fmt, args...)` Writes its arguments (`args`...) to the currently-opened output file @@ -1236,20 +1284,16 @@ character will not be written! * There is no `snprintf()`, `vprintf()`, etc. -### `sscanf` - -Reads formatted input from a file. - -**Standard Violations:** - -* `[f]scanf()` is not provided. Call [`[f]gets()`](#gets) to get a - string and then call `sscanf()` on it. - -* This list cannot possibly be complete. +### `fscanf`, `scanf`, `sscanf` + +Parse strings according to a `printf`-like format specification. `scanf` +gets the string from the interactive terminal, `fscanf` gets it from a +file opened with [`fopen()`](#fopen), and `sscanf` gets it from a +NUL-terminated C string already in core. **DOCUMENTATION INCOMPLETE** ### `strcat(dst, src)` @@ -1349,10 +1393,39 @@ Prints the CC8 compiler’s banner message. This is in LIBC only because it’s called from several places within CC8 itself. **Nonstandard.** + +## Additional Utility Routines + +The functions that CC8 uses to manipulate the software stack are also +available to be called by end-user programs: `PUSH`, `POP`, `PUTSTK`, +`POPRET`, and `PCALL`. The page zero pointers for this stack are +initialized by code in `header.sb`, which is injected into your +program’s startup sequence during compilation. + +In addition, there are a set of functions that may be used to provide +temporary storage in field 4, acting like a temporary binary file: + +`void iinit(int address)`: Reset the file pointer to an arbitrary +address range 0-4095. + +`void stri(int value)`: Store ‘value’ at the current address, and +increment the address pointer. + +`int strl()`: Read the word at the current address, and do not increment +the address. + +`int strd()`: Read the word at the current address, and increment the +address. + +As field 4 is not used by OS/8, your program may use the entire field. +This library code does not check for overflow: going beyond address 4095 +will simply wrap to address 0. + + ## Trying the Examples The standard PiDP-8/I OS/8 RK05 boot disk contains several example @@ -1370,25 +1443,39 @@ range for 12 bits! The other examples preinstalled are: * **calc.c** - A simple 4-function calculator program. + +* **pd.c** - Shows methods for doing double-precision + (i.e. 24-bit) integer calculations. + +* **hlb.c** - Generates [Hilbert curves][hc] on a Tek4010 + series display using raw terminal codes. Therefore, you must be + running a Tek4010 emulator when running this program, else you will + get garbage on the display! * **fib.c** - Calculates the first 10 Fibonacci numbers. This implicitly demonstrates CC8's ability to handle recursive function calls. -If you look in `src/cc8/examples`, you will find these same programs -plus `basic.c`, a simple BASIC language interpreter. This one is -not preinstalled because its complexity is currently beyond the -capability of the OS/8 version of CC8. To build it, you will have -to use [the cross-compiler](#cross), then assemble the resulting -`basic.sb` file under OS/8. +* **basic.c** - A simple Basic interpreter used to test + a simple recursive expression processor. + +* **forth.c** - A simple Forth interpreter used to test + switch statemments etc. + +The two interpeters are quite complex, particularly the Forth +interpreter, which contains 300 lines of code and implements a number of +basic Forth functions. This example is intended to show what can be +crammed into 4k of core. + Another set of examples not preinstalled on the OS/8 disk are `examples/pep001-*.c`, which are described [elsewhere][pce]. +[hc]: https://en.wikipedia.org/wiki/Hilbert_curve [pce]: /wiki?name=PEP001.C ## Making Executables @@ -1425,10 +1512,11 @@ **Field 2:** The program's executable code **Field 3:** The LIBC library code +**Field 4:** (Optional) see the binary utilities above (stri...). ### OS/8 Reservations The uppermost page of fields 0 thru 2 hold the [resident portion of OS/8][os8res] and therefore must not be touched by @@ -1582,19 +1670,19 @@ [v7ux]: https://en.wikipedia.org/wiki/Version_7_Unix ### There Are No Storage Type Distinctions -It may surprise you to learn that literals are placed in the same field -as globals and the call stack. - -Other C compilers place literals in among the executable code instead, a -fact that’s especially helpful on [Harvard architecture -microcontrollers][harch] with limited RAM. We don’t do it that way in -CC8 because literals are implemented in terms of the SABR `COMMN` -feature, which in turn is how OS/8 FORTRAN II implements `COMMON`. These -subsystems have no concept of “storage type” as in modern C compilers. +Literals are placed in the same field as globals and the call stack, +rather that inline within the generated executable code. This may cause +surprise size limitations of the user programs. + +CC8 does it this way because the FORTRAN II / SABR system does allow any +initialisation of COMMON storage in field 1, so the literals have to be +stored in the user program page and then be copied into field 1 at +program initialization time. Various pointers to these regions are +mainatined by the compiler. ### Stack Overflow Since CC8 places the call stack immediately after the last literal @@ -1606,12 +1694,10 @@ the page OS/8 is using at the top of field 1. If you manage to blow the stack by more than a page without crashing the program or the computer first, the [stack pointer will wrap around](#ptrwrap) and the stack will begin overwriting the first page of field 1. -[harch]: https://en.wikipedia.org/wiki/Harvard_architecture - ### Field Layout, Concrete Example The field layout given [at the start of this section](#memory) is not fixed. The linking loader is free to use any layout it likes, consistent @@ -1923,11 +2009,11 @@ |`JMPI` |5400 |same as `JMP I` in PAL8| |`MQL` |7421 |load MQ from AC, clear AC| |`ACL` |7701 |load AC from MQ (use `CLA SWP` to give inverse of `MQL`)| |`MQA` |7501 |OR MQ with AC, result in MQ| |`SWP` |7521 |swap AC and MQ| -|`DILX` |6053 |set VC8E X coordinate (used by [`dispxy()`](#dispxy)| +|`DILX` |6053 |set VC8E X coordinate (used by [`dispxy()`](#dispxy))| |`DILY` |6054 |set VC8E Y coordinate| |`DIXY` |6054 |pulse VC8E at (X,Y) set by `DIXY`,`DILY`| |`CDF0` |6201 |change DF to field 0| |`CDF1` |6211 |change DF to field 1| |`CAF0` |6203 |change both IF and DF to field 0| ADDED doc/class-os8script.md Index: doc/class-os8script.md ================================================================== --- /dev/null +++ doc/class-os8script.md @@ -0,0 +1,658 @@ +# class os8script: A high-level interface to OS/8 under SIMH + +## Introduction + +This class is a higher level abstraction above the class simh. + +An understanding of that class as documented in [doc/class-simh.md][class-simh-doc] +is a helpful to working with this class. + +Development of this class was driven by the desire to create a scripting +language to engage in complex dialogs programs running under OS/8. The first use +cases were embodied in the [`os8-run`][os8-run-doc] scripting system: + + * Use `BUILD` to perform elaborate system configuration in a repeatable way. + * Drive commands calling the OS/8 Command decoder to operate on specified + files under OS/8. + * Apply patches, first using `ODT` and then using `FUTIL`. + * Assemble programs using `PAL8`. + * Reconfigure the SIMH devices, for example switching between having TC08 + or TD8E DECtape devices. (Only one is allowed at a time, and the OS/8 system + areas are incompatible.) + +The latest use case, embodied in the [`os8-progtest`][progtest-doc] +utility, is to allow creation of arbitrary state machines that engage +in complex program dialogs so as to permit programmed, run-time +testing of functionality under OS/8. + +This document describes the class os8script API with an eye to assisting +the development of stand-alone programs that use it. A complete demo +program implementing a complex dialog is provided. + +## Housekeeping + +Before we describe methods to create the environment and run commands, +it is important to learn the rules of housekeeping in the `class +os8script` environment: + +### Important caveat about parallelism: + +The pidp8i software package does a lot of complex building both under POSIX +and in a scripted way under OS/8. The `tools/mmake` POSIX command +runs multiple independent instances of `make` in parallel. + +OS/8 comes from a single threaded, single computer design paradigm. The +boot device assumes **NOTHING** else is touching its contents. This means if there +is more than one instance of SIMH booting OS/8 from the same image file +(for example in two terminal windows on the same POSIX host) +the result is **completely unpredictable**. + +This was the primary driver for the creation of the `scratch` option +to the `mount` command and the development of the `copy` command. +Care **must** be exercised to do run in a `scratch` boot environment, +so as to manage dependencies and concurrencies. + +### Gracefully unmount virtual files + +POSIX buffers output. If you `mount` an image file, modify it, and quit +the program, the buffered modifications may be lost. In order to guarantee +all buffers are properly flushed, you **must** call `umount` on image files +you've modified. + +### Quit SIMH. + +This is not a requirement, but is good practice. + +### Remove scratch images. + +The management of scratch images is rudimentary. The `mount` command +creates them, and appends them to a global list `scratch_list`. This list +must be used before exiting your program to sweep through and delete +the scratch imagtes. + +At this time the API keeps no other association with mounts, and makes +no other inferences about when the scratch file might or might not be +needed. + +Note that the [`exit_command`](#exit_command) will do all this cleanup for you. +So be sure to call it on every normal or abnormal exit from your program. + +With the housekeeping rules covered, we are ready to learn how to set +up the environment. + +## Setup: + +The following will include the libraries you need: + + import os + import sys + sys.path.insert (0, os.path.dirname (__file__) + '/../lib') + sys.path.insert (0, os.getcwd () + '/lib') + + from pidp8i import * + from simh import * + from os8script import * + + +The setup steps: + +1. Using the argparse library is recommended to create an args structure containing +the parsed command line arguments. + +2. Create the simh object that will do the work. + +3. Create the os8script object that calls to the simh object. + +The creation method, `os8script` takes up to 5 arguments: + +* `simh`: The `simh`: object that will host SIMH. See [class-simh.md][simh-class-doc]. +* `enabled_options`: List of initial options enabled for interpreting script commands. +* `disabled_options`: List of initial options disabled for interpreting script commands. +* `verbose`: Optional argument enabling verbose output. Default value of `False`. +* `debug`: Optional argument enabling debug output. Default value of `True`. + +The two options lists were put into the creation call initially because +for the first use of the API, it was easy to pass the arrays returned by +`argparse`. Conceptually, an initial set of options is passed in at create +time, and thereafter the add/remove calls are used to change the active options +one at a time. + +4. Find the system image you want to boot to do the work. + +In the example below we default to using the `os8mo` element from the +`dirs` library. That is the default media output directory where the +build process installs the bootable images. The bootable image +defaults to the `v3d.rk05` image or can be specified by a `--target` +option. + +5. Mount and boot the image. Using `scratch` is **highly** recommended. + + +## Doing the Work: + +There are two script-based calls if you have a file on the POSIX host, +or can assemble a string into a file handle, and express your work +as an `os8-run` style script: + +`run_script_file` was the first use case. A filename is passed in, +and the library is responsible for opening the file and acting on its +contents. There are helper routines for enabling the script to +find the image file to boot. + +`run_script_handle` is called by `run_script_file` once the +filename has been successfully opened. This method allows creation +of in-memory file handles using the `io` library. For example: + + import io + + _test_script = """ + enable transcript + os8 DIR + """ + + script_file = io.StringIO(_test_script) + os8.run_script_handle(script_file) + +Otherwise you do direct calls into the API + +### Environment check and command startup + +The single most important idea to learn in producing a reliable +program using class os8script is the notion of **The Current Context +and State of the os8script Environment**. + +The `os8script` class is careful to validate that OS/8 is booted and +active before submitting strings that it expects will be interpreted +by the OS/8 Keyboard Monitor. It is careful to escape out to SIMH +when sending strings it expects will be interpreted as SIMH commands. +The instantiated `os8script` can be thought of as a set of layered +state machines: + +* SIMH starts off at its command level, + * then OS/8 is booted. + * When a program is started under OS/8 it creates a new layered + state machine, the dialog with the program, + * until the program finishes and returns to the OS/8 keyboard monitor. + +To issue more SIMH commands after that you have to escape out +of OS/8, but then return to OS/8 and continue running the program + +When you run a complex command with `os8script` class, you will be +writing a state machine that will need to return to OS/8 when it is +finished. + +The `os8script` class provides `check_and_run` as a high level startup +method that confirms all is well to run your desired OS/8 command from +the Keyboard Monitor. It will: + + * make sure we're booted, + * make sure we're in the OS/8 context, + * run the command, + * return the reply status of the initial command + or -1 if any of the previous steps fail. + +It acts like a bridge between the higher level paradigm of script +running and the lower level paradigm of sending OS/8 command lines. +Conceptually, the boot check is a once-only check at the start up of a +more complex dialog. `check-and-run` takes three mandatory arguments: + +* `os8_comm`: The OS/8 command line to run. +* `caller`: A name assigned by the calling program to help make it clear which higher + level program is calling this common start-up routine. +* `script_file`: For API compatibility with the other commands. More fully explained below. + Often this argument is simply the empty string. + +It takes one optional argument, an array of match regular expressions, as managed +by the [`intern_replies`](#intern_replies) method of class simh. If this argument is +not provided, the default replies array for OS/8 is used. + +For example: + + os8.check_and_run ("myprog_main", "DIR", "") + +Using this method is not required, but is an easy way to start up an +OS/8 command. + +After startup you use the interface methods to Python expect in the `simh` class +to engage in the command dialog: + +Send a string and look for results: + +* `os8_cmd` + +Send a string and leave it to another call to look for results: + +* `os8_send_str` +* `os8_send_ctrl` + +Look for results: + +* `_child_expect` + +### Using expect + +The Python `pexpect` library for expect allows passing in an array of responses, +and returns the array index of what was matched. + +The class `simh` library contains a table of all the normal and error +replies that the OS/8 Keyboard Monitor and Command Decoder are known to emit +in `_os8_replies` and pre-compiled regular expressions for each one in +`_os8_replies_rex`. + +Class `os8script` has a method +`intern_replies` that allows management of additional tables by name, +allowing, for example the `build_command` state machine to create a +table with replies from the `BUILD` command **in addition to** all the +OS/8 replies. + +`intern_replies` takes 3 arguments: + +* `name`: The name of the new reply table. If a table of that name already exists +return `False`. + +* `replies`: An array of 3 element arrays with the replies. Described below. + +* `with_os8`: A boolean flag. True if the array of replies is in addition to +the OS/8 replies. False if the array of replies is instead of OS/8 replies. +This allows fine control of the dialog. Sometimes you want to test for just +the program output. Sometimes you want to also detect OS/8 responses. + +#### The `replies` array + +The three elemments for each member of the replies array are: + + 1. The common name of the match string. This is used by match test routines. + 2. The regular expression python expect will use to try and match the string. + 3. True if receiving this is a fatal error that returns to the OS/8 Keyboard Monitor. + Knowing this state change is helpful in establishing correct expectation about + the state of the enviromnent. + +Each regular expression is compiled, and interned in the `os8script` object in +the `replies_rex` dictionary, keyed to the `name` of the `replies` array. +The `replies_rex` dictionary is used to make sense of commands executed by calling +either the [`check_and_run`](#check_and_run) method or the os8_cmd method in the +simh chass. + +The array itself is interned in the `os8script` object in the `replies` dictionary +keyed to the `name` of the `replies` array. + +The common name is used in match tests: + +The `simh` object instantiated within the `os8script` object has a `test_result` +method that takes four arguments: + +* `reply`: integer index into the array of replies. +* `name`: the common name of the result we are expecting to match. +* `replies`: the array of replies that we are testing against. +* `caller`: is used to reduce error reporting common code as describe below. + +If the common name supplied to `test_result` is found at the `replies` +array at index `reply`, `True` is returned. Otherwise `False` is returned. + +If `caller` is not empty, and the match is False, an error is printed +prefaced by the caller string. However the most common use case is to +leave the `caller` string empty, and perform several `test_result` actions +in succession as shown in the example program. + +After the command is executed, driven by the `replies_rex` array, the results +can be tested with the `replies` array. + +For example if we wanted to test a start up of `MYPROG` into the command decoder +we could do this: + + reply = os8.check_and_run ("myprog_main", "R MYPROG", "") + os8.simh.os8_test_result (reply, "Command Decoder Prompt", "start_myprog") + +(Notice we left the script file blank, and defaulted to the OS/8 replies arrays.) +If we didn't get the Command Decoder prompt, because MYPROG wasn't found we'd +get something like this: + + start_myprog: failure + Expected "Command Decoder Prompt". Instead got "File not found". + +## A Complete Example + +The [documentation for the simh class][class-simh-doc] makes reference to programs +in the source tree as examples. However those were written primarily to get a job +done, rather than as a tutorial. + +The file [`examples/host/class-os8script-demo.py`][demo-script] was written +specifically as a tutorial. + +The demo program shows how to create a state machine that engages in a complex +dialog under OS/8: + +* It starts up OS/8 BASIC. +* When OS/8 BASIC asks "OLD OR NEW" the program says "NEW". +* When prompted, it supplies the filename, "MYPROG.BA". +* A two-line `1 + 2 = 3` program is input. +* The program is run, and the answer is validated. + +Each step of the housekeeping, setup, and work is described and performed. + +Here is a non-verbose sample run: + + wdc-home-3:trunk wdc$ examples/host/class-os8script-demo.py + Got Expected Result! + +Here is a verbose sample run: + + wdc-home-3:trunk wdc$ examples/host/class-os8script-demo.py -v + Line 0: mount: att rk0 /Users/wdc/src/pidp8i/trunk/bin/v3d-temp-_2mqkf24.rk05 + att rk0 /Users/wdc/src/pidp8i/trunk/bin/v3d-temp-_2mqkf24.rk05 + att rk0 /Users/wdc/src/pidp8i/trunk/bin/v3d-temp-_2mqkf24.rk05 + sim> show rk0 + att rk0 /Users/wdc/src/pidp8i/trunk/bin/v3d-temp-_2mqkf24.rk05 + sim> show rk0 + RK0 1662KW, attached to /Users/wdc/src/pidp8i/trunk/bin/v3d-temp-_2mqkf24.rk05, write enabled + Line 0: boot rk0 + boot rk0 + sim> boot rk0 + boot rk0 + + PIDP-8/I TRUNK:ID[0A1D0ED404] - OS/8 V3D - KBM V3Q - CCL V1F + CONFIGURED BY WDC@WDC-HOME-3.LAN ON 2020.12.08 AT 00:01:16 EST + + RESTART ADDRESS = 07600 + + TYPE: + .DIR - TO GET A LIST OF FILES ON DSK: + .DIR SYS: - TO GET A LIST OF FILES ON SYS: + .R PROGNAME - TO RUN A SYSTEM PROGRAM + .HELP FILENAME - TO TYPE A HELP FILE + + .Line: 0: demo_command: R BASIC + R BASIC + NEW OR OLD--Got reply: NEW OR OLD + NEW + FILE NAME--Got reply: FILENAME + MYPROG.BA + + READY + Got reply: READY + 10 PRINT 1 + 2 + 20 END + RUN + + MYPROG BA 5A + + 3 + + READY + Got reply: 3 READY + Got Expected Result! + Sending ^C + + .Deleting scratch_copy: /Users/wdc/src/pidp8i/trunk/bin/v3d-temp-_2mqkf24.rk05 + + Simulation stopped, PC: 01210 (JMP 1207) + sim> detach all + detach all + sim> quit + Calling sys.exit (0) at line: 0. + + +## API reference + +This is an alphabetical reference of the public methods of the `os8script` class. + +There are setup, housekeeping and helper methods. + +The methods that implement the [os8-run][os8-run-doc] commands can be called +directly. Those method names all end with `_command`. They all take two arguments: + +* `line`: The rest of the line in the script file after the command was parsed. +This makes the script file look like a series of command lines. The parser +sees the command keyword and passes the rest of the line as `line`. +* `script_file`: A handle on the script file. This gets passed around from +command to command to deal with multi-line files. We rely on this handle +keeping track of where we are in the file over time. If you call a command +that doesn't deal with multiple lines, you can pass `None` as the `script_file` +handle. If the command needs more lines, and it sees `None` python will kill +the program and give you a backtrace. + +They all return a string, "success" on successful operation, "fail" on a failed +operation, "die" when the error is so bad that the program really should not proceed. + +### `basic_line_parse` + +This helper method takes the same two arguments as all `_command` APIs. + +It is rarely called from outside of commands, but is critical to the +implementation of commands. As each line is parsed, this method: + +* strips out leading and trailing whitespace. +* filters out comments. +* parses `begin` statements to enter a new begin/end level. +* enforces `enabled` / `disabled` parsing and does the work to skip over disabled blocks. +* parses `end` statements to pop a begin/end level. +* returns `None` if the line in hand is empty and the caller should just exit without doing + anything more. + +### `begin_command` + +Although appearing early alphabetically, it's probably one of the +last commands one would use in a program. `begin_command` runs a +complex but constrained state machine for the OS/8 `BUILD` command or +commands that use the OS/8 Command Decoder. + +When `begin` is parsed from a line, it opens a new block. That block +is either an `enable` / `disable` block for conditional execution or +one of two sub-commands, `build_subcomm` and `cdprog_subcomm`. + +These embody complex state machines to step through command dialogs and detect +error conditions. + +`build_subcomm` is for creating dialogs with the OS/8 `BUILD` command. + +`cdprog_subcomm` is for starting any OS/8 program that uses the OS/8 +Command Decoder. It is a simple dialog: + +* specify one or more files in Command Decoder Syntax. +* repeat if the program runs and gives back the command decoder asterisk `*` prompt. +* detect return to OS/8 by getting a OS/8 keyboard monitor dot `.` prompt. +* detect and report OS/8 errors encountered. +* recognize whether an error is fatal or non-fatal, and act to keep the state machine + in a known state, generally by sending `^C` on non-fatal errors. + +### `boot_command` + +Check to see if the device to be booted has something attached. +If not, return "die". +If so, boot it, and set our booted state to `True`. + +You need to issue this command before running any OS/8 commands because OS/8 +must be booted up to run them. + +### `configure_command` + +An interface to a constrained subset of high level PDP-8 specific +device configuration changes under SIMH. + +`line` is parsed into two arguments: The first arg is the device to configure. +The second arg is the setting. + +The following devices and settings are configurable with this command: + +* `tape`: `dt` to enable the TC08 DECtape, `td` to enable the TD8E DECtape instead. +* `rx`: `rx01` to enable the single density RX01 floppy, `rx02` to ehable the double density RX02 drive instead. +* `tti`: `KSR` set upper case only operation, and force all lower chase to upper case before forwarding them to OS/8. `7b` to enable SIMH 7bit mode. All characters are passed to OS/8 without case conversion. + +### `copy_command` + +Allows scripts to say, "Make me a copy of this POSIX file," which is +generally an image file that serves as the basis of a modified +file. This is how we are able to run scripts in parallel: we create +the destination image. If we don't create a destination image via copy +and boot it, then the `scratch` option to `mount` is needed, as +explained above. + +### `cpfrom_command` + +The way to get files out to the POSIX host from the OS/8 +environment. Relies on the OS/8 `PIP` command. Contains a state +machine for working through dialogs. Handles coding conversion +between POSIX ASCII (7 bit space parity, \n newline delimiter) +and OS/8 ASCII (8 bit mark parity, \r newline delimiter.) + +### `cpto_command` + +The way to get files into OS/8 from the POSIX host. Relies on the +OS/8 `PIP` command. Contains a state machine for working through +dialogs. Also handles coding conversion between OS/8 ASCII and +POSIX ASCII. + +### `disable_option_command` + +Parses the `line` argument as the key to enable. The end of the key is +delimited by the end of the line or the first whitespace character. + +If the key is on the `options_enabled` array, remove it, **and** add the +key to the `options_disabled` array if it is not already present. + +Subtle point about `disable` vs. `enable` (as copied from the [`os8-run` Documentation][os8-run-doc]): + +Two lists are required because default behavior is different for +enablement versus disablement. + +The `begin enabled` block is only executed if the `enabled` list +contains the keyword. If no such keyword is found, the block is ignored. + +The `begin default` block is executed by default unless the `disabled` +list contains the keyword. If such a keyword is found, the block is ignored. + +The `default` construct allows creation of scripts with conditional +execution without worrying about informing the build system about new +enablement keywords. + +### `enable_option_command` + +Parses the `line` argument as the key to enable. The end of the key is +delimited by the end of the line or the first whitespace character. + +If the key is on the `options_disabled` array, remove it, **and** add the +key to the `options_enabled` array if it is not already present. + +There is a special enable option `transcript`. Within an `enable transcript` +block, all OS/8 output is printed on the standard output of your program. + +### `end_command` + +Ends the `begin` / `end` block. + +### `exit_command` + +Make a graceful exit: + +1. Remove scratch files. +2. Detach all devices from running image. +3. Quit SIMH. +4. Parse an exit status value from `line`. Default to 0. +5. Call POSIX exit to exit the running program, + +### `include_command` + +Allows running a script within a script to arbitrary depths. +`line` is the name of a script file. Uses the [`path_expand`](#path_expand) +method to expand variables appearing in the path specification. + +### `mount_command` + +Does complex parsiing of `line` to get all the parameters needed to attach +an image file to the appropriate SIMH device. Has additional parameters +that are documented in the [os8-run Documentation][os8-run-doc]. + +### `ocomp_command` + +Simple state machine to pass `line` as command arguments to the OS/8 `OCOMP` utility +and return `success` if two files are identical. This little machine is used in +`os8pkg` in the `verify` command. + +### `os8_command` + +Allows no dialog. Just pass `line` to the OS/8 Keyboard monitor to run. +Manage the environment state to make sure we eventually get back to the +keyboard monitor: + +* detect return to OS/8 by getting a OS/8 keyboard monitor dot `.` prompt. +* detect and report OS/8 errors encountered. +* recognize whether an error is fatal or non-fatal, and act to keep the state machine + in a known state, generally by sending `^C` on non-fatal errors. + +### `pal8_command` + +Runs the OS/8 PAL8 assembler. Contains a state machine to gather up error output nicely. + +### `patch_command` + +The `patch` command contains a pretty complex state machine. It knows how +interprest patch description files as commands in either `ODT` or `FUTIL` +to modify files under OS/8 and then save them. + +### `path_expand` + +Helper method -- a simple minded variable substitution in a path. A +path beginning with a dollar sign parses the characters between the +dollar sign and the first slash seen becomes a name to expand with a +couple local names: $home and the anchor directories defined in +lib/pidp8i/dirs.py. Returns None if the expansion fails. That +signals the caller to fail. + +Takes one argument, a string, `path` that is parsed. + +`path_expand` knows the build-time and run-time destination +directories and expands the following constructs using the `dirs` +library (as copied from the [`os8-run` Documentation][os8-run-doc]): + +| $build/ | The absolute path to the root of the build. +| $src/ | The absolute path to the root of the source. +| $bin/ | The directory where executables and runable image files are installed at build time +| $media/ | The absolute path to OS/8 media files +| $os8mi/ | The absolute path to OS/8 media files used as input at build time +| $os8mo/ | The absolute path to OS/8 media files produced as output at build time + +### `print_expand` + +Helper method -- close kin to path_expand. Takes a string that may +name a path substitution or the magic $version value and performs the +appropriate value substitution. + +Takes one argument, a string, `path` that is parsed. + +### `print_command` + +Lets scripts send messages. Needed from inside `os8-run` scripts. +Your program can just use the python `print` command. + +### `restart_command` + +Call os8_restart in simh to resume OS/8. Returns "die" if we've not booted. + +### `resume_command` + +Call os8_resume in simh to resume OS/8. Returns "die" if we've not booted. + +### `simh_command` + +Lets you send arbitrary commands to simh. Recognizes the boot and +continue commands as setting OS/8 context. Knows how to suspend OS/8 +and escape to SIMH so you don't have to worry about managing that +housekeeping. + +### `umount_command` + +Cleans out a mount command, except for scratch files. Remember you have to +remove scratch files. Call the [`exit_command`](#exit_command) method to do so. + + +[class-simh-doc]: https://tangentsoft.com/pidp8i/doc/trunk/doc/class-simh.md +[os8-run-doc]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-run.md +[progtest-doc]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-progtest.md +[demo-script]: https://tangentsoft.com/pidp8i/doc/trunk/examples/host/class-os8script-demo.py + +## Credits and License + +Written by and copyright © 2017-2020 by Warren Young and William Cattey. +Licensed under the terms of [the SIMH license][sl]. + +[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md Index: doc/class-simh.md ================================================================== --- doc/class-simh.md +++ doc/class-simh.md @@ -12,10 +12,12 @@ drive a demo script he'd found online, it was natural to generalize the core functionality of `mkos8` as a reusable Python class, then write a script to make use of it. The result is `class simh`, currently used by six different scripts in the PiDP-8/I software distribution including `os8-run` and the `teco-pi-demo` demo script. + +The basis for this work is `pexpect` the Python Expect library. This document describes how `teco-pi-demo` works, and through it, how `class simh` works, with an eye toward teaching you how to reuse this functionality for your own ends. @@ -84,24 +86,114 @@ ## Logging The next step is to tell the `s` object where to send its logging output: - s.set_logfile (os.fdopen (sys.stdout.fileno (), 'w', 0)) + s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) Contrast the corresponding line in `os8-run` which chooses whether to send logging output to the console or to a log file: - s.set_logfile (open (dirs.log + 'os8-run' + '.log', 'a') \ - if not VERY_VERBOSE else os.fdopen (sys.stdout.fileno (), 'w', 0)) + s.set_logfile (open (dirs.log + 'os8-run' + '.log', 'ab') \ + if not VERY_VERBOSE else os.fdopen (sys.stdout.fileno (), 'wb', 0)) Note that this more complicated scheme appends to the log file instead of overwriting it because there are cases where `os8-run` gets run more than once with different script inputs, so we want to preserve the prior script outputs, not keep only the latest. +## Driving SIMH and OS/8 + +The basic control flow is: + +1. Send to SIMH text to act upon. +2. Harvest results. +3. Check results. +4. Goto 1 or quit. + +## Checking results + +There are a number of helper methods and data structures to help +in checking results. + +Although `pexpect` can search replies for a regular expression string, +or a list of such strings, the helper methods use an array of compiled +regular expressions. + +The simh class contains two arrays, `_simh_replies` and `_os8_replies` +with corresponding arrays of compiled regular expressions, `_simh_replies_rex`, +and `_os8_replies_rex`. + +You can use the simh Class replies or define some for yourself. Example: + +``` +my_replies = [ + ["Sample Reply", "Sample Reply\s+.*\n$", "False"], + ["Fatal Error", "Fatal error was\s+.*\n$", "True"] +] + +my_replies_rex = [] +for item in my_replies: + my_replies_rex.append(re.compile(item[1].encode())) + +``` + +Often you want your replies in addition to the errors you might +want from OS/8. In that case you'd do something like: + +``` +my_replies.extend(s._os8_replies) +``` +Of course the extend would appear before the computation of +`my_replies_rex`. + +## Running SIMH or OS/8 commands + +High level calls to run commands in SIMH can be made from + +`simh_cmd` for SIMH commands and +`os8_cmd` for OS/8 commands. + +These two methods default to searching results for replies in the relevant arrays. +They return an index into the array that says which reply was received. + +The `test_result` method takes a reply number, an expected reply name, an array +replies and a string for helping identify the caller of the test. (There's also an +optional debug flag. These scripts can be difficult to debug.) + +To see if the reply from running a command that would reply with +`my_replies` the code would be: + +``` +s.test_result(reply, "Fatal Error", my_replies, "myfunc") +``` + +The reply item at the index given by `reply` is examined. And the desired reply +is matched against the first element of that item. If it matches, `True` is returned, +otherwise `False` is returned. If the caller string is present, (in this case, +`"myfunc"`, a message is printed if the reply doesn't match the expected reply. +If the caller string is the empty string, no message is printed. This makes it +easy to add error diagnostics without a lot of extra work. + +Sometimes you want to try a couple different expected values, and don't want +to print anything if there isn't a match. That's why we special case an empty +caller string. + +For SIMH and OS/8 command testing, there are convenience wrappers, `simh_test_result` +and `os8_test_result` that use the relevant array so you don't have to keep typing it. +So the following two are equivalent: + +``` +s.test_result(reply, "Prompt", s._simh_replies, "myfunc", debug=True) + +s.simh_test_result(reply, "Prompt", "myfunc", debug=True) +``` + +Armed with an understanding of how we make calls into SIMH and OS/8, and +how we test results, we're ready to continue our exploration. + ## Finding and Booting the OS/8 Media If your program will use our OS/8 boot disk, you can find it programmatically by using the `dirs.os8mo` constant, which means "OS/8 media output directory", where "output" refers to the worldview of @@ -117,166 +209,290 @@ Now we attach the RK05 disk image to the PiDP-8/I simulator found by the `simh` object and boot from it: print "Booting " + rk + "..." - s.send_cmd ("att rk0 " + rk) - s.send_cmd ("boot rk0") - -This shows one of the most-used methods, `simh.send_cmd`, which sends a -line of text along with a carriage return to the spawned child program, -which again is `pidp8i-sim`. - - -## Driving SIMH and OS/8 - -After the simulator starts up, we want to wait for an OS/8 “`.`” prompt -and then send the first OS/8 command to start our demo. We use the -`simh.os8_send_cmd` method for that: - - s.os8_send_cmd ('\\.', "R TECO") - -This method differs from `send_cmd` in a couple of key ways. - -First, it waits for a configurable prompt character — sent as the first -parameter — before sending the command. This is critical when driving -OS/8 because OS/8 lacks a keyboard input buffer, so if you send text to -it too early, all or part of your input is likely to be lost, so your -command won't work. - -Second, because OS/8 can only accept so many characters of input per -second, `os8_send_cmd` inserts a small delay between each input -character to prevent character losses. - -(See the commentary for `simh._kbd_delay` if you want to know how that -delay value was calculated.) - -The bulk of `teco-pi-demo` consists of more calls to `simh.os8_send_cmd` -and `simh.send_cmd`. Read the script if you want more examples. - -**IMPORTANT:** The “`\\.`” syntax for specifying the OS/8 `.` command -prompt is tricky. If you pass just `'.'` here instead, Python's -[regular expression][re] matching engine will interpret it to mean -that it should match *any* character as the prompt, almost certainly -breaking your script's state machine, since it is likely to cause the -call to return too early. If you instead pass `'\.'`, Python's string -parser will take the backslash as escaping the period and again pass -just a single period character to the regex engine, giving the same -result. You must specify it exactly as shown above to escape the -backslash so that Python will send an escaped period to the regex -engine, which in turn is necessary to cause the regex engine to treat -it as a literal period rather than the "any character" wildcard. - -Much the same is true when your script needs to await the common -* prompt character: you must pass it like so: - - s.os8_send_cmd ('\\*', 'COMMAND') + s.simh_cmd ("att rk0 " + rk) + s.simh_test_result (reply, "Prompt", "main 1") + reply = s.simh_cmd ("boot rk0", s._os8_replies_rex) + s.os8_test_result (reply, "Monitor Prompt", "main 2") + +A couple subtle points: We issued a command to SIMH to attach the rk0 +device. If we didn't get the SIMH prompt back, `simh_test_result` would +have said, + + main 1: Expecting Prompt. Instead got: Fatal Error + +Then we issued the SIMH command to boot that device. We used the `os8_test_result` +method instead of the `simh_test_result` method because we expected +the panoply of replies would more likely be from the OS/8 list. + +After the simulator starts up, and we've confirmed we've got our +OS/8 monitor prompt as a result, we send the first OS/8 command to start our demo. + + s.os8_cmd ("R TECO") + s.os8_test_result (reply, "Command Decoder Prompt", "main 2") + + + +The bulk of `teco-pi-demo` consists of more calls to `simh.os8_cmd` +and `simh.cmd`. Read the script if you want more examples. + +**IMPORTANT:** When you specify the [regular expression][re] strings +for result matching, and want literal matches for characters that +are special to regular expressions such as dot `.`, asterisk `*`, +etc., you need to be preface the characterpair of backslashes. +Example: To match a literal dollar sign you would say `\\$`. [re]: https://en.wikipedia.org/wiki/Regular_expression -## Escaping OS/8 to SIMH - -Sometimes you need to escape from OS/8 back to SIMH with a -Ctrl-E keystroke so that you can send more SIMH commands -after OS/8 starts up. This accomplishes that: - - s.os8_send_ctrl ('e') - -While out in the SIMH context, you *could* continue to call the -`simh.os8_*` methods, but since SIMH can accept input as fast as your -program can give it, it is best to use methods like `simh.send_cmd` -which don't insert artificial delays. For many programs, this -difference won't matter, but it results in a major speed improvement in -a program like `os8-run` which sends many SIMH and OS/8 commands -back-to-back! +## Contexts + +The operation of OS/8 under SIMH requires awareness of who +is getting the commands: SIMH, the OS/8 Keyboard Monitor, +the OS/8 Command Decoder, or some read/eval/print loop in +a program being run. + +Your use of the simh class needs to be mindful of this. +Throughout this document every attempt has been made to be clear +on which methods keep track of context switches for you and +which do not. + + +### Context Within a program under OS/8 + +If you've forgotten to exit a sub-program, that program +will still be getting your subsequent commands instead of +OS/8. + +You may have a program that keeps running and asking for more input, +for example OS/8 `PIP` returns to the command decoder after each +action. + +There is a subtle issue with program interrupts: You **need** +to check for the string that gets echoed when you do an interrupt. +Otherwise pexpect can get confused. + +Two methods that abstract this for you are provided: `os8_ctrl_c` +and `os8_escape` which send those interrupt characters, ask +pexpect to listen for their echo back (`$` comes back from +escape), and confirms a return to the OS/8 monitor. + +Here is the implementation of `os8_ctrl_c` as an example if you +need to run a sub-program with a different interrupt character: + + +``` + #### os8_ctrl_c ################################################## + # Return to OS/8 monitor using the ^C given escape character. + # We need to listen for the ^C echo or else cfm_monitor gets confused. + # Confirm we got our monitor prompt. + # Optional caller argument enables a message if escape failed. + # Note: OS/8 will respond to this escape IMMEDIATELY, + # even if it has pending output. + # You will need to make sure all pending output is in + # a known state and the running program is quiescent + # before calling this method. Otherwise pexpect may get lost. + + def os8_ctrl_c (self, caller = "", debug=False): + self.os8_send_ctrl ("c") + self._child.expect("\\^C") + return self.os8_cfm_monitor (caller) + +``` + +### Sending Control Characters + +Several OS/8 programs expect an Escape (a.k.a. `ALTMODE`) +keystroke to do things. Examples are `TECO` and `FRTS`. + +(Yes, Escape is Ctrl-\[. Now you can be the life of +the party with that bit of trivia up your sleeve. Or maybe you go to +better parties than I do.) + +The `os8_send_ctrl` method enables you to send arbitrary control +characters but it does not keep track of whether you're in the OS/8 or +SIMH context. Note also that the `e` control character escapes to SIMH. +So avoid writing programs that need that control character as input. + + +### Context Between SIMH and OS/8 + +It is important to make sure that commands intended for SIMH +go there, and not to OS/8 or any programs running under SIMH. The +`os8_cmd` amd `simh_cmd` methods keep track of context. If +you call the `simh_cmd` method but aren't actually escaped out to +SIMH, an escape will be made for you, and the context change will be +recorded. + +If you issue `os8_cmd` when OS/8 is not running, it will complain +and refuse to send the command. + +The cleanest way to explicitly escape from OS/8 to SIMH +is to call `esc_to_simh`. It manages the context switch, and tests +to see that you got the SIMH prompt. Example: + + esc_to_simh() + +Subtle points: Calling `simh_cmd` will leave you in SIMH. You will +need to resume OS/8 explicitly. There are a variety of ways +to do this. ## Getting Back to OS/8 from SIMH There are several ways to get back to the simulated OS/8 environment from SIMH context, each with different tradeoffs. +*FIXME* We used to have a lot of trouble with continue commands. +We think they're all fixed now, so we can fully flesh out this section. + ### Rebooting You saw the first one above: send a `boot rk0` command to SIMH. This restarts OS/8 entirely. This is good if you need a clean environment. If you need to save state between one run of OS/8 and the next, save it to the RK05 disk pack or other SIMH media, then re-load it when OS/8 reboots. +It's important to check that you got your OS/8 prompt so the recommended +code looks like this: + +``` + reply = s.simh_cmd ("boot rk0", my_replies_rex) + s.os8_test_result (reply, "Monitor Prompt", "myprog") +``` ### Continuing -The way `teco-pi-demo` does it is to send a `cont` command to SIMH. - -The problem with this method is that it sometimes hangs the simulator. -The solution is to insert a small delay *before* escaping to the SIMH -context. I'm not sure why this is sometimes necessary. My best guess is -required to give OS/8 time to settle into an interruptible state before -escaping to SIMH, so that on "continue," we re-enter OS/8 in a sane -state. - -You can usually avoid the need for that delay by waiting for an OS/8 -command prompt before escaping to SIMH, since that is a reliable -indicator that OS/8 is in such an interruptible state. - -You don't see these anomalies when using OS/8 interactively because -humans aren't fast enough to type commands at OS/8 fast enough to cause -the problem. That is doubtless why this bug still exists in OS/8 -in 2017. - - -### Re-Entering +The way `teco-pi-demo` does it is to send a `cont` command to SIMH: + +``` + s.send_line ('cont') +``` + +A previous version of the simh class would sometime hang the +simulator unless a small delay were inserted before escaping to +the SIMH context. We believe this is no longer necessary. +However the problems with `cont` made implementors gun shy +using it. Most code you will see does a restart with an explicit +confirmation we are at the OS/8 command level. + + +### Re-starting OS/8 If your use of OS/8 is such that all required state is saved to disk -before re-entering OS/8, you can call the `simh.os8_restart` method to -avoid the need for a delay *or* a reboot. It re-calls OS/8's entry -point from SIMH context, which we've found through much testing is -entirely reliable, as compared to sending a SIMH `cont` command without -having delayed before escaping to SIMH context. +before re-entering OS/8, you can call the `simh_restart_os8` method to +avoid the need for a delay *or* a reboot. + +It sends the simh command `go 7600` which is the traditional "restart +at the OS/8 entrypoint" commonly used from the PDP-8 front panel. +It then uses `os8_test_result` to confirm that it got a monitor prompt. +`simh_restart_os8` has an optional `caller` argument to make it +quick and easy to print an error if returning to the monitor failed. + + s.simh_restart_os8 (caller = "myprog") `os8-run` uses this option extensively. -## Sending Escape Characters - -Several OS/8 programs expect an Escape (a.k.a. `ALTMODE`) -keystroke to do things. Examples are `TECO` and `FRTS`. There isn't a -specific method to do this because we can do that in terms of one we've -just described: - - s.os8_send_ctrl ('[') - -Yes, Escape is Ctrl-\[. Now you can be the life of -the party with that bit of trivia up your sleeve. Or maybe you go to -better parties than I do. +## Sending without testing results. + +At some point you always need to test your results and make sure +you are where you think you are. Otherwise some corner case will +trip up your use of the simh class, and the error message you will +get is a 60 second pause, and a big backtrace. + +But often you need to send and receive data in a much less structured +way than that used by `os8_cmd` and `simh_cmd`. Here is what you need: + +| Method | Description | +|---------------- |---------------------------------------------------------------- +| `send_line` | Send the given line blind without before or after checks. +| `simh_send_line` | Like `send_line` above, but mindful of context. Will escape to SIMH if necessary.| +| `os8_kbd_delay` | Wait an amount of time proportional to what OS/8 should be able to handle on the hosting platform without overflowing the input buffer and dying. | +| `os8_send_ctrl` | Send a control character to OS/8. Use `os8_kbd_delay` to prevent overflowin the input buffer and killing OS/8.| +| `os8_send_str` | Send a string of characters to OS/8, and wait for os8_kbd_delay afterwards. | +| `os8_send_line` | Add a carriage return to the given string and call `os8_send_str` to send it to OS/8.| + + +## Other Operations + +### Quitting the simulator + +It is recommended that you use the `quit` method to exit the simulator. +It will make sure it selects the simh context before trying to quit. + +Indeed it's further recommended that you send a command to simh to +detach all devices to make sure any buffered output is flushed. +You need to test for the SIMH prompt to make sure you've succeeded. + + +``` + s.simh_cmd ("detach all") + s.simh_test_result(reply, "Prompt", my_replies_rex, "myprog") + s._child.sendline("quit") + +``` + + +### Zero Core + +SIMH's PDP-8 simulator doesn't start with core zeroed, on purpose, +because the actual hardware did not do that. SIMH does not attempt to +simulate the persistence of core memory by saving it to disk between +runs, but the SIMH developers are right to refuse to do this by +default: you cannot trust the prior state of a PDP-8's core memory +before initializing it yourself. + + +### Zero OS/8 Core + +Sometimes we want to zero out core, but leave OS/8 in tact. +The `os8_zero_core` method zeros all of core excepting: + + * 0. page zero - many apps put temporary data here + * 1. the top pages of fields 1 & 2 - OS/8 is resident here + * 2. the top page of field 2 - OS/8's TD8E driver (if any) lives here + +We then restart OS/8, which means we absolutely need to do #1 and +may need to do #2. We could probably get away with zeroing page 0. ## But There's More! The above introduced you to most of the functionality of `class simh` -used by `teco-pi-demo`, but there's more to the class than that, -primarily because the `os8-run` script's needs are broader. Rather than -just recapitulate the class documentation here, please read through [the -class's source code][ssc], paying particular attention to the method -comments. It's a pretty simple class, making it a quick read. +used by `teco-pi-demo`. It is a useful exercise to read through [the +simh class's source code][ssc]. There are many useful and interesting +methods in the simh class that are documented there not here. Although +it started off as a simple class amenable to quick study, some heavy +duty drivers for configuration of OS/8 devices under SIMH were added. +The source file is organized places the lower level methods first and +proceeds through progressively higher level ones, first for simh +direct interaction and the OS/8 interaction. + +The `os8-run` script has a whole [higher level library][os8script] +built on top of the simh class that includes state machines for +executing complex commands like BUILD and applying patches with +ODT and FUTIL. Another useful module is [`pidp8i.dirs`][dsc] which contains paths to many directories in the PiDP-8/I system, which you can reuse to avoid having to hard-code their locations. This not only makes your script independent of the installation location, which is configurable at build time via `./configure --prefix=/some/path`, but also allows it to run correctly from the PiDP-8/I software's build directory, which has a somewhat different directory structure from the installation tree. -[ssc]: https://tangentsoft.com/pidp8i/file/lib/simh.py -[dsc]: https://tangentsoft.com/pidp8i/file/lib/pidp8i/dirs.py +[ssc]: https://tangentsoft.com/pidp8i/file/lib/simh.py.in +[dsc]: https://tangentsoft.com/pidp8i/file/lib/pidp8i/dirs.py.in +[os8script]: https://tangentsoft.com/pidp8i/file/lib/os8script.py.in ## Credits and License -Written by and copyright © 2017-2019 by Warren Young. Licensed under the -terms of [the SIMH license][sl]. +Written by and copyright © 2017-2020 by Warren Young and William Cattey. +Licensed under the terms of [the SIMH license][sl]. [sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md ADDED doc/dcp-wu.md Index: doc/dcp-wu.md ================================================================== --- /dev/null +++ doc/dcp-wu.md @@ -0,0 +1,480 @@ +# DCP Disassembler for PDP-8 + +This document is based on the file DCP.WU found with DCP binaries. + +| Author | A.E. Brouwer, Math. Center, Amsterdam | +| Date | 73-10-03 | +| Version Number | DCP AB-V21 | +| Last Update | 74-11-12 | +| Environment | OS/8 operating system | +| Memory Requirements | 16K, Optional 24K mode | + + +## DCP (Preliminary Description) + +DCP (sometimes called `deass`) is a program to deassemble (or disassemble) +a PAL program given in binary or in core image format as 1st input file. +Information about the program and meaningful tags can be given +in a second input file. A well readable listing with meaningful +tags but without comment can be obtained in a few passes +(typically four). The first time no information is supplied; while +reading the output one recognizes certain parts as messages +("NO ROOM FOR OUTPUT") or numeric tables (6030,7634,7766,7777) +or simple subroutines (TTYOUT, PUSH, PRINT). + +Putting these things in an information file and then running +dcp again gives you a much nicer output the second time. +Now you may embark on the program itself and obtain after a small +number of passes (depending on the complexity of the program and +your laziness.) A source that might have been the original one except +for its lack of comment. At this moment you could profitably use +the CTRL/E feature of MCEDIT to provide the whole source of comment. +(For example, we obtained a source of a fortran compiler in three +days after five passes.) + +Below we will describe the OS/8 version of the program + +## Assembly Instructions + +(Alas, we do not yet have source.) + + .R PAL8 + *102,DCP_SBIN,DCPZ/L$ + .SAVE SYS DCP + +## Operating Instructions + + .R DCP + *OUTPUTDSK:DCPLS.TM + If command closed with altmode then exit to OS/8 monitor + else call command decoder again. + +2. If no output given but an output file is required because + chaining to CREF.SV is requested then DSK:DCPLS.TM is used. + +3. If no input given then use output filename with extensions + .SV and .SM (if present.) + E.G. + + *DEASS< + + is equivalent to + + *DEASS3777 the command has to be closed with altmode instead of return.) + +## Translation Is Done One Field at A Time + +Therefore, binaries that load into extended memory must be +disassembled with /(F) for all memory fields used. + +This causes some flaws in the output: + + CIF 10 + JMS I (200 + +is translated as: + + CIF 10 + JMS I (START + +If LOC 200 in the current field is labeled START. +Note that assembling the produced source gives the +correct binary.) + +## Input Format + +Each input section starts with $X (where X is a letter indicating +the type of the section) and ends with $ . + +$\ indicates the end of all input (when not within a secion). +Between the sections comment not containing $ may be inserted. + +### Section Types + +| $A | Translate as 6bit ASCII (TEXT "STRING") +| $D | Dont translate +| $I | Translate as instruction (overriding other specs) +| $L | Translate as identifier rather than as instruction +| $N | Translate octal +| $S | Subroutine with args +| $T | Symbol definitions +| $Z | Special coding +| $ | End of input + +### Content of Section + +1. Sections $X where X is A,D,I,L or N. + + Contents: Lines of the form: + + MMMM-NNNN + + or + + NNNN + + Where NNNN and MMMM are octal addresses. + + e.g. the section: + + $N + 1717-1730 + 1750 + $ + + specifies that the locations 1717-1730 and 1750 are + to be translated as octal numbers. + +2. Sections $S. + + Contents: Lines of the form: + + SSSS:XXXXX + + Where SSSS is a subroutine address and XXXXX specifies + the kind of arguments the subroutine has. + + e.g. the section: + + $S + 1000:NL + $ + + indicates that each call to the subroutine at LOC 1000 has two + arguments of type octal and label respectively. + +3. Sections $T. + + Contents: Lines of the form: + + TAG=NNNN + + or + + TAG + + Meaning: If no octal value of a tag is specified then its value is + taken as one more than the value of the previous tag. + +4. Section $Z. + + This is an ad hoc construct to enable the translation of + symbol tables like those of PAL8 and CREF. + + e.g. + + $Z=52;0=240;1=301;40=260 + NNNN-MMMM:(UUUL) + $ + + indicates that the range NNNN-MMMM is a table of four-word entries + three words in a special format and one label. + + The special format is as follows: + + The value is divided by 52 giving a quotient and a remainder. + Both are converted into a character as follows: 0 gives a space, + 1-37 give letters A-_, and 40-51 give digits 0-9. + + The coding here is not foolproof yet: A strange command might + give strange output instead of an error message. + + In later versions this command will be generalized, so we don't + describe it in full here. + +## Error Messages + +These are very poor (because of lack of space): HLTNNNN, +where NNNN indicates the address of the routine in DCP that +detected the error. + +Errors are almost always violations of the input format. + +A complete list will appear in the final report. + +| Name | DCP (ERROR TABLE) +| Author | A.E. Brouwer +| Date | 75-02-13 + +As noted: The error messages of DCP look like 'HLT....' +where .... stands for the octal address of the routine +that detected the error. + +(Of course giving intelligible messages is highly desirable +but lack of space prevented this. Some future version of DCP +will chain to a file `DECPERR.SV` containing the messages.) + +Below the error numbers are given for DCP AB-V21. +[Note: These numbers may change slightly each time that +DCP is assembled anew.] + +### DCP16 Error Table + +| Number | ERROR +| ------ | -------------------------------------------------------------| +| 0000 | PREMATURE END OF .BN INPUT | +| 0230 | CLOSE ERROR | +| 0301 | LOOKUP FOR SYS:CREV.SV FAILED | +| 1414 | OUTPUT ERROR OR NO ROOM FOR OUTPUT | +| 1451 | INPUT ERROR (INFO FILE) | +| 1522 | NO CARRIAGE RETURN WHERE EXPECTED IN THE INFO FILE | +| 1755 | UPPER BOUND IN BOUND PAIR LESS THAN LOWER BOUND | +| 2031 | ASCII STRING CONTAINED A SIXBIT ZERO, BUT NOT AT THE END | +| | (I.E. A WORD 00XX). (THIS MIGHT HAVE BEEN AN @, | +| | BUT IS USUALLY AN ERROR.) | +| 2046 | ASCII STRING WITHOUT TRAILING ZERO | +| 2061 | DCP COULD NOT FIND A SUITABLE DELIMITER FOR THE ASCII STRING | +| | IN THE RANGE "" TO "? | +| 2125 | IMPOSSIBLE | +| 2214 | TEXT BUFFER OVERFLOW (TOO MANY OR TOO LONG IDENTIFIERS). | +| 2234 | NO IDENTIFIER WHERE EXPECTED (IN A $T SECTION). | +| 2666 | ZERO SUBROUTINE ADDRESS SPECIFIED IN A $S SECTION | +| 2705 | S-BUFFER OVERFLOW (TOO MANY SUBROUTINES WITH ARGS.) | +| 2761 | UNKNOWN TYPE LETTER IN SPECIFICATION OF SUBROUTINE ARGS | +| 3006 | $Z NO FOLLOWED BY = | +| 3011 | $Z= NOT FOLLOWED BY A NONZERO NUMBER | +| 3022 | NO CARRIAGE RETURN OR SEMICOLON WHERE EXPECTED IN $Z HEADER | +| 3030 | NO = WHERE EXPECTED IN $Z HEADER LINE | +| 3041 | ZERO LOWER BOUND IN BOUND PAIR IN $Z SECTION | +| 3064 | Z-BUFFER OVERFLOW | +| 3117 | PREMATURELY EXHAUSTED Z-FORMAT | +| 3135 | UNKNOWN Z-FORMAT SYMBOL | +| 3470 | T-BUFFER OVERFLOW | +| 3723 | NO VALUE ASSIGNED TO FIRST TAG IN $T SECTION | +| 4213 | NO INPUT AND NO OUTPUT AND NO DSK:DCPLS.TM TO DELETE | +| 4245 | HANDLER FETCH ERROR | +| 4341 | LOOKUP FOR INPUTFILE FAILED | +| 4442 | OUTPUT OPEN ERROR | +| 4456 | NO 16K MEMORY AVAILABLE | +| 4470 | CHECKSUM OR FORMAT ERROR IN BINARY INPUT FILE | +| 4613 | FORMAT ERROR IN CORE CONTROL BLOCK OF .SV INPUT FILE | +| 4647 | ERROR READING CORE CONTROL BLOCK OF .SV INPUT | +| 4723 | ERROR READING .SV INPUT FILE | + +## DCP24 + +DCP Version 24 is a 24K version of DCP. + +| Name | DCP-AB-WW-V24 +| Author | W.F. Wakker, Math. Center, Amsterdam +| Date | 76-03-25 + +### The Following Extensions Are Made + +- DCP24 Translates EAE instructions in both A and B mode + + (For mode switching, see below.) + + Example: + + 1200 DAD;1234 + + is translated as if the info-file contains the following info: + + $I + 1200 + $ + $L + 1201 + $ + $N + 1234+ + $ + +- In the info-file one can give : NNNN+ which has the same + effect as NNNN-MMMM where MMMM=NNNN+1. + +- Several buffers have been enlarged. + +- The output is paginated and has a heading on each page. + (The page number is in octal ....) + +- Error messages are unfortunately as poor as before (See DCP24 + error table). + +- New sections, now possible in the info-file are: + + | $B | TRANSLATE AS 8-BIT ASCII | + | $C | GIVE COMMENT | + | $E | FORCE EAE MODE A | + | $F | FORCE EAE MODE B | + | $M | TRANSLATE NEGATIVE | + +- Section $B + + $B + NNNN-MMMM + $ + + Causes the location NNNN-MMMM to be translated as + 8-bit ASCII, E.G. 0301 is translated as "A. + Values less then 241 are translated as octal numbers. + +- Sections $E and $F + + When DCP encounters EAE instructions, some slight heuristics + are done to determine the mode. The mode is initially A; SWAB, + DAD, and DST cause the mode to change to mode B etc. + When these heuristics are too poor, you can use the $E section + to force mode A and the $F section to force mode B. + +- Section $M + + This section has the same effect as section $N, only all + octals are given negative, E.G. 7770 becomes -10. + It is also possible to give $B and $M to the same LOC. + Example: 7477 is now translated as -"A. + +- Section $C + + Now you can give comment!! + + | Format | NNNN:THIS IS COMMENT + | Effect | NNNN ........ /THIS IS COMMENT + | Attention | The $C section must be the last one in the info-file: + + When $C is seen in the info-file, a setup is made to + give the comment and no more input will be read ( E.G. The program + acts like $$ on the end is seen). The comments are added to + the listing in the last pass of the program. + + __YOU MUST SORT THE ADDRESSES.__ + + 300:COMM1 + 200:COMM2 + + Has as effect that from adress 300 on, no more comment will + be given, since address 200 is not found any more. + + __DO NOT GIVE COMMENT ON ADDRESSES WHICH DO NOT BELONG + TO THE PROGRAM__ + +- Extension of $S section + + As arguments in the $S section you can give N, L, A, I, B, M, + (with the obvious meaning, see above ) and also U. + U should only be used for the addresses 200 and 7700. + It marks the entrypoint of the user service routine and gives + a nice translation of each USR call. + +- Extension of $Z section + + New possible arguments: M, B. + +### DCP-V24 (ERROR TABLE) + +| Number | ERROR +| ------ | -------------------------------------------------------------| +| 0000 | PREMATURE END OF .BN INPUT | +| 0237 | CLOSE ERROR | +| 0305 | LOOKUP FOR SYS:CREF.SV FAILED | +| 1414 | OUTPUT ERROR OR NO ROOM FOR OUTPUT | +| 1511 | NO CARRIAGE RETURN WHERE EXPECTED IN THE INFO FILE | +| 1707 | NO : AS SEPARATOR IN $C SECTION | +| 2145 | UPPER BOUND IN BOUND PAIR LESS THAN LOWER BOUND | +| 2235 | NO : AS SEPARATOR IN FIRST LINE OF $C SECTION | +| 2331 | INPUT ERROR (INFO FILE) | +| 2431 | ASCII STRING CONTAINED A SIXBIT ZERO, BUT NO AT THE END | +| | (I.E. A WORD 00XX). (THIS MIGHT HAVE BEEN AN @, | +| | BUT IS USUALLY AN ERROR.) | +| 2446 | ASCII STRING WITHOUT TRAILING ZERO | +| 2461 | DCP COULD NOT FIND A SUITABLE DELIMITER FOR THE ASCII STRING | +| | IN THE RANGE "" TO "? | +| 2525 | IMPOSSIBLE | +| 2614 | TEXT BUFFER OVERFLOW (TOO MANY OR TOO LONG IDENTIFIERS) | +| 2634 | NO IDENTIFIER WHERE EXPECTED (IN A $T SECTION) | +| 3266 | ZERO SUBROUTINE ADDRESS SPECIFIED IN A $S SECTION | +| 3305 | S-BUFFER OVERFLOW (TOO MANY SUBROUTINES WITH ARGS) | +| 3367 | UNKNOWN TYPE LETTER IN SPECIFICATION OF SUBROUTINE ARGS | +| 3406 | $Z NOT FOLLOWED BY = | +| 3411 | $Z= NOT FOLLOWED BY A NONZERO NUMBER | +| 3422 | NO CARRIAGE RETURN OR SEMICOLON WHERE EXPECTED IN $Z HEADER | +| 3430 | NO = WHERE EXPECTED IN $Z HEADER LINE | +| 3441 | ZERO LOWER BOUND IN BOUND PAIR IN $Z SECTION | +| 3463 | Z-BUFFER OVERFLOW | +| 3517 | PREMATURELY EXHAUSTED Z-FORMAT | +| 3541 | UNKNOWN Z-FORMAT SYMBOL | +| 4070 | T-BUFFER OVERFLOW | +| 4324 | NO VALUE ASSIGNED TO FIRST TAG IN $T SECTION | DELETED doc/dcp_wu.md Index: doc/dcp_wu.md ================================================================== --- doc/dcp_wu.md +++ /dev/null @@ -1,480 +0,0 @@ -# DCP Disassembler for PDP-8 - -This document is based on the file DCP.WU found with DCP binaries. - -| Author | A.E. Brouwer, Math. Center, Amsterdam | -| Date | 73-10-03 | -| Version Number | DCP AB-V21 | -| Last Update | 74-11-12 | -| Environment | OS/8 operating system | -| Memory Requirements | 16K, Optional 24K mode | - - -## DCP (Preliminary Description) - -DCP (sometimes called `deass`) is a program to deassemble (or disassemble) -a PAL program given in binary or in core image format as 1st input file. -Information about the program and meaningful tags can be given -in a second input file. A well readable listing with meaningful -tags but without comment can be obtained in a few passes -(typically four). The first time no information is supplied; while -reading the output one recognizes certain parts as messages -("NO ROOM FOR OUTPUT") or numeric tables (6030,7634,7766,7777) -or simple subroutines (TTYOUT, PUSH, PRINT). - -Putting these things in an information file and then running -dcp again gives you a much nicer output the second time. -Now you may embark on the program itself and obtain after a small -number of passes (depending on the complexity of the program and -your laziness.) A source that might have been the original one except -for its lack of comment. At this moment you could profitably use -the CTRL/E feature of MCEDIT to provide the whole source of comment. -(For example, we obtained a source of a fortran compiler in three -days after five passes.) - -Below we will describe the OS/8 version of the program - -## Assembly Instructions - -(Alas, we do not yet have source.) - - .R PAL8 - *102,DCP_SBIN,DCPZ/L$ - .SAVE SYS DCP - -## Operating Instructions - - .R DCP - *OUTPUTDSK:DCPLS.TM - If command closed with altmode then exit to OS/8 monitor - else call command decoder again. - -2. If no output given but an output file is required because - chaining to CREF.SV is requested then DSK:DCPLS.TM is used. - -3. If no input given then use output filename with extensions - .SV and .SM (if present.) - E.G. - - *DEASS< - - is equivalent to - - *DEASS3777 the command has to be closed with altmode instead of return.) - -## Translation Is Done One Field at A Time - -Therefore, binaries that load into extended memory must be -disassembled with /(F) for all memory fields used. - -This causes some flaws in the output: - - CIF 10 - JMS I (200 - -is translated as: - - CIF 10 - JMS I (START - -If LOC 200 in the current field is labeled START. -Note that assembling the produced source gives the -correct binary.) - -## Input Format - -Each input section starts with $X (where X is a letter indicating -the type of the section) and ends with $ . - -$\ indicates the end of all input (when not within a secion). -Between the sections comment not containing $ may be inserted. - -### Section Types - -| $A | Translate as 6bit ASCII (TEXT "STRING") -| $D | Dont translate -| $I | Translate as instruction (overriding other specs) -| $L | Translate as identifier rather than as instruction -| $N | Translate octal -| $S | Subroutine with args -| $T | Symbol definitions -| $Z | Special coding -| $ | End of input - -### Content of Section - -1. Sections $X where X is A,D,I,L or N. - - Contents: Lines of the form: - - MMMM-NNNN - - or - - NNNN - - Where NNNN and MMMM are octal addresses. - - e.g. the section: - - $N - 1717-1730 - 1750 - $ - - specifies that the locations 1717-1730 and 1750 are - to be translated as octal numbers. - -2. Sections $S. - - Contents: Lines of the form: - - SSSS:XXXXX - - Where SSSS is a subroutine address and XXXXX specifies - the kind of arguments the subroutine has. - - e.g. the section: - - $S - 1000:NL - $ - - indicates that each call to the subroutine at LOC 1000 has two - arguments of type octal and label respectively. - -3. Sections $T. - - Contents: Lines of the form: - - TAG=NNNN - - or - - TAG - - Meaning: If no octal value of a tag is specified then its value is - taken as one more than the value of the previous tag. - -4. Section $Z. - - This is an ad hoc construct to enable the translation of - symbol tables like those of PAL8 and CREF. - - e.g. - - $Z=52;0=240;1=301;40=260 - NNNN-MMMM:(UUUL) - $ - - indicates that the range NNNN-MMMM is a table of four-word entries - three words in a special format and one label. - - The special format is as follows: - - The value is divided by 52 giving a quotient and a remainder. - Both are converted into a character as follows: 0 gives a space, - 1-37 give letters A-_, and 40-51 give digits 0-9. - - The coding here is not foolproof yet: A strange command might - give strange output instead of an error message. - - In later versions this command will be generalized, so we don't - describe it in full here. - -## Error Messages - -These are very poor (because of lack of space): HLTNNNN, -where NNNN indicates the address of the routine in DCP that -detected the error. - -Errors are almost always violations of the input format. - -A complete list will appear in the final report. - -| Name | DCP (ERROR TABLE) -| Author | A.E. Brouwer -| Date | 75-02-13 - -As noted: The error messages of DCP look like 'HLT....' -where .... stands for the octal address of the routine -that detected the error. - -(Of course giving intelligible messages is highly desirable -but lack of space prevented this. Some future version of DCP -will chain to a file `DECPERR.SV` containing the messages.) - -Below the error numbers are given for DCP AB-V21. -[Note: These numbers may change slightly each time that -DCP is assembled anew.] - -### DCP16 Error Table - -| Number | ERROR -| ------ | -------------------------------------------------------------| -| 0000 | PREMATURE END OF .BN INPUT | -| 0230 | CLOSE ERROR | -| 0301 | LOOKUP FOR SYS:CREV.SV FAILED | -| 1414 | OUTPUT ERROR OR NO ROOM FOR OUTPUT | -| 1451 | INPUT ERROR (INFO FILE) | -| 1522 | NO CARRIAGE RETURN WHERE EXPECTED IN THE INFO FILE | -| 1755 | UPPER BOUND IN BOUND PAIR LESS THAN LOWER BOUND | -| 2031 | ASCII STRING CONTAINED A SIXBIT ZERO, BUT NOT AT THE END | -| | (I.E. A WORD 00XX). (THIS MIGHT HAVE BEEN AN @, | -| | BUT IS USUALLY AN ERROR.) | -| 2046 | ASCII STRING WITHOUT TRAILING ZERO | -| 2061 | DCP COULD NOT FIND A SUITABLE DELIMITER FOR THE ASCII STRING | -| | IN THE RANGE "" TO "? | -| 2125 | IMPOSSIBLE | -| 2214 | TEXT BUFFER OVERFLOW (TOO MANY OR TOO LONG IDENTIFIERS). | -| 2234 | NO IDENTIFIER WHERE EXPECTED (IN A $T SECTION). | -| 2666 | ZERO SUBROUTINE ADDRESS SPECIFIED IN A $S SECTION | -| 2705 | S-BUFFER OVERFLOW (TOO MANY SUBROUTINES WITH ARGS.) | -| 2761 | UNKNOWN TYPE LETTER IN SPECIFICATION OF SUBROUTINE ARGS | -| 3006 | $Z NO FOLLOWED BY = | -| 3011 | $Z= NOT FOLLOWED BY A NONZERO NUMBER | -| 3022 | NO CARRIAGE RETURN OR SEMICOLON WHERE EXPECTED IN $Z HEADER | -| 3030 | NO = WHERE EXPECTED IN $Z HEADER LINE | -| 3041 | ZERO LOWER BOUND IN BOUND PAIR IN $Z SECTION | -| 3064 | Z-BUFFER OVERFLOW | -| 3117 | PREMATURELY EXHAUSTED Z-FORMAT | -| 3135 | UNKNOWN Z-FORMAT SYMBOL | -| 3470 | T-BUFFER OVERFLOW | -| 3723 | NO VALUE ASSIGNED TO FIRST TAG IN $T SECTION | -| 4213 | NO INPUT AND NO OUTPUT AND NO DSK:DCPLS.TM TO DELETE | -| 4245 | HANDLER FETCH ERROR | -| 4341 | LOOKUP FOR INPUTFILE FAILED | -| 4442 | OUTPUT OPEN ERROR | -| 4456 | NO 16K MEMORY AVAILABLE | -| 4470 | CHECKSUM OR FORMAT ERROR IN BINARY INPUT FILE | -| 4613 | FORMAT ERROR IN CORE CONTROL BLOCK OF .SV INPUT FILE | -| 4647 | ERROR READING CORE CONTROL BLOCK OF .SV INPUT | -| 4723 | ERROR READING .SV INPUT FILE | - -## DCP24 - -DCP Version 24 is a 24K version of DCP. - -| Name | DCP-AB-WW-V24 -| Author | W.F. Wakker, Math. Center, Amsterdam -| Date | 76-03-25 - -### The Following Extensions Are Made - -- DCP24 Translates EAE instructions in both A and B mode - - (For mode switching, see below.) - - Example: - - 1200 DAD;1234 - - is translated as if the info-file contains the following info: - - $I - 1200 - $ - $L - 1201 - $ - $N - 1234+ - $ - -- In the info-file one can give : NNNN+ which has the same - effect as NNNN-MMMM where MMMM=NNNN+1. - -- Several buffers have been enlarged. - -- The output is paginated and has a heading on each page. - (The page number is in octal ....) - -- Error messages are unfortunately as poor as before (See DCP24 - error table). - -- New sections, now possible in the info-file are: - - | $B | TRANSLATE AS 8-BIT ASCII | - | $C | GIVE COMMENT | - | $E | FORCE EAE MODE A | - | $F | FORCE EAE MODE B | - | $M | TRANSLATE NEGATIVE | - -- Section $B - - $B - NNNN-MMMM - $ - - Causes the location NNNN-MMMM to be translated as - 8-bit ASCII, E.G. 0301 is translated as "A. - Values less then 241 are translated as octal numbers. - -- Sections $E and $F - - When DCP encounters EAE instructions, some slight heuristics - are done to determine the mode. The mode is initially A; SWAB, - DAD, and DST cause the mode to change to mode B etc. - When these heuristics are too poor, you can use the $E section - to force mode A and the $F section to force mode B. - -- Section $M - - This section has the same effect as section $N, only all - octals are given negative, E.G. 7770 becomes -10. - It is also possible to give $B and $M to the same LOC. - Example: 7477 is now translated as -"A. - -- Section $C - - Now you can give comment!! - - | Format | NNNN:THIS IS COMMENT - | Effect | NNNN ........ /THIS IS COMMENT - | Attention | The $C section must be the last one in the info-file: - - When $C is seen in the info-file, a setup is made to - give the comment and no more input will be read ( E.G. The program - acts like $$ on the end is seen). The comments are added to - the listing in the last pass of the program. - - __YOU MUST SORT THE ADDRESSES.__ - - 300:COMM1 - 200:COMM2 - - Has as effect that from adress 300 on, no more comment will - be given, since address 200 is not found any more. - - __DO NOT GIVE COMMENT ON ADDRESSES WHICH DO NOT BELONG - TO THE PROGRAM__ - -- Extension of $S section - - As arguments in the $S section you can give N, L, A, I, B, M, - (with the obvious meaning, see above ) and also U. - U should only be used for the addresses 200 and 7700. - It marks the entrypoint of the user service routine and gives - a nice translation of each USR call. - -- Extension of $Z section - - New possible arguments: M, B. - -### DCP-V24 (ERROR TABLE) - -| Number | ERROR -| ------ | -------------------------------------------------------------| -| 0000 | PREMATURE END OF .BN INPUT | -| 0237 | CLOSE ERROR | -| 0305 | LOOKUP FOR SYS:CREF.SV FAILED | -| 1414 | OUTPUT ERROR OR NO ROOM FOR OUTPUT | -| 1511 | NO CARRIAGE RETURN WHERE EXPECTED IN THE INFO FILE | -| 1707 | NO : AS SEPARATOR IN $C SECTION | -| 2145 | UPPER BOUND IN BOUND PAIR LESS THAN LOWER BOUND | -| 2235 | NO : AS SEPARATOR IN FIRST LINE OF $C SECTION | -| 2331 | INPUT ERROR (INFO FILE) | -| 2431 | ASCII STRING CONTAINED A SIXBIT ZERO, BUT NO AT THE END | -| | (I.E. A WORD 00XX). (THIS MIGHT HAVE BEEN AN @, | -| | BUT IS USUALLY AN ERROR.) | -| 2446 | ASCII STRING WITHOUT TRAILING ZERO | -| 2461 | DCP COULD NOT FIND A SUITABLE DELIMITER FOR THE ASCII STRING | -| | IN THE RANGE "" TO "? | -| 2525 | IMPOSSIBLE | -| 2614 | TEXT BUFFER OVERFLOW (TOO MANY OR TOO LONG IDENTIFIERS) | -| 2634 | NO IDENTIFIER WHERE EXPECTED (IN A $T SECTION) | -| 3266 | ZERO SUBROUTINE ADDRESS SPECIFIED IN A $S SECTION | -| 3305 | S-BUFFER OVERFLOW (TOO MANY SUBROUTINES WITH ARGS) | -| 3367 | UNKNOWN TYPE LETTER IN SPECIFICATION OF SUBROUTINE ARGS | -| 3406 | $Z NOT FOLLOWED BY = | -| 3411 | $Z= NOT FOLLOWED BY A NONZERO NUMBER | -| 3422 | NO CARRIAGE RETURN OR SEMICOLON WHERE EXPECTED IN $Z HEADER | -| 3430 | NO = WHERE EXPECTED IN $Z HEADER LINE | -| 3441 | ZERO LOWER BOUND IN BOUND PAIR IN $Z SECTION | -| 3463 | Z-BUFFER OVERFLOW | -| 3517 | PREMATURELY EXHAUSTED Z-FORMAT | -| 3541 | UNKNOWN Z-FORMAT SYMBOL | -| 4070 | T-BUFFER OVERFLOW | -| 4324 | NO VALUE ASSIGNED TO FIRST TAG IN $T SECTION | ADDED doc/e8-manual-pdf.css Index: doc/e8-manual-pdf.css ================================================================== --- /dev/null +++ doc/e8-manual-pdf.css @@ -0,0 +1,13 @@ +h1, h2, h3, th { + font-family: sans-serif; + page-break-after: avoid; +} + +th { + border-bottom: 0.5pt solid black; + text-align: left; +} + +pre, table { + margin-left: 2em; +} ADDED doc/e8-manual.md Index: doc/e8-manual.md ================================================================== --- /dev/null +++ doc/e8-manual.md @@ -0,0 +1,593 @@ +# E8 Manual + +E8 is an Emacs-like text editor for PDP-8 family computers. It runs +under OS/8 and communicates with the user via character I/O on the +console terminal. The console is expected to be, or behave like, a +simple fixed-size character-oriented display terminal, able to process a +few basic ANSI escape sequences. This document assumes some familiarity +with the PDP-8, OS/8, and Emacs. + + + +## Copyright and License + +The source code described here is copyright © 2020 by Bill Silver and is +distributed under the terms of [the SIMH license][slic], which grants +you certain rights to copy, modify, and redistribute. There is no +express or implied warranty, including merchantability or fitness for a +particular purpose. You assume full liability for the use of this code. + +[slic]: https://tangentsoft.com/e8/doc/trunk/COPYING.md + + + +## Cautions + +I’ve been using E8 to further its own development with no trouble, but +it has not yet been tested extensively. Save often and make backups. +Note that OS/8 provides almost no protection for its file system from +errant application code. E8 has some fail-safes to prevent bugs from +overwriting other files, and there are no known bugs, but still, this is +software. Until community use is further along, I recommend editing +files on some removable media that doesn’t contain stuff you can’t +afford to lose. + + + +## “Hardware” Requirements + +E8 runs on any PDP-8 family computer with at least three fields of +memory (12K). The maximum file size (characters) that can be edited is +simply the number of words of memory minus fields 0 and 1. So if you +have all eight fields, you get a max size of 24K characters. E8 can +display, but not properly edit, larger files. + + + +## Terminal Requirements and Processing + +### Display + +The terminal must be able to process the following ANSI escape +sequences: + +| Sequence | Action | To change, search for | +|-----------------------------|----------------------|-----------------------| +| `ESC` `[` *row*`;`*col* `H` | set cursor position | `SETCUR,` | +| `ESC` `[` `2` `J` | clear screen | `CLRSC,` | +| `ESC` `[` `K` | clear to end of line | `CLREOL,` | + +E8 sends the BELL code (0078) if you try to do something that +can’t be done, like entering an unimplemented command character, moving +the cursor past the ends of the buffer, or entering a bad filename +character. If your terminal doesn’t beep or flash the screen, you’ll +miss these. + +The Linux console (e.g. CTRL-ALT-F1) and MobaXterm are fine. + + + +### Keyboard + +Many E8 commands are intended for use with the ALT key. E8 +recognizes the sequence + + ESC char + +to mean ALT-char. Many terminals and terminal emulators that +have an ALT key will send that sequence when the +ALT key is pressed. If yours doesn’t, just type the +ESC. + +Some control characters that Emacs has traditionally used may be +captured by a screen manager (e.g. ^A for GNU `screen` or +^B for `tmux`) or SimH (^E) and not sent along to +the terminal. The serial flow control characters ^Q and +^S may also be captured, but if you are not using serial +communication you can stop that with the command `stty -ixon` (SSH and +VNC are not serial and don’t need flow control). ALT +alternatives are provided in each case, but it takes a little getting +used to if you have Emacs muscle memory. + +There is some ambiguity about whether the modern Backspace +key should send the backspace code (^H, 0108) or the delete +code (1778). E8 considers them the same and converts 177 to +010. + +E8 responds to escape sequences that are sent by certain special keys on +modern keyboards: + +| Sequence | Key | Action | +|-------------------|-----------|------------------------------| +| `ESC` `[` `A` | ↑ | beginning of previous line | +| `ESC` `[` `B` | ↓ | beginning of next line | +| `ESC` `[` `C` | → | forward one character | +| `ESC` `[` `D` | ← | back one character | +| `ESC` `[` `1` `~` | HOME | beginning of line | +| `ESC` `[` `3` `~` | DEL | delete forward one character | +| `ESC` `[` `4` `~` | END | end of line | +| `ESC` `[` `5` `~` | PAGE UP | back one screen | +| `ESC` `[` `6` `~` | PAGE DOWN | forward one screen | + + +## Installation + +### Source Files + +There are three equivalent configurations of source files, depending on +whether you use PIP, or something that can handle larger files, to +transfer to OS/8, and depending on whether you want files smaller than +24K characters so E8 can edit them (assuming 8 fields of memory). + +| Use PIP | E8 can edit | Files | +|---------|-------------|------------------------------------------------------------------------| +| yes | yes | `E8.PA`, `EA.PA`, `EB.PA`, `EC.PA`, `ED.PA`, `EE.PA`, `EF.PA`, `EG.PA` | +| no | yes | `E8BASE.PA`, `E8FILE.PA`, `E8SRCH.PA` | +| no | no | `E8ALL.PA` | + + + +### Setting Screen and Memory Size + +The default screen size is 42 lines of 80 characters, and the default +number of fields is 8. If your setup is different, make a Pal8 source +file (e.g. E8DEFS.PA) to define your values. For example: + + DECIMAL + SCRWD=120 + SCRHT=24 + MEMSIZ=6 + OCTAL + +The symbols SCRWD and SCRHT define your screen size. Make them whatever +you like, as long as + + SCRWD * (SCRHT + 1) <= 3968 + +The symbol `MEMSIZ` specifies the number of fields installed. 3 ≤ +`MEMSIZ` ≤ 8 + +### Lines Longer than the Screen Width + +There is no limit on the size of lines that can be in files and edited, +but you can only see the first SCRWD-1 characters of each line. What you +can’t see is there and not lost. If the length of any line is >= SCRWD, +E8 will display a > in the last column to let you know that +there are more characters that you can't see. + +Likewise, you can place the edit cursor (where you insert and delete +characters) anywhere in the file, even at invisible positions. If the +edit cursor is at an invisible position the screen cursor is placed on +the > to let you know. + +If you want to see the invisible text, put the cursor just before the > +and insert a newline (CR) to break the line in two. You can always +delete the CR when you're done looking. + +### Getting the Code Onto OS/8 + +Choose an OS/8 device to hold the E8 source and the files you want to +edit, and assign it to DSK: + + .AS DSK + +My method is to copy/paste the source code into a MobaXterm session +connected to OS/8, while PIP on the OS/8 receives it, like this: + + .R PIP + *E8.PACR code (^M, 0158) is + considered new line, and the LF code (^J, + 0128) is discarded. On output, CR is written + as CR, LF. + +* I/O to files is one OS/8 block per transfer, sequential over the + file, and therefore may be inefficient on real DECtape, if anyone + still has such a thing. + + + +## Internal Errors + +Certain internal errors will print `ASSERT: xxxx` and exit to OS/8. +Edits since the last save are lost. Report the address to me. I have +never seen this happen, but just in case. + + + +## Mode Lines + +The E8 mode lines look like this: + + -**- EFBASE.PA 5123 + SEARCH: TOP, + +The `-**-` on the first line means the buffer has been changed. + +Following this (`E8BASE.PA` in this example) is the current file name, if +any. + +The number after that is the count of characters in the buffer (decimal). + +The line below shows occasional status or state displays, and accepts your +input for certain commands. In the example shown, the incremental search +command prompts with `SEARCH:` and you enter a search string, here `TOP,`. + + + +## Entering Filenames + +In a single edit session you can create new files and view or edit as +many files as you like. When prompted for a filename: + +* Names must be alphanumeric, no more than six characters, with an + optional extension of up to two characters. + +* Lowercase letters are made uppercase. + +* Any character that would not result in a legal filename will be + rejected. + +* The CR code (Enter on modern keyboards) + terminates and accepts the entry. + +* Backspace clears the filename so you can start over. + +* ^G aborts the operation. + +* You cannot enter an OS/8 device name. E8 can currently only access + files on `DSK:`. + + + +## Incremental Search (^S) + +Enter the search string at the mode-line prompt. After each character the +cursor will advance to matching text if any, or ring the console bell and +reject the character if not. You may enter: + +| Key | Action | +|-------------|--------------------------------------------------| +| `CR` | terminate search with mark set to starting point | +| `^S` or `^F`| find the next occurrence of the search string | +| `BS` | erase last search character and back up | +| `^N` | match `CR` (newline) in search text | + + + +## Query-Replace (ALT-%) + +When entering strings at the `REPLACE` and `WITH` prompts: + +| Key | Meaning | +|------|-------------------------------| +| `CR` | Accept string | +| `BS` | Delete last character entered | +| `^G` | Abort query-replace | +| `^N` | Put CR (newline) in string | + +If `REPLACE` is null you’ll be asked again. `WITH` can be null. You will +be shown successive instances of the replace string, and you can: + +| Key | Meaning | +|------------|----------------------------| +| `SP` | Replace and continue | +| `n` or `N` | Don’t replace and continue | +| `.` | Replace and quit | +| `CR` | Quit | +| `!` | Replace all without asking | + + + +## Change Protection + +If there are unsaved changes in the buffer and you try to exit E8, +create a new file, or read in an existing file, you will be offered the +opportunity to save the changes. The responses are Y (yes), +N (no), or ^G (abort). If you select Y +and there is no filename, you will be asked for one. Only uppercase +Y and N are accepted. + + + +## Editing + +Like Emacs, E8 is a character editor. All characters are traversed and +edited the same way, including TAB and CR. The +other control characters are displayed with the customary `^` prefix, +but remember that they are just one character in the buffer. + + + + +## Limited Undo + +If you accidentally delete characters with any sequence of +character-deleting commands, you can recover them if you act right away. +The deleted characters are lost if you insert any characters or move the +cursor. See ALT-R. + + + +## Commands + +Most commands are equivalent or nearly so to Emacs, but some are not, so +beware. The ALT commands are case-insensitive. The +^X commands consider control, uppercase, and lowercase +letters to be all the same. For example, ^X ^S, +^X S, and ^X s are all the same. + +| Key/Sequence | Meaning | +|-----------------------|--------------------------------------------------------| +| `^@` or `^SP` | Set the mark to the current position (cursor) | +| `^A` or `ALT-A` | Beginning of line | +| `^B` | Back one character | +| `^D` | Delete forward one character | +| `^E` or `ALT-E` | End of line | +| `^F` | Forward one character | +| `^H` (BS) | Delete backward one character | +| `^I` (TAB) | Insert TAB | +| `^J` (LF) | Insert CR, TAB | +| `^K` | Kill (delete) to end of line; if at end, delete CR | +| `^L` | Erase and redraw screen with cursor at the middle line | +| `^M` (CR) | Insert CR | +| `^N` | Next line at same column or nearby | +| `^O` | Open new line (CR, ^B) | +| `^P` | Previous line at same column or nearby | +| `^Q` | Insert next typed char as is | +| `^S` or `ALT-S` | Incremental search (case sensitive) | +| `^V` | Forward one screen | +| `^W` | Write region (text between cursor and mark) to the file `CLIP.E8` and delete the text in the region. | +| `^Y` | Insert the file `CLIP.E8` at the cursor | +| `^Z` | Exit to OS/8 | +| `^\` | Scroll up one line, keeping cursor in same position on screen | +| `ALT-%` | Query-replace (case sensitive) | +| `ALT-<` | Beginning of buffer | +| `ALT->` | End of buffer | +| `ALT-B` | Back one word | +| `ALT-D` | Delete forward one word | +| `ALT-F` | Forward one word | +| `ALT-H` (BS) | Delete backward one word | +| `ALT-N` | Search for the last search or replace string | +| `ALT-Q` | Insert next typed character as a control character, e.g. `ALT-Q` `A` inserts `^A`. | +| `ALT-R` | Recover deleted characters if possible | +| `ALT-V` | Back one screen | +| `ALT-W` | Write region to the file `CLIP.E8`; do not delete the region. | +| `ALT-\` | Scroll down one line, keeping cursor in same position on screen | +| `^X` `^F` or `^X` `F` | Open existing file or create new one | +| `^X` `^I` or `^X` `I` | Insert file at cursor | +| `^X` `^R` or `^X` `R` | If the previous file read filled the buffer before the end of the file, clear the buffer and read more text from the file starting at some point up to 384 characters before the last one read. | +| `^X` `^S` or `^X` `S` | Save buffer to current file, prompt for filename if none | +| `^X` `^W` or `^X` `W` | Write buffer to new filename. | +| `^X` `^X` or `^X` `X` | Exchange cursor and mark. | + + + +## Scrolling + +By default the scrolling commands `^\` and `ALT-\` operate by redrawing +the entire screen. With a fast simulator, high-speed communications, and +a modern graphics engine the redraw is fast enough to not be noticeable. +For slower systems, there is an assembly-time option for using VT-100 +scrolling commands so that only one line need be redrawn. It is an +option because it may not interact properly with every terminal, and +it’s usually not needed. It also has to set a terminal scrolling window, +which it has to undo by resetting the terminal on exit. So there are +opportunities for trouble. It’s been tested and works with MobaXterm. +If you're using SimH you can see the difference by throttling the simulator +down to 300K or so. + +To enable VT-100 scrolling, put `FSCROL=0` in an `E8DEFS.PA` file. The +terminal must implement the following escape sequences: + + + +| Sequence | Action | +|-----------------------------|------------------------------------------------| +| `ESC` `[` *top*`;`*bot* `r` | set scrolling window | +| `ESC` `D` | if cursor is at window bottom scroll window up | +| `ESC` `M` | if cursor is at window top scroll window down | +| `ESC` `c` | reset terminal | + + + +## Theory of Operation + +### Storing and Editing Text + +Text is conceptually just a list of character codes. For editing +purposes, there are no special characters: newline (CR), TAB, and other +control characters are treated like any other (they are displayed +differently, of course). + +Inserting and deleting occurs at a place in the text called the point. +The point is conceptually between two characters, before the first one, +or after the last one. The screen cursor is on the character just ahead +of the point. All editing operations are built from three fundamentals: + +* insert characters at the point; + +* delete characters in front of or behind the point; and + +* move the point somewhere. + +Characters are stored in a text buffer comprising one or more complete +fields starting at field 2, one character per word of memory. The fields +are considered contiguous—there is no significance to field boundaries. +Every word in the buffer can hold a character—there are no special +codes, link pointers, or the like. + +Inserting and deleting are fast, O(1) operations (independent of the +number of characters in the buffer). Moving the point is O(n), where n +is the distance to be moved. On a real 8/I, moving forward takes 20 +cycles (30 μs) per character and backward 29 cycles (43.5 μs) per +character (plus some small constant overhead). Typical operations move +the point small distances (one character, line, or screen) and are fast. +The worst case is moving from the end of a full buffer (24K characters) +to the beginning, which takes slightly over 1 second. + +Text buffer memory looks like this: + +![E8 text buffer memory layout diagram](graphics/e8-buffer.svg) + +Almost all actions operate on text that is exclusively either ahead of +or behind the point, the characters of which are always contiguous in +memory. Only rare actions cross the gap (e.g. writing the text to a +file). The gap structure makes everything simple and fast. + + + +### Display + +Display is completely separate from and independent of editing. The +editing commands know nothing about the display and contribute no +information to it. The display code does not know what editing commands +have been issued since the last display. Its job is to make the display +match the current contents of the text buffer, with few unnecessary +characters transmitted to the console terminal. This complete separation +simplifies the code and avoids all manner of potential bugs that would +arise from editing and display miscommunication—no communication, no +communication bugs. + +A complete copy of the screen is kept in field 1. The first step in a +screen update is to determine what character in the text buffer should +be top of screen (TOS), so that the point is visible. TOS is always +either at the beginning of the buffer, or just after a newline. If the +point is visible with the current TOS, it is kept. Otherwise it is +chosen to place the point somewhere on the screen’s middle line if +possible. + +Once TOS is established, text lines are processed one at a time and +independently. Each line is first rendered to a one-line buffer in field +1, whose size is the width of the screen (`SCRWD`). Rendering converts +tabs to spaces, adds the `^` prefix to control characters, and enforces +the `SCRWD-1` limit on visible text. The rendered characters are +terminated with one of two codes, both negative, indicating that the +line does or does not extend beyond the limit. Rendering is the most +time-consuming part of screen update, so the inner loop is carefully +crafted for speed. + +Each rendered line is then compared to the appropriate line of the +screen copy. If a mismatch is found at some position, the screen cursor +is set to that position and the rest of the characters from the render +buffer are sent to TTY and replace the screen copy. After all those +characters have been sent and copied, if the screen copy shows that the +rest of the screen line is not blank, an escape sequence is sent to +clear to end of line. + +Each line of the screen copy also has two negative termination codes, +different from the render codes, that indicate whether a > +does or does not appear in the last column. The render and screen +termination codes tell whether > needs to be added, removed, +or left alone. + +The inner loop is optimized for characters comparing equal and is only +nine memory cycles on an 8/I. The use of distinct termination codes avoids +having to also test for end of render or screen line in the inner loop. + +After the text buffer has been processed, the two mode lines at the +bottom of the screen are rendered and updated in the same way. Finally, +the screen cursor is set to the point position. + +Screen update can be aborted safely after each line. If a character is +received on the console terminal during an update, it is aborted. The +screen will settle on the correct display as soon as update catches up +with character input. + +Every character written to the screen goes through this update process. +Nowhere is a character written directly. The only direct write to TTY +other than screen update is the BELL code. + + + +### Code Organization + +All executable code is in field 0. The last page of fields 0 and 1 holds +core-resident OS/8. The two pages just below that in field 0 hold the +`DSK:` device handler. The screen copy and render buffer can use the +entire rest of field 1 (31 pages, 3968 words). + +Every subroutine that implements an editor command skip-returns if +successful, even if failure is impossible (e.g. move to end of buffer +can’t fail). Many other utility subroutines also skip-return on +success. This allows what in modern high-level languages would be a +catch-throw mechanism—failures can unwind up to whatever code can deal +with them, and unwinding all the way to top level just rings the console +bell. If a subroutine that logically can’t fail takes the non-skip +return, a fatal assertion failure is reported. + +15-bit addresses and 24-bit integers are always stored little-endian. +The high-order word of a 15-bit address is a `CDF` instruction. + + + +### File Output Size + +OS/8 does not protect the file system from an application writing beyond +the end of the allocated blocks for an output file. When writing a file, +E8 calculates the number of OS/8 blocks needed and asks for one more +than that number. Bugs may cause the calculation to be inconsistent with +the number actually needed. E8 counts written blocks and aborts the file +write if there is an attempt to write more than OS/8 allocated (which +should be the number asked for). After a write the calculated and actual +values are displayed in the mode line. They should always be equal. The +one extra asked for allows some overwrite to be tolerated without harm, +and the calculated/actual values will be off by one to show what +happened. I have never seen any errors in calculating file size, but be +aware and report inconsistencies. + +---- + +## License + +This document is © 2020 by Bill Silver and Warren Young. It is licensed +under [the SIMH licnese][slic]. + + + +## PDF Version + +This document is also available in [PDF format][pdf], ~151 kiB. + +[pdf]: https://tangentsoft.com/e8/uv/doc/manual.pdf ADDED doc/graphics/e8-buffer.svg Index: doc/graphics/e8-buffer.svg ================================================================== --- /dev/null +++ doc/graphics/e8-buffer.svg @@ -0,0 +1,68 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text before + point + text after + point + + + + point + gap + beginning of buffer + end of buffer + + + ADDED doc/os8-combined-kit.md Index: doc/os8-combined-kit.md ================================================================== --- /dev/null +++ doc/os8-combined-kit.md @@ -0,0 +1,257 @@ +# OS/8 Combined Kit + +## Introduction + +To create the richest OS/8 environment, one had to purchase add-ons: + +* OS/8 V3D Extension Kit which contained `BASIC`, `TECO`, and the new `FUTIL` +file utility. +* OS/8 V3D FORTRAN IV +* OS/8 V3D Device Extensions which contained device drivers for more modern +devices like the RL02 cartridge disk drive, the RX02 dual density floppy, and +the KT8A memory subsystem that enlarged the PDP-8 maximum memory from 32K to +128K words. + +(The two similarly named "Extensions" kits are a continuing source of confusion.) + +In March of 1979, the baseline OS/8 distribution and these three add-ons were +put together as a single product, the "OS/8 V3D Combined Kit." + +## Sources + +## Media + +## Patches + +The OS/8 Combined Kit Information Guide says, "In addition, the kit's +modules have been updated with the binary patches described in the +OS/8 Device Extensions User's Guide and in the issues of the Digital +Software News (through June 1979)." Testing and review has determined +that this is not always true. + +### Earlier recommendations re-affirmed: + + +### Verified Patches: + +OS/8 V3D Patches: + +`EDIT 21.17.1M` Applied in source form. +`EDIT 21.17.2M` Applied in source form. +`EDIT 21.17.3M` Applied in source form. +`EDIT 21.17.4M` Still bad. Not applied. +`FOTP 21.19.1M` Applied in source form. +`MCPIP 21.21.1M` Applied in source form. +`PAL8 21.22.1 M` Irrelevant. We have PAL8 V13A +`PAL8 21.22.2 M` Irrelevant. We have PAL8 V13A +`PAL8 21.22.3 M` Irrelevant. We have PAL8 V13A +`PAL8 21.22.4 M` Irrelevant. We have PAL8 V13A. Does not fit in that source either. +`PIP 21.23-1M` Applied in source form. +`PIP10 21.24.1M` Applied in source form. +`SET 21.26.1M`, `2M`, and `3M` All irrelevant. Set V2A now. + +OS/8 Extension Kit V3D Patches: + +`BATCH 31.23.1 M` Irrelevant. We have `BATCH` version 10. +`BRTS 31.11.1M` Applied in source form. +`BRTS 31.11.2 O` was supposedly an optional patch. In the Combined +Kit, the patch is labeled mandatory, and applied in source form. +`BRTS 31.11.5 M` is available if you use `BASIC.UF` The patch is +expected to match and work. +`FUTIL 31.21.1 M` Not relevant. We have v8 +`FUTIL 31.21.2 M` Not relevant. We have v8 +`MSBAT 31.22.1 M` Applied in source form. + +OS/8 FORTRAN IV Patches: + +`F4/PASS3 21.1.2 M` Applied in source form. (Thank you, Lee Nichols!) +`F4 51.3.1 M` Applied in source form. (Thank you, Lee Nichols!) +`FORLIB 51.10.1 M` ha been applied in source form. +`FRTS 51.3.3 O` Has been applied in source form. + +OS/8 V3D Device Extensions December 1978 Patches: + +`ABSLDR 35.18.1 M` Applied in source form. (Thank you, Lee Nichols!) +`FUTIL 35.13.1 M` Applied in source form. +`MONITOR 35.2.1 M` Applied in source form. (Thank you, Lee Nichols!) +`FRTS 35.1.3 M` Is a note on how to avoid breaking `FRTS.SV` if +`ABSLDR.SV` lacking patch `35.18.1 M` is used to load `FRTS.SV` +before applying `FPAT.BN`. We build from source, and have the patch +so this is not an issue. + +### Applied Patches: + +The Combined Kit sources were obtained from Lee Nichols who built them +and verified that the built binaries matched a Combined Kit binary +distribution he had. When the patches applied to the V3D distribution +were reviewed, some patches dated later than the documented "through +June 1979" application date were discovered **not** to have been +applied. Interpreting this state of affairs has been guided by pragmatism: + +1. How could the documented release date of March 1979 include patches +appearing in the June/July 1979 PDP-8 Digital Software News? Probably impossible. +2. Was the software development team 100% accurate in their +application of patches? Probably not. +3. Is the statement "matches the binary distribution" from Lee +credible? Probably yes. +4. Is it worth the extra work to hand-integrate patches into source as +meticulously as Lee did with the patches he did integrate, when we +have proven binary patches and a pre-existing automated patch +application infrastructure? Probably not. + +Therefore, the following patches are applied using the same mechanism +used for the V3D distribution: + +OS/8 V3D patches: + +`CREF 21.15.1 M` Apr/May 1978. Required update to apply to `CREF V5B`. +`CREF 21.15.2 M` Feb/Mar 1980. +`ABSLDR 21.29.1 M` Dec 1979/Jan 1980 -- Determined necessary after much research. See below. + +OS/8 Extension Kit V3D patches: 11 need work. + +`SABR 21.91.1M` needed (Oct '79) +`BLOAD 31.10.1M` needed (Feb/Mar 80) +`BRTS 31.11.3 O` is an optional patch that enables 132 column +output. It is recommended because it is expected that wide column +output is desirable. + +`TECO 31.20.5 M` Needs to be applied. Apr/May 1978. Should have been in source. +`TECO 31.20.6 M` Needs to be applied. Apr/May 1978. Should have been in source. +`TECO 31.20.7 M` Needs to be applied. Apr/May 1978. Should have been in source. +`TECO 31.20.8 M` Needs to be applied. Apr/May 1978. Should have been in source. +`TECO 31.20.10 M` Needs to be applied. Apr/May 1978. Should have been in source. +`TECO 31.20.11 M` Needs to be applied. Apr/May 1978. Should have been in source. +`TECO 31.20.12 M` Needs to be applied. Apr/May 1978. Should have been in source. +`TECO 31.20.13 M` Needs to be applied. Oct/Nov 1978. Should have been in source. + +OS/8 FORTRAN IV patches 1 needs work: + +`F4 51.3.2 M` Has not been applied. Looks like it might be +needed. Jun/Jul 1978. Should have been in source. + +OS/8 V3D Device Extensions December 1978 Patches: 2 need work. + +`PAL8 35.14.1 M` Needs to be applied. (April/May '79) +`BLOAD 35.51.1 M` Needed but same as `BLOAD-31.10.1 M` for Baseline. + +Review and consider applying the available `MACREL v2` patches. 10 items + + +### Missing / Updated Patches: + +`BASIC.UF-31.5.1 M`, a mandatory patch, was expected to have been +integrated into the source. The sources that "built binaries that +matched the Combined Kit Binary Floppies did not contain +it. `BASIC.UF` can't work without this patch because page zero +literals in `BRTS` are adjusted to match. This patch has been +incorporated into the `UF.PA` source. + +The source of `CREF` was labeled version `5B` but contained no changes +other than the version string when compared against the OS/8 V3D +source. The original `CREF 21.15.1 M` patch would not apply because +the version number, 0302, did not match what it was expecting. To for +the Combined Kit, the patch is modified to not care what version +number is set. + +### TODO: + +Fix 3 patches: + +Applying patch CREF-21.15.1M-v5B.patch8... Old value: 0302 does not match 0301. Aborting patch. + + +Confirm application and correct operation. + + +### Patch research details: + +`ABSLDR 21.29.1 M` is supposedly a mandatory patch that enables +`ABSLDR` to work with `SAVE` image files. Normally `ABSLDR` only +loads `BIN` format files. The patch sequence number, `21.29` +identifies the patch as being for the OS/8 V3D version of `ABSLDR`. +But the patch changes locations that are not used by `ABSLDR.SV`. +Furthermore, the patch says it upgrades `ABSLDR` from version 6B to +version 6C. + +Version 6 of `ABSLDR` was part of the OS/8 V3D Device Extensions kit. +See [our documention on the OS/8 V3D Device Extensions][os8ext]. +Verification of this now seems within reach, with the expectation that +it is mis-labeled, and is properly applied to the version with the +Extensions kit. Until it is verified, applying this patch is *not* +recommended. + +Reviewing the 6A source we have for the Combined Kit, this patch +appears mis-labeled, and necessary for ABSLDR V6B. This patch was not +re-numbered as of the latest issue to be found of PDP-8 Digital +Software News [October/November 1980 (Order Number +AA-K629A-BA)][dsn-1980-10]. + +`PAL8-21.22.4 M` Is broken and doubly mis-labeled. Mis-label #1: It is +an optional, not mandatory patch. Mis-label #2: It is for product +sequence `35.14`, the `V13` codeline of `PAL-8` that, like `ABSLDR +V6`, is in the Device Extensions kit. The breakage: Source listing +quits working. *Do not apply this patch!* + +I've looked at the V13 PAL8 source, and this patch doesn't match up +to it either. + +## Documentation and Historical Notes + +Re-creating this whole kit, along with all the supporting operational and +historical documentation has been a challenge. But at last we have it. + +The creation date for the kit is known from the announcement of the +removal of support (Effective 28 April 1980) for the individual +components that appeared on page 3 of the 1980 April/May [PDP-8 +Digital Software News][dsn-1980-04] (Order Number AA-J871A-BA.) + +The detailed description of the kit can be found in the Digital +Software Product Description SPD 4.4.1 dated September 1979, which +appears on page 71 of the [1979 October/November PDP-8 Digital +Software News][dsn-1979-10] (Order Number AA-J235A-BA) + +An overview of the kit can be found in the [OS/8 Combined Kit +Information Guide][os8cktig] (Order number AA-J016B-TA.) It enumerates +other relevant documents, almost all of which are available on the Net: + +* OS/8 DEVICE EXTENSION RELEASE NOTES - AA-H565A-TA +* [OS/8 DEVICE EXTENSIONS USER'S GUIDE - AA-D319A-TA][dev-ext-u-g] +* [OS/8 ERROR MESSAGES - AA-H610A-TA][os8-err-msgs] +* [OS/8 FORTRAN IV SOFTWARE SUPPORT MANUAL - DEC-S8-LFSSA-A-D][fiv-support] +* [OS/8 LANGUAGE REFERENCE MANUAL - AA-H609A-TA][os8-lang-ref] +* [OS/8 MARK SENSE BATCH USER'S MANUAL - DEC-S8-OBUGA-A-D][os8-msb] +* [OS/8 SOFTWARE SUPPORT MANUAL - DEC-S8-OSSMB-A-D][os8-soft-supt] +* [OS/8 SYSTEM GENERATION NOTES - AA-H606A-TA][os8-sysgen] +* [OS/8 SYSTEM REFERENCE MANUAL - AA-H607A-TA][os8-sys-ref] +* [OS/8 TECO REFERENCE MANUAL - AA-H608A-TA][os8-teco-ref] +* [OS/8 V3D SYSTEM RELEASE NOTES - DEC-S8-OSRNA-B-D][v3d-rel-notes] +* [TECO POCKET GUIDE - AV-D530A-TK][teco-pocket] + +The components and version numbers are listed starting on page 15 of +the OS/8 Combined Kit Information Guide. This information also +appears starting at page 7 of the [1979 December/1980 January PDP-8 +Digital Software News][dsn-1979-12] (Order Number AA-J442A-BA). + +### License + +Copyright © 2017 by Bill Cattey. Licensed under the terms of +[the SIMH license][sl]. + +[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md +[dsn-1980-04]:https://archive.org/details/bitsavers_decpdp8sofswNewsAAJ871ABA_952366 +[dsn-1979-10]:https://archive.org/details/bitsavers_decpdp8sofswNewsAAJ235ABA_2298034 +[os8cktig]:ftp://ftp.dbit.com/pub/pdp8/doc/os8cktig.doc +[dsn-1979-12]:https://archive.org/details/bitsavers_decpdp8sofswNewsAAJ442ABA_2496461 +[dev-ext-u-g]:https://poetnerd.com/pdp8-alive/pdp8-alive/artifact/694f464f6aee76e7 +[os8-err-msgs]:https://archive.org/details/bitsavers_decpdp8os8ar79_1411130 +[fiv-support]:https://archive.org/details/bitsavers_decpdp8os8p_4653670 +[os8-lang-ref]:https://archive.org/details/bitsavers_decpdp8os879_21565181 +[os8-msb]:http://www.pdp8.net/pdp8cgi/query_docs/tifftopdf.pl/pdp8docs/dec-s8-obuga-a-d.pdf +[os8-soft-supt]:https://archive.org/details/bitsavers_decpdp8os8up_5566495 +[os8-sysgen]:https://archive.org/details/bitsavers_decpdp8os8otes_1404154 +[os8-sys-ref]:https://archive.org/details/bitsavers_decpdp8os8an_11163494 +[os8-teco-ref]:https://archive.org/details/bitsavers_decpdp8os879_5310047 +[v3d-rel-notes]:https://archive.org/details/bitsavers_decpdp8os8elN_488624 +[teco-pocket]:https://archive.org/details/bitsavers_dectecoAVDde1978_3836960 +[dsn-1980-10]:https://archive.org/details/bitsavers_decpdp8sofswNewsAAK629ABA_1652391 Index: doc/os8-patching.md ================================================================== --- doc/os8-patching.md +++ doc/os8-patching.md @@ -49,44 +49,44 @@ [pl]: https://tangentsoft.com/pidp8i/doc/trunk/media/os8/patches/patch-list.txt ## Review of Recommendations -`BRTS 31.11.2O` is an optional patch which disables 8th bit parity. It +`BRTS 31.11.2 O` is an optional patch which disables 8th bit parity. It is recommended because sometimes we may want to allow output that does not force the 8th bit. -`BRTS 31.11.3O` is an optional patch that enables 132 column +`BRTS 31.11.3 O` is an optional patch that enables 132 column output. It is recommended because it is expected that wide column output is desirable. -`TECO 31.20.1O` is an optional patch that permanently forces no case +`TECO 31.20.1 O` is an optional patch that permanently forces no case flagging. It is not recommended because we want to allow the option of case flagging. -`TECO 31.20.2O` is an optional patch that turns off verbose +`TECO 31.20.2 O` is an optional patch that turns off verbose errors. It was for slow terminals and experienced users who didn't want to wait to see the long error messages they already knew. It is not recommended because we expect a majority of users to be on high speed terminals needing the verbose errors. -`TECO 31.20.3O` turns off a warning that you are using the `YANK` +`TECO 31.20.3 O` turns off a warning that you are using the `YANK` command to completely overwrite a buffer full of text. Issuing the command a second time succeeds. It was again to avoid experienced users. It is not recommended because we expect fewer advanced users who would be annoyed by the protection. -`TECO 31.20.4O` implements rubout support specifically and uniquely +`TECO 31.20.4 O` implements rubout support specifically and uniquely for the `VT05` terminal in a way that breaks it for all other video terminals. It is not recommended because there are VERY few `VT05` deployments that would use it. It is at this point that I began to notice that in later years, patches became less carefully produced, and more prone to errors. Some are not correctable, even today. -`BASIC.UF-31.5.1M` shows: +`BASIC.UF-31.5.1 M` shows: 4044/4514 4556 changing location `4044` from `4514` to `4556`. Such a change would be consistent with the stated purpose of the patch, to correct references @@ -123,11 +123,11 @@ Verification of this now seems within reach, with the expectation that it is mis-labeled, and is properly applied to the version with the Extensions kit. Until it is verified, applying this patch is *not* recommended. -`PAL8-21.22.4M` is broken and doubly mis-labeled. Mis-label #1: It is +`PAL8-21.22.4 M` is broken and doubly mis-labeled. Mis-label #1: It is an optional, not mandatory patch. Mis-label #2: It is for product sequence `35.14`, the `V13` codeline of `PAL-8` that, like `ABSLDR V6`, is in the Device Extensions kit. The breakage: Source listing quits working. *Do not apply this patch!* @@ -228,12 +228,12 @@ `FORLIB 51.10.1 M` is a one line source change to `DLOG.RA`. The patch file provides that line. It also provides instructions on how to use `RALF` to assemble the source and on how to to use `LIBRA` to replace the old version of `DLOG` with the new one in `FORLIB.RL`. I followed the instructions to hand-tool a patched `FORLIB.RL` which I then put -in the `local.tu56` DECtape image along with the other local hacks. -The `v3d-rk05.os8` script has conditional code to replace `FORLIB.RL` +in the source tree at `.../src/os8/v3d/LANGUAGE/FORTRAN4/FORLIB.RL SYS:FORLIB.RL` +The `patch-rk05.os8` script has conditional code to replace `FORLIB.RL` on `SYS:` if installation of FORTRAN IV is enabled. ## Unfinished Business ADDED doc/os8-progtest.md Index: doc/os8-progtest.md ================================================================== --- /dev/null +++ doc/os8-progtest.md @@ -0,0 +1,271 @@ +# os8-progtest: Perform Tests on a Program Under OS/8 + +This program uses Python expect to work through tests of a program +under OS/8. The test cases and expected output are expressed in YAML format +utilizing the [pyyaml library][pyyaml]. + +It is found in the `tools` directory of the source tree. + + +## Usage + + os8-progtest [options] + +The `prog_spec` is the program to test optionally followed by a subset +of tests. For example: + + $ tools/os8-progtest cc8 + +…runs all CC8 tests, while: + + $ tools/os8-progtest cc8:ps,fib + +…runs just the two CC8 tests on `ps.c` and `fib.c`. + +More than one `prog_spec` can appear on the command line to test more than +one program at a time. + +Because this test system is based on the [pexpect] library, success is +determined by seeing a sequence of expected outputs come from the test +program. If one or more of these fail to occur, the test will appear to +hang until pexpect times out while waiting. + +[pexpect]: https://pexpect.readthedocs.io/en/stable/ + + + +### Options + +| Argument | Meaning +| -------------------- | ---------------------------------------------- +| `--help, -h` | show this help message and exit +| `--verbose`, `-v` | increase output verbosity +| `-d DEBUG` | set debug level; 0-14 +| `--destdir DESTDIR` | destination directory for output files +| `--srcdir SRCDIR` | source directory for test `.yml` files +| `--target TARGET` | target image file +| `--dry-run`, `-n` | dry run: only print what would happen +| `--exitfirst`, `-x` | exit on first failure + +When `--srcdir` is not given, `os8-progtest` looks for YAML files in +`scripts/os8-progtest` relative to the PiDP-8/I source tree root. + +The default debug level of 0 suppresses all debug output, while 14 makes +it quite noisy. + +The `--exitfirst` option is used when we want a non zero status exit from +the run of `os8-progtest` on the very first failure, rather than the usual +behavior of a successful run being performance all tests and reporting +failures along the way. + +## The Test Definition File + +The `.yml` files defines a series of tests, each one of which consists of +a state machine. The state machine consists of a state name, the +test text string to send, and an array of possible responses and the +state to go to if the response is received. + +In the abstract, each test name begins starts at the beginning of a line, +and all the associated states are indented one tab stop. +Each state consists of a name followed by an array specification, +where the first element is the test text string to send, and the +second element is an array of 1 or more `[response, newstate]` pairs. + +Every state machine must have a “`start`” state. + +Every state machine should have at least one state that names “`success`” or +“`failure`” as termination states. + +The `-n`, `--dry-run` option should be used at development time to +confirm that the test state machine will terminate with success if all +tests come back successful. + +The easiest way to understand how to define the state machine is to +study an example: + + 'ps': + 'start': ["EXE CCR\r", [["PROGRAMME\\s+>", 'progname']]] + 'progname': ["ps.c\r", [ + [ ".*924.*COMPLETED\r\n\r\n#END BATCH\r\n\r\n.$", + 'success' + ] + ] + ] + 'fib': + 'start': ["EXE CCR\r", [["PROGRAMME\\s+>", 'progname']]] + 'progname': ["fib.c\r", [ + [ "OVERFLOW AT #18 = 2584\r\n\r\n#END BATCH\r\n\r\n.$", + 'success' + ] + ] + ] + +This file defines two tests for the `cc8` package, `ps` and `fib`, which +follow a very similar structure: + + * Both have the requisite `start` state and terminating `success` condition. + * Both run the OS/8 command `EXE CCR` which runs `DSK:CCR.BI`, + part of the CC8 package. + * Both react to the program name input prompt by linking to the `progname` state. + * Each test answers the `progname` state by sending the name of a C + program installed with CC8, after which the test was named. + * Each test looks for expected output from the test program followed by + the common `#END BATCH` after a completed `CCI.BI` run. If found, + sends the test state machine to the `success` condition. + +Because the second element of each test is an array of pairs, you can +have the test check for multiple expected possible answers, sending the +state machine to potentially different conditions depending on which one +comes back. This gives the system a simple sort of conditional logic: + + 'advent': ["ADVENT\e", [ + [ "LOCATION OF TEXT DATABASE\\s+\\(\\S+\\).*", 'database' ], + [ "WELCOME TO ADVENTURE!!", 'instructions' ] + ] + ] + +You can see the rest of the test [here][ayml], but this shows the +essential elements: two possible responses, sending the test to one of +two states, `database` or `instructions` depending on whether Adventure +has been run on the boot media used by the test before. Without this +logic, we’d have to either rebuild the test media each time we ran the +test or roll back all state changes made to it. + +Notice the use of `\e` to start `ADVENT`, terminating the OS/8 Command Decoder +input with an ASCII escape character. + +[ayml]: /file/scripts/os8-progtest/advent.yml + + +### Additional Syntax Information + +A line beginning with a `#` is ignored as a comment. + + +## Crafting New State Machines + +1. The YAML quoting conventions are carefully chosen! + + * Surround state names with single quotes. Otherwise state names + like `yes` get evaluated and turned into something else. (`yes` + becomes `True`.) + + * Surround send and reply strings with double quotes. The YAML + evaluation of quoted strings is the simplest to understand as it + gets translated into Python pexpect regular expressions. + +2. OS/8 commands end with a carriage return denoted by `\r` or escape + denoted by `\e`. + +3. For programs needing Ctrl-C to get out of some loop, use + the YAML hex code `\x03`. + +4. `pexpect` translates all TTY output you see from running the + simulator to upper case, so take anything you see and translate it + to upper case in the reply string. + +5. It is important to escape characters that normally have regex + meaning: `.` `+` `*` `$` `(` `)` and `\`. To do this in YAML, + preface each occurrence with two backslashes. So for example, to + pass in a literal question mark, replace `?` with `\\?`. + +6. To pass in regex escapes that have a backslash — for example `\s` + for whitespace — double the backslash, so `\s` becomes `\\s`. + +7. Use of regex’s end-of-string match (`$`) can often improve + reliability, because it ensures the state machine doesn’t proceed + before OS/8 or the program running under it is ready. Keep in mind + that `os8-progtest` runs in your host machine’s context, and while + the program under test is running unthrottled on the PDP-8 + simulator, it’s still likely a program from the 1960s or 1970s + expecting to run on a machine capable of only a few hundred thousand + instructions per second, being fed interactive input by a 110 bps + teletype. Some programs can get spammed if you don’t wait out the + full reply line before sending the next bit of input. + +8. Sometimes guessing the exact whitespace is difficult. The `\\s+` + construct to match on one or more whitespace characters is often + helpful. + +9. Helpful match strings: + + String | Meaning + ---------- | ----------------- + `"\n\.$"` | OS/8 Monitor prompt. Always look for this at the end. + `"\n\*$"` | OS/8 Command decoder prompt. Often the first step in running programs. + +### Problems matching against long strings of output characters. + +Python expect has been observed to misbehave on long strings of +output, for example when trying out BASIC games that print typewritter +art. The match times out and fails, and the `before` match string is +only a partial read of the whole output. + +Neither enlarging the pexpect `maxread` option for the spawned sub-process, +nor setting a sleep between tests helped. However, there is a work around: +Perform another write/expect cycle. Doing this is challenging, because +ideally you want to send input that won't mess up the output. + +Under BASIC, an attempt was made to send `XOFF` ('\0x011') but sometimes, instead +of sending `XOFF` that would be ignored, OS/8 would echo "X011". The work-around +that actually worked was to: + +1. Detect stalled output with careful crafting of additional state matches. And adding +a new state. + +2. Prevent false positive tests of stalled output, by putting the longest, +definitive match first in the list. + +3. Send a newline. + +4. Retest. + +5. If necessary loop a couple times. + +6. Make sure tests after the kick handle the additional newlines gracefully. + +Example: The playboy bunny typewriter art kept hanging at random points. +The old version: + + 'bunny': + 'start': ["R BASIC\r", [["NEW OR OLD--$", 'old']]] + 'old': ["OLD\r", [["FILE NAME--$", 'name']]] + 'name': ["BUNNY.BA\r", [["READY\r\n$", 'run']]] + 'run': ["RUN\r", [[".*BUNNY.*\r\nREADY\r\n$", 'success']]] + 'quit': ["\x03", [["\n\\.$", 'success']]] + +becomes: + + 'bunny': + 'start': ["R BASIC\r", [["NEW OR OLD--$", 'old']]] + 'old': ["OLD\r", [["FILE NAME--$", 'name']]] + 'name': ["BUNNY.BA\r", [["READY\r\n$", 'run']]] + 'run': ["RUN\r", [ + [".*BUNNY.*\r\nREADY\r\n$", 'quit'], + ["^RUN.*", 'kick'] + ] + ] + 'kick': ["\r", [ + [".*\r\nREADY\r\n", 'quit'], + [".*BUNNY.*", 'kick'] + ] + ] + 'quit': ["\x03", [["\n\\.$", 'success']]] + +A few subtle aspects: + + * The `kick` state can loop until it gets the "READY" signifying the end of the run. + * The test for "READY\r\n" in the `run` state contains the detection of end of string ('$') + but the test in the `kick` state does not, because there will be extra newlines. + * The work-around here relies on the hope that there'll be a string with the whole word + "BUNNY" in it with the partial read. + * Note that the wild card matches ('.*') are non-greedy, and match on the smallest success. + That's why the longest match for the successful run is the first test to apply. + +[pyyaml]: https://pyyaml.org/wiki/PyYAMLDocumentation + +### License + +Copyright © 2020 by Bill Cattey. Licensed under the terms of [the SIMH license][sl]. + +[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md Index: doc/os8-run.md ================================================================== --- doc/os8-run.md +++ doc/os8-run.md @@ -77,18 +77,17 @@ * Protect a master boot image that will not boot read-only by creating a scratch copy and booting the copy instead. * Recognize the use case of creating a new, blank image, but preserving any pre-existing image files of the same name. * boot OS/8 on an arbitrary attached device image. * create a duplicate of an existing file. This is the use case of building new image files from an existing baseline while preserving the baseline image file. * copy files from the running OS/8 environment into the POSIX environment -* copy files to the running OS/8 from the POSIX environment running SIMH. running SIMH. +* copy files to the running OS/8 from the POSIX environment running SIMH. * run any OS/8 command as long as it returns immediately to the OS/8 Keyboard Monitor. This includes BATCH scripts. * run `ABSLDR` and `FOTP`, cycling an arbitrary number of times through the OS/8 Command Decoder. -* run `PAL8` with either a 3 argument form that produces a listing file, -or a 2 argument form that does not. +* run `PAL8` and report any errors encountered. * run `BUILD` with arbitrarily complex configuration scripts, including the `BUILD` of a system head that inputs `OS8.BN` and `CD.BN`. * configure the `tti`, `rx`, `td`, and `dt` devices at run time to allow shifting between otherwise incompatible configurations of SIMH and OS/8 device drivers. @@ -212,11 +211,11 @@ on the net.) mount rk0 $bin/v3d.rk05 required mount rk1 $bin/os8-v3f-build.rk05 preserve - cpto $src/os8/v3f/BUILD.PA RKA1:BUILD.PA + cpto $src/os8/v3f/BUILD.PA RKA1:BUILD.PA /A boot rk0 pal8 RKB1:BUILD.BN`resume` — Resume OS/8 at Keyboard Monitor command level. `resume` -As explained above in the [Execution contexts](#contexts) section, we -can't just issue a SIMH `continue` command because we need some output -from OS/8 running within SIMH to re-synchronize Python expect to. - -After trying several different things that did not work, the least -disruptive action is to send `CTRL/C` and a newline with some keyboard -delays. The `resume` command does this. - -However, because the context switches are well-defined, the `resume` -command is completely optional in scripts. Instead `os8-run`, when it -detects the need to return to OS/8 from SIMH command level, will issue -a `resume` command to force a context switch. +The least disruptive way to resume operations under SIMH is to issue +the `continue` command. Although it took a while, we finally got this +command working reliably. There were timing and workflow issues +that had to be resolved. + +The `resume` command checks to see if OS/8 has been booted and refuses +to act if it has not. ### `restart` — Restart OS/8. `restart` -Equivalent to the SIMH command line of \"`go 7600`\". +Equivalent to the SIMH command line of \"`go 7600`\", but which confirms +we got our Monitor prompt. Before `resume` was developed, the next less disruptive way to get an OS/8 Keyboard Monitor prompt was to restart SIMH at address 07600. This is considered a soft-restart of OS/8. It is less disruptive than a `boot` command, because the `boot` command loads OS/8 into main memory from the boot device, whereas restarting at location 07600 is just a resart without a reload. -The restart does re-initilaize some state so it is more disruptive -than the `CTRL/C` resume documented above. +The `restart` command checks to see if OS/8 has been booted and refuses +to act if it has not. ### `copy` — Make a copy of a POSIX file. `copy` _source-path_ _destination-path_ @@ -620,10 +616,14 @@ | `/A` | OS/8 `PIP` ASCII format. POSIX newlines are converted to OS/8 newlines. | `/B` | OS/8 `PIP` `BIN` format. Paper tape leader/trailer may be added. | `/I` | OS/8 `PIP` image format. Bit for Bit copy. If no option is specified, `/A` is assumed. + +**IMPORTANT:** Because we are parsing both OS/8 and POSIX file specifications, +we can't just parse out the slash in the options. Options must be preceded with +whitespace. Otherwise it would be mis-parsed as part of a file spec. In the first form of the command, the OS/8 file specification is left out, and one is synthesized from the file component of the _posix-path_. This is how you get files *to* OS/8 from the outside world. For @@ -648,10 +648,14 @@ | `/A` | OS/8 `PIP` ASCII format. POSIX newlines are converted to OS/8 newlines. | `/B` | OS/8 `PIP` `BIN` format. Paper tape leader/trailer may be added. | `/I` | OS/8 `PIP` image format. Bit for Bit copy. If no option is specified, `/A` is assumed. + +**IMPORTANT:** Because we are parsing both OS/8 and POSIX file specifications, +we can't just parse out the slash in the options. Options must be preceded with +whitespace. Otherwise it would be mis-parsed as part of a file spec. Unlike `cpto` there is only one form of the command. Both the _os8-filespec_ and the _posix-path_ must be specified. The options are the same for both `cpfrom` and `cpto`. @@ -676,48 +680,37 @@ This command should be used ONLY for OS/8 commands that return immediately to command level. `BATCH` scripts do this, and they can be run from here. +The `os8` command is aware of a special enablement keyword: `transcript`. +(See the [`enable` \ `disable`](#en-dis-comm) section below.) +If `transcript` is enabled, the output from running the OS/8 +command line is printed. + +For example, if you wanted to display the contents of a DECtape image +you are constructing but no other command lines fed to the `os8` +command you would do this: + +``` +enable transcript +os8 DIR DTA0: +disable transcript +``` + +This transcript capability provides a fine grained debugging aid. + ### `pal8` — Run OS/8 `PAL8` assembler. -Run `PAL8` with either a 3 argument form that produces a listing file, -or a 2 argument form that does not. - Actually, the `PAL8` assembler can be called just fine by using the `os8` command, for example: os8 PAL8 RKB1:RL0.BN`ocomp` — Run OS/8 `OCOMP` Octal Compare and Dump Utility. + +This command was added to allow file verification. It wraps a call to the +OS/8 `OCOMP` utility with some expect parsing to recognize when two files +are identical, or when one is missing. + +A typical command line would look like this: + + ocomp TTY:`begin` / `end` — Complex conditionals and sub-command blocks. `begin` _keyword_ _argument_ @@ -1016,11 +1070,10 @@ world. ## TODOs -* Allow passing in of arguments to PAL8. * Add sanity check parse of sub-commands to confirm command. **OR** Change the begin command to treat _argument_ not as a full command, but merely a device from which to fetch the command. Maybe make _argument_ optional. ADDED doc/os8pkg.md Index: doc/os8pkg.md ================================================================== --- /dev/null +++ doc/os8pkg.md @@ -0,0 +1,194 @@ +# os8pkg: A package manager for OS/8 + +## Motivation + +The [os8-run][os8run] language/execution environment allows scripting +under OS/8 that interfaces to the SIMH simulator and to the host POSIX +environment. The scripts can build subsystems, but managing dependencies, +and integrating the subsystems into bootable media is a missing piece. + +`os8pkg` supplies the missing piece. It is integrated into the automake +and Makefile to re-run the builder scripts when necessary. It manages +the information needed to take the built package and install it onto +bootable media. + +## Commands + + * `deps` -- Emits a `.mk` Makefile include for dependencies of each of the + packages specified on the command line. + + * `include` -- Emits `pkgs.os8` that is a master include file + used by the .os8 script that wants to install all selected packages. + **All** desired packages must appear in a single run of `os8pkg include`. + + * `install` -- Parses the .pspec file. Finds the installable package. + Performs the relevant os8 COPY commands to install the package + on bootable image specified by --target. $os8mo/v3d.rk05 if no --target. + + * `uninstall` -- On a specifiec target image file, parse the pspec file + to identify output files to remove. Remove them from the bootable image + specified by --target. $os8mo/v3d.rk05 if no --target specified. + Additionally remove files listed in the cleanups section. + + * `build` -- Run the builder, whether it be the lines from the `build:` section + or the default build script. **NOTE:** Use care when building with + `build:` lines in the `.pspec` file. The assumption is that your current + working directory is the top level of the build environment. + + * `all` -- Perform `deps`, then `build` then `install` on the named packages. + + * `conflicts` -- Given a list of packages, reports on any files appearing + in more than one package. The case of the same file landing on two + different destination devices is covered by reporting the package, + the destination device, and the filename, even if only the filename matches. + + * `verify` -- Given a list of packages and a target image file, verify for + each package that the files named in `outputs:` are present in the target + image, and are the same as what is on the built package image file. + +The `auto.defs` scans `$srcdir/pspec` and runs the deps command on every +`.pspec` file found there. This sets the stage to build every known package. + +`auto.defs` also evaluates the configuration and determines what +subset of those packages are selected for install on system boot images. +It defines the Makefile variable `@OS8_PKGS_INSTALLED@` with that subset. + +`Makefile.in` uses `@OS8_PKGS_INSTALLED@` to call `os8pkg include` to +construct `.../obj/os8pkgs/pkgs.os8` which is used in boot image build +script to install all configured packages. + + +## The `.pspec` File + +The required dependency and integration information is stored in a file named +for the package being managed with a '.spec` extension. This file enables creation +of the makefile dependencies and the installer `os8-run` script. + +### Searching for .pspec files + +By default, all `.pspec` files live in a source top-level `pspec/` +directory. However, `os8pkg` can manipulate target bootable images in +arbitrary locations to install and uninstall packages by name using +`.pspec` files in arbitrary locations. `os8pkg` searches for `.pspec` +files in the following order: + +1. The path found by treating naming the package with a POSIX path. For example: + + os8pkg install ~/dev/mypackage.pkg + +2. A path provided with the `--destdir` option. (Which also specifies where to +look the bootable image. For example: + + bin/os8pkg -d 10 --destdir /opt/pidp8i/share/media/os8 install mypackage + +3. The path found by `$src/pspec/` (the build system default expectation.) +for example: + + bin/os8pkg install mypackage + +### Syntax + +Blank lines are allowed. They're ignored. + +A line beginning with \"#\" is ignored as a comment. + +Leading whitespace on a line is ignored to allow human-readability-improving +indentation. + +### Sections + +Different sections of the `.pspec` file recored different required infomation. + +The parser is very simple minded. Every section is parsed into the list of +lines found associated with that keyword. + +A section begins with a line consisting solely of the keyword. Every line seen +until a new keyword line is appended to the associated line list. + +If the parser sees a line before ever having seen a keyword line, it complains +that it doesn't know what to do. + +There can be multiple occurrances of a section in the `.pspec` file. The parser +happily just adds more lines to that sections list of lines. + + * `format:` The format of the package created. It needs to be a valid OS/8 device + image file. Currently tu56 and rk05 are supported. It is expected that addtional + formats such as rl02 and rx02 will be supported in the future. If multiple lines + or instances of the `format:` section appear, the last one wins. + + * `inputs:` Files that are needed to build the subsystem. This is the list of + dependencies passed to make. POSIX wild carding is allowed. + + * `outputs:` A specification of what outputs are integrated into the + target media from the package file. This looks like an OS/8 command + decoder file copy specification. However, no wild-carding is allowed + because outputs is also used for uninstall. Wild cards on uninstall would + wreck havoc. + + * `cleanups:` A list of files that should also be cleaned up when uninstalling + a package. + + * `build:` A default build runs an os8-run script found in `.../scripts/misc` with a + name composed from the package name, and the package format with a `.os8` extension. + It includes dependencies on `.../bin/os8pkg`, the files in `inputs:`, the os8-run + script, and on the OS8_TOOLTIME run image. + + For example: the `e8` package with the tu56 format would have a default build that + would depend upon, and run `.../scripts/misc/e8-tu56.os8`. + + When the build: section is filled in, this default is not used. Instead a Makefile + rule is created that passes in the lines found in the build: section. + +### Crafting `outputs:` + +The challenge is to create package files that are usable in the +creation of a wide variety of bootable media, and to have flexibility +in the package format. + +To make sense of the challenge consider the questions: + + * How do we create a simple tu56 format image that can be used in + creation of tu56 bootable images? + + * How do we create a rich, large sized rk05 image that can be use in + creation of both tu56 and rk05 bootable images? + +We want to be able to have a system device mounted and the package +image mounted at the same time. For this reason we synthesize the +os8-run mount and copy commands presuming there will be a system +device mounted on either rk0 or dt0 under SIMH, and that the package +image gets mounted on either rk1 or dt1. + +So each `outputs:` line consists of a constrained destination device, a +less than sign (pronounced "comes from" in OS/8 parlance), and +constrained input specification that is aware of what `format:` we are +using, and constrains the device specification. + +os8pkg Flags an error if the line in `outputs:` fails to meet the constraints. + +### Examples + +#### verify + +Without the verbose option set, the output names the package and the +target image. If successful, there is no other output. + + $ bin/os8pkg verify e8 + Verifying package e8 on /Users/wdc/src/pidp8i/trunk/bin/v3d.rk05 + +With the verbose option set, the individual files are reported on: + + $ bin/os8pkg -v verify e8 + Verifying package e8 on /Users/wdc/src/pidp8i/trunk/bin/v3d.rk05 + Successful verify of SYS:E8.SV + Successful verify of DSK:E8CMDS.TX + Successful verify of DSK:E8SRCH.TX + + +[os8run]: https://tangentsoft.com/pidp8i/doc/trunk/os8-run.md + +### License + +Copyright © 2020 by Bill Cattey. Licensed under the terms of [the SIMH license][sl]. + +[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md ADDED doc/testing.md Index: doc/testing.md ================================================================== --- /dev/null +++ doc/testing.md @@ -0,0 +1,54 @@ +# How the PiDP-8/i Software Is Tested + +How do we gain confidence that what we will release is working with +minimal regressions? + +The buld process operates in layers starting with SIMH and the OS/8 +distribution DECtape image files as the lowest level. The layering goes like this: + +1. Boot the OS/8 V3D Distribution DECtape image, + `.../media/os8/v3d/al-4711c-ba-os8-v3d-1.1978.tu56`. This creates + `v3d-dist.rk05` which is booted to continue the build process. + +2. Boot `v3d-dist.rk05` to apply patches to create a useful image with + the latest bug fixes, `v3d-patched.rk05`. Strictly speaking, this is + the optimal, but minimum platform for continuing to build, and to + operate utilities. + +3. Boot `v3d-patched.rk05` to build `e8`, `cc8`, and anything else that + needs OS/8. This is the platform that should be used to build V3F + from source, and the OS/8 Combined Kit (OCK) from source. Creating + the images used to assemble V3F and OCK from source requires + `os8-cp`. + +4. Install packages built with OS/8 onto runable packs. This is where + `v3d-patched.rk05` becomes `v3d.rk05`. At the present moment, the + component RK05 images that will be gathered into `ock-dist.rk05` + have been built using `v3d-patched.rk05`. They could have been built + using `v3d.rk05`. The choice is made in the build scripts. The + `ock-dist.rk05` image is constructed similarly to layer 1. The + `al-4711c-ba-os8-v3d-1.1978.tu56` image is booted, and used to + create an RK05 image, which is then populated with the other + components built in layer 3. At this point we have bootable TU56 + images for V3D and V3F built from `v3d.rk05`. We also have + `ock-dist.rk05` built from source. + +5. Boot `ock-dist.rk05` and apply patches to create `ock-patched.rk05`. + +6. Install packages such as `cc8` and `e8` on `ock-patched.rk05` to + create `ock.rk05`. This completes all building. + +Layer 1 shows that SIMH basically works. Each subsequent layer is proof +that the basic operation of the previous layer works. So a successful +build of everything has provided a fair bit of coverage. + +The next challenge is functional tests for leaf node packages like +`cc8` and `advent`. The `os8-progtest` tool tests these. + +The leaf node package management files live in the `pspec` subdirectory +of the source tree. Tests for the packages live in `scripts/os8-progtest`. +`auto.def` knows how to discover new packages and new tests and +incorporate them into the `Makefile`. + +`Makefile` contains a `make test` target that runs `os8-progtest` +on all discovered tests. Index: doc/uwfocal-manual-supp.md ================================================================== --- doc/uwfocal-manual-supp.md +++ doc/uwfocal-manual-supp.md @@ -53,21 +53,23 @@ #### The Naïve Way If you are SSHing into your PiDP-8/I, you might think to write your FOCAL programs in your favorite text editor on your client PC then copy -and paste that text into U/W FOCAL over SSH. Currently, that won't work. -(2017.10.05) We believe it is because of the way U/W FOCAL handles -terminal I/O and interrupts. If you try, the input ends up trashed in -FOCAL. +and paste that text into U/W FOCAL over SSH. That won't work. +We believe it is because of the way U/W FOCAL handles +terminal I/O and interrupts, being written with the assumption that +such input is coming from a 110 bps Teletype or at most a 300 bps +“high-speed” paper tape reader. If you try this over a modern gigabit +class SSH connection, the input ends up trashed in FOCAL. #### The Way That Works "But I really really want to write my FOCAL programs in [my favorite text editor][mfte] and paste them into my PiDP-8/I," I hear you say. -Dispair not. There is a path. Follow. +Dispair not. There is a path. Follow. The problem affecting U/W FOCAL which prevents it from handling input at modern paste-through-SSH speeds doesn't affect OS/8 itself, so we'll use it as an intermediary: @@ -879,17 +881,17 @@ the DECUS submission, though the DECUS submission is perhaps a better reference text. [df8]: http://www.ibiblio.org/pub/academic/computer-science/history/pdp-8/FOCL69%20Files/DEC-08-AJAD-D.pdf [f71]: http://svn.so-much-stuff.com/svn/trunk/pdp8/src/decus/focal8-177/ -[hack]: https://tangentsoft.com/pidp8i/doc/trunk/HACKERS.md#patches +[hack]: https://tangentsoft.com/pidp8i/doc/trunk/CONTRIBUTING.md#patches [uwfd]: http://www.pdp8.net/pdp8cgi/query_docs/view.pl?id=191 [uwfm]: https://tangentsoft.com/pidp8i/doc/trunk/doc/uwfocal-manual.md [uwfr]: https://tangentsoft.com/pidp8i/doc/trunk/doc/uwfocal-refcards.md ### License -Copyright © 2017 by Warren Young and Bill Cattey. Licensed under the +Copyright © 2017, 2021 by Warren Young and Bill Cattey. Licensed under the terms of [the SIMH license][sl]. [sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md Index: doc/uwfocal-manual.md ================================================================== --- doc/uwfocal-manual.md +++ doc/uwfocal-manual.md @@ -2716,11 +2716,11 @@ ### Decimal Values for All Character Codes | Code | Character | Name | Code | Char | Code | Char | Code | Char | | ---- | --------- | ---- | ---- | ------- | ---- | ---- | ---- | ----------- | -| 128 | `Ctrl/@` | NULL | 160 | `SPACE` | 192 | `@` | 224 | \` | +| 128 | `Ctrl/@` | NULL | 160 | `SPACE` | 192 | `@` | 224 | ` | | 129 | `Ctrl/A` | SOH | 161 | `!` | 193 | `A` | 225 | `a` | | 130 | `Ctrl/B` | STX | 162 | `"` | 194 | `B` | 226 | `b` | | 131 | `Ctrl/C` | ETX | 163 | `#` | 195 | `C` | 227 | `c` | | 132 | `Ctrl/D` | EOT | 164 | `$` | 196 | `D` | 228 | `d` | | 133 | `Ctrl/E` | ENQ | 165 | `%` | 197 | `E` | 229 | `e` | @@ -3037,11 +3037,11 @@ output. I've also added `!` operators where necessary to avoid questions about why you get `*` prompts at the end of program ouput. — [Warren Young][wy], September & October 2017, Aztec, NM, USA -[hack]: https://tangentsoft.com/pidp8i/doc/trunk/HACKERS.md +[hack]: https://tangentsoft.com/pidp8i/doc/trunk/CONTRIBUTING.md [ocr]: https://archive.org/stream/bitsavers_decpdp8focct78_4144912/UW_FOCAL_Manual_V4E_Oct78_djvu.txt [scan]: https://archive.org/details/bitsavers_decpdp8focct78_4144912 [tkt]: https://tangentsoft.com/pidp8i/tktnew [videf]: https://en.wiktionary.org/wiki/vide_infra#Latin) [wy]: https://tangentsoft.com/ ADDED etc/pidp8i.rc Index: etc/pidp8i.rc ================================================================== --- /dev/null +++ etc/pidp8i.rc @@ -0,0 +1,5 @@ +# PiDP-8/I runtime configuration file. See it README.md file or +# https://tangentsoft.com/pidp8i/doc/trunk/README.md#runtime + +# Alternatives: none, tmux +SCREEN_MANAGER=screen Index: etc/udev.rules ================================================================== --- etc/udev.rules +++ etc/udev.rules @@ -1,2 +1,18 @@ +### USB hard drives / thumb drives + KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount@%k.service" KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/systemctl stop usb-mount@%k.service" + +### USB floppy drives + +# Detect a USB add with floppy disk already inserted, or a floppy disk +# insertion on an existing USB drive +KERNEL=="sd[a-z]", SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="08", ATTRS{bInterfaceSubClass}=="04", \ + ACTION=="add|change", ENV{ID_FS_USAGE}=="filesystem" RUN+="/bin/systemctl start usb-mount@%k.service" +# Detect a floppy disk ejection +KERNEL=="sd[a-z]", SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="08", ATTRS{bInterfaceSubClass}=="04", \ + ACTION=="change", ENV{ID_FS_USAGE}=="", RUN+="/bin/systemctl stop usb-mount@%k.service" +# Detect a USB removal (floppy disk may or may not be inserted, but the +# service is idempotent) +KERNEL=="sd[a-z]", SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="08", ATTRS{bInterfaceSubClass}=="04", \ + ACTION=="remove", RUN+="/bin/systemctl stop usb-mount@%k.service" ADDED examples/host/class-os8script-demo.py Index: examples/host/class-os8script-demo.py ================================================================== --- /dev/null +++ examples/host/class-os8script-demo.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 + +# Demo program for using class-os8script. +# +# Starts SIMH, boots the default v3d.rk05 system image. +# Starts OS/8 BASIC +# Engages in dialog to tell BASIC this will be a new program +# called MYPROG.BA +# A two line program is fed in: +# 10 PRINT 1 + 2 +# 20 END +# and run. +# The result, 3 is detected. +# ^C is sent to quit out of BASIC. +# Program exits cleanly. + +# Imports +import os +import sys +sys.path.insert (0, os.path.dirname (__file__) + '/../lib') +sys.path.insert (0, os.getcwd () + '/lib') + +from pidp8i import * +from simh import * +from os8script import * + +# Our replies array with the regular expressions we +# expect to see. +# Subtle point: We contrive the test result of "3" +# with an awareness that line numbers 10, and 20 would +# trigger on a test for 0, 1, or 2. + +_basic_replies = [ + ["READY", "\r\nREADY\r\n", False], + ["NEW OR OLD", "NEW OR OLD--$", False], + ["FILENAME", "FILE NAME--$", False], + ["BAD FILE", "BAD FILE$", False], + ["ME", "ME", False], + ["3 READY", "\s+3\s+READY\r\n", False], + ] + +import argparse + +def main (): + # Use argparse to create the args array and parse the command line. + parser = argparse.ArgumentParser( + description = """ + Demo: BASIC program dialog under PDP-8 OS/8.""", + usage = "%(prog)s [options]") + parser.add_argument ("--target", help="target image file", default="v3d.rk05") + parser.add_argument("-v", "--verbose", help="increase output verbosity", + action="store_true") + args = parser.parse_args() + + # Path to our system image using library utilities. + image_path = os.path.join(dirs.os8mo, args.target) + + # This should always succeed, but it's good form to catch + # any failure to start SIMH. + try: + s = simh (dirs.build, True) + except (RuntimeError) as e: + print("Could not start simulator: " + e.message + '!') + sys.exit (1) + + # If the verbose argument was set, send log output from SIMH + # to the standard output. + if args.verbose: s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) + + # Create our os8script object, that contains our SIMH object. + # Passing in the verbose flag from args, empty enable and disable arrays, + # and set debug false. + os8 = os8script (s, [], [], verbose=args.verbose, debug=False) + + # Intern our replies array called "basic" in the replies nand replies_rex + # arrays within the os8 object. + os8.intern_replies ("basic", _basic_replies, True) + + # Mount our system image + # required means we quit if the image isn't found. + # scratch is the concurrency protection, we make a copy of v3d.rk05 + # and run inside the copy. + os8.mount_command ("rk0 " + image_path + " required scratch", None) + + # Boot it. + os8.boot_command ("rk0", None) + + # Perform once-only boot success check and run BASIC. + # Use our replies_rex array, "basic" + # Quit cleanly with status 1 if running BASIC fails. + reply = os8.check_and_run ("demo", "R BASIC", "", os8.replies_rex["basic"]) + if reply == -1: + print ("OS/8 isn't running! Fatal error!") + os8.exit_command("1", "") + + # To make code cleaner, we have a quit_now flag. + quit_now = False + + # State machine to submit, run and revise a BASIC program. + # We keep looping until we see the OS/8 monitor prompt. + # We expect the initial run of basic is successful and we don't + # get the monitor prompt, but we set our test value initially here. + mon = os8.simh.test_result(reply, "Monitor Prompt", os8.replies["basic"], "") + while not mon: + # A verbose debugging aid: Show what we got. + if args.verbose: print ("Got reply: " + os8.replies["basic"][reply][0]) + + if os8.simh.test_result(reply, "NEW OR OLD", os8.replies["basic"], ""): + send_str = "NEW" + elif os8.simh.test_result(reply, "FILENAME", os8.replies["basic"], ""): + send_str = "MYPROG.BA" + elif os8.simh.test_result(reply, "READY", os8.replies["basic"], ""): + send_str = "10 PRINT 1 + 2\r20 END\rRUN\r" + elif os8.simh.test_result(reply, "3 READY", os8.replies["basic"], ""): + print ("Got Expected Result!") + quit_now = True + # Having a default that says oops and gets out is important + # to keep evolving replies arrays from turning into infinite loops. + else: + print ("Unexpected result:" + os8.replies["basic"][reply][0]) + quit_now = True + # We carefully send ^C and look for a monitor prompt + # To put the state machine in a known good state. + # By taking that care, you can compose multiple state machines reliably. + if quit_now: + if args.verbose: print ("Sending ^C") + os8.simh.os8_send_ctrl ('c') + reply = os8.simh._child.expect(os8.replies_rex["basic"]) + else: + reply = os8.simh.os8_cmd (send_str, os8.replies_rex["basic"]) + # Eventually we get our monitor prompt and exit the loop. + mon = os8.simh.test_result(reply, "Monitor Prompt", os8.replies["basic"], "") + + # Clean up temporaries and exit with success status 0. + os8.exit_command("0", "") + +if __name__ == "__main__": main() DELETED hardware/pdp8i/PDP8-cache.lib Index: hardware/pdp8i/PDP8-cache.lib ================================================================== --- hardware/pdp8i/PDP8-cache.lib +++ /dev/null @@ -1,309 +0,0 @@ -EESchema-LIBRARY Version 2.3 Date: 11/05/2015 22:48:50 -#encoding utf-8 -# -# +3.3V -# -DEF +3.3V #PWR 0 0 Y Y 1 F P -F0 "#PWR" 0 -40 30 H I C CNN -F1 "+3.3V" 0 110 30 H V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -ALIAS +3,3V -DRAW -X +3.3V 1 0 0 0 U 30 30 0 0 W N -C 0 60 20 0 1 0 N -P 3 0 1 0 0 0 0 40 0 40 N -ENDDRAW -ENDDEF -# -# +5V -# -DEF +5V #PWR 0 40 Y Y 1 F P -F0 "#PWR" 0 90 20 H I C CNN -F1 "+5V" 0 90 30 H V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -X +5V 1 0 0 0 U 20 20 0 0 W N -C 0 50 20 0 1 0 N -P 4 0 1 0 0 0 0 30 0 30 0 30 N -ENDDRAW -ENDDEF -# -# CONN_1 -# -DEF ~CONN_1 P 0 30 N N 1 F N -F0 "P" 80 0 40 H V L CNN -F1 "CONN_1" 0 55 30 H I C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -C 0 0 31 0 1 0 N -P 2 0 1 0 -30 0 -50 0 N -X 1 1 -150 0 100 R 60 60 1 1 P -ENDDRAW -ENDDEF -# -# CONN_20X2 -# -DEF CONN_20X2 P 0 10 Y N 1 F N -F0 "P" 0 1050 60 H V C CNN -F1 "CONN_20X2" 0 0 50 V V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -100 1000 100 -1000 0 1 0 N -X P1 1 -400 950 300 R 60 30 1 1 P I -X P2 2 400 950 300 L 60 30 1 1 P I -X P3 3 -400 850 300 R 60 30 1 1 P I -X P4 4 400 850 300 L 60 30 1 1 P I -X P5 5 -400 750 300 R 60 30 1 1 P I -X P6 6 400 750 300 L 60 30 1 1 P I -X P7 7 -400 650 300 R 60 30 1 1 P I -X P8 8 400 650 300 L 60 30 1 1 P I -X P9 9 -400 550 300 R 60 30 1 1 P I -X P10 10 400 550 300 L 60 30 1 1 P I -X P20 20 400 50 300 L 60 30 1 1 P I -X P30 30 400 -450 300 L 60 30 1 1 P I -X P40 40 400 -950 300 L 60 30 1 1 P I -X P11 11 -400 450 300 R 60 30 1 1 P I -X P21 21 -400 -50 300 R 60 30 1 1 P I -X P31 31 -400 -550 300 R 60 30 1 1 P I -X P12 12 400 450 300 L 60 30 1 1 P I -X P22 22 400 -50 300 L 60 30 1 1 P I -X P32 32 400 -550 300 L 60 30 1 1 P I -X P13 13 -400 350 300 R 60 30 1 1 P I -X P23 23 -400 -150 300 R 60 30 1 1 P I -X P33 33 -400 -650 300 R 60 30 1 1 P I -X P14 14 400 350 300 L 60 30 1 1 P I -X P24 24 400 -150 300 L 60 30 1 1 P I -X P34 34 400 -650 300 L 60 30 1 1 P I -X P15 15 -400 250 300 R 60 30 1 1 P I -X ~ 25 -400 -250 300 R 60 30 1 1 P I -X P35 35 -400 -750 300 R 60 30 1 1 P I -X P16 16 400 250 300 L 60 30 1 1 P I -X P26 26 400 -250 300 L 60 30 1 1 P I -X P36 36 400 -750 300 L 60 30 1 1 P I -X P17 17 -400 150 300 R 60 30 1 1 P I -X P27 27 -400 -350 300 R 60 30 1 1 P I -X P37 37 -400 -850 300 R 60 30 1 1 P I -X P18 18 400 150 300 L 60 30 1 1 P I -X P28 28 400 -350 300 L 60 30 1 1 P I -X P38 38 400 -850 300 L 60 30 1 1 P I -X P19 19 -400 50 300 R 60 30 1 1 P I -X P29 29 -400 -450 300 R 60 30 1 1 P I -X P39 39 -400 -950 300 R 60 30 1 1 P I -ENDDRAW -ENDDEF -# -# CONN_3 -# -DEF CONN_3 K 0 40 Y N 1 F N -F0 "K" -50 0 50 V V C CNN -F1 "CONN_3" 50 0 40 V V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -100 150 100 -150 0 1 0 N -X P1 1 -350 100 250 R 60 60 1 1 P I -X PM 2 -350 0 250 R 60 60 1 1 P I -X P3 3 -350 -100 250 R 60 60 1 1 P I -ENDDRAW -ENDDEF -# -# CONN_4 -# -DEF CONN_4 P 0 40 Y N 1 F N -F0 "P" -50 0 50 V V C CNN -F1 "CONN_4" 50 0 50 V V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -100 200 100 -200 0 1 0 N -X P1 1 -350 150 250 R 50 50 1 1 P I -X P2 2 -350 50 250 R 50 50 1 1 P I -X P3 3 -350 -50 250 R 50 50 1 1 P I -X P4 4 -350 -150 250 R 50 50 1 1 P I -ENDDRAW -ENDDEF -# -# DIODE -# -DEF DIODE D 0 40 N N 1 F N -F0 "D" 0 100 40 H V C CNN -F1 "DIODE" 0 -100 40 H V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -$FPLIST - D? - S* -$ENDFPLIST -DRAW -P 2 0 1 6 50 50 50 -50 N -P 3 0 1 0 -50 50 50 0 -50 -50 F -X A 1 -200 0 150 R 40 40 1 1 P -X K 2 200 0 150 L 40 40 1 1 P -ENDDRAW -ENDDEF -# -# GND -# -DEF ~GND #PWR 0 0 Y Y 1 F P -F0 "#PWR" 0 0 30 H I C CNN -F1 "GND" 0 -70 30 H I C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N -X GND 1 0 0 0 U 30 30 1 1 W N -ENDDRAW -ENDDEF -# -# LED -# -DEF LED D 0 40 Y N 1 F N -F0 "D" 0 100 50 H V C CNN -F1 "LED" 0 -100 50 H V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -$FPLIST - LED-3MM - LED-5MM - LED-10MM - LED-0603 - LED-0805 - LED-1206 - LEDV -$ENDFPLIST -DRAW -P 2 0 1 0 50 50 50 -50 N -P 3 0 1 0 -50 50 50 0 -50 -50 F -P 3 0 1 0 65 -40 110 -80 105 -55 N -P 3 0 1 0 80 -25 125 -65 120 -40 N -X A 1 -200 0 150 R 40 40 1 1 P -X K 2 200 0 150 L 40 40 1 1 P -ENDDRAW -ENDDEF -# -# R -# -DEF R R 0 0 N Y 1 F N -F0 "R" 80 0 40 V V C CNN -F1 "R" 7 1 40 V V C CNN -F2 "~" -70 0 30 V V C CNN -F3 "~" 0 0 30 H V C CNN -$FPLIST - R? - SM0603 - SM0805 - R?-* - SM1206 -$ENDFPLIST -DRAW -S -40 150 40 -150 0 1 12 N -X ~ 1 0 250 100 D 60 60 1 1 P -X ~ 2 0 -250 100 U 60 60 1 1 P -ENDDRAW -ENDDEF -# -# RASPI_MODEL_B_PLUS_GPIO -# -DEF RASPI_MODEL_B_PLUS_GPIO P 0 10 Y Y 1 F N -F0 "P" 0 1050 60 H V C CNN -F1 "RASPI_MODEL_B_PLUS_GPIO" 0 0 20 V V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -100 1000 100 -1000 0 1 0 N -X 3.3v 1 -400 950 300 R 60 30 1 1 w I -X 5v 2 400 950 300 L 60 30 1 1 w I -X g2 3 -400 850 300 R 60 30 1 1 P I -X 5v 4 400 850 300 L 60 30 1 1 P I -X g3 5 -400 750 300 R 60 30 1 1 P I -X GND 6 400 750 300 L 60 30 1 1 w I -X g4 7 -400 650 300 R 60 30 1 1 P I -X g14 8 400 650 300 L 60 30 1 1 P I -X GND 9 -400 550 300 R 60 30 1 1 P I -X g15 10 400 550 300 L 60 30 1 1 P I -X GND 20 400 50 300 L 60 30 1 1 P I -X GND 30 400 -450 300 L 60 30 1 1 P I -X g21 40 400 -950 300 L 60 30 1 1 P I -X g17 11 -400 450 300 R 60 30 1 1 P I -X g9 21 -400 -50 300 R 60 30 1 1 P I -X g6 31 -400 -550 300 R 60 30 1 1 P I -X g18 12 400 450 300 L 60 30 1 1 P I -X g25 22 400 -50 300 L 60 30 1 1 P I -X g12 32 400 -550 300 L 60 30 1 1 P I -X g27 13 -400 350 300 R 60 30 1 1 P I -X g11 23 -400 -150 300 R 60 30 1 1 P I -X g13 33 -400 -650 300 R 60 30 1 1 P I -X GND 14 400 350 300 L 60 30 1 1 P I -X g8 24 400 -150 300 L 60 30 1 1 P I -X GND 34 400 -650 300 L 60 30 1 1 P I -X g22 15 -400 250 300 R 60 30 1 1 P I -X GND 25 -400 -250 300 R 60 30 1 1 P I -X g19 35 -400 -750 300 R 60 30 1 1 P I -X g23 16 400 250 300 L 60 30 1 1 P I -X g7 26 400 -250 300 L 60 30 1 1 P I -X g16 36 400 -750 300 L 60 30 1 1 P I -X 3.3v 17 -400 150 300 R 60 30 1 1 P I -X n/c 27 -400 -350 300 R 60 30 1 1 P I -X g26 37 -400 -850 300 R 60 30 1 1 P I -X g24 18 400 150 300 L 60 30 1 1 P I -X n/c 28 400 -350 300 L 60 30 1 1 P I -X g20 38 400 -850 300 L 60 30 1 1 P I -X g10 19 -400 50 300 R 60 30 1 1 P I -X g5 29 -400 -450 300 R 60 30 1 1 P I -X GND 39 -400 -950 300 R 60 30 1 1 P I -ENDDRAW -ENDDEF -# -# SWITCH_INV -# -DEF SWITCH_INV SW 0 0 N Y 1 F N -F0 "SW" -200 150 50 H V C CNN -F1 "SWITCH_INV" -150 -150 50 H V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -C -150 0 50 0 0 0 N -C 150 -100 50 0 0 0 N -C 150 100 50 0 1 0 N -P 2 0 1 0 -100 0 150 50 N -X 1 1 500 100 300 L 60 60 1 1 P -X 2 2 -500 0 300 R 60 60 1 1 P -X 3 3 500 -100 300 L 60 60 1 1 P -ENDDRAW -ENDDEF -# -# UDN2981A -# -DEF UDN2981A P 0 40 Y Y 1 F N -F0 "P" 0 550 30 H V C CNN -F1 "UDN2981A" 0 -550 30 H V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -150 500 150 -500 0 1 0 N -X IN1 1 -350 400 200 R 40 20 1 1 I I -X IN2 2 -350 300 200 R 40 20 1 1 I I -X IN3 3 -350 200 200 R 40 20 1 1 I I -X IN4 4 -350 100 200 R 40 20 1 1 I I -X IN5 5 -350 0 200 R 40 20 1 1 I I -X IN6 6 -350 -100 200 R 40 20 1 1 I I -X IN7 7 -350 -200 200 R 40 20 1 1 I I -X IN8 8 -350 -300 200 R 40 20 1 1 I I -X Vs 9 -350 -400 200 R 40 20 1 1 P I -X GND 10 350 -400 200 L 40 20 1 1 P I -X OUT8 11 350 -300 200 L 40 20 1 1 O I -X OUT7 12 350 -200 200 L 40 20 1 1 O I -X OUT6 13 350 -100 200 L 40 20 1 1 O I -X OUT5 14 350 0 200 L 40 20 1 1 O I -X OUT4 15 350 100 200 L 40 20 1 1 O I -X OUT3 16 350 200 200 L 40 20 1 1 O I -X OUT2 17 350 300 200 L 40 20 1 1 O I -X OUT1 18 350 400 200 L 40 20 1 1 O I -ENDDRAW -ENDDEF -# -#End Library DELETED hardware/pdp8i/PDP8.cmp Index: hardware/pdp8i/PDP8.cmp ================================================================== --- hardware/pdp8i/PDP8.cmp +++ /dev/null @@ -1,1221 +0,0 @@ -Cmp-Mod V01 Created by CvPcb (2013-07-07 BZR 4022)-stable date = 10/05/2015 13:43:50 - -BeginCmp -TimeStamp = /54904DF0; -Reference = D1; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /5490504C; -Reference = D2; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905056; -Reference = D3; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /5490505E; -Reference = D4; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905068; -Reference = D5; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /5490506E; -Reference = D6; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549055F9; -Reference = D7; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549055FF; -Reference = D8; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905605; -Reference = D9; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /5490560B; -Reference = D10; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905611; -Reference = D11; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905640; -Reference = D12; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905646; -Reference = D13; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /5490564C; -Reference = D14; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905652; -Reference = D15; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905658; -Reference = D16; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /5490565E; -Reference = D17; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /54905664; -Reference = D18; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070C3; -Reference = D19; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070C9; -Reference = D20; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070CF; -Reference = D21; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070D5; -Reference = D22; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070DB; -Reference = D23; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070E1; -Reference = D24; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070E7; -Reference = D25; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /549070ED; -Reference = D26; -ValeurCmp = 1N4148; -IdModule = D2; -EndCmp - -BeginCmp -TimeStamp = /548EF5CC; -Reference = DAC1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5E5; -Reference = DAC2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5EB; -Reference = DAC3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5F1; -Reference = DAC4; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5F7; -Reference = DAC5; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5FD; -Reference = DAC6; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF603; -Reference = DAC7; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF609; -Reference = DAC8; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF60F; -Reference = DAC9; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF615; -Reference = DAC10; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF61B; -Reference = DAC11; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF621; -Reference = DAC12; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF728; -Reference = DAND1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF7E9; -Reference = DBREAK1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF7E3; -Reference = DCURAD1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF741; -Reference = DDCA1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF7D7; -Reference = DDEFER1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF6DA; -Reference = DDF1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF6F3; -Reference = DDF2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF6F9; -Reference = DDF3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF7D1; -Reference = DEXEC1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF7CB; -Reference = DFETCH1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF701; -Reference = DIF1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF71A; -Reference = DIF2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF720; -Reference = DIF3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF837; -Reference = DION1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF783; -Reference = DIOT1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF73B; -Reference = DISZ1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF77D; -Reference = DJMP1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF777; -Reference = DJMS1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF686; -Reference = DLINK1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF463; -Reference = DMA1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF47C; -Reference = DMA2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF482; -Reference = DMA3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF488; -Reference = DMA4; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF48E; -Reference = DMA5; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF494; -Reference = DMA6; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF49A; -Reference = DMA7; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF4A0; -Reference = DMA8; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF4A6; -Reference = DMA9; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF4AC; -Reference = DMA10; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF4B2; -Reference = DMA11; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF4B8; -Reference = DMA12; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF56F; -Reference = DMB1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF588; -Reference = DMB2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF58E; -Reference = DMB3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF594; -Reference = DMB4; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF59A; -Reference = DMB5; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5A0; -Reference = DMB6; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5A6; -Reference = DMB7; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5AC; -Reference = DMB8; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5B2; -Reference = DMB9; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5B8; -Reference = DMB10; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5BE; -Reference = DMB11; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF5C4; -Reference = DMB12; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF629; -Reference = DMQ1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF642; -Reference = DMQ2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF648; -Reference = DMQ3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF64E; -Reference = DMQ4; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF654; -Reference = DMQ5; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF65A; -Reference = DMQ6; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF660; -Reference = DMQ7; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF666; -Reference = DMQ8; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF66C; -Reference = DMQ9; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF672; -Reference = DMQ10; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF678; -Reference = DMQ11; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF67E; -Reference = DMQ12; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF789; -Reference = DOPR1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF83D; -Reference = DPAUSE1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /554E5897; -Reference = DPAUSE2; -ValeurCmp = LED; -IdModule = LED-3-StrEight; -EndCmp - -BeginCmp -TimeStamp = /548EF34A; -Reference = DPC1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF399; -Reference = DPC2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3AC; -Reference = DPC3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3B2; -Reference = DPC4; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3B8; -Reference = DPC5; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3BE; -Reference = DPC6; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3C4; -Reference = DPC7; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3CA; -Reference = DPC8; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3D0; -Reference = DPC9; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3D6; -Reference = DPC10; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3DC; -Reference = DPC11; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF3E2; -Reference = DPC12; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF843; -Reference = DRUN1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /554E589D; -Reference = DRUN2; -ValeurCmp = LED; -IdModule = LED-3-StrEight; -EndCmp - -BeginCmp -TimeStamp = /548EF6A1; -Reference = DSC1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF6BA; -Reference = DSC2; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF6C0; -Reference = DSC3; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF6C6; -Reference = DSC4; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF6CC; -Reference = DSC5; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF735; -Reference = DTAD1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /548EF7DD; -Reference = DWRDCT1; -ValeurCmp = LED; -IdModule = LED-3-PDP; -EndCmp - -BeginCmp -TimeStamp = /54BD85A3; -Reference = DZ1; -ValeurCmp = ZENER; -IdModule = D3; -EndCmp - -BeginCmp -TimeStamp = /554F46DF; -Reference = J_COL1; -ValeurCmp = CONN_3; -IdModule = PIN_ARRAY_3X1; -EndCmp - -BeginCmp -TimeStamp = /554F46EE; -Reference = J_COL2; -ValeurCmp = CONN_3; -IdModule = PIN_ARRAY_3X1; -EndCmp - -BeginCmp -TimeStamp = /54B1CC4A; -Reference = M1; -ValeurCmp = M; -IdModule = 1pin; -EndCmp - -BeginCmp -TimeStamp = /54B1CC76; -Reference = M2; -ValeurCmp = M; -IdModule = 1pin; -EndCmp - -BeginCmp -TimeStamp = /54B1CC7C; -Reference = M3; -ValeurCmp = M; -IdModule = 1pin; -EndCmp - -BeginCmp -TimeStamp = /54B1CC82; -Reference = M4; -ValeurCmp = M; -IdModule = 1pin; -EndCmp - -BeginCmp -TimeStamp = /54BD36C6; -Reference = M5; -ValeurCmp = M; -IdModule = 1pin; -EndCmp - -BeginCmp -TimeStamp = /54BD36CC; -Reference = M6; -ValeurCmp = M; -IdModule = 1pin; -EndCmp - -BeginCmp -TimeStamp = /54BD36D2; -Reference = M7; -ValeurCmp = M; -IdModule = 1pin; -EndCmp - -BeginCmp -TimeStamp = /548F13F7; -Reference = P1; -ValeurCmp = RASPI_MODEL_B_PLUS_GPIO; -IdModule = RASPI_BPLUS_MIRRORED; -EndCmp - -BeginCmp -TimeStamp = /54B17386; -Reference = P2; -ValeurCmp = UDN2981A; -IdModule = DIP-18__300; -EndCmp - -BeginCmp -TimeStamp = /554E0D39; -Reference = P3; -ValeurCmp = EXPANSION_20X2; -IdModule = PIN_ARRAY_20X2; -EndCmp - -BeginCmp -TimeStamp = /554E5206; -Reference = P5; -ValeurCmp = SERIAL 5V TTL; -IdModule = PIN_ARRAY_4x1; -EndCmp - -BeginCmp -TimeStamp = /5490833D; -Reference = R1; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /5490834A; -Reference = R2; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /54908350; -Reference = R3; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /54908356; -Reference = R4; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /5490835C; -Reference = R5; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /54908362; -Reference = R6; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /54908368; -Reference = R7; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /5490836E; -Reference = R8; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /54908374; -Reference = R9; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /5490837A; -Reference = R10; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /54908380; -Reference = R11; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /54908386; -Reference = R12; -ValeurCmp = 390; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /5490838C; -Reference = R_ROW1; -ValeurCmp = 1K; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /5490839E; -Reference = R_ROW2; -ValeurCmp = 1K; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /549083A4; -Reference = R_ROW3; -ValeurCmp = 1K; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /554E5219; -Reference = R_S1; -ValeurCmp = 300; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /554E5233; -Reference = R_S2; -ValeurCmp = 620; -IdModule = R3; -EndCmp - -BeginCmp -TimeStamp = /548EFBFD; -Reference = SW1; -ValeurCmp = DF1; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFC03; -Reference = SW2; -ValeurCmp = DF2; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFC09; -Reference = SW3; -ValeurCmp = DF3; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFC0F; -Reference = SW4; -ValeurCmp = IF1; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFC15; -Reference = SW5; -ValeurCmp = IF2; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFC1B; -Reference = SW6; -ValeurCmp = IF3; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFAF8; -Reference = SW7; -ValeurCmp = SR1; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB27; -Reference = SW8; -ValeurCmp = SR2; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB2D; -Reference = SW9; -ValeurCmp = SR3; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB33; -Reference = SW10; -ValeurCmp = SR4; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB42; -Reference = SW11; -ValeurCmp = SR5; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB48; -Reference = SW12; -ValeurCmp = SR6; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB4E; -Reference = SW13; -ValeurCmp = SR7; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB54; -Reference = SW14; -ValeurCmp = SR8; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB5A; -Reference = SW15; -ValeurCmp = SR9; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB60; -Reference = SW16; -ValeurCmp = SR10; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB66; -Reference = SW17; -ValeurCmp = SR11; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EFB6C; -Reference = SW18; -ValeurCmp = SR12; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF86F; -Reference = SW19; -ValeurCmp = START; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF87C; -Reference = SW20; -ValeurCmp = LOAD_ADD; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF882; -Reference = SW21; -ValeurCmp = DEP; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF888; -Reference = SW22; -ValeurCmp = EXAM; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF88E; -Reference = SW23; -ValeurCmp = CONT; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF894; -Reference = SW24; -ValeurCmp = STOP; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF89A; -Reference = SW25; -ValeurCmp = SING_STEP; -IdModule = SW_KND2_PDP2; -EndCmp - -BeginCmp -TimeStamp = /548EF8A0; -Reference = SW26; -ValeurCmp = SING_INST; -IdModule = SW_KND2_PDP2; -EndCmp - -EndListe DELETED hardware/pdp8i/PDP8.dsn Index: hardware/pdp8i/PDP8.dsn ================================================================== --- hardware/pdp8i/PDP8.dsn +++ /dev/null @@ -1,823 +0,0 @@ -(pcb C:\temp29\PDP8KICAD\PDP8.dsn - (parser - (string_quote ") - (space_in_quoted_tokens on) - (host_cad "KiCad's Pcbnew") - (host_version "(2013-07-07 BZR 4022)-stable") - ) - (resolution um 10) - (unit um) - (structure - (layer F.Cu - (type signal) - (property - (index 0) - ) - ) - (layer B.Cu - (type signal) - (property - (index 1) - ) - ) - (boundary - (path pcb 0 8500 -64000 288500 -64000 288500 -163000 8500 -163000 - 8500 -64000) - ) - (keepout "" (polygon B.Cu 0 288000 -140000 284000 -140000 284000 -156000 288000 -156000)) - (keepout "" (polygon F.Cu 0 288000 -140000 284000 -140000 284000 -156000 288000 -156000)) - (keepout "" (polygon B.Cu 0 9000 -142000 14000 -142000 14000 -140000 23000 -140000 - 24000 -141000 24000 -162000 16000 -162000 16000 -157000 15000 -156000 - 9000 -156000)) - (keepout "" (polygon F.Cu 0 9000 -142000 14000 -142000 14000 -140000 23000 -140000 - 24000 -141000 24000 -162000 16000 -162000 16000 -157000 15000 -156000 - 9000 -156000)) - (keepout "" (polygon F.Cu 0 64500 -111000 66500 -111000 66000 -111500 66000 -112000 - 66000 -112500 65000 -112500 65250 -111750 65000 -111250 64500 -111000)) - (keepout "" (polygon F.Cu 0 65000 -114750 66000 -114750 66000 -115750 65000 -115750 - 65250 -115250)) - (via "Via[0-1]_889:635_um" "Via[0-1]_889:0_um") - (rule - (width 254) - (clearance 254.1) - (clearance 254.1 (type default_smd)) - (clearance 63.5 (type smd_smd)) - ) - ) - (placement - (component R3 - (place R9 57920 -102940 back 270 (PN 390)) - (place R1 37600 -102940 back 90 (PN 390)) - (place R2 40140 -102940 back 90 (PN 390)) - (place R3 42680 -102940 back 90 (PN 390)) - (place R4 45220 -102940 back 90 (PN 390)) - (place R5 47760 -102940 back 90 (PN 390)) - (place R6 50300 -102940 back 90 (PN 390)) - (place R7 52840 -102940 back 270 (PN 390)) - (place R8 55380 -102940 back 270 (PN 390)) - (place R10 60460 -102940 back 270 (PN 390)) - (place R11 63000 -102940 back 270 (PN 390)) - (place R12 65540 -102940 back 270 (PN 390)) - (place R_ROW1 78900 -133080 front 0 (PN 1K)) - (place R_ROW2 18750 -129500 front 180 (PN 1K)) - (place R_ROW3 218600 -133080 front 0 (PN 1K)) - (place R_S1 18750 -133000 front 0 (PN 300)) - (place R_S2 18750 -136500 front 0 (PN 620)) - ) - (component "DIP-18__300" - (place P2 219050 -100970 back 270 (PN UDN2981A)) - ) - (component 1pin - (place M1 13000 -68000 front 0 (PN M)) - (place M2 13000 -159000 front 0 (PN M)) - (place M3 285000 -68000 front 0 (PN M)) - (place M4 286000 -159000 front 0 (PN M)) - (place M5 208000 -68000 front 0 (PN M)) - (place M6 285000 -132000 front 0 (PN M)) - (place M7 208000 -132000 front 0 (PN M)) - ) - (component D2 - (place D23 249000 -136500 front 0 (PN 1N4148)) - (place D24 259000 -136500 front 0 (PN 1N4148)) - (place D22 239000 -136500 front 0 (PN 1N4148)) - (place D25 269000 -136500 front 0 (PN 1N4148)) - (place D26 279000 -136500 front 0 (PN 1N4148)) - (place D12 139000 -136500 front 0 (PN 1N4148)) - (place D2 39000 -136500 front 0 (PN 1N4148)) - (place D3 49000 -136500 front 0 (PN 1N4148)) - (place D4 59000 -136500 front 0 (PN 1N4148)) - (place D5 69000 -136500 front 0 (PN 1N4148)) - (place D6 79000 -136500 front 0 (PN 1N4148)) - (place D7 89000 -136500 front 0 (PN 1N4148)) - (place D8 99000 -136500 front 0 (PN 1N4148)) - (place D9 109000 -136500 front 0 (PN 1N4148)) - (place D10 119000 -136500 front 0 (PN 1N4148)) - (place D11 129000 -136500 front 0 (PN 1N4148)) - (place D1 29000 -136500 front 0 (PN 1N4148)) - (place D13 149000 -136500 front 0 (PN 1N4148)) - (place D14 159000 -136500 front 0 (PN 1N4148)) - (place D15 169000 -136500 front 0 (PN 1N4148)) - (place D16 179000 -136500 front 0 (PN 1N4148)) - (place D17 189000 -136500 front 0 (PN 1N4148)) - (place D18 199000 -136500 front 0 (PN 1N4148)) - (place D19 209000 -136500 front 0 (PN 1N4148)) - (place D20 219000 -136500 front 0 (PN 1N4148)) - (place D21 229000 -136500 front 0 (PN 1N4148)) - ) - (component RASPI_BPLUS_MIRRORED - (place P1 64000 -124000 back 0 (PN RASPI_MODEL_B_PLUS_GPIO)) - ) - (component D3 - (place DZ1 219000 -117000 front 0 (PN ZENER)) - ) - (component "LED-3-PDP" - (place DMB9 169000 -99800 front 0 (PN LED)) - (place DMB10 179000 -99800 front 0 (PN LED)) - (place DMB11 189000 -99800 front 0 (PN LED)) - (place DMB12 199000 -99800 front 0 (PN LED)) - (place DAC1 89000 -114400 front 0 (PN LED)) - (place DAC2 99000 -114400 front 0 (PN LED)) - (place DAC3 109000 -114400 front 0 (PN LED)) - (place DAC4 119000 -114400 front 0 (PN LED)) - (place DAC5 129000 -114400 front 0 (PN LED)) - (place DAC6 139000 -114400 front 0 (PN LED)) - (place DAC7 149000 -114400 front 0 (PN LED)) - (place DAC8 159000 -114400 front 0 (PN LED)) - (place DAC9 169000 -114400 front 0 (PN LED)) - (place DAC10 179000 -114400 front 0 (PN LED)) - (place DPC1 89000 -70600 front 0 (PN LED)) - (place DAC12 199000 -114400 front 0 (PN LED)) - (place DMQ1 89000 -129000 front 0 (PN LED)) - (place DMQ2 99000 -129000 front 0 (PN LED)) - (place DMQ3 109000 -129000 front 0 (PN LED)) - (place DMQ4 119000 -129000 front 0 (PN LED)) - (place DMQ5 129000 -129000 front 0 (PN LED)) - (place DMQ6 139000 -129000 front 0 (PN LED)) - (place DMQ7 149000 -129000 front 0 (PN LED)) - (place DMQ8 159000 -129000 front 0 (PN LED)) - (place DMQ9 169000 -129000 front 0 (PN LED)) - (place DMQ10 179000 -129000 front 0 (PN LED)) - (place DMQ11 189000 -129000 front 0 (PN LED)) - (place DMQ12 199000 -129000 front 0 (PN LED)) - (place DLINK1 79000 -114400 front 0 (PN LED)) - (place DSC1 29000 -129000 front 0 (PN LED)) - (place DAC11 189000 -114400 front 0 (PN LED)) - (place DPC2 99000 -70600 front 0 (PN LED)) - (place DPC3 109000 -70600 front 0 (PN LED)) - (place DPC4 119000 -70600 front 0 (PN LED)) - (place DPC5 129000 -70600 front 0 (PN LED)) - (place DPC6 139000 -70600 front 0 (PN LED)) - (place DPC7 149000 -70600 front 0 (PN LED)) - (place DPC8 159000 -70600 front 0 (PN LED)) - (place DPC9 169000 -70600 front 0 (PN LED)) - (place DPC10 179000 -70600 front 0 (PN LED)) - (place DPC11 189000 -70600 front 0 (PN LED)) - (place DPC12 199000 -70600 front 0 (PN LED)) - (place DMA1 89000 -85200 front 0 (PN LED)) - (place DMA2 99000 -85200 front 0 (PN LED)) - (place DMA3 109000 -85200 front 0 (PN LED)) - (place DMB8 159000 -99800 front 0 (PN LED)) - (place DMA5 129000 -85200 front 0 (PN LED)) - (place DMA6 139000 -85200 front 0 (PN LED)) - (place DMA7 149000 -85200 front 0 (PN LED)) - (place DMA8 159000 -85200 front 0 (PN LED)) - (place DMA9 169000 -85200 front 0 (PN LED)) - (place DMA10 179000 -85200 front 0 (PN LED)) - (place DMA11 189000 -85200 front 0 (PN LED)) - (place DMA12 199000 -85200 front 0 (PN LED)) - (place DMB1 89000 -99800 front 0 (PN LED)) - (place DMB2 99000 -99800 front 0 (PN LED)) - (place DMB3 109000 -99800 front 0 (PN LED)) - (place DMB4 119000 -99800 front 0 (PN LED)) - (place DMB5 129000 -99800 front 0 (PN LED)) - (place DMB6 139000 -99800 front 0 (PN LED)) - (place DMB7 149000 -99800 front 0 (PN LED)) - (place DMA4 119000 -85200 front 0 (PN LED)) - (place DRUN1 279000 -85200 front 0 (PN LED)) - (place DPAUSE1 279000 -77900 front 0 (PN LED)) - (place DION1 279000 -70600 front 0 (PN LED)) - (place DBREAK1 259000 -107100 front 0 (PN LED)) - (place DCURAD1 259000 -99800 front 0 (PN LED)) - (place DWRDCT1 259000 -92500 front 0 (PN LED)) - (place DDEFER1 259000 -85200 front 0 (PN LED)) - (place DEXEC1 259000 -77900 front 0 (PN LED)) - (place DFETCH1 259000 -70600 front 0 (PN LED)) - (place DOPR1 239000 -121700 front 0 (PN LED)) - (place DIOT1 239000 -114400 front 0 (PN LED)) - (place DJMP1 239000 -107100 front 0 (PN LED)) - (place DJMS1 239000 -99800 front 0 (PN LED)) - (place DDCA1 239000 -92500 front 0 (PN LED)) - (place DSC2 39000 -129000 front 0 (PN LED)) - (place DSC4 59000 -129000 front 0 (PN LED)) - (place DSC5 69000 -129000 front 0 (PN LED)) - (place DDF1 29000 -70600 front 0 (PN LED)) - (place DDF2 39000 -70600 front 0 (PN LED)) - (place DDF3 49000 -70600 front 0 (PN LED)) - (place DSC3 49000 -129000 front 0 (PN LED)) - (place DTAD1 239000 -77900 front 0 (PN LED)) - (place DAND1 239000 -70600 front 0 (PN LED)) - (place DISZ1 239000 -85200 front 0 (PN LED)) - (place DIF2 69000 -70600 front 0 (PN LED)) - (place DIF3 79000 -70600 front 0 (PN LED)) - (place DIF1 59000 -70600 front 0 (PN LED)) - ) - (component SW_KND2_PDP2 - (place SW6 79000 -159500 front 0 (PN IF3)) - (place SW5 69000 -159500 front 0 (PN IF2)) - (place SW4 59000 -159500 front 0 (PN IF1)) - (place SW3 49000 -159500 front 0 (PN DF3)) - (place SW2 39000 -159500 front 0 (PN DF2)) - (place SW1 29000 -159500 front 0 (PN DF1)) - (place SW18 199000 -159500 front 0 (PN SR12)) - (place SW17 189000 -159500 front 0 (PN SR11)) - (place SW15 169000 -159500 front 0 (PN SR9)) - (place SW14 159000 -159500 front 0 (PN SR8)) - (place SW13 149000 -159500 front 0 (PN SR7)) - (place SW12 139000 -159500 front 0 (PN SR6)) - (place SW19 209000 -159500 front 0 (PN START)) - (place SW20 219000 -159500 front 0 (PN LOAD_ADD)) - (place SW16 179000 -159500 front 0 (PN SR10)) - (place SW22 239000 -159500 front 0 (PN EXAM)) - (place SW23 249000 -159500 front 0 (PN CONT)) - (place SW24 259000 -159500 front 0 (PN STOP)) - (place SW25 269000 -159500 front 0 (PN SING_STEP)) - (place SW26 279000 -159500 front 0 (PN SING_INST)) - (place SW7 89000 -159500 front 0 (PN SR1)) - (place SW8 99000 -159500 front 0 (PN SR2)) - (place SW9 109000 -159500 front 0 (PN SR3)) - (place SW10 119000 -159500 front 0 (PN SR4)) - (place SW11 129000 -159500 front 0 (PN SR5)) - (place SW21 229000 -159500 front 0 (PN DEP)) - ) - (component PIN_ARRAY_4x1 - (place P5 11500 -136000 front 270 (PN "SERIAL 5V TTL")) - ) - (component PIN_ARRAY_20X2 - (place P3 253900 -130050 back 180 (PN EXPANSION_20X2)) - ) - (component "LED-3-StrEight" - (place DPAUSE2 259000 -114400 front 0 (PN LED)) - (place DRUN2 259000 -121700 front 0 (PN LED)) - ) - (component PIN_ARRAY_3X1 - (place J_COL1 64300 -111800 back 180 (PN CONN_3)) - (place J_COL2 64300 -115200 back 180 (PN CONN_3)) - ) - ) - (library - (image R3 - (outline (path signal 203.2 -3810 0 -3302 0)) - (outline (path signal 203.2 3810 0 3302 0)) - (outline (path signal 203.2 3302 0 3302 1016)) - (outline (path signal 203.2 3302 1016 -3302 1016)) - (outline (path signal 203.2 -3302 1016 -3302 -1016)) - (outline (path signal 203.2 -3302 -1016 3302 -1016)) - (outline (path signal 203.2 3302 -1016 3302 0)) - (outline (path signal 203.2 -3302 508 -2794 1016)) - (pin Round[A]Pad_1397_um 1 -3810 0) - (pin Round[A]Pad_1397_um 2 3810 0) - ) - (image "DIP-18__300" - (outline (path signal 381 -12700 1270 -11430 1270)) - (outline (path signal 381 -11430 1270 -11430 -1270)) - (outline (path signal 381 -11430 -1270 -12700 -1270)) - (outline (path signal 381 -12700 2540 12700 2540)) - (outline (path signal 381 12700 2540 12700 -2540)) - (outline (path signal 381 12700 -2540 -12700 -2540)) - (outline (path signal 381 -12700 -2540 -12700 2540)) - (pin Rect[A]Pad_1397x1397_um 1 -10160 -3810) - (pin Round[A]Pad_1397_um 2 -7620 -3810) - (pin Round[A]Pad_1397_um 3 -5080 -3810) - (pin Round[A]Pad_1397_um 4 -2540 -3810) - (pin Round[A]Pad_1397_um 5 0 -3810) - (pin Round[A]Pad_1397_um 6 2540 -3810) - (pin Round[A]Pad_1397_um 7 5080 -3810) - (pin Round[A]Pad_1397_um 8 7620 -3810) - (pin Round[A]Pad_1397_um 9 10160 -3810) - (pin Round[A]Pad_1397_um 10 10160 3810) - (pin Round[A]Pad_1397_um 11 7620 3810) - (pin Round[A]Pad_1397_um 12 5080 3810) - (pin Round[A]Pad_1397_um 13 2540 3810) - (pin Round[A]Pad_1397_um 14 0 3810) - (pin Round[A]Pad_1397_um 15 -2540 3810) - (pin Round[A]Pad_1397_um 16 -5080 3810) - (pin Round[A]Pad_1397_um 17 -7620 3810) - (pin Round[A]Pad_1397_um 18 -10160 3810) - ) - (image 1pin - (outline (path signal 381 2286 0 2174.11 -706.412 1849.41 -1343.68 1343.68 -1849.41 - 706.412 -2174.11 0 -2286 -706.412 -2174.11 -1343.68 -1849.41 - -1849.41 -1343.68 -2174.11 -706.412 -2286 0 -2174.11 706.412 - -1849.41 1343.68 -1343.68 1849.41 -706.412 2174.11 0 2286 - 706.412 2174.11 1343.68 1849.41 1849.41 1343.68 2174.11 706.412)) - (pin Round[A]Pad_4064_um 1 0 0) - ) - (image D2 - (outline (path signal 304.8 -2032 -1016 2032 -1016)) - (outline (path signal 304.8 -2032 1016 2032 1016)) - (outline (path signal 304.8 2794 0 2032 0)) - (outline (path signal 304.8 2032 0 2032 1016)) - (outline (path signal 304.8 -2032 1016 -2032 0)) - (outline (path signal 304.8 -2032 0 -2794 0)) - (outline (path signal 304.8 -2032 0 -2032 -1016)) - (outline (path signal 304.8 2032 -1016 2032 0)) - (outline (path signal 304.8 1524 1016 1524 -1016)) - (outline (path signal 304.8 1270 -1016 1270 1016)) - (pin Rect[A]Pad_1397x1397_um 2 3556 0) - (pin Round[A]Pad_1397_um 1 -3810 0) - ) - (image RASPI_BPLUS_MIRRORED - (outline (path signal 150 48768 49022 53594 49022)) - (outline (path signal 150 53594 49022 53594 38354)) - (outline (path signal 150 53594 38354 49784 38354)) - (outline (path signal 150 -22000 49008 -22000 52508)) - (outline (path signal 150 -16000 49008 -16000 52508)) - (outline (path signal 150 -7000 48500 -7000 52500)) - (outline (path signal 150 6000 48500 6000 52500)) - (outline (path signal 150 49500 11032 54000 11032)) - (outline (path signal 150 54000 11032 54000 32)) - (outline (path signal 150 54000 32 50000 32)) - (outline (path signal 150 49500 28032 54000 28032)) - (outline (path signal 150 54000 28032 54000 16532)) - (outline (path signal 150 54000 16532 49500 16532)) - (outline (path signal 150 -32500 -3500 52500 -3500)) - (outline (path signal 150 52500 52500 52500 -3500)) - (outline (path signal 150 52500 52500 32000 52500)) - (outline (path signal 150 -32500 52500 -32500 -3500)) - (outline (path signal 150 -32500 52500 32500 52500)) - (outline (path signal 304.8 25400 -2540 -25400 -2540)) - (outline (path signal 304.8 25400 2540 -25400 2540)) - (outline (path signal 304.8 25400 2540 25400 -2540)) - (outline (path signal 304.8 -25400 2540 -25400 -2540)) - (pin Rect[A]Pad_1524x1524_um 1 -24130 1270) - (pin Round[A]Pad_1524_um 2 -24130 -1270) - (pin Round[A]Pad_1524_um 11 -11430 1270) - (pin Round[A]Pad_1524_um 4 -21590 -1270) - (pin Round[A]Pad_1524_um 13 -8890 1270) - (pin Round[A]Pad_1524_um 6 -19050 -1270) - (pin Round[A]Pad_1524_um 15 -6350 1270) - (pin Round[A]Pad_1524_um 8 -16510 -1270) - (pin Round[A]Pad_1524_um 17 -3810 1270) - (pin Round[A]Pad_1524_um 10 -13970 -1270) - (pin Round[A]Pad_1524_um 19 -1270 1270) - (pin Round[A]Pad_1524_um 12 -11430 -1270) - (pin Round[A]Pad_1524_um 21 1270 1270) - (pin Round[A]Pad_1524_um 14 -8890 -1270) - (pin Round[A]Pad_1524_um 23 3810 1270) - (pin Round[A]Pad_1524_um 16 -6350 -1270) - (pin Round[A]Pad_1524_um 25 6350 1270) - (pin Round[A]Pad_1524_um 18 -3810 -1270) - (pin Round[A]Pad_1524_um 27 8890 1270) - (pin Round[A]Pad_1524_um 20 -1270 -1270) - (pin Round[A]Pad_1524_um 29 11430 1270) - (pin Round[A]Pad_1524_um 22 1270 -1270) - (pin Round[A]Pad_1524_um 31 13970 1270) - (pin Round[A]Pad_1524_um 24 3810 -1270) - (pin Round[A]Pad_1524_um 26 6350 -1270) - (pin Round[A]Pad_1524_um 33 16510 1270) - (pin Round[A]Pad_1524_um 28 8890 -1270) - (pin Round[A]Pad_1524_um 32 13970 -1270) - (pin Round[A]Pad_1524_um 34 16510 -1270) - (pin Round[A]Pad_1524_um 36 19050 -1270) - (pin Round[A]Pad_1524_um 38 21590 -1270) - (pin Round[A]Pad_1524_um 35 19050 1270) - (pin Round[A]Pad_1524_um 37 21590 1270) - (pin Round[A]Pad_1524_um 3 -21590 1270) - (pin Round[A]Pad_1524_um 5 -19050 1270) - (pin Round[A]Pad_1524_um 7 -16510 1270) - (pin Round[A]Pad_1524_um 9 -13970 1270) - (pin Round[A]Pad_1524_um 39 24130 1270) - (pin Round[A]Pad_1524_um 40 24130 -1270) - (pin Round[A]Pad_1524_um 30 11430 -1270) - (pin Round[A]Pad_5700_um H2 -29000 0) - (pin Round[A]Pad_5700_um H3 29000 0) - (pin Round[A]Pad_5700_um H4 29000 49000) - (pin Round[A]Pad_5700_um H1 -29000 49000) - ) - (image D3 - (outline (path signal 304.8 3810 0 3048 0)) - (outline (path signal 304.8 3048 0 3048 1016)) - (outline (path signal 304.8 3048 1016 -3048 1016)) - (outline (path signal 304.8 -3048 1016 -3048 0)) - (outline (path signal 304.8 -3048 0 -3810 0)) - (outline (path signal 304.8 -3048 0 -3048 -1016)) - (outline (path signal 304.8 -3048 -1016 3048 -1016)) - (outline (path signal 304.8 3048 -1016 3048 0)) - (outline (path signal 304.8 2540 1016 2540 -1016)) - (outline (path signal 304.8 2286 -1016 2286 1016)) - (pin Rect[A]Pad_1397x1397_um 2 3810 0) - (pin Round[A]Pad_1397_um 1 -3810 0) - ) - (image "LED-3-PDP" - (outline (path signal 150 -2400 -1500 -2400 1500)) - (outline (path signal 150 1500 -2400 -1500 -2400)) - (outline (path signal 150 2400 1500 2400 -1500)) - (outline (path signal 150 -1500 2400 1500 2400)) - (pin Round[A]Pad_1676.4_um 1 -1270 0) - (pin Round[A]Pad_1676.4_um 2 1270 0) - ) - (image SW_KND2_PDP2 - (outline (path signal 150 -4750 -1950 -4750 10350)) - (outline (path signal 150 4750 10300 4750 -1950)) - (outline (path signal 150 -4750 -1958 4750 -1958)) - (outline (path signal 150 -4750 10300 -4750 18900)) - (outline (path signal 150 4750 10300 4750 18900)) - (outline (path signal 150 4750 18900 -4750 18900)) - (outline (path signal 150 4750 10300 -4750 10300)) - (pin Oval[A]Pad_5080x2540_um 1 0 0) - (pin Oval[A]Pad_5080x2540_um 2 0 5580) - (pin Round[A]Pad_4000_um 3 0 15000) - ) - (image PIN_ARRAY_4x1 - (outline (path signal 254 5080 -1270 -5080 -1270)) - (outline (path signal 254 5080 1270 -5080 1270)) - (outline (path signal 254 -5080 1270 -5080 -1270)) - (outline (path signal 254 5080 -1270 5080 1270)) - (pin Rect[A]Pad_1524x1524_um 1 -3810 0) - (pin Round[A]Pad_1524_um 2 -1270 0) - (pin Round[A]Pad_1524_um 3 1270 0) - (pin Round[A]Pad_1524_um 4 3810 0) - ) - (image PIN_ARRAY_20X2 - (outline (path signal 304.8 25400 -2540 -25400 -2540)) - (outline (path signal 304.8 25400 2540 -25400 2540)) - (outline (path signal 304.8 25400 2540 25400 -2540)) - (outline (path signal 304.8 -25400 2540 -25400 -2540)) - (pin Rect[A]Pad_1524x1524_um 1 -24130 -1270) - (pin Round[A]Pad_1524_um 2 -24130 1270) - (pin Round[A]Pad_1524_um 11 -11430 -1270) - (pin Round[A]Pad_1524_um 4 -21590 1270) - (pin Round[A]Pad_1524_um 13 -8890 -1270) - (pin Round[A]Pad_1524_um 6 -19050 1270) - (pin Round[A]Pad_1524_um 15 -6350 -1270) - (pin Round[A]Pad_1524_um 8 -16510 1270) - (pin Round[A]Pad_1524_um 17 -3810 -1270) - (pin Round[A]Pad_1524_um 10 -13970 1270) - (pin Round[A]Pad_1524_um 19 -1270 -1270) - (pin Round[A]Pad_1524_um 12 -11430 1270) - (pin Round[A]Pad_1524_um 21 1270 -1270) - (pin Round[A]Pad_1524_um 14 -8890 1270) - (pin Round[A]Pad_1524_um 23 3810 -1270) - (pin Round[A]Pad_1524_um 16 -6350 1270) - (pin Round[A]Pad_1524_um 25 6350 -1270) - (pin Round[A]Pad_1524_um 18 -3810 1270) - (pin Round[A]Pad_1524_um 27 8890 -1270) - (pin Round[A]Pad_1524_um 20 -1270 1270) - (pin Round[A]Pad_1524_um 29 11430 -1270) - (pin Round[A]Pad_1524_um 22 1270 1270) - (pin Round[A]Pad_1524_um 31 13970 -1270) - (pin Round[A]Pad_1524_um 24 3810 1270) - (pin Round[A]Pad_1524_um 26 6350 1270) - (pin Round[A]Pad_1524_um 33 16510 -1270) - (pin Round[A]Pad_1524_um 28 8890 1270) - (pin Round[A]Pad_1524_um 32 13970 1270) - (pin Round[A]Pad_1524_um 34 16510 1270) - (pin Round[A]Pad_1524_um 36 19050 1270) - (pin Round[A]Pad_1524_um 38 21590 1270) - (pin Round[A]Pad_1524_um 35 19050 -1270) - (pin Round[A]Pad_1524_um 37 21590 -1270) - (pin Round[A]Pad_1524_um 3 -21590 -1270) - (pin Round[A]Pad_1524_um 5 -19050 -1270) - (pin Round[A]Pad_1524_um 7 -16510 -1270) - (pin Round[A]Pad_1524_um 9 -13970 -1270) - (pin Round[A]Pad_1524_um 39 24130 -1270) - (pin Round[A]Pad_1524_um 40 24130 1270) - (pin Round[A]Pad_1524_um 30 11430 1270) - ) - (image "LED-3-StrEight" - (pin Round[A]Pad_1676.4_um 1 -1270 0) - (pin Round[A]Pad_1676.4_um 2 1270 0) - ) - (image PIN_ARRAY_3X1 - (outline (path signal 152.4 -3810 -1270 -3810 1270)) - (outline (path signal 152.4 -3810 1270 3810 1270)) - (outline (path signal 152.4 3810 1270 3810 -1270)) - (outline (path signal 152.4 3810 -1270 -3810 -1270)) - (outline (path signal 152.4 -1270 1270 -1270 -1270)) - (pin Rect[A]Pad_1524x1524_um 1 -2540 0) - (pin Round[A]Pad_1524_um 2 0 0) - (pin Round[A]Pad_1524_um 3 2540 0) - ) - (padstack Round[A]Pad_1397_um - (shape (circle F.Cu 1397)) - (shape (circle B.Cu 1397)) - (attach off) - ) - (padstack Round[A]Pad_1524_um - (shape (circle F.Cu 1524)) - (shape (circle B.Cu 1524)) - (attach off) - ) - (padstack Round[A]Pad_1676.4_um - (shape (circle F.Cu 1676.4)) - (shape (circle B.Cu 1676.4)) - (attach off) - ) - (padstack Round[A]Pad_4000_um - (shape (circle F.Cu 4000)) - (shape (circle B.Cu 4000)) - (attach off) - ) - (padstack Round[A]Pad_4064_um - (shape (circle F.Cu 4064)) - (shape (circle B.Cu 4064)) - (attach off) - ) - (padstack Round[A]Pad_5700_um - (shape (circle F.Cu 5700)) - (shape (circle B.Cu 5700)) - (attach off) - ) - (padstack Oval[A]Pad_5080x2540_um - (shape (path F.Cu 2540 -1270 0 1270 0)) - (shape (path B.Cu 2540 -1270 0 1270 0)) - (attach off) - ) - (padstack Rect[A]Pad_1397x1397_um - (shape (rect F.Cu -698.5 -698.5 698.5 698.5)) - (shape (rect B.Cu -698.5 -698.5 698.5 698.5)) - (attach off) - ) - (padstack Rect[A]Pad_1524x1524_um - (shape (rect F.Cu -762 -762 762 762)) - (shape (rect B.Cu -762 -762 762 762)) - (attach off) - ) - (padstack "Via[0-1]_889:635_um" - (shape (circle F.Cu 889)) - (shape (circle B.Cu 889)) - (attach off) - ) - (padstack "Via[0-1]_889:0_um" - (shape (circle F.Cu 889)) - (shape (circle B.Cu 889)) - (attach off) - ) - ) - (network - (net +3.3V - (pins P1-1 P3-6 P3-5) - ) - (net +5V - (pins P1-2 P1-4 DZ1-1 P5-2 P3-1 P3-2) - ) - (net GND - (pins P2-10 P1-6 P1-20 P1-9 P1-39 P1-30 R_S2-1 P5-1 P3-8 P3-7) - ) - (net "N-0000023" - (pins P2-9 DZ1-2) - ) - (net "N-0000028" - (pins R1-2 J_COL1-2) - ) - (net "N-0000029" - (pins R2-2 J_COL2-2) - ) - (net "N-0000035" - (pins R_S1-1 R_S2-2 P5-3) - ) - (net "N-0000039" - (pins R6-2 P1-26) - ) - (net "N-0000040" - (pins R10-1 P1-23) - ) - (net "N-0000041" - (pins R_ROW1-1 P1-36) - ) - (net "N-0000042" - (pins R11-1 P1-32) - ) - (net "N-0000043" - (pins R7-1 P1-24) - ) - (net "N-0000046" - (pins R_ROW3-1 P1-12) - ) - (net "N-0000048" - (pins R12-1 P1-33) - ) - (net "N-0000049" - (pins R5-2 P1-31) - ) - (net "N-0000050" - (pins R4-2 P1-29) - ) - (net "N-0000053" - (pins D6-2 SW6-2) - ) - (net "N-0000054" - (pins R8-1 P1-21) - ) - (net "N-0000055" - (pins R9-1 P1-19) - ) - (net "N-0000056" - (pins R_ROW2-1 P1-11) - ) - (net "N-0000057" - (pins R3-2 P1-7) - ) - (net "N-0000059" - (pins D5-2 SW5-2) - ) - (net "N-0000060" - (pins D4-2 SW4-2) - ) - (net "N-0000061" - (pins D3-2 SW3-2) - ) - (net "N-0000062" - (pins D2-2 SW2-2) - ) - (net "N-0000063" - (pins D1-2 SW1-2) - ) - (net "N-0000065" - (pins D22-2 SW22-2) - ) - (net "N-0000066" - (pins D23-2 SW23-2) - ) - (net "N-0000067" - (pins D24-2 SW24-2) - ) - (net "N-0000068" - (pins D25-2 SW25-2) - ) - (net "N-0000069" - (pins D26-2 SW26-2) - ) - (net "N-0000070" - (pins D21-2 SW21-2) - ) - (net "N-0000071" - (pins D7-2 SW7-2) - ) - (net "N-0000072" - (pins D8-2 SW8-2) - ) - (net "N-0000073" - (pins D9-2 SW9-2) - ) - (net "N-0000074" - (pins D10-2 SW10-2) - ) - (net "N-0000079" - (pins D11-2 SW11-2) - ) - (net "N-0000085" - (pins D19-2 SW19-2) - ) - (net "N-0000086" - (pins D20-2 SW20-2) - ) - (net "N-0000087" - (pins D12-2 SW12-2) - ) - (net "N-0000088" - (pins D13-2 SW13-2) - ) - (net "N-0000089" - (pins D14-2 SW14-2) - ) - (net "N-0000090" - (pins D15-2 SW15-2) - ) - (net "N-0000091" - (pins D16-2 SW16-2) - ) - (net "N-0000092" - (pins D17-2 SW17-2) - ) - (net "N-0000093" - (pins D18-2 SW18-2) - ) - (net RX - (pins P1-10 R_S1-2 J_COL2-3) - ) - (net SPARE_IO - (pins P1-35 P3-15 P3-16) - ) - (net TX - (pins P1-8 P5-4 J_COL1-3) - ) - (net col1 - (pins R1-1 D7-1 D1-1 D19-1 DAC1-2 DPC1-2 DMQ1-2 DMA1-2 DMB1-2 DCURAD1-2 DDF1-2 - DAND1-2 P3-17 P3-18) - ) - (net col10 - (pins R10-2 D16-1 DMB10-2 DAC10-2 DMQ10-2 DPC10-2 DMA10-2 DEXEC1-2 DSC5-2 P3-36 - P3-35) - ) - (net col11 - (pins R11-2 D17-1 DMB11-2 DMQ11-2 DAC11-2 DPC11-2 DMA11-2 DDEFER1-2 P3-38 P3-37) - ) - (net col12 - (pins R12-2 D18-1 DMB12-2 DAC12-2 DMQ12-2 DPC12-2 DMA12-2 DWRDCT1-2 P3-39 P3-40) - ) - (net col1a - (pins P1-3 J_COL1-1) - ) - (net col2 - (pins R2-1 D2-1 D8-1 D20-1 DAC2-2 DMQ2-2 DPC2-2 DMA2-2 DMB2-2 DBREAK1-2 DDF2-2 - DTAD1-2 P3-19 P3-20) - ) - (net col2a - (pins P1-5 J_COL2-1) - ) - (net col3 - (pins R3-1 D3-1 D9-1 D21-1 DAC3-2 DMQ3-2 DPC3-2 DMA3-2 DMB3-2 DION1-2 DDF3-2 - DISZ1-2 P3-21 P3-22) - ) - (net col4 - (pins R4-1 D22-1 D4-1 D10-1 DAC4-2 DMQ4-2 DPC4-2 DMB4-2 DMA4-2 DPAUSE1-2 DDCA1-2 - DIF1-2 P3-23 P3-24 DPAUSE2-2) - ) - (net col5 - (pins R5-1 D23-1 D5-1 D11-1 DAC5-2 DMQ5-2 DPC5-2 DMA5-2 DMB5-2 DRUN1-2 DJMS1-2 - DIF2-2 P3-25 P3-26 DRUN2-2) - ) - (net col6 - (pins R6-1 D24-1 D12-1 D6-1 DAC6-2 DMQ6-2 DSC1-2 DPC6-2 DMA6-2 DMB6-2 DJMP1-2 - DIF3-2 P3-27 P3-28) - ) - (net col7 - (pins R7-2 D25-1 D13-1 DAC7-2 DMQ7-2 DLINK1-2 DPC7-2 DMA7-2 DMB7-2 DIOT1-2 DSC2-2 - P3-29 P3-30) - ) - (net col8 - (pins R8-2 D26-1 D14-1 DAC8-2 DMQ8-2 DPC8-2 DMB8-2 DMA8-2 DOPR1-2 DSC3-2 P3-31 - P3-32) - ) - (net col9 - (pins R9-2 D15-1 DMB9-2 DAC9-2 DMQ9-2 DPC9-2 DMA9-2 DFETCH1-2 DSC4-2 P3-33 P3-34) - ) - (net led1 - (pins P2-18 DPC1-1 DPC2-1 DPC3-1 DPC4-1 DPC5-1 DPC6-1 DPC7-1 DPC8-1 DPC9-1 DPC10-1 - DPC11-1 DPC12-1) - ) - (net led2 - (pins P2-17 DMA1-1 DMA2-1 DMA3-1 DMA5-1 DMA6-1 DMA7-1 DMA8-1 DMA9-1 DMA10-1 - DMA11-1 DMA12-1 DMA4-1) - ) - (net led3 - (pins P2-16 DMB9-1 DMB10-1 DMB11-1 DMB12-1 DMB8-1 DMB1-1 DMB2-1 DMB3-1 DMB4-1 - DMB5-1 DMB6-1 DMB7-1) - ) - (net led4 - (pins P2-15 DAC1-1 DAC2-1 DAC3-1 DAC4-1 DAC5-1 DAC6-1 DAC7-1 DAC8-1 DAC9-1 DAC10-1 - DAC12-1 DAC11-1) - ) - (net led5 - (pins P2-14 DMQ1-1 DMQ2-1 DMQ3-1 DMQ4-1 DMQ5-1 DMQ6-1 DMQ7-1 DMQ8-1 DMQ9-1 DMQ10-1 - DMQ11-1 DMQ12-1) - ) - (net led6 - (pins P2-13 DWRDCT1-1 DDEFER1-1 DEXEC1-1 DFETCH1-1 DOPR1-1 DIOT1-1 DJMP1-1 DJMS1-1 - DDCA1-1 DTAD1-1 DAND1-1 DISZ1-1) - ) - (net led7 - (pins P2-12 DSC1-1 DRUN1-1 DPAUSE1-1 DION1-1 DBREAK1-1 DCURAD1-1 DSC2-1 DSC4-1 - DSC5-1 DSC3-1 P3-10 P3-9 DPAUSE2-1 DRUN2-1) - ) - (net led8 - (pins P2-11 DLINK1-1 DDF1-1 DDF2-1 DDF3-1 DIF2-1 DIF3-1 DIF1-1 P3-11 P3-12) - ) - (net row1 - (pins R_ROW1-2 SW18-1 SW17-1 SW15-1 SW14-1 SW13-1 SW12-1 SW16-1 SW7-1 SW8-1 - SW9-1 SW10-1 SW11-1) - ) - (net row2 - (pins R_ROW2-2 SW6-1 SW5-1 SW4-1 SW3-1 SW2-1 SW1-1 P3-13 P3-14) - ) - (net row3 - (pins R_ROW3-2 SW19-1 SW20-1 SW22-1 SW23-1 SW24-1 SW25-1 SW26-1 SW21-1) - ) - (net xled1 - (pins P2-1 P1-38) - ) - (net xled2 - (pins P2-2 P1-40) - ) - (net xled3 - (pins P2-3 P1-15) - ) - (net xled4 - (pins P2-4 P1-16) - ) - (net xled5 - (pins P2-5 P1-18) - ) - (net xled6 - (pins P2-6 P1-22) - ) - (net xled7 - (pins P2-7 P1-37) - ) - (net xled8 - (pins P2-8 P1-13) - ) - (class kicad_default "" +3.3V +5V GND "N-0000023" "N-0000028" "N-0000029" - "N-0000035" "N-0000039" "N-0000040" "N-0000041" "N-0000042" "N-0000043" - "N-0000046" "N-0000048" "N-0000049" "N-0000050" "N-0000053" "N-0000054" - "N-0000055" "N-0000056" "N-0000057" "N-0000059" "N-0000060" "N-0000061" - "N-0000062" "N-0000063" "N-0000065" "N-0000066" "N-0000067" "N-0000068" - "N-0000069" "N-0000070" "N-0000071" "N-0000072" "N-0000073" "N-0000074" - "N-0000079" "N-0000085" "N-0000086" "N-0000087" "N-0000088" "N-0000089" - "N-0000090" "N-0000091" "N-0000092" "N-0000093" RX SPARE_IO TX col1 - col10 col11 col12 col1a col2 col2a col3 col4 col5 col6 col7 col8 col9 - led1 led2 led3 led4 led5 led6 led7 led8 row1 row2 row3 xled1 xled2 xled3 - xled4 xled5 xled6 xled7 xled8 - (circuit - (use_via Via[0-1]_889:635_um) - ) - (rule - (width 254) - (clearance 254.1) - ) - ) - ) - (wiring - ) -) DELETED hardware/pdp8i/PDP8.kicad_pcb Index: hardware/pdp8i/PDP8.kicad_pcb ================================================================== --- hardware/pdp8i/PDP8.kicad_pcb +++ /dev/null @@ -1,7700 +0,0 @@ -(kicad_pcb (version 3) (host pcbnew "(2013-07-07 BZR 4022)-stable") - - (general - (links 343) - (no_connects 0) - (area 8.0964 63.949999 288.550001 163.050001) - (thickness 1.6) - (drawings 11) - (tracks 1226) - (zones 0) - (modules 174) - (nets 80) - ) - - (page A4) - (layers - (15 F.Cu signal) - (0 B.Cu signal) - (16 B.Adhes user hide) - (17 F.Adhes user hide) - (18 B.Paste user hide) - (19 F.Paste user hide) - (20 B.SilkS user hide) - (21 F.SilkS user) - (22 B.Mask user hide) - (23 F.Mask user hide) - (24 Dwgs.User user) - (25 Cmts.User user) - (26 Eco1.User user) - (27 Eco2.User user) - (28 Edge.Cuts user) - ) - - (setup - (last_trace_width 0.254) - (trace_clearance 0.254) - (zone_clearance 0.508) - (zone_45_only no) - (trace_min 0.254) - (segment_width 0.2) - (edge_width 0.1) - (via_size 0.889) - (via_drill 0.635) - (via_min_size 0.889) - (via_min_drill 0.508) - (uvia_size 0.508) - (uvia_drill 0.127) - (uvias_allowed no) - (uvia_min_size 0.508) - (uvia_min_drill 0.127) - (pcb_text_width 0.3) - (pcb_text_size 1.5 1.5) - (mod_edge_width 0.15) - (mod_text_size 1 1) - (mod_text_width 0.15) - (pad_size 5.08 2.54) - (pad_drill 3.45) - (pad_to_mask_clearance 0) - (aux_axis_origin 0 0) - (visible_elements 7FFFEB31) - (pcbplotparams - (layerselection 284196865) - (usegerberextensions true) - (excludeedgelayer false) - (linewidth 0.150000) - (plotframeref false) - (viasonmask false) - (mode 1) - (useauxorigin false) - (hpglpennumber 1) - (hpglpenspeed 20) - (hpglpendiameter 15) - (hpglpenoverlay 2) - (psnegative false) - (psa4output false) - (plotreference true) - (plotvalue true) - (plotothertext true) - (plotinvisibletext false) - (padsonsilk false) - (subtractmaskfromsilk true) - (outputformat 1) - (mirror false) - (drillshape 0) - (scaleselection 1) - (outputdirectory gerber/)) - ) - - (net 0 "") - (net 1 +3.3V) - (net 2 +5V) - (net 3 GND) - (net 4 N-0000029) - (net 5 N-0000036) - (net 6 N-0000037) - (net 7 N-0000038) - (net 8 N-0000039) - (net 9 N-0000040) - (net 10 N-0000041) - (net 11 N-0000043) - (net 12 N-0000044) - (net 13 N-0000045) - (net 14 N-0000047) - (net 15 N-0000048) - (net 16 N-0000049) - (net 17 N-0000050) - (net 18 N-0000051) - (net 19 N-0000052) - (net 20 N-0000053) - (net 21 N-0000055) - (net 22 N-0000056) - (net 23 N-0000057) - (net 24 N-0000059) - (net 25 N-0000062) - (net 26 N-0000063) - (net 27 N-0000064) - (net 28 N-0000065) - (net 29 N-0000066) - (net 30 N-0000067) - (net 31 N-0000068) - (net 32 N-0000074) - (net 33 N-0000080) - (net 34 N-0000081) - (net 35 N-0000082) - (net 36 N-0000083) - (net 37 N-0000084) - (net 38 N-0000085) - (net 39 N-0000086) - (net 40 N-0000087) - (net 41 N-0000088) - (net 42 N-0000089) - (net 43 N-0000090) - (net 44 RX) - (net 45 SPARE_IO) - (net 46 TX) - (net 47 col1) - (net 48 col10) - (net 49 col11) - (net 50 col12) - (net 51 col1a) - (net 52 col2) - (net 53 col2a) - (net 54 col3) - (net 55 col4) - (net 56 col5) - (net 57 col6) - (net 58 col7) - (net 59 col8) - (net 60 col9) - (net 61 led1) - (net 62 led2) - (net 63 led3) - (net 64 led4) - (net 65 led5) - (net 66 led6) - (net 67 led7) - (net 68 led8) - (net 69 row1) - (net 70 row2) - (net 71 row3) - (net 72 xled1) - (net 73 xled2) - (net 74 xled3) - (net 75 xled4) - (net 76 xled5) - (net 77 xled6) - (net 78 xled7) - (net 79 xled8) - - (net_class Default "This is the default net class." - (clearance 0.254) - (trace_width 0.254) - (via_dia 0.889) - (via_drill 0.635) - (uvia_dia 0.508) - (uvia_drill 0.127) - (add_net "") - (add_net +3.3V) - (add_net +5V) - (add_net GND) - (add_net N-0000029) - (add_net N-0000036) - (add_net N-0000037) - (add_net N-0000038) - (add_net N-0000039) - (add_net N-0000040) - (add_net N-0000041) - (add_net N-0000043) - (add_net N-0000044) - (add_net N-0000045) - (add_net N-0000047) - (add_net N-0000048) - (add_net N-0000049) - (add_net N-0000050) - (add_net N-0000051) - (add_net N-0000052) - (add_net N-0000053) - (add_net N-0000055) - (add_net N-0000056) - (add_net N-0000057) - (add_net N-0000059) - (add_net N-0000062) - (add_net N-0000063) - (add_net N-0000064) - (add_net N-0000065) - (add_net N-0000066) - (add_net N-0000067) - (add_net N-0000068) - (add_net N-0000074) - (add_net N-0000080) - (add_net N-0000081) - (add_net N-0000082) - (add_net N-0000083) - (add_net N-0000084) - (add_net N-0000085) - (add_net N-0000086) - (add_net N-0000087) - (add_net N-0000088) - (add_net N-0000089) - (add_net N-0000090) - (add_net RX) - (add_net SPARE_IO) - (add_net TX) - (add_net col1) - (add_net col10) - (add_net col11) - (add_net col12) - (add_net col1a) - (add_net col2) - (add_net col2a) - (add_net col3) - (add_net col4) - (add_net col5) - (add_net col6) - (add_net col7) - (add_net col8) - (add_net col9) - (add_net led1) - (add_net led2) - (add_net led3) - (add_net led4) - (add_net led5) - (add_net led6) - (add_net led7) - (add_net led8) - (add_net row1) - (add_net row2) - (add_net row3) - (add_net xled1) - (add_net xled2) - (add_net xled3) - (add_net xled4) - (add_net xled5) - (add_net xled6) - (add_net xled7) - (add_net xled8) - ) - - (module D3 (layer B.Cu) (tedit 5551184A) (tstamp 54BD7076) - (at 219 117) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54BD85A3) - (fp_text reference DZ1 (at 0 0) (layer B.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value ZENER (at 0 0) (layer B.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.048 0) (end 3.048 0) (layer B.SilkS) (width 0.3048)) - (fp_line (start 3.81 0) (end 3.048 0) (layer B.SilkS) (width 0.3048)) - (fp_line (start -3.048 0) (end -3.81 0) (layer B.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 2 +5V) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 2 +5V) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17F96) - (at 57.92 102.94 90) - (descr "Resitance 3 pas") - (tags R) - (path /54908374) - (autoplace_cost180 10) - (fp_text reference R9 (at 0 -0.127 90) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 90) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 19 N-0000052) - ) - (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 60 col9) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17F87) - (at 37.6 102.94 270) - (descr "Resitance 3 pas") - (tags R) - (path /5490833D) - (autoplace_cost180 10) - (fp_text reference R1 (at 0 -0.127 270) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 270) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 47 col1) - ) - (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 46 TX) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17F67) - (at 40.14 102.94 270) - (descr "Resitance 3 pas") - (tags R) - (path /5490834A) - (autoplace_cost180 10) - (fp_text reference R2 (at 0 -0.127 270) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 270) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 52 col2) - ) - (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 44 RX) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17C46) - (at 42.68 102.94 270) - (descr "Resitance 3 pas") - (tags R) - (path /54908350) - (autoplace_cost180 10) - (fp_text reference R3 (at 0 -0.127 270) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 270) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 54 col3) - ) - (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 20 N-0000053) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17C54) - (at 45.22 102.94 270) - (descr "Resitance 3 pas") - (tags R) - (path /54908356) - (autoplace_cost180 10) - (fp_text reference R4 (at 0 -0.127 270) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 270) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 55 col4) - ) - (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 17 N-0000050) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17C62) - (at 47.76 102.94 270) - (descr "Resitance 3 pas") - (tags R) - (path /5490835C) - (autoplace_cost180 10) - (fp_text reference R5 (at 0 -0.127 270) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 270) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 56 col5) - ) - (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 16 N-0000049) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17C70) - (at 50.3 102.94 270) - (descr "Resitance 3 pas") - (tags R) - (path /54908362) - (autoplace_cost180 10) - (fp_text reference R6 (at 0 -0.127 270) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 270) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 57 col6) - ) - (pad 2 thru_hole circle (at 3.81 0 270) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 5 N-0000036) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17C7E) - (at 52.84 102.94 90) - (descr "Resitance 3 pas") - (tags R) - (path /54908368) - (autoplace_cost180 10) - (fp_text reference R7 (at 0 -0.127 90) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 90) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 9 N-0000040) - ) - (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 58 col7) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17C8C) - (at 55.38 102.94 90) - (descr "Resitance 3 pas") - (tags R) - (path /5490836E) - (autoplace_cost180 10) - (fp_text reference R8 (at 0 -0.127 90) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 90) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 18 N-0000051) - ) - (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 59 col8) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B1C0BD) - (at 60.46 102.94 90) - (descr "Resitance 3 pas") - (tags R) - (path /5490837A) - (autoplace_cost180 10) - (fp_text reference R10 (at 0 -0.127 90) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 90) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 6 N-0000037) - ) - (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 48 col10) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17CA8) - (at 63 102.94 90) - (descr "Resitance 3 pas") - (tags R) - (path /54908380) - (autoplace_cost180 10) - (fp_text reference R11 (at 0 -0.127 90) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 90) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 8 N-0000039) - ) - (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 49 col11) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer B.Cu) (tedit 4E4C0E65) (tstamp 54B17CB6) - (at 65.54 102.94 90) - (descr "Resitance 3 pas") - (tags R) - (path /54908386) - (autoplace_cost180 10) - (fp_text reference R12 (at 0 -0.127 90) (layer B.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_text value 390 (at 0 -0.127 90) (layer B.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end -3.302 1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end -3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end 3.302 -1.016) (layer B.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end 3.302 0) (layer B.SilkS) (width 0.2032)) - (fp_line (start -3.302 0.508) (end -2.794 1.016) (layer B.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 15 N-0000048) - ) - (pad 2 thru_hole circle (at 3.81 0 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 50 col12) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17CC4) - (at 78.9 133.08) - (descr "Resitance 3 pas") - (tags R) - (path /5490838C) - (autoplace_cost180 10) - (fp_text reference R_ROW1 (at 0 0.127) (layer F.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_text value 1K (at 0 0.127) (layer F.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 7 N-0000038) - ) - (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17CD2) - (at 18.75 129.5 180) - (descr "Resitance 3 pas") - (tags R) - (path /5490839E) - (autoplace_cost180 10) - (fp_text reference R_ROW2 (at 0 0.127 180) (layer F.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_text value 1K (at 0 0.127 180) (layer F.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 14 N-0000047) - ) - (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 70 row2) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17CE0) - (at 218.6 133.08) - (descr "Resitance 3 pas") - (tags R) - (path /549083A4) - (autoplace_cost180 10) - (fp_text reference R_ROW3 (at 0 0.127) (layer F.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_text value 1K (at 0 0.127) (layer F.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 10 N-0000041) - ) - (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module DIP-18__300 (layer B.Cu) (tedit 200000) (tstamp 54B17CFD) - (at 219.05 100.97 90) - (descr "8 pins DIL package, round pads") - (path /54B17386) - (fp_text reference P2 (at -7.62 1.27 90) (layer B.SilkS) - (effects (font (size 1.778 1.143) (thickness 0.3048)) (justify mirror)) - ) - (fp_text value UDN2981A (at 5.08 -1.27 90) (layer B.SilkS) - (effects (font (size 1.778 1.143) (thickness 0.3048)) (justify mirror)) - ) - (fp_line (start -12.7 1.27) (end -11.43 1.27) (layer B.SilkS) (width 0.381)) - (fp_line (start -11.43 1.27) (end -11.43 -1.27) (layer B.SilkS) (width 0.381)) - (fp_line (start -11.43 -1.27) (end -12.7 -1.27) (layer B.SilkS) (width 0.381)) - (fp_line (start -12.7 2.54) (end 12.7 2.54) (layer B.SilkS) (width 0.381)) - (fp_line (start 12.7 2.54) (end 12.7 -2.54) (layer B.SilkS) (width 0.381)) - (fp_line (start 12.7 -2.54) (end -12.7 -2.54) (layer B.SilkS) (width 0.381)) - (fp_line (start -12.7 -2.54) (end -12.7 2.54) (layer B.SilkS) (width 0.381)) - (pad 1 thru_hole rect (at -10.16 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 72 xled1) - ) - (pad 2 thru_hole circle (at -7.62 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 73 xled2) - ) - (pad 3 thru_hole circle (at -5.08 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 74 xled3) - ) - (pad 4 thru_hole circle (at -2.54 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 75 xled4) - ) - (pad 5 thru_hole circle (at 0 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 76 xled5) - ) - (pad 6 thru_hole circle (at 2.54 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 77 xled6) - ) - (pad 7 thru_hole circle (at 5.08 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 78 xled7) - ) - (pad 8 thru_hole circle (at 7.62 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 79 xled8) - ) - (pad 9 thru_hole circle (at 10.16 -3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 2 +5V) - ) - (pad 10 thru_hole circle (at 10.16 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad 11 thru_hole circle (at 7.62 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 68 led8) - ) - (pad 12 thru_hole circle (at 5.08 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 67 led7) - ) - (pad 13 thru_hole circle (at 2.54 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 66 led6) - ) - (pad 14 thru_hole circle (at 0 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 65 led5) - ) - (pad 15 thru_hole circle (at -2.54 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 64 led4) - ) - (pad 16 thru_hole circle (at -5.08 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 63 led3) - ) - (pad 17 thru_hole circle (at -7.62 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 62 led2) - ) - (pad 18 thru_hole circle (at -10.16 3.81 90) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask B.SilkS) - (net 61 led1) - ) - (model dil/dil_18.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54B1C854) - (at 13.5 68) - (descr "module 1 pin (ou trou mecanique de percage)") - (tags DEV) - (path /54B1CC4A) - (fp_text reference M1 (at 0 -3.048) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_text value M (at 0 2.794) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module 1pin (layer F.Cu) (tedit 200000) (tstamp 554E4F5F) - (at 13.5 159) - (descr "module 1 pin (ou trou mecanique de percage)") - (tags DEV) - (path /54B1CC76) - (fp_text reference M2 (at 0 -3.048) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_text value M (at 0 2.794) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54B1C860) - (at 284.5 68) - (descr "module 1 pin (ou trou mecanique de percage)") - (tags DEV) - (path /54B1CC7C) - (fp_text reference M3 (at 0 -3.048) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_text value M (at 0 2.794) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54B1C866) - (at 285.5 159) - (descr "module 1 pin (ou trou mecanique de percage)") - (tags DEV) - (path /54B1CC82) - (fp_text reference M4 (at 0 -3.048) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_text value M (at 0 2.794) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17F78) - (at 249 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070DB) - (fp_text reference D23 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 29 N-0000066) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D1D) - (at 259 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070E1) - (fp_text reference D24 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 30 N-0000067) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D2D) - (at 239 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070D5) - (fp_text reference D22 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 28 N-0000065) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D3D) - (at 269 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070E7) - (fp_text reference D25 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 31 N-0000068) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D4D) - (at 279 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070ED) - (fp_text reference D26 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 24 N-0000059) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D5D) - (at 139 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905640) - (fp_text reference D12 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 38 N-0000085) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D6D) - (at 39 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /5490504C) - (fp_text reference D2 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 11 N-0000043) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D7D) - (at 49 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905056) - (fp_text reference D3 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 13 N-0000045) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D8D) - (at 59 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /5490505E) - (fp_text reference D4 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 23 N-0000057) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D9D) - (at 69 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905068) - (fp_text reference D5 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 22 N-0000056) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DAD) - (at 79 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /5490506E) - (fp_text reference D6 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 21 N-0000055) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DBD) - (at 89 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549055F9) - (fp_text reference D7 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 32 N-0000074) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DCD) - (at 99 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549055FF) - (fp_text reference D8 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 34 N-0000081) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DDD) - (at 109 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905605) - (fp_text reference D9 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 35 N-0000082) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DED) - (at 119 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /5490560B) - (fp_text reference D10 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 36 N-0000083) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DFD) - (at 129 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905611) - (fp_text reference D11 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 37 N-0000084) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E0D) - (at 29 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54904DF0) - (fp_text reference D1 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 12 N-0000044) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E1D) - (at 149 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905646) - (fp_text reference D13 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 39 N-0000086) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E2D) - (at 159 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /5490564C) - (fp_text reference D14 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 40 N-0000087) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E3D) - (at 169 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905652) - (fp_text reference D15 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 41 N-0000088) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E4D) - (at 179 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905658) - (fp_text reference D16 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 33 N-0000080) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E5D) - (at 189 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /5490565E) - (fp_text reference D17 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 42 N-0000089) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 49 col11) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E6D) - (at 199 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /54905664) - (fp_text reference D18 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 43 N-0000090) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 50 col12) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E7D) - (at 209 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070C3) - (fp_text reference D19 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 25 N-0000062) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E8D) - (at 219 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070C9) - (fp_text reference D20 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 26 N-0000063) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E9D) - (at 229 136.5) - (descr "Diode 3 pas") - (tags "DIODE DEV") - (path /549070CF) - (fp_text reference D21 (at 0 -0.508) (layer F.SilkS) - (effects (font (size 0.25 0.25) (thickness 0.05))) - ) - (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide - (effects (font (size 0.381 0.381) (thickness 0.0762))) - ) - (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) - (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) - (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 27 N-0000064) - ) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/diode.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module RASPI_BPLUS_MIRRORED (layer B.Cu) (tedit 54BD7BC3) (tstamp 54B1C6FA) - (at 64 124 180) - (descr "Double rangee de contacts 2 x 12 pins") - (tags CONN) - (path /548F13F7) - (fp_text reference P1 (at 0 3.81 180) (layer B.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.27432)) (justify mirror)) - ) - (fp_text value RASPI_MODEL_B_PLUS_GPIO (at 0 -3.81 180) (layer B.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) - ) - (fp_text user ETH (at 49.53 43.18 450) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start 48.768 49.022) (end 53.594 49.022) (layer B.SilkS) (width 0.15)) - (fp_line (start 53.594 49.022) (end 53.594 38.354) (layer B.SilkS) (width 0.15)) - (fp_line (start 53.594 38.354) (end 49.784 38.354) (layer B.SilkS) (width 0.15)) - (fp_text user "GPIO and mount holes exact, port placement approx." (at 8 40.5 180) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text user "RASPI B PLUS (MIRROR IMAGE)" (at 7.5 43 180) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text user microUSB (at -19 47 180) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start -22 49.008) (end -22 52.508) (layer B.SilkS) (width 0.15)) - (fp_line (start -16 49.008) (end -16 52.508) (layer B.SilkS) (width 0.15)) - (fp_text user HDMI (at 0 47 180) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start -7 48.5) (end -7 52.5) (layer B.SilkS) (width 0.15)) - (fp_line (start 6 48.5) (end 6 52.5) (layer B.SilkS) (width 0.15)) - (fp_text user USB (at 49.5 3.5 450) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_text user USB (at 49.5 20.5 450) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start 49.5 11.032) (end 54 11.032) (layer B.SilkS) (width 0.15)) - (fp_line (start 54 11.032) (end 54 0.032) (layer B.SilkS) (width 0.15)) - (fp_line (start 54 0.032) (end 50 0.032) (layer B.SilkS) (width 0.15)) - (fp_line (start 49.5 28.032) (end 54 28.032) (layer B.SilkS) (width 0.15)) - (fp_line (start 54 28.032) (end 54 16.532) (layer B.SilkS) (width 0.15)) - (fp_line (start 54 16.532) (end 49.5 16.532) (layer B.SilkS) (width 0.15)) - (fp_line (start -32.5 -3.5) (end 52.5 -3.5) (layer B.SilkS) (width 0.15)) - (fp_line (start 52.5 52.5) (end 52.5 -3.5) (layer B.SilkS) (width 0.15)) - (fp_line (start 52.5 52.5) (end 32 52.5) (layer B.SilkS) (width 0.15)) - (fp_line (start -32.5 52.5) (end -32.5 -3.5) (layer B.SilkS) (width 0.15)) - (fp_line (start -32.5 52.5) (end 32.5 52.5) (layer B.SilkS) (width 0.15)) - (fp_line (start 25.4 -2.54) (end -25.4 -2.54) (layer B.SilkS) (width 0.3048)) - (fp_line (start 25.4 2.54) (end -25.4 2.54) (layer B.SilkS) (width 0.3048)) - (fp_line (start 25.4 2.54) (end 25.4 -2.54) (layer B.SilkS) (width 0.3048)) - (fp_line (start -25.4 2.54) (end -25.4 -2.54) (layer B.SilkS) (width 0.3048)) - (pad 1 thru_hole rect (at -24.13 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 1 +3.3V) - ) - (pad 2 thru_hole circle (at -24.13 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 2 +5V) - ) - (pad 11 thru_hole circle (at -11.43 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 14 N-0000047) - ) - (pad 4 thru_hole circle (at -21.59 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 2 +5V) - ) - (pad 13 thru_hole circle (at -8.89 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 79 xled8) - ) - (pad 6 thru_hole circle (at -19.05 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad 15 thru_hole circle (at -6.35 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 74 xled3) - ) - (pad 8 thru_hole circle (at -16.51 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 46 TX) - ) - (pad 17 thru_hole circle (at -3.81 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 10 thru_hole circle (at -13.97 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 44 RX) - ) - (pad 19 thru_hole circle (at -1.27 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 19 N-0000052) - ) - (pad 12 thru_hole circle (at -11.43 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 10 N-0000041) - ) - (pad 21 thru_hole circle (at 1.27 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 18 N-0000051) - ) - (pad 14 thru_hole circle (at -8.89 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 23 thru_hole circle (at 3.81 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 6 N-0000037) - ) - (pad 16 thru_hole circle (at -6.35 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 75 xled4) - ) - (pad 25 thru_hole circle (at 6.35 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 18 thru_hole circle (at -3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 76 xled5) - ) - (pad 27 thru_hole circle (at 8.89 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 20 thru_hole circle (at -1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad 29 thru_hole circle (at 11.43 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 17 N-0000050) - ) - (pad 22 thru_hole circle (at 1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 77 xled6) - ) - (pad 31 thru_hole circle (at 13.97 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 16 N-0000049) - ) - (pad 24 thru_hole circle (at 3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 9 N-0000040) - ) - (pad 26 thru_hole circle (at 6.35 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 5 N-0000036) - ) - (pad 33 thru_hole circle (at 16.51 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 15 N-0000048) - ) - (pad 28 thru_hole circle (at 8.89 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 32 thru_hole circle (at 13.97 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 8 N-0000039) - ) - (pad 34 thru_hole circle (at 16.51 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 36 thru_hole circle (at 19.05 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 7 N-0000038) - ) - (pad 38 thru_hole circle (at 21.59 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 72 xled1) - ) - (pad 35 thru_hole circle (at 19.05 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 45 SPARE_IO) - ) - (pad 37 thru_hole circle (at 21.59 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 78 xled7) - ) - (pad 3 thru_hole circle (at -21.59 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 51 col1a) - ) - (pad 5 thru_hole circle (at -19.05 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 53 col2a) - ) - (pad 7 thru_hole circle (at -16.51 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 20 N-0000053) - ) - (pad 9 thru_hole circle (at -13.97 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad 39 thru_hole circle (at 24.13 1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad 40 thru_hole circle (at 24.13 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 73 xled2) - ) - (pad 30 thru_hole circle (at 11.43 -1.27 180) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad H2 thru_hole circle (at -29 0 180) (size 5.7 5.7) (drill 2.75) - (layers *.Cu *.Mask B.SilkS) - ) - (pad H3 thru_hole circle (at 29 0 180) (size 5.7 5.7) (drill 2.75) - (layers *.Cu *.Mask B.SilkS) - ) - (pad H4 thru_hole circle (at 29 49 180) (size 5.7 5.7) (drill 2.75) - (layers *.Cu *.Mask B.SilkS) - ) - (pad H1 thru_hole circle (at -29 49 180) (size 5.7 5.7) (drill 2.75) - (layers *.Cu *.Mask B.SilkS) - ) - (model pin_array/pins_array_20x2.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54BD0940) - (at 208 68) - (descr "module 1 pin (ou trou mecanique de percage)") - (tags DEV) - (path /54BD36C6) - (fp_text reference M5 (at 0 -3.048) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_text value M (at 0 2.794) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54BD0946) - (at 284.5 132) - (descr "module 1 pin (ou trou mecanique de percage)") - (tags DEV) - (path /54BD36CC) - (fp_text reference M6 (at 0 -3.048) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_text value M (at 0 2.794) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54BD094C) - (at 208 132) - (descr "module 1 pin (ou trou mecanique de percage)") - (tags DEV) - (path /54BD36D2) - (fp_text reference M7 (at 0 -3.048) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_text value M (at 0 2.794) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.254))) - ) - (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) - (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F22E4) - (at 169 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5B2) - (fp_text reference DMB9 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F22CB) - (at 179 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5B8) - (fp_text reference DMB10 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F22B2) - (at 189 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5BE) - (fp_text reference DMB11 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 49 col11) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2299) - (at 199 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5C4) - (fp_text reference DMB12 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 50 col12) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2280) - (at 89 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5CC) - (fp_text reference DAC1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2267) - (at 99 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5E5) - (fp_text reference DAC2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F224E) - (at 109 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5EB) - (fp_text reference DAC3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2235) - (at 119 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5F1) - (fp_text reference DAC4 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F221C) - (at 129 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5F7) - (fp_text reference DAC5 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2203) - (at 139 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5FD) - (fp_text reference DAC6 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F21EA) - (at 149 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF603) - (fp_text reference DAC7 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F21D1) - (at 159 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF609) - (fp_text reference DAC8 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F21B8) - (at 169 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF60F) - (fp_text reference DAC9 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F219F) - (at 179 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF615) - (fp_text reference DAC10 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2186) - (at 89 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF34A) - (fp_text reference DPC1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F216D) - (at 199 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF621) - (fp_text reference DAC12 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 50 col12) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2154) - (at 89 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF629) - (fp_text reference DMQ1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F213B) - (at 99 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF642) - (fp_text reference DMQ2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2122) - (at 109 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF648) - (fp_text reference DMQ3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2109) - (at 119 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF64E) - (fp_text reference DMQ4 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20F0) - (at 129 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF654) - (fp_text reference DMQ5 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20D7) - (at 139 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF65A) - (fp_text reference DMQ6 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20BE) - (at 149 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF660) - (fp_text reference DMQ7 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20A5) - (at 159 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF666) - (fp_text reference DMQ8 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F208C) - (at 169 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF66C) - (fp_text reference DMQ9 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2073) - (at 179 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF672) - (fp_text reference DMQ10 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F205A) - (at 189 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF678) - (fp_text reference DMQ11 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 49 col11) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2041) - (at 199 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF67E) - (fp_text reference DMQ12 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 65 led5) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 50 col12) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2028) - (at 79 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF686) - (fp_text reference DLINK1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 68 led8) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F200F) - (at 29 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6A1) - (fp_text reference DSC1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1FF6) - (at 189 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF61B) - (fp_text reference DAC11 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 64 led4) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 49 col11) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1FDD) - (at 99 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF399) - (fp_text reference DPC2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1FC4) - (at 109 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3AC) - (fp_text reference DPC3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1FAB) - (at 119 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3B2) - (fp_text reference DPC4 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1F92) - (at 129 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3B8) - (fp_text reference DPC5 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1F79) - (at 139 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3BE) - (fp_text reference DPC6 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1F60) - (at 149 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3C4) - (fp_text reference DPC7 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1F47) - (at 159 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3CA) - (fp_text reference DPC8 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1F2E) - (at 169 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3D0) - (fp_text reference DPC9 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1F15) - (at 179 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3D6) - (fp_text reference DPC10 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1EFC) - (at 189 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3DC) - (fp_text reference DPC11 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 49 col11) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1EE3) - (at 199 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF3E2) - (fp_text reference DPC12 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 61 led1) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 50 col12) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1ECA) - (at 89 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF463) - (fp_text reference DMA1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1EB1) - (at 99 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF47C) - (fp_text reference DMA2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E98) - (at 109 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF482) - (fp_text reference DMA3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E7F) - (at 159 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5AC) - (fp_text reference DMB8 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E66) - (at 129 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF48E) - (fp_text reference DMA5 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E4D) - (at 139 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF494) - (fp_text reference DMA6 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E34) - (at 149 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF49A) - (fp_text reference DMA7 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E1B) - (at 159 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF4A0) - (fp_text reference DMA8 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E02) - (at 169 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF4A6) - (fp_text reference DMA9 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1DE9) - (at 179 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF4AC) - (fp_text reference DMA10 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1DD0) - (at 189 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF4B2) - (fp_text reference DMA11 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 49 col11) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1DB7) - (at 199 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF4B8) - (fp_text reference DMA12 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 50 col12) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D9E) - (at 89 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF56F) - (fp_text reference DMB1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D85) - (at 99 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF588) - (fp_text reference DMB2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D6C) - (at 109 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF58E) - (fp_text reference DMB3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D53) - (at 119 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF594) - (fp_text reference DMB4 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D3A) - (at 129 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF59A) - (fp_text reference DMB5 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D21) - (at 139 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5A0) - (fp_text reference DMB6 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D08) - (at 149 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF5A6) - (fp_text reference DMB7 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 63 led3) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1CEF) - (at 119 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF488) - (fp_text reference DMA4 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 62 led2) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD77AA) (tstamp 548F1CD6) - (at 279 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF843) - (fp_text reference DRUN1 (at -9 -1.7) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD77A3) (tstamp 548F1CBD) - (at 279 77.9) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF83D) - (fp_text reference DPAUSE1 (at -8.5 -1.9) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD77A5) (tstamp 548F1CA4) - (at 279 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF837) - (fp_text reference DION1 (at -9.5 -2.1) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD778C) (tstamp 548F1C8B) - (at 259 107.1) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF7E9) - (fp_text reference DBREAK1 (at -8.5 -1.6) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7784) (tstamp 548F1C72) - (at 259 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF7E3) - (fp_text reference DCURAD1 (at -8.5 -1.8) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD777C) (tstamp 548F1C59) - (at 259 92.5) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF7DD) - (fp_text reference DWRDCT1 (at -8.5 -2) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 50 col12) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7779) (tstamp 548F1C40) - (at 259 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF7D7) - (fp_text reference DDEFER1 (at -8.5 -1.7) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 49 col11) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7795) (tstamp 548F1C27) - (at 259 77.9) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF7D1) - (fp_text reference DEXEC1 (at -9 -1.9) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7797) (tstamp 548F1C0E) - (at 259 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF7CB) - (fp_text reference DFETCH1 (at -9 -2.1) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD774F) (tstamp 548F1BF5) - (at 239 121.7) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF789) - (fp_text reference DOPR1 (at -7.5 -1.7) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD773D) (tstamp 548F1BDC) - (at 239 114.4) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF783) - (fp_text reference DIOT1 (at -7.5 -1.9) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7737) (tstamp 548F1BC3) - (at 239 107.1) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF77D) - (fp_text reference DJMP1 (at -7.5 -1.6) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD772E) (tstamp 548F1BAA) - (at 239 99.8) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF777) - (fp_text reference DJMS1 (at -8 -1.8) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7708) (tstamp 548F1B91) - (at 239 92.5) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF741) - (fp_text reference DDCA1 (at -8 -1.5) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1B78) - (at 39 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6BA) - (fp_text reference DSC2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 58 col7) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1B5F) - (at 59 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6C6) - (fp_text reference DSC4 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 60 col9) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1B46) - (at 69 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6CC) - (fp_text reference DSC5 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 48 col10) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1B14) - (at 29 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6DA) - (fp_text reference DDF1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 68 led8) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1AFB) - (at 39 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6F3) - (fp_text reference DDF2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 68 led8) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1AE2) - (at 49 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6F9) - (fp_text reference DDF3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 68 led8) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1AC9) - (at 49 129) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF6C0) - (fp_text reference DSC3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 59 col8) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7714) (tstamp 548F1AB0) - (at 239 77.9) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF735) - (fp_text reference DTAD1 (at -8 -1.9) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 52 col2) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7712) (tstamp 548F1A97) - (at 239 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF728) - (fp_text reference DAND1 (at -8 -2.1) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 47 col1) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD771B) (tstamp 548F1A7E) - (at 239 85.2) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF73B) - (fp_text reference DISZ1 (at -8 -1.7) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 66 led6) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 54 col3) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1A65) - (at 69 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF71A) - (fp_text reference DIF2 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 68 led8) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1A4C) - (at 79 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF720) - (fp_text reference DIF3 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 68 led8) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 57 col6) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1A33) - (at 59 70.6) - (descr "LED 3mm - Lead pitch 100mil (2,54mm)") - (tags "LED led 3mm 3MM 100mil 2,54mm") - (path /548EF701) - (fp_text reference DIF1 (at 0 -5.5372) (layer F.SilkS) - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) - (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) - (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) - (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 68 led8) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F19EA) - (at 79 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFC1B) - (fp_text reference SW6 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value IF3 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 70 row2) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 21 N-0000055) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F19D9) - (at 69 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFC15) - (fp_text reference SW5 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value IF2 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 70 row2) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 22 N-0000056) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F19C8) - (at 59 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFC0F) - (fp_text reference SW4 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value IF1 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 70 row2) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 23 N-0000057) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F19B7) - (at 49 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFC09) - (fp_text reference SW3 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value DF3 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 70 row2) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 13 N-0000045) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F19A6) - (at 39 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFC03) - (fp_text reference SW2 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value DF2 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 70 row2) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 11 N-0000043) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1995) - (at 29 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFBFD) - (fp_text reference SW1 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value DF1 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 70 row2) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 12 N-0000044) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1984) - (at 199 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB6C) - (fp_text reference SW18 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR12 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 43 N-0000090) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1973) - (at 189 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB66) - (fp_text reference SW17 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR11 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 42 N-0000089) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1962) - (at 169 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB5A) - (fp_text reference SW15 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR9 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 41 N-0000088) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1951) - (at 159 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB54) - (fp_text reference SW14 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR8 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 40 N-0000087) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1940) - (at 149 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB4E) - (fp_text reference SW13 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR7 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 39 N-0000086) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F192F) - (at 139 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB48) - (fp_text reference SW12 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR6 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 38 N-0000085) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F191E) - (at 209 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF86F) - (fp_text reference SW19 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value START (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 25 N-0000062) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F190D) - (at 219 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF87C) - (fp_text reference SW20 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value LOAD_ADD (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 26 N-0000063) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F18FC) - (at 179 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB60) - (fp_text reference SW16 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR10 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 33 N-0000080) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F18EB) - (at 239 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF888) - (fp_text reference SW22 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value EXAM (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 28 N-0000065) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F18DA) - (at 249 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF88E) - (fp_text reference SW23 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value CONT (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 29 N-0000066) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F18C9) - (at 259 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF894) - (fp_text reference SW24 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value STOP (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 30 N-0000067) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F18B8) - (at 269 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF89A) - (fp_text reference SW25 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SING_STEP (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 31 N-0000068) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F18A7) - (at 279 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF8A0) - (fp_text reference SW26 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SING_INST (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 24 N-0000059) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1896) - (at 89 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFAF8) - (fp_text reference SW7 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR1 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 32 N-0000074) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1885) - (at 99 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB27) - (fp_text reference SW8 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR2 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 34 N-0000081) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1874) - (at 109 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB2D) - (fp_text reference SW9 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR3 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 35 N-0000082) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1863) - (at 119 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB33) - (fp_text reference SW10 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR4 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 36 N-0000083) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1852) - (at 129 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EFB42) - (fp_text reference SW11 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value SR5 (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 69 row1) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 37 N-0000084) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module SW_KND2_PDP2 (layer F.Cu) (tedit 554E2AD7) (tstamp 548F1841) - (at 229 159.5) - (descr "Switch inverseur") - (tags "SWITCH DEV") - (path /548EF882) - (fp_text reference SW21 (at 3.429 -3.683 90) (layer F.SilkS) hide - (effects (font (size 0.3 0.3) (thickness 0.05))) - ) - (fp_text value DEP (at -0.05 -20.3) (layer F.SilkS) - (effects (font (size 1.2 1.2) (thickness 0.2032))) - ) - (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 1.958) (end 4.75 1.958) (layer F.SilkS) (width 0.15)) - (fp_line (start -4.75 -10.3) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end 4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -18.9) (end -4.75 -18.9) (layer F.SilkS) (width 0.15)) - (fp_line (start 4.75 -10.3) (end -4.75 -10.3) (layer F.SilkS) (width 0.15)) - (pad 1 thru_hole oval (at 0 0) (size 5.08 2.54) (drill oval 3.45 1.18) - (layers *.Cu *.Mask F.SilkS) - (net 71 row3) - ) - (pad 2 thru_hole oval (at 0 -5.58) (size 5.08 2.54) (drill oval 3.45 1.15) - (layers *.Cu *.Mask F.SilkS) - (net 27 N-0000064) - ) - (pad 3 thru_hole circle (at 0 -15) (size 4 4) (drill 3) - (layers *.Cu *.Mask F.SilkS) - ) - ) - - (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 554E2BA1) - (at 18.75 133) - (descr "Resitance 3 pas") - (tags R) - (path /554E5219) - (autoplace_cost180 10) - (fp_text reference R_S1 (at 0 0.127) (layer F.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_text value 300 (at 0 0.127) (layer F.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 4 N-0000029) - ) - (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 44 RX) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 554E2BAF) - (at 18.75 136.5) - (descr "Resitance 3 pas") - (tags R) - (path /554E5233) - (autoplace_cost180 10) - (fp_text reference R_S2 (at 0 0.127) (layer F.SilkS) hide - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_text value 620 (at 0 0.127) (layer F.SilkS) - (effects (font (size 1.397 1.27) (thickness 0.2032))) - ) - (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) - (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) - (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) - (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 3 GND) - ) - (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 4 N-0000029) - ) - (model discret/resistor.wrl - (at (xyz 0 0 0)) - (scale (xyz 0.3 0.3 0.3)) - (rotate (xyz 0 0 0)) - ) - ) - - (module PIN_ARRAY_4x1 (layer F.Cu) (tedit 4C10F42E) (tstamp 554E2BBB) - (at 11.5 136 270) - (descr "Double rangee de contacts 2 x 5 pins") - (tags CONN) - (path /554E5206) - (fp_text reference P5 (at 0 -2.54 270) (layer F.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.2032))) - ) - (fp_text value "SERIAL 5V TTL" (at 0 2.54 270) (layer F.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.2032))) - ) - (fp_line (start 5.08 1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.254)) - (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer F.SilkS) (width 0.254)) - (fp_line (start -5.08 -1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.254)) - (fp_line (start 5.08 1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.254)) - (pad 1 thru_hole rect (at -3.81 0 270) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask F.SilkS) - (net 3 GND) - ) - (pad 2 thru_hole circle (at -1.27 0 270) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask F.SilkS) - (net 2 +5V) - ) - (pad 3 thru_hole circle (at 1.27 0 270) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask F.SilkS) - (net 4 N-0000029) - ) - (pad 4 thru_hole circle (at 3.81 0 270) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask F.SilkS) - (net 46 TX) - ) - (model pin_array\pins_array_4x1.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module PIN_ARRAY_20X2 (layer B.Cu) (tedit 5031D84E) (tstamp 54BD2EE9) - (at 253.9 130.05) - (descr "Double rangee de contacts 2 x 12 pins") - (tags CONN) - (path /554E0D39) - (fp_text reference P3 (at 0 3.81) (layer B.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.27432)) (justify mirror)) - ) - (fp_text value EXPANSION_20X2 (at 0 -3.81) (layer B.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) - ) - (fp_line (start 25.4 -2.54) (end -25.4 -2.54) (layer B.SilkS) (width 0.3048)) - (fp_line (start 25.4 2.54) (end -25.4 2.54) (layer B.SilkS) (width 0.3048)) - (fp_line (start 25.4 2.54) (end 25.4 -2.54) (layer B.SilkS) (width 0.3048)) - (fp_line (start -25.4 2.54) (end -25.4 -2.54) (layer B.SilkS) (width 0.3048)) - (pad 1 thru_hole rect (at -24.13 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 2 +5V) - ) - (pad 2 thru_hole circle (at -24.13 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 2 +5V) - ) - (pad 11 thru_hole circle (at -11.43 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 68 led8) - ) - (pad 4 thru_hole circle (at -21.59 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 13 thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 70 row2) - ) - (pad 6 thru_hole circle (at -19.05 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 1 +3.3V) - ) - (pad 15 thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 45 SPARE_IO) - ) - (pad 8 thru_hole circle (at -16.51 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad 17 thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 47 col1) - ) - (pad 10 thru_hole circle (at -13.97 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 67 led7) - ) - (pad 19 thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 52 col2) - ) - (pad 12 thru_hole circle (at -11.43 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 68 led8) - ) - (pad 21 thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 54 col3) - ) - (pad 14 thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 70 row2) - ) - (pad 23 thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 55 col4) - ) - (pad 16 thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 45 SPARE_IO) - ) - (pad 25 thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 56 col5) - ) - (pad 18 thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 47 col1) - ) - (pad 27 thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 57 col6) - ) - (pad 20 thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 52 col2) - ) - (pad 29 thru_hole circle (at 11.43 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 58 col7) - ) - (pad 22 thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 54 col3) - ) - (pad 31 thru_hole circle (at 13.97 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 59 col8) - ) - (pad 24 thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 55 col4) - ) - (pad 26 thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 56 col5) - ) - (pad 33 thru_hole circle (at 16.51 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 60 col9) - ) - (pad 28 thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 57 col6) - ) - (pad 32 thru_hole circle (at 13.97 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 59 col8) - ) - (pad 34 thru_hole circle (at 16.51 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 60 col9) - ) - (pad 36 thru_hole circle (at 19.05 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 48 col10) - ) - (pad 38 thru_hole circle (at 21.59 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 49 col11) - ) - (pad 35 thru_hole circle (at 19.05 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 48 col10) - ) - (pad 37 thru_hole circle (at 21.59 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 49 col11) - ) - (pad 3 thru_hole circle (at -21.59 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - ) - (pad 5 thru_hole circle (at -19.05 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 1 +3.3V) - ) - (pad 7 thru_hole circle (at -16.51 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 3 GND) - ) - (pad 9 thru_hole circle (at -13.97 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 67 led7) - ) - (pad 39 thru_hole circle (at 24.13 -1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 50 col12) - ) - (pad 40 thru_hole circle (at 24.13 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 50 col12) - ) - (pad 30 thru_hole circle (at 11.43 1.27) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 58 col7) - ) - (model pin_array/pins_array_20x2.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-StrEight (layer F.Cu) (tedit 554E561D) (tstamp 554E5741) - (at 259 114.4) - (descr LED) - (tags LED) - (path /554E5897) - (fp_text reference DPAUSE2 (at 0 -5.5372) (layer F.SilkS) hide - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 55 col4) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module LED-3-StrEight (layer F.Cu) (tedit 554E561D) (tstamp 554E5747) - (at 259 121.7) - (descr LED) - (tags LED) - (path /554E589D) - (fp_text reference DRUN2 (at 0 -5.5372) (layer F.SilkS) hide - (effects (font (size 0.7 0.7) (thickness 0.025))) - ) - (fp_text value LED (at 0 2.54) (layer F.SilkS) hide - (effects (font (size 0.762 0.762) (thickness 0.0889))) - ) - (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 67 led7) - ) - (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) - (layers *.Cu *.Mask F.SilkS) - (net 56 col5) - ) - (model discret/leds/led3_vertical_verde.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module PIN_ARRAY_3X1 (layer B.Cu) (tedit 554F4504) (tstamp 554F4492) - (at 64.3 111.8) - (descr "Connecteur 3 pins") - (tags "CONN DEV") - (path /554F46DF) - (fp_text reference J_COL1 (at -6.7 0) (layer B.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value CONN_3 (at 0 2.159) (layer B.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.81 1.27) (end 3.81 1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.81 1.27) (end 3.81 -1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.81 -1.27) (end -3.81 -1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer B.SilkS) (width 0.1524)) - (pad 1 thru_hole rect (at -2.54 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 51 col1a) - ) - (pad 2 thru_hole circle (at 0 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 46 TX) - ) - (pad 3 thru_hole circle (at 2.54 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 46 TX) - ) - (model pin_array/pins_array_3x1.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (module PIN_ARRAY_3X1 (layer B.Cu) (tedit 554F4512) (tstamp 554F449E) - (at 64.3 115.2) - (descr "Connecteur 3 pins") - (tags "CONN DEV") - (path /554F46EE) - (fp_text reference J_COL2 (at -6.7 0) (layer B.SilkS) - (effects (font (size 1.016 1.016) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value CONN_3 (at 0 2.159) (layer B.SilkS) hide - (effects (font (size 1.016 1.016) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -3.81 -1.27) (end -3.81 1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.81 1.27) (end 3.81 1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.81 1.27) (end 3.81 -1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.81 -1.27) (end -3.81 -1.27) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.27 1.27) (end -1.27 -1.27) (layer B.SilkS) (width 0.1524)) - (pad 1 thru_hole rect (at -2.54 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 53 col2a) - ) - (pad 2 thru_hole circle (at 0 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 44 RX) - ) - (pad 3 thru_hole circle (at 2.54 0) (size 1.524 1.524) (drill 1.016) - (layers *.Cu *.Mask B.SilkS) - (net 44 RX) - ) - (model pin_array/pins_array_3x1.wrl - (at (xyz 0 0 0)) - (scale (xyz 1 1 1)) - (rotate (xyz 0 0 0)) - ) - ) - - (gr_line (start 288.5 64) (end 9.5 64) (angle 90) (layer Edge.Cuts) (width 0.1)) - (gr_line (start 9.5 163) (end 288.5 163) (angle 90) (layer Edge.Cuts) (width 0.1)) - (gr_line (start 9.5 64) (end 9.5 163) (angle 90) (layer Edge.Cuts) (width 0.1)) - (gr_line (start 65.1002 115.2144) (end 65.9892 115.2144) (angle 90) (layer B.SilkS) (width 0.2)) - (gr_line (start 65.1002 111.8108) (end 65.9892 111.8108) (angle 90) (layer B.SilkS) (width 0.2)) - (gr_text "2 optional LEDs for \nStraight Eight only" (at 262.5598 118.4148 90) (layer B.SilkS) - (effects (font (size 0.6 0.6) (thickness 0.1)) (justify mirror)) - ) - (gr_line (start 259.0038 121.7168) (end 258.953 121.7168) (angle 90) (layer B.SilkS) (width 0.2)) - (gr_line (start 261.5946 114.4524) (end 261.5946 121.793) (angle 90) (layer B.SilkS) (width 0.2)) - (gr_text "To enable serial port: mod RPi,\ncut traces 1-2 & jumper 2-3" (at 52.7304 112.9792) (layer B.SilkS) - (effects (font (size 0.6 0.6) (thickness 0.1)) (justify mirror)) - ) - (gr_line (start 288.5 163) (end 288.5 64) (angle 90) (layer Edge.Cuts) (width 0.1)) - (gr_text "PiDP-8/I\nFront Panel" (at 275 95 90) (layer B.SilkS) - (effects (font (size 3 3) (thickness 0.6)) (justify left mirror)) - ) - - (segment (start 234.85 128.78) (end 234.85 131.32) (width 0.381) (layer B.Cu) (net 1)) - (segment (start 88.13 122.73) (end 89.3368 122.73) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 233.6431 127.5731) (end 234.85 128.78) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 204.418 127.5731) (end 233.6431 127.5731) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 201.1889 130.8022) (end 204.418 127.5731) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 137.7069 130.8022) (end 201.1889 130.8022) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 130.8107 123.906) (end 137.7069 130.8022) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 130.8107 122.4756) (end 130.8107 123.906) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 129.0368 120.7017) (end 130.8107 122.4756) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 91.3651 120.7017) (end 129.0368 120.7017) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 89.3368 122.73) (end 91.3651 120.7017) (width 0.381) (layer F.Cu) (net 1)) - (segment (start 215.19 117) (end 222.81 117) (width 0.254) (layer F.Cu) (net 2)) - (segment (start 216.7832 117) (end 215.19 117) (width 0.381) (layer B.Cu) (net 2)) - (segment (start 228.5632 128.78) (end 216.7832 117) (width 0.381) (layer B.Cu) (net 2)) - (segment (start 229.77 128.78) (end 228.5632 128.78) (width 0.381) (layer B.Cu) (net 2)) - (segment (start 229.77 131.32) (end 229.77 129.9868) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 229.77 128.78) (end 229.77 129.9868) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 88.13 125.27) (end 85.59 125.27) (width 0.381) (layer B.Cu) (net 2)) - (segment (start 76.13 134.73) (end 11.5 134.73) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 85.59 125.27) (end 76.13 134.73) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 86.9231 124.0631) (end 88.13 125.27) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 86.9231 121.744) (end 86.9231 124.0631) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 88.641 120.0261) (end 86.9231 121.744) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 137.9892 120.0261) (end 88.641 120.0261) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 138.4946 120.5315) (end 137.9892 120.0261) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 211.6585 120.5315) (end 138.4946 120.5315) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 215.19 117) (end 211.6585 120.5315) (width 0.381) (layer F.Cu) (net 2)) - (segment (start 216.7001 92.2701) (end 215.24 90.81) (width 0.254) (layer B.Cu) (net 2)) - (segment (start 222.81 117) (end 222.81 115.9202) (width 0.254) (layer B.Cu) (net 2)) - (segment (start 222.81 115.9202) (end 216.7001 109.8103) (width 0.254) (layer B.Cu) (net 2)) - (segment (start 216.7001 109.8103) (end 216.7001 92.2701) (width 0.254) (layer B.Cu) (net 2)) - (segment (start 11.5 132.19) (end 12.7068 132.19) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 36.4101 98.6598) (end 36.4101 120.6624) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 51.1529 83.917) (end 36.4101 98.6598) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 101.9637 83.917) (end 51.1529 83.917) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 110.0418 91.9951) (end 101.9637 83.917) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 221.6749 91.9951) (end 110.0418 91.9951) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 222.86 90.81) (end 221.6749 91.9951) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 25.466 120.6624) (end 36.4101 120.6624) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 13.9384 132.19) (end 25.466 120.6624) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 12.7068 132.19) (end 13.9384 132.19) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 53.7769 126.4769) (end 52.57 125.27) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 64.0631 126.4769) (end 53.7769 126.4769) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 65.27 125.27) (end 64.0631 126.4769) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 37.8024 120.6624) (end 39.87 122.73) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 36.4101 120.6624) (end 37.8024 120.6624) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 51.3 124) (end 52.57 125.27) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 41.14 124) (end 51.3 124) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 39.87 122.73) (end 41.14 124) (width 0.381) (layer F.Cu) (net 3)) - (segment (start 16.0929 135.3471) (end 14.94 136.5) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 16.0929 132.5232) (end 16.0929 135.3471) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 15.4053 131.8356) (end 16.0929 132.5232) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 13.0612 131.8356) (end 15.4053 131.8356) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 12.7068 132.19) (end 13.0612 131.8356) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 11.5 132.19) (end 12.7068 132.19) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 81.8243 126.4957) (end 83.05 125.27) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 80.0256 126.4957) (end 81.8243 126.4957) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 79.24 125.7101) (end 80.0256 126.4957) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 79.24 124) (end 77.97 122.73) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 79.24 125.7101) (end 79.24 124) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 66.4863 126.4863) (end 65.27 125.27) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 78.4638 126.4863) (end 66.4863 126.4863) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 79.24 125.7101) (end 78.4638 126.4863) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 237.39 131.32) (end 237.39 128.78) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 229.8356 97.7856) (end 222.86 90.81) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 229.8356 121.2256) (end 229.8356 97.7856) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 237.39 128.78) (end 229.8356 121.2256) (width 0.381) (layer B.Cu) (net 3)) - (segment (start 14.94 133.83) (end 14.94 133) (width 0.254) (layer B.Cu) (net 4)) - (segment (start 11.5 137.27) (end 14.94 133.83) (width 0.254) (layer B.Cu) (net 4)) - (segment (start 21.4481 137.6119) (end 22.56 136.5) (width 0.254) (layer F.Cu) (net 4)) - (segment (start 11.8419 137.6119) (end 21.4481 137.6119) (width 0.254) (layer F.Cu) (net 4)) - (segment (start 11.5 137.27) (end 11.8419 137.6119) (width 0.254) (layer F.Cu) (net 4)) - (segment (start 50.3 116.2723) (end 50.3 106.75) (width 0.254) (layer B.Cu) (net 5)) - (segment (start 56.38 122.3523) (end 50.3 116.2723) (width 0.254) (layer B.Cu) (net 5)) - (segment (start 56.38 124) (end 56.38 122.3523) (width 0.254) (layer B.Cu) (net 5)) - (segment (start 57.65 125.27) (end 56.38 124) (width 0.254) (layer B.Cu) (net 5)) - (segment (start 59.3736 105.6636) (end 60.46 106.75) (width 0.254) (layer B.Cu) (net 6)) - (segment (start 54.9319 105.6636) (end 59.3736 105.6636) (width 0.254) (layer B.Cu) (net 6)) - (segment (start 54.2629 106.3326) (end 54.9319 105.6636) (width 0.254) (layer B.Cu) (net 6)) - (segment (start 54.2629 116.8029) (end 54.2629 106.3326) (width 0.254) (layer B.Cu) (net 6)) - (segment (start 60.19 122.73) (end 54.2629 116.8029) (width 0.254) (layer B.Cu) (net 6)) - (segment (start 52.618 133.08) (end 75.09 133.08) (width 0.254) (layer B.Cu) (net 7)) - (segment (start 49 129.462) (end 52.618 133.08) (width 0.254) (layer B.Cu) (net 7)) - (segment (start 49 128.4389) (end 49 129.462) (width 0.254) (layer B.Cu) (net 7)) - (segment (start 45.8311 125.27) (end 49 128.4389) (width 0.254) (layer B.Cu) (net 7)) - (segment (start 44.95 125.27) (end 45.8311 125.27) (width 0.254) (layer B.Cu) (net 7)) - (segment (start 61.4039 105.1539) (end 63 106.75) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 50.3589 105.1539) (end 61.4039 105.1539) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 49.2201 106.2927) (end 50.3589 105.1539) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 49.2201 117.556) (end 49.2201 106.2927) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 53.7535 122.0894) (end 49.2201 117.556) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 53.7535 123.1633) (end 53.7535 122.0894) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 53.0434 123.8734) (end 53.7535 123.1633) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 51.4266 123.8734) (end 53.0434 123.8734) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 50.03 125.27) (end 51.4266 123.8734) (width 0.254) (layer B.Cu) (net 8)) - (segment (start 52.84 116.099) (end 52.84 106.75) (width 0.254) (layer B.Cu) (net 9)) - (segment (start 58.92 122.179) (end 52.84 116.099) (width 0.254) (layer B.Cu) (net 9)) - (segment (start 58.92 124) (end 58.92 122.179) (width 0.254) (layer B.Cu) (net 9)) - (segment (start 60.19 125.27) (end 58.92 124) (width 0.254) (layer B.Cu) (net 9)) - (segment (start 211.8529 133.08) (end 214.79 133.08) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 210.5187 134.4142) (end 211.8529 133.08) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 206.2707 134.4142) (end 210.5187 134.4142) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 203.2306 131.3741) (end 206.2707 134.4142) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 100.8747 131.3741) (end 203.2306 131.3741) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 99 129.4994) (end 100.8747 131.3741) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 99 128.4743) (end 99 129.4994) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 97.757 127.2313) (end 99 128.4743) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 88.4342 127.2313) (end 97.757 127.2313) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 86.86 125.6571) (end 88.4342 127.2313) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 86.86 124.9006) (end 86.86 125.6571) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 86.0806 124.1212) (end 86.86 124.9006) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 76.5788 124.1212) (end 86.0806 124.1212) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 75.43 125.27) (end 76.5788 124.1212) (width 0.254) (layer F.Cu) (net 10)) - (segment (start 42.556 148.7127) (end 42.556 136.5) (width 0.254) (layer F.Cu) (net 11)) - (segment (start 39 152.2687) (end 42.556 148.7127) (width 0.254) (layer F.Cu) (net 11)) - (segment (start 39 153.92) (end 39 152.2687) (width 0.254) (layer F.Cu) (net 11)) - (segment (start 32.556 148.7127) (end 32.556 136.5) (width 0.254) (layer B.Cu) (net 12)) - (segment (start 29 152.2687) (end 32.556 148.7127) (width 0.254) (layer B.Cu) (net 12)) - (segment (start 29 153.92) (end 29 152.2687) (width 0.254) (layer B.Cu) (net 12)) - (segment (start 52.556 148.7127) (end 52.556 136.5) (width 0.254) (layer B.Cu) (net 13)) - (segment (start 49 152.2687) (end 52.556 148.7127) (width 0.254) (layer B.Cu) (net 13)) - (segment (start 49 153.92) (end 49 152.2687) (width 0.254) (layer B.Cu) (net 13)) - (segment (start 24.8265 127.2335) (end 22.56 129.5) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 67.4806 127.2335) (end 24.8265 127.2335) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 69.08 125.6341) (end 67.4806 127.2335) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 69.08 124.9232) (end 69.08 125.6341) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 69.8766 124.1266) (end 69.08 124.9232) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 74.0334 124.1266) (end 69.8766 124.1266) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 75.43 122.73) (end 74.0334 124.1266) (width 0.254) (layer F.Cu) (net 14)) - (segment (start 47.5614 122.6586) (end 47.49 122.73) (width 0.254) (layer B.Cu) (net 15)) - (segment (start 47.5614 113.2398) (end 47.5614 122.6586) (width 0.254) (layer B.Cu) (net 15)) - (segment (start 41.5681 107.2465) (end 47.5614 113.2398) (width 0.254) (layer B.Cu) (net 15)) - (segment (start 41.5681 106.2783) (end 41.5681 107.2465) (width 0.254) (layer B.Cu) (net 15)) - (segment (start 43.2397 104.6067) (end 41.5681 106.2783) (width 0.254) (layer B.Cu) (net 15)) - (segment (start 63.3967 104.6067) (end 43.2397 104.6067) (width 0.254) (layer B.Cu) (net 15)) - (segment (start 65.54 106.75) (end 63.3967 104.6067) (width 0.254) (layer B.Cu) (net 15)) - (segment (start 46.6389 105.6289) (end 47.76 106.75) (width 0.254) (layer B.Cu) (net 16)) - (segment (start 44.7939 105.6289) (end 46.6389 105.6289) (width 0.254) (layer B.Cu) (net 16)) - (segment (start 44.1005 106.3223) (end 44.7939 105.6289) (width 0.254) (layer B.Cu) (net 16)) - (segment (start 44.1005 107.2817) (end 44.1005 106.3223) (width 0.254) (layer B.Cu) (net 16)) - (segment (start 48.0697 111.2509) (end 44.1005 107.2817) (width 0.254) (layer B.Cu) (net 16)) - (segment (start 48.0697 120.7697) (end 48.0697 111.2509) (width 0.254) (layer B.Cu) (net 16)) - (segment (start 50.03 122.73) (end 48.0697 120.7697) (width 0.254) (layer B.Cu) (net 16)) - (segment (start 48.5781 110.1081) (end 45.22 106.75) (width 0.254) (layer B.Cu) (net 17)) - (segment (start 48.5781 118.7381) (end 48.5781 110.1081) (width 0.254) (layer B.Cu) (net 17)) - (segment (start 52.57 122.73) (end 48.5781 118.7381) (width 0.254) (layer B.Cu) (net 17)) - (segment (start 58.7011 110.0711) (end 55.38 106.75) (width 0.254) (layer B.Cu) (net 18)) - (segment (start 58.7011 118.7011) (end 58.7011 110.0711) (width 0.254) (layer B.Cu) (net 18)) - (segment (start 62.73 122.73) (end 58.7011 118.7011) (width 0.254) (layer B.Cu) (net 18)) - (segment (start 59.4636 108.2936) (end 57.92 106.75) (width 0.254) (layer B.Cu) (net 19)) - (segment (start 59.4636 116.9236) (end 59.4636 108.2936) (width 0.254) (layer B.Cu) (net 19)) - (segment (start 65.27 122.73) (end 59.4636 116.9236) (width 0.254) (layer B.Cu) (net 19)) - (segment (start 79.0762 121.2962) (end 80.51 122.73) (width 0.254) (layer F.Cu) (net 20)) - (segment (start 49.6975 121.2962) (end 79.0762 121.2962) (width 0.254) (layer F.Cu) (net 20)) - (segment (start 42.68 114.2787) (end 49.6975 121.2962) (width 0.254) (layer F.Cu) (net 20)) - (segment (start 42.68 106.75) (end 42.68 114.2787) (width 0.254) (layer F.Cu) (net 20)) - (segment (start 82.556 148.7127) (end 82.556 136.5) (width 0.254) (layer B.Cu) (net 21)) - (segment (start 79 152.2687) (end 82.556 148.7127) (width 0.254) (layer B.Cu) (net 21)) - (segment (start 79 153.92) (end 79 152.2687) (width 0.254) (layer B.Cu) (net 21)) - (segment (start 72.556 148.7127) (end 72.556 136.5) (width 0.254) (layer B.Cu) (net 22)) - (segment (start 69 152.2687) (end 72.556 148.7127) (width 0.254) (layer B.Cu) (net 22)) - (segment (start 69 153.92) (end 69 152.2687) (width 0.254) (layer B.Cu) (net 22)) - (segment (start 62.556 148.7127) (end 62.556 136.5) (width 0.254) (layer B.Cu) (net 23)) - (segment (start 59 152.2687) (end 62.556 148.7127) (width 0.254) (layer B.Cu) (net 23)) - (segment (start 59 153.92) (end 59 152.2687) (width 0.254) (layer B.Cu) (net 23)) - (segment (start 282.556 148.7127) (end 282.556 136.5) (width 0.254) (layer F.Cu) (net 24)) - (segment (start 279 152.2687) (end 282.556 148.7127) (width 0.254) (layer F.Cu) (net 24)) - (segment (start 279 153.92) (end 279 152.2687) (width 0.254) (layer F.Cu) (net 24)) - (segment (start 212.556 148.7127) (end 212.556 136.5) (width 0.254) (layer B.Cu) (net 25)) - (segment (start 209 152.2687) (end 212.556 148.7127) (width 0.254) (layer B.Cu) (net 25)) - (segment (start 209 153.92) (end 209 152.2687) (width 0.254) (layer B.Cu) (net 25)) - (segment (start 222.556 148.7127) (end 222.556 136.5) (width 0.254) (layer B.Cu) (net 26)) - (segment (start 219 152.2687) (end 222.556 148.7127) (width 0.254) (layer B.Cu) (net 26)) - (segment (start 219 153.92) (end 219 152.2687) (width 0.254) (layer B.Cu) (net 26)) - (segment (start 232.556 148.7127) (end 232.556 136.5) (width 0.254) (layer F.Cu) (net 27)) - (segment (start 229 152.2687) (end 232.556 148.7127) (width 0.254) (layer F.Cu) (net 27)) - (segment (start 229 153.92) (end 229 152.2687) (width 0.254) (layer F.Cu) (net 27)) - (segment (start 242.556 148.7127) (end 242.556 136.5) (width 0.254) (layer B.Cu) (net 28)) - (segment (start 239 152.2687) (end 242.556 148.7127) (width 0.254) (layer B.Cu) (net 28)) - (segment (start 239 153.92) (end 239 152.2687) (width 0.254) (layer B.Cu) (net 28)) - (segment (start 252.556 148.7127) (end 252.556 136.5) (width 0.254) (layer B.Cu) (net 29)) - (segment (start 249 152.2687) (end 252.556 148.7127) (width 0.254) (layer B.Cu) (net 29)) - (segment (start 249 153.92) (end 249 152.2687) (width 0.254) (layer B.Cu) (net 29)) - (segment (start 262.556 148.7127) (end 262.556 136.5) (width 0.254) (layer B.Cu) (net 30)) - (segment (start 259 152.2687) (end 262.556 148.7127) (width 0.254) (layer B.Cu) (net 30)) - (segment (start 259 153.92) (end 259 152.2687) (width 0.254) (layer B.Cu) (net 30)) - (segment (start 272.556 148.7127) (end 272.556 136.5) (width 0.254) (layer B.Cu) (net 31)) - (segment (start 269 152.2687) (end 272.556 148.7127) (width 0.254) (layer B.Cu) (net 31)) - (segment (start 269 153.92) (end 269 152.2687) (width 0.254) (layer B.Cu) (net 31)) - (segment (start 92.556 148.7127) (end 92.556 136.5) (width 0.254) (layer B.Cu) (net 32)) - (segment (start 89 152.2687) (end 92.556 148.7127) (width 0.254) (layer B.Cu) (net 32)) - (segment (start 89 153.92) (end 89 152.2687) (width 0.254) (layer B.Cu) (net 32)) - (segment (start 182.556 148.7127) (end 182.556 136.5) (width 0.254) (layer B.Cu) (net 33)) - (segment (start 179 152.2687) (end 182.556 148.7127) (width 0.254) (layer B.Cu) (net 33)) - (segment (start 179 153.92) (end 179 152.2687) (width 0.254) (layer B.Cu) (net 33)) - (segment (start 102.556 148.7127) (end 102.556 136.5) (width 0.254) (layer B.Cu) (net 34)) - (segment (start 99 152.2687) (end 102.556 148.7127) (width 0.254) (layer B.Cu) (net 34)) - (segment (start 99 153.92) (end 99 152.2687) (width 0.254) (layer B.Cu) (net 34)) - (segment (start 112.556 148.7127) (end 112.556 136.5) (width 0.254) (layer B.Cu) (net 35)) - (segment (start 109 152.2687) (end 112.556 148.7127) (width 0.254) (layer B.Cu) (net 35)) - (segment (start 109 153.92) (end 109 152.2687) (width 0.254) (layer B.Cu) (net 35)) - (segment (start 122.556 148.7127) (end 122.556 136.5) (width 0.254) (layer B.Cu) (net 36)) - (segment (start 119 152.2687) (end 122.556 148.7127) (width 0.254) (layer B.Cu) (net 36)) - (segment (start 119 153.92) (end 119 152.2687) (width 0.254) (layer B.Cu) (net 36)) - (segment (start 129 153.92) (end 129 152.2687) (width 0.254) (layer B.Cu) (net 37)) - (segment (start 132.556 136.5) (end 132.556 137.5798) (width 0.254) (layer B.Cu) (net 37)) - (segment (start 132.556 148.7127) (end 132.556 137.5798) (width 0.254) (layer B.Cu) (net 37)) - (segment (start 129 152.2687) (end 132.556 148.7127) (width 0.254) (layer B.Cu) (net 37)) - (segment (start 142.556 148.7127) (end 142.556 136.5) (width 0.254) (layer F.Cu) (net 38)) - (segment (start 139 152.2687) (end 142.556 148.7127) (width 0.254) (layer F.Cu) (net 38)) - (segment (start 139 153.92) (end 139 152.2687) (width 0.254) (layer F.Cu) (net 38)) - (segment (start 152.556 148.7127) (end 152.556 136.5) (width 0.254) (layer B.Cu) (net 39)) - (segment (start 149 152.2687) (end 152.556 148.7127) (width 0.254) (layer B.Cu) (net 39)) - (segment (start 149 153.92) (end 149 152.2687) (width 0.254) (layer B.Cu) (net 39)) - (segment (start 162.556 148.7127) (end 162.556 136.5) (width 0.254) (layer F.Cu) (net 40)) - (segment (start 159 152.2687) (end 162.556 148.7127) (width 0.254) (layer F.Cu) (net 40)) - (segment (start 159 153.92) (end 159 152.2687) (width 0.254) (layer F.Cu) (net 40)) - (segment (start 172.556 148.7127) (end 172.556 136.5) (width 0.254) (layer F.Cu) (net 41)) - (segment (start 169 152.2687) (end 172.556 148.7127) (width 0.254) (layer F.Cu) (net 41)) - (segment (start 169 153.92) (end 169 152.2687) (width 0.254) (layer F.Cu) (net 41)) - (segment (start 192.556 148.7127) (end 192.556 136.5) (width 0.254) (layer B.Cu) (net 42)) - (segment (start 189 152.2687) (end 192.556 148.7127) (width 0.254) (layer B.Cu) (net 42)) - (segment (start 189 153.92) (end 189 152.2687) (width 0.254) (layer B.Cu) (net 42)) - (segment (start 202.556 148.7127) (end 202.556 136.5) (width 0.254) (layer B.Cu) (net 43)) - (segment (start 199 152.2687) (end 202.556 148.7127) (width 0.254) (layer B.Cu) (net 43)) - (segment (start 199 153.92) (end 199 152.2687) (width 0.254) (layer B.Cu) (net 43)) - (segment (start 64.3 115.2) (end 66.84 115.2) (width 0.254) (layer F.Cu) (net 44)) - (segment (start 42.7916 104.0984) (end 40.14 106.75) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 64.4354 104.0984) (end 42.7916 104.0984) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 66.62 106.283) (end 64.4354 104.0984) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 66.62 107.2192) (end 66.62 106.283) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 65.0924 108.7468) (end 66.62 107.2192) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 62.6625 108.7468) (end 65.0924 108.7468) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 60.6166 110.7927) (end 62.6625 108.7468) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 60.6166 112.7519) (end 60.6166 110.7927) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 61.9213 114.0566) (end 60.6166 112.7519) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 63.1566 114.0566) (end 61.9213 114.0566) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 64.3 115.2) (end 63.1566 114.0566) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 70.24 133) (end 22.56 133) (width 0.254) (layer F.Cu) (net 44)) - (segment (start 77.97 125.27) (end 70.24 133) (width 0.254) (layer F.Cu) (net 44)) - (segment (start 76.7 124) (end 77.97 125.27) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 66.84 115.2) (end 67.1787 114.8613) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 67.1787 114.8613) (end 73.2959 114.8613) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 73.2959 114.8613) (end 76.7 118.2654) (width 0.254) (layer B.Cu) (net 44)) - (segment (start 76.7 118.2654) (end 76.7 124) (width 0.254) (layer B.Cu) (net 44)) - (via (at 162.2826 127.0012) (size 0.889) (layers F.Cu B.Cu) (net 45)) - (segment (start 247.55 128.78) (end 247.55 131.32) (width 0.254) (layer F.Cu) (net 45)) - (segment (start 245.7712 127.0012) (end 162.2826 127.0012) (width 0.254) (layer F.Cu) (net 45)) - (segment (start 247.55 128.78) (end 245.7712 127.0012) (width 0.254) (layer F.Cu) (net 45)) - (segment (start 161.9792 126.6978) (end 162.2826 127.0012) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 98.254 126.6978) (end 161.9792 126.6978) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 92.6456 132.3062) (end 98.254 126.6978) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 85.7128 132.3062) (end 92.6456 132.3062) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 84.8598 131.4532) (end 85.7128 132.3062) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 72.1583 131.4532) (end 84.8598 131.4532) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 71.867 131.7445) (end 72.1583 131.4532) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 54.8876 131.7445) (end 71.867 131.7445) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 48.76 125.6169) (end 54.8876 131.7445) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 48.76 124.9205) (end 48.76 125.6169) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 47.9661 124.1266) (end 48.76 124.9205) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 46.3466 124.1266) (end 47.9661 124.1266) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 44.95 122.73) (end 46.3466 124.1266) (width 0.254) (layer B.Cu) (net 45)) - (segment (start 64.3 111.8) (end 66.84 111.8) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 39.2496 105.1004) (end 37.6 106.75) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 50.2323 105.1004) (end 39.2496 105.1004) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 51.57 106.4381) (end 50.2323 105.1004) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 51.57 107.0356) (end 51.57 106.4381) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 55.1911 110.6567) (end 51.57 107.0356) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 63.1567 110.6567) (end 55.1911 110.6567) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 64.3 111.8) (end 63.1567 110.6567) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 10.3482 138.6582) (end 11.5 139.81) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 10.3482 134.2582) (end 10.3482 138.6582) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 11.0826 133.5238) (end 10.3482 134.2582) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 12.991 133.5238) (end 11.0826 133.5238) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 13.5623 134.0951) (end 12.991 133.5238) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 71.6849 134.0951) (end 13.5623 134.0951) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 80.51 125.27) (end 71.6849 134.0951) (width 0.254) (layer F.Cu) (net 46)) - (segment (start 81.7006 124.0794) (end 80.51 125.27) (width 0.254) (layer B.Cu) (net 46)) - (segment (start 66.84 111.8) (end 71.2498 111.8) (width 0.254) (layer B.Cu) (net 46)) - (segment (start 71.2498 111.8) (end 81.7006 122.2508) (width 0.254) (layer B.Cu) (net 46)) - (segment (start 81.7006 122.2508) (end 81.7006 124.0794) (width 0.254) (layer B.Cu) (net 46)) - (segment (start 89.7475 114.9225) (end 90.27 114.4) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 89.7475 128.4775) (end 89.7475 114.9225) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 90.27 129) (end 89.7475 128.4775) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 30.27 91.8) (end 37.6 99.13) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 30.27 70.6) (end 30.27 91.8) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 25.19 111.54) (end 25.19 136.5) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 37.6 99.13) (end 25.19 111.54) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 90.27 114.4) (end 90.27 99.8) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 89.7645 71.1055) (end 90.27 70.6) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 89.7645 84.6945) (end 89.7645 71.1055) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 90.27 85.2) (end 89.7645 84.6945) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 250.09 131.32) (end 250.09 128.78) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 240.27 76.6805) (end 240.27 70.6) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 240.7751 76.6805) (end 240.27 76.6805) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 245.0476 80.953) (end 240.7751 76.6805) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 245.0476 88.8697) (end 245.0476 80.953) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 257.2282 101.0503) (end 245.0476 88.8697) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 259.0197 101.0503) (end 257.2282 101.0503) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 260.27 99.8) (end 259.0197 101.0503) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 250.09 98.6192) (end 250.09 128.78) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 242.4985 91.0277) (end 250.09 98.6192) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 242.4985 84.1909) (end 242.4985 91.0277) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 239.0505 80.7429) (end 242.4985 84.1909) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 239.0505 77.395) (end 239.0505 80.7429) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 239.765 76.6805) (end 239.0505 77.395) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 240.27 76.6805) (end 239.765 76.6805) (width 0.254) (layer B.Cu) (net 47)) - (segment (start 38.724 98.006) (end 37.6 99.13) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 90.27 98.006) (end 38.724 98.006) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 90.27 99.8) (end 90.27 98.006) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 90.27 98.006) (end 90.27 85.2) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 246.9958 134.4142) (end 250.09 131.32) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 211.5968 134.4142) (end 246.9958 134.4142) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 209.511 136.5) (end 211.5968 134.4142) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 205.19 136.5) (end 209.511 136.5) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 90.27 131.9828) (end 90.27 129) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 200.6728 131.9828) (end 90.27 131.9828) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 205.19 136.5) (end 200.6728 131.9828) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 89.7072 131.9828) (end 85.19 136.5) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 90.27 131.9828) (end 89.7072 131.9828) (width 0.254) (layer F.Cu) (net 47)) - (segment (start 180.27 70.6) (end 180.27 85.2) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 180.27 99.8) (end 180.27 114.4) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 180.27 114.4) (end 180.27 129) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 180.27 131.42) (end 175.19 136.5) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 180.27 129) (end 180.27 131.42) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 272.95 131.32) (end 272.95 128.78) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 180.27 85.2) (end 180.27 99.8) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 62.0927 100.7627) (end 60.46 99.13) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 68.4168 100.7627) (end 62.0927 100.7627) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 86.7466 119.0925) (end 68.4168 100.7627) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 86.7466 123.2801) (end 86.7466 119.0925) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 86.0267 124) (end 86.7466 123.2801) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 85.2432 124) (end 86.0267 124) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 84.4466 124.7966) (end 85.2432 124) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 84.4466 129) (end 84.4466 124.7966) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 84.4466 129) (end 70.27 129) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 86.0054 129) (end 84.4466 129) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 87.2621 130.2567) (end 86.0054 129) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 91.3517 130.2567) (end 87.2621 130.2567) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 97.9385 123.6699) (end 91.3517 130.2567) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 162.1397 123.6699) (end 97.9385 123.6699) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 169.0327 116.7769) (end 162.1397 123.6699) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 169.0327 116.7521) (end 169.0327 116.7769) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 170.1121 115.6727) (end 169.0327 116.7521) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 170.77 115.6727) (end 170.1121 115.6727) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 180.27 106.1727) (end 170.77 115.6727) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 180.27 99.8) (end 180.27 106.1727) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 259 76.63) (end 260.27 77.9) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 259 70.049) (end 259 76.63) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 258.3066 69.3556) (end 259 70.049) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 214.99 69.3556) (end 258.3066 69.3556) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 211.9706 72.375) (end 214.99 69.3556) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 182.045 72.375) (end 211.9706 72.375) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 180.27 70.6) (end 182.045 72.375) (width 0.254) (layer F.Cu) (net 48)) - (segment (start 272.95 109.9576) (end 272.95 128.78) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 256.4706 93.4782) (end 272.95 109.9576) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 256.4706 81.6994) (end 256.4706 93.4782) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 260.27 77.9) (end 256.4706 81.6994) (width 0.254) (layer B.Cu) (net 48)) - (segment (start 190.27 114.4) (end 190.27 129) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 190.27 131.42) (end 185.19 136.5) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 190.27 129) (end 190.27 131.42) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 64.0912 100.2212) (end 63 99.13) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 65.9879 100.2212) (end 64.0912 100.2212) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 68.3427 97.8664) (end 65.9879 100.2212) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 68.3427 88.2627) (end 68.3427 97.8664) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 87.7805 68.8249) (end 68.3427 88.2627) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 188.4949 68.8249) (end 87.7805 68.8249) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 190.27 70.6) (end 188.4949 68.8249) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 190.27 99.8) (end 190.27 114.4) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 190.27 70.6) (end 190.27 85.2) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 190.27 85.2) (end 190.27 99.8) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 192.5263 87.4563) (end 190.27 85.2) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 244.0222 87.4563) (end 192.5263 87.4563) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 250.2897 93.7238) (end 244.0222 87.4563) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 260.773 93.7238) (end 250.2897 93.7238) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 261.5335 92.9633) (end 260.773 93.7238) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 261.5335 86.4635) (end 261.5335 92.9633) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 260.27 85.2) (end 261.5335 86.4635) (width 0.254) (layer F.Cu) (net 49)) - (segment (start 275.49 131.32) (end 275.49 128.78) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 259 86.47) (end 260.27 85.2) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 259 93.1606) (end 259 86.47) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 275.49 109.6506) (end 259 93.1606) (width 0.254) (layer B.Cu) (net 49)) - (segment (start 275.49 128.78) (end 275.49 109.6506) (width 0.254) (layer B.Cu) (net 49)) - (via (at 203.034 110.2619) (size 0.889) (layers F.Cu B.Cu) (net 50)) - (segment (start 199.029 130.241) (end 200.27 129) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 197.0417 130.241) (end 199.029 130.241) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 196.5005 129.6998) (end 197.0417 130.241) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 196.5005 118.1695) (end 196.5005 129.6998) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 200.27 114.4) (end 196.5005 118.1695) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 197.0417 134.6483) (end 195.19 136.5) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 197.0417 130.241) (end 197.0417 134.6483) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 202.0039 86.9339) (end 200.27 85.2) (width 0.254) (layer F.Cu) (net 50)) - (segment (start 254.7039 86.9339) (end 202.0039 86.9339) (width 0.254) (layer F.Cu) (net 50)) - (segment (start 260.27 92.5) (end 254.7039 86.9339) (width 0.254) (layer F.Cu) (net 50)) - (segment (start 278.03 131.32) (end 278.03 128.78) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 278.03 110.26) (end 260.27 92.5) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 278.03 128.78) (end 278.03 110.26) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 193.8351 71.8196) (end 199.4465 71.8196) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 190.332 68.3165) (end 193.8351 71.8196) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 87.5205 68.3165) (end 190.332 68.3165) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 65.54 90.297) (end 87.5205 68.3165) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 65.54 99.13) (end 65.54 90.297) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 200.27 70.9961) (end 200.27 70.6) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 199.4465 71.8196) (end 200.27 70.9961) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 199.4465 71.8196) (end 199.4465 83.9286) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 199.4465 84.3765) (end 200.27 85.2) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 199.4465 83.9286) (end 199.4465 84.3765) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 196.5105 96.0405) (end 200.27 99.8) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 196.5105 84.6626) (end 196.5105 96.0405) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 197.2445 83.9286) (end 196.5105 84.6626) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 199.4465 83.9286) (end 197.2445 83.9286) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 200.27 107.4979) (end 203.034 110.2619) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 200.27 99.8) (end 200.27 107.4979) (width 0.254) (layer B.Cu) (net 50)) - (segment (start 200.27 113.0259) (end 203.034 110.2619) (width 0.254) (layer F.Cu) (net 50)) - (segment (start 200.27 114.4) (end 200.27 113.0259) (width 0.254) (layer F.Cu) (net 50)) - (segment (start 61.76 111.8) (end 62.9033 111.8) (width 0.254) (layer B.Cu) (net 51)) - (segment (start 62.9033 111.5142) (end 62.9033 111.8) (width 0.254) (layer B.Cu) (net 51)) - (segment (start 63.7609 110.6566) (end 62.9033 111.5142) (width 0.254) (layer B.Cu) (net 51)) - (segment (start 71.4668 110.6566) (end 63.7609 110.6566) (width 0.254) (layer B.Cu) (net 51)) - (segment (start 81.1814 120.3712) (end 71.4668 110.6566) (width 0.254) (layer B.Cu) (net 51)) - (segment (start 83.2312 120.3712) (end 81.1814 120.3712) (width 0.254) (layer B.Cu) (net 51)) - (segment (start 85.59 122.73) (end 83.2312 120.3712) (width 0.254) (layer B.Cu) (net 51)) - (via (at 100.27 122.844) (size 0.889) (layers F.Cu B.Cu) (net 52)) - (segment (start 100.27 85.2) (end 100.27 70.6) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 100.27 131.42) (end 95.19 136.5) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 100.27 129) (end 100.27 131.42) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 252.63 131.32) (end 252.63 128.78) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 100.27 99.8) (end 100.27 85.2) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 41.5103 71.8403) (end 40.27 70.6) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 62.954 71.8403) (end 41.5103 71.8403) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 65.4471 69.3472) (end 62.954 71.8403) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 99.0172 69.3472) (end 65.4471 69.3472) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 100.27 70.6) (end 99.0172 69.3472) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 100.27 114.4) (end 100.27 99.8) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 100.27 122.844) (end 100.27 114.4) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 100.27 129) (end 100.27 122.844) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 40.27 99) (end 40.14 99.13) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 40.27 70.6) (end 40.27 99) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 30.814 132.124) (end 35.19 136.5) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 29.1142 132.124) (end 30.814 132.124) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 26.4733 129.4831) (end 29.1142 132.124) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 26.4733 112.7967) (end 26.4733 129.4831) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 40.14 99.13) (end 26.4733 112.7967) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 244.5392 82.1692) (end 240.27 77.9) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 244.5392 89.0801) (end 244.5392 82.1692) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 257.2572 101.7981) (end 244.5392 89.0801) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 257.2572 105.8449) (end 257.2572 101.7981) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 252.63 110.4721) (end 257.2572 105.8449) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 252.63 128.78) (end 252.63 110.4721) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 259.0149 105.8449) (end 260.27 107.1) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 257.2572 105.8449) (end 259.0149 105.8449) (width 0.254) (layer B.Cu) (net 52)) - (segment (start 216.5134 135.1766) (end 215.19 136.5) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 248.7734 135.1766) (end 216.5134 135.1766) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 252.63 131.32) (end 248.7734 135.1766) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 97.3006 134.3894) (end 95.19 136.5) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 195.3253 134.3894) (end 97.3006 134.3894) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 198.5324 137.5965) (end 195.3253 134.3894) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 214.0935 137.5965) (end 198.5324 137.5965) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 215.19 136.5) (end 214.0935 137.5965) (width 0.254) (layer F.Cu) (net 52)) - (segment (start 80.9148 120.5948) (end 83.05 122.73) (width 0.254) (layer F.Cu) (net 53)) - (segment (start 68.0123 120.5948) (end 80.9148 120.5948) (width 0.254) (layer F.Cu) (net 53)) - (segment (start 62.9033 115.4858) (end 68.0123 120.5948) (width 0.254) (layer F.Cu) (net 53)) - (segment (start 62.9033 115.2) (end 62.9033 115.4858) (width 0.254) (layer F.Cu) (net 53)) - (segment (start 61.76 115.2) (end 62.9033 115.2) (width 0.254) (layer F.Cu) (net 53)) - (via (at 110.27 122.844) (size 0.889) (layers F.Cu B.Cu) (net 54)) - (segment (start 110.27 131.42) (end 105.19 136.5) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 110.27 129) (end 110.27 131.42) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 110.27 70.6) (end 110.27 85.2) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 277.9404 72.9296) (end 280.27 70.6) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 270.8089 72.9296) (end 277.9404 72.9296) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 259 84.7385) (end 270.8089 72.9296) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 259 85.6562) (end 259 84.7385) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 258.2306 86.4256) (end 259 85.6562) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 241.4956 86.4256) (end 258.2306 86.4256) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 240.27 85.2) (end 241.4956 86.4256) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 52.5394 68.3306) (end 50.27 70.6) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 108.0006 68.3306) (end 52.5394 68.3306) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 110.27 70.6) (end 108.0006 68.3306) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 110.27 85.2) (end 110.27 99.8) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 110.27 99.8) (end 110.27 114.4) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 110.27 114.4) (end 110.27 122.844) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 110.27 129) (end 110.27 122.844) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 255.17 128.78) (end 255.17 131.32) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 228.0301 133.6599) (end 225.19 136.5) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 246.8371 133.6599) (end 228.0301 133.6599) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 248.82 131.677) (end 246.8371 133.6599) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 249.6549 132.5119) (end 248.82 131.677) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 253.9781 132.5119) (end 249.6549 132.5119) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 255.17 131.32) (end 253.9781 132.5119) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 240.27 90.043) (end 240.27 85.2) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 248.82 98.593) (end 240.27 90.043) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 248.82 131.677) (end 248.82 98.593) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 106.7922 134.8978) (end 105.19 136.5) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 195.1149 134.8978) (end 106.7922 134.8978) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 198.322 138.1049) (end 195.1149 134.8978) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 223.5851 138.1049) (end 198.322 138.1049) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 225.19 136.5) (end 223.5851 138.1049) (width 0.254) (layer F.Cu) (net 54)) - (segment (start 42.68 78.19) (end 42.68 99.13) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 50.27 70.6) (end 42.68 78.19) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 43.0937 134.4037) (end 45.19 136.5) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 33.8877 134.4037) (end 43.0937 134.4037) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 29 129.516) (end 33.8877 134.4037) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 29 112.3634) (end 29 129.516) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 42.2334 99.13) (end 29 112.3634) (width 0.254) (layer B.Cu) (net 54)) - (segment (start 42.68 99.13) (end 42.2334 99.13) (width 0.254) (layer B.Cu) (net 54)) - (via (at 120.27 122.844) (size 0.889) (layers F.Cu B.Cu) (net 55)) - (segment (start 120.27 70.6) (end 120.27 85.2) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 120.27 85.2) (end 120.27 99.8) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 120.27 99.8) (end 120.27 114.4) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 254.8311 134.1989) (end 257.71 131.32) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 237.4911 134.1989) (end 254.8311 134.1989) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 235.19 136.5) (end 237.4911 134.1989) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 62.0311 68.8389) (end 60.27 70.6) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 100.907 68.8389) (end 62.0311 68.8389) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 103.8889 71.8208) (end 100.907 68.8389) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 119.0492 71.8208) (end 103.8889 71.8208) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 120.27 70.6) (end 119.0492 71.8208) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 120.27 131.42) (end 115.19 136.5) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 120.27 129) (end 120.27 131.42) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 120.27 114.4) (end 120.27 122.844) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 120.27 129) (end 120.27 122.844) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 45.22 85.65) (end 60.27 70.6) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 45.22 99.13) (end 45.22 85.65) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 237.3336 89.5636) (end 240.27 92.5) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 124.6336 89.5636) (end 237.3336 89.5636) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 120.27 85.2) (end 124.6336 89.5636) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 279 79.17) (end 280.27 77.9) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 279 90.12) (end 279 79.17) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 258.445 110.675) (end 279 90.12) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 240.27 92.5) (end 258.445 110.675) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 260.27 112.5) (end 260.27 114.4) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 258.445 110.675) (end 260.27 112.5) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 259 127.49) (end 257.71 128.78) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 259 115.67) (end 259 127.49) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 260.27 114.4) (end 259 115.67) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 257.71 128.78) (end 257.71 131.32) (width 0.254) (layer B.Cu) (net 55)) - (segment (start 56.2699 135.4201) (end 55.19 136.5) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 77.6829 135.4201) (end 56.2699 135.4201) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 79.8427 137.5799) (end 77.6829 135.4201) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 114.1101 137.5799) (end 79.8427 137.5799) (width 0.254) (layer F.Cu) (net 55)) - (segment (start 115.19 136.5) (end 114.1101 137.5799) (width 0.254) (layer F.Cu) (net 55)) - (via (at 129.9214 122.844) (size 0.889) (layers F.Cu B.Cu) (net 56)) - (segment (start 130.27 85.2) (end 130.27 99.8) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 130.27 99.8) (end 130.27 114.4) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 256.565 135.005) (end 260.25 131.32) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 246.685 135.005) (end 256.565 135.005) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 245.19 136.5) (end 246.685 135.005) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 129.9214 128.6514) (end 129.9214 122.844) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 130.27 129) (end 129.9214 128.6514) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 130.27 122.4954) (end 129.9214 122.844) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 130.27 114.4) (end 130.27 122.4954) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 130.27 131.42) (end 125.19 136.5) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 130.27 129) (end 130.27 131.42) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 67.294 138.604) (end 65.19 136.5) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 123.086 138.604) (end 67.294 138.604) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 125.19 136.5) (end 123.086 138.604) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 260.25 121.72) (end 260.25 128.78) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 260.27 121.7) (end 260.25 121.72) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 260.25 128.78) (end 260.25 131.32) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 70.27 76.62) (end 47.76 99.13) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 70.27 70.6) (end 70.27 76.62) (width 0.254) (layer B.Cu) (net 56)) - (segment (start 280.27 96.1423) (end 258.4412 117.9711) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 280.27 85.2) (end 280.27 96.1423) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 260.27 119.8) (end 258.4412 117.9711) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 260.27 121.7) (end 260.27 119.8) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 130.27 74.0582) (end 128.5409 72.3291) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 130.27 85.2) (end 130.27 74.0582) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 97.0709 72.3291) (end 128.5409 72.3291) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 96.4914 71.7496) (end 97.0709 72.3291) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 91.5172 71.7496) (end 96.4914 71.7496) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 91.441 71.8258) (end 91.5172 71.7496) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 71.4958 71.8258) (end 91.441 71.8258) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 70.27 70.6) (end 71.4958 71.8258) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 128.5409 72.3291) (end 130.27 70.6) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 258.4412 117.9711) (end 240.27 99.8) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 235.2726 94.8026) (end 240.27 99.8) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 135.2674 94.8026) (end 235.2726 94.8026) (width 0.254) (layer F.Cu) (net 56)) - (segment (start 130.27 99.8) (end 135.2674 94.8026) (width 0.254) (layer F.Cu) (net 56)) - (via (at 140.27 122.805) (size 0.889) (layers F.Cu B.Cu) (net 57)) - (segment (start 262.79 128.78) (end 262.79 131.32) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 257.61 136.5) (end 255.19 136.5) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 262.79 131.32) (end 257.61 136.5) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 140.27 70.6) (end 140.27 85.2) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 140.27 99.8) (end 140.27 85.2) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 31.1683 129) (end 30.27 129) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 76.7848 138.0948) (end 75.19 136.5) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 116.7935 138.0948) (end 76.7848 138.0948) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 119.4682 135.4201) (end 116.7935 138.0948) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 134.1101 135.4201) (end 119.4682 135.4201) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 135.19 136.5) (end 134.1101 135.4201) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 241.11 107.1) (end 240.27 107.1) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 262.79 128.78) (end 241.11 107.1) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 140.27 131.42) (end 135.19 136.5) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 140.27 129) (end 140.27 131.42) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 140.27 99.8) (end 140.27 114.4) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 36.0636 133.8953) (end 31.1683 129) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 72.5853 133.8953) (end 36.0636 133.8953) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 75.19 136.5) (end 72.5853 133.8953) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 140.27 114.4) (end 140.27 122.805) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 140.27 122.805) (end 140.27 129) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 47.3653 102.0647) (end 50.3 99.13) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 40.0177 102.0647) (end 47.3653 102.0647) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 31.1683 110.9141) (end 40.0177 102.0647) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 31.1683 129) (end 31.1683 110.9141) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 77.9693 72.9007) (end 80.27 70.6) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 76.5293 72.9007) (end 77.9693 72.9007) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 50.3 99.13) (end 76.5293 72.9007) (width 0.254) (layer B.Cu) (net 57)) - (segment (start 238.1754 105.0054) (end 240.27 107.1) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 228.7164 105.0054) (end 238.1754 105.0054) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 223.5908 99.8798) (end 228.7164 105.0054) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 214.8688 99.8798) (end 223.5908 99.8798) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 212.5019 97.5129) (end 214.8688 99.8798) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 165.3282 97.5129) (end 212.5019 97.5129) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 161.2551 101.586) (end 165.3282 97.5129) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 142.056 101.586) (end 161.2551 101.586) (width 0.254) (layer F.Cu) (net 57)) - (segment (start 140.27 99.8) (end 142.056 101.586) (width 0.254) (layer F.Cu) (net 57)) - (via (at 158.0419 121.5844) (size 0.889) (layers F.Cu B.Cu) (net 58)) - (segment (start 150.27 85.2) (end 150.27 70.6) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 265.33 136.36) (end 265.19 136.5) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 265.33 131.32) (end 265.33 136.36) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 81.4988 115.6288) (end 80.27 114.4) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 149.0412 115.6288) (end 81.4988 115.6288) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 150.27 114.4) (end 149.0412 115.6288) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 150.27 85.2) (end 150.27 99.8) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 150.27 99.8) (end 150.27 114.4) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 150.8575 114.4) (end 158.0419 121.5844) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 150.27 114.4) (end 150.8575 114.4) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 247.4947 114.4) (end 240.27 114.4) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 261.52 128.4253) (end 247.4947 114.4) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 261.52 129.1267) (end 261.52 128.4253) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 262.3462 129.9529) (end 261.52 129.1267) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 264.1571 129.9529) (end 262.3462 129.9529) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 265.33 128.78) (end 264.1571 129.9529) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 264.1571 130.1471) (end 265.33 131.32) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 264.1571 129.9529) (end 264.1571 130.1471) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 157.6856 121.5844) (end 158.0419 121.5844) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 150.27 129) (end 157.6856 121.5844) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 233.0856 121.5844) (end 240.27 114.4) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 158.0419 121.5844) (end 233.0856 121.5844) (width 0.254) (layer F.Cu) (net 58)) - (segment (start 150.27 131.42) (end 145.19 136.5) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 150.27 129) (end 150.27 131.42) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 38.7266 127.4566) (end 40.27 129) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 38.7266 106.6156) (end 38.7266 127.4566) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 41.8307 103.5115) (end 38.7266 106.6156) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 48.4585 103.5115) (end 41.8307 103.5115) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 52.84 99.13) (end 48.4585 103.5115) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 56.7912 103.0812) (end 52.84 99.13) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 64.6395 103.0812) (end 56.7912 103.0812) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 77.178 115.6197) (end 64.6395 103.0812) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 79.0503 115.6197) (end 77.178 115.6197) (width 0.254) (layer B.Cu) (net 58)) - (segment (start 80.27 114.4) (end 79.0503 115.6197) (width 0.254) (layer B.Cu) (net 58)) - (via (at 34.4426 128.0754) (size 0.889) (layers F.Cu B.Cu) (net 59)) - (via (at 162.2028 122.439) (size 0.889) (layers F.Cu B.Cu) (net 59)) - (segment (start 273.7505 135.0605) (end 275.19 136.5) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 271.6105 135.0605) (end 273.7505 135.0605) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 267.87 131.32) (end 271.6105 135.0605) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 267.87 128.78) (end 267.87 131.32) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 245.0628 126.4928) (end 240.27 121.7) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 245.0628 126.4929) (end 245.0628 126.4928) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 257.052 126.4929) (end 245.0628 126.4929) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 258.98 128.4209) (end 257.052 126.4929) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 258.98 129.1268) (end 258.98 128.4209) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 259.7766 129.9234) (end 258.98 129.1268) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 260.4702 129.9234) (end 259.7766 129.9234) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 261.3934 130.8466) (end 260.4702 129.9234) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 261.3934 131.5737) (end 261.3934 130.8466) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 262.3 132.4803) (end 261.3934 131.5737) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 266.7097 132.4803) (end 262.3 132.4803) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 267.87 131.32) (end 266.7097 132.4803) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 160.27 131.42) (end 155.19 136.5) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 160.27 129) (end 160.27 131.42) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 34.7376 127.7804) (end 34.4426 128.0754) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 42.5862 127.7804) (end 34.7376 127.7804) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 45.0282 130.2224) (end 42.5862 127.7804) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 49.0476 130.2224) (end 45.0282 130.2224) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 50.27 129) (end 49.0476 130.2224) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 158.4779 127.2079) (end 160.27 129) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 110.309 127.2079) (end 158.4779 127.2079) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 109 128.5169) (end 110.309 127.2079) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 109 129.464) (end 109 128.5169) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 107.4969 130.9671) (end 109 129.464) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 104.7575 130.9671) (end 107.4969 130.9671) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 98.0985 137.6261) (end 104.7575 130.9671) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 94.7424 137.6261) (end 98.0985 137.6261) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 93.6932 136.5769) (end 94.7424 137.6261) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 93.6932 135.6392) (end 93.6932 136.5769) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 93.072 135.018) (end 93.6932 135.6392) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 86.4229 135.018) (end 93.072 135.018) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 83.3665 131.9616) (end 86.4229 135.018) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 72.3687 131.9616) (end 83.3665 131.9616) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 72.0775 132.2528) (end 72.3687 131.9616) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 53.5228 132.2528) (end 72.0775 132.2528) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 50.27 129) (end 53.5228 132.2528) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 160.27 114.4) (end 160.27 101.0468) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 160.27 101.0468) (end 160.27 99.8) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 163.0305 123.2667) (end 162.2028 122.439) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 238.7033 123.2667) (end 163.0305 123.2667) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 240.27 121.7) (end 238.7033 123.2667) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 160.27 126.0272) (end 160.27 129) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 163.0305 123.2667) (end 160.27 126.0272) (width 0.254) (layer F.Cu) (net 59)) - (segment (start 160.27 120.5062) (end 160.27 114.4) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 162.2028 122.439) (end 160.27 120.5062) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 31.7164 125.3492) (end 34.4426 128.0754) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 31.7164 111.0923) (end 31.7164 125.3492) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 40.2357 102.573) (end 31.7164 111.0923) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 48.3842 102.573) (end 40.2357 102.573) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 51.7499 99.2073) (end 48.3842 102.573) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 51.7499 98.693) (end 51.7499 99.2073) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 52.3962 98.0467) (end 51.7499 98.693) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 54.2967 98.0467) (end 52.3962 98.0467) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 55.38 99.13) (end 54.2967 98.0467) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 156.4896 88.9804) (end 160.27 85.2) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 156.4896 100.2923) (end 156.4896 88.9804) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 157.2441 101.0468) (end 156.4896 100.2923) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 160.27 101.0468) (end 157.2441 101.0468) (width 0.254) (layer B.Cu) (net 59)) - (segment (start 160.27 85.2) (end 160.27 70.6) (width 0.254) (layer B.Cu) (net 59)) - (via (at 170.8751 117.5151) (size 0.889) (layers F.Cu B.Cu) (net 60)) - (via (at 56.7816 109.3605) (size 0.889) (layers F.Cu B.Cu) (net 60)) - (segment (start 170.27 114.4) (end 170.27 99.8) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 170.27 70.6) (end 170.27 85.2) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 170.27 85.2) (end 170.27 99.8) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 170.27 131.42) (end 165.19 136.5) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 170.27 129) (end 170.27 131.42) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 170.8751 115.0051) (end 170.8751 117.5151) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 170.27 114.4) (end 170.8751 115.0051) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 169.3295 119.0607) (end 169.3295 126.1413) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 170.8751 117.5151) (end 169.3295 119.0607) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 169.3295 128.0595) (end 169.3295 126.1413) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 170.27 129) (end 169.3295 128.0595) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 270.41 131.32) (end 270.41 128.78) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 255.9498 74.9202) (end 260.27 70.6) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 255.9498 93.6765) (end 255.9498 74.9202) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 270.41 108.1367) (end 255.9498 93.6765) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 270.41 128.78) (end 270.41 108.1367) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 63.6218 131.2362) (end 61.3856 129) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 71.6565 131.2362) (end 63.6218 131.2362) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 71.9571 130.9356) (end 71.6565 131.2362) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 85.0612 130.9356) (end 71.9571 130.9356) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 85.9234 131.7978) (end 85.0612 130.9356) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 92.0876 131.7978) (end 85.9234 131.7978) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 97.7441 126.1413) (end 92.0876 131.7978) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 169.3295 126.1413) (end 97.7441 126.1413) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 61.3856 129) (end 60.27 129) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 171.5398 69.3302) (end 170.27 70.6) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 205.5364 69.3302) (end 171.5398 69.3302) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 206.6267 70.4205) (end 205.5364 69.3302) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 210.9943 70.4205) (end 206.6267 70.4205) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 212.5676 68.8472) (end 210.9943 70.4205) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 258.5172 68.8472) (end 212.5676 68.8472) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 260.27 70.6) (end 258.5172 68.8472) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 56.7816 117.7046) (end 56.7816 109.3605) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 61.3856 122.3086) (end 56.7816 117.7046) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 61.3856 129) (end 61.3856 122.3086) (width 0.254) (layer B.Cu) (net 60)) - (segment (start 56.7816 100.2684) (end 57.92 99.13) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 56.7816 109.3605) (end 56.7816 100.2684) (width 0.254) (layer F.Cu) (net 60)) - (segment (start 188.9652 71.8352) (end 187.73 70.6) (width 0.254) (layer F.Cu) (net 61)) - (segment (start 196.4948 71.8352) (end 188.9652 71.8352) (width 0.254) (layer F.Cu) (net 61)) - (segment (start 197.73 70.6) (end 196.4948 71.8352) (width 0.254) (layer F.Cu) (net 61)) - (segment (start 88.9495 69.3805) (end 87.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 96.5105 69.3805) (end 88.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 97.73 70.6) (end 96.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 98.9495 69.3805) (end 97.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 106.5105 69.3805) (end 98.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 107.73 70.6) (end 106.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 108.9495 69.3805) (end 107.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 116.5105 69.3805) (end 108.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 117.73 70.6) (end 116.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 118.9495 69.3805) (end 117.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 126.5105 69.3805) (end 118.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 127.73 70.6) (end 126.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 128.9495 69.3805) (end 127.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 136.5105 69.3805) (end 128.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 137.73 70.6) (end 136.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 138.9495 69.3805) (end 137.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 146.5105 69.3805) (end 138.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 147.73 70.6) (end 146.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 148.9495 69.3805) (end 147.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 156.5105 69.3805) (end 148.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 157.73 70.6) (end 156.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 158.9495 69.3805) (end 157.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 166.5105 69.3805) (end 158.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 167.73 70.6) (end 166.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 168.9495 69.3805) (end 167.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 176.5105 69.3805) (end 168.9495 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 177.73 70.6) (end 176.5105 69.3805) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 186.4901 69.3601) (end 187.73 70.6) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 178.9699 69.3601) (end 186.4901 69.3601) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 177.73 70.6) (end 178.9699 69.3601) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 224.4891 109.5009) (end 222.86 111.13) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 224.4891 95.9211) (end 224.4891 109.5009) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 223.188 94.62) (end 224.4891 95.9211) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 222.568 94.62) (end 223.188 94.62) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 214.6246 86.6766) (end 222.568 94.62) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 214.6246 83.1806) (end 214.6246 86.6766) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 200.8244 69.3804) (end 214.6246 83.1806) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 198.9496 69.3804) (end 200.8244 69.3804) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 197.73 70.6) (end 198.9496 69.3804) (width 0.254) (layer B.Cu) (net 61)) - (segment (start 96.5104 86.4196) (end 97.73 85.2) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 88.9496 86.4196) (end 96.5104 86.4196) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 87.73 85.2) (end 88.9496 86.4196) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 98.9496 86.4196) (end 97.73 85.2) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 106.5104 86.4196) (end 98.9496 86.4196) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 107.73 85.2) (end 106.5104 86.4196) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 108.9605 86.4305) (end 107.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 116.4995 86.4305) (end 108.9605 86.4305) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 117.73 85.2) (end 116.4995 86.4305) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 221.3999 107.1299) (end 222.86 108.59) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 221.3999 95.4147) (end 221.3999 107.1299) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 215.4577 89.4725) (end 221.3999 95.4147) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 202.0025 89.4725) (end 215.4577 89.4725) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 197.73 85.2) (end 202.0025 89.4725) (width 0.254) (layer B.Cu) (net 62)) - (segment (start 138.9496 83.9804) (end 137.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 146.5104 83.9804) (end 138.9496 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 147.73 85.2) (end 146.5104 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 148.9943 86.4643) (end 147.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 156.4657 86.4643) (end 148.9943 86.4643) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 157.73 85.2) (end 156.4657 86.4643) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 158.9496 83.9804) (end 157.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 166.5104 83.9804) (end 158.9496 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 167.73 85.2) (end 166.5104 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 168.9943 86.4643) (end 167.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 176.4657 86.4643) (end 168.9943 86.4643) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 177.73 85.2) (end 176.4657 86.4643) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 178.9496 83.9804) (end 177.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 186.5104 83.9804) (end 178.9496 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 187.73 85.2) (end 186.5104 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 188.9887 83.9413) (end 187.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 196.4713 83.9413) (end 188.9887 83.9413) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 197.73 85.2) (end 196.4713 83.9413) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 126.5104 83.9804) (end 127.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 118.9496 83.9804) (end 126.5104 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 117.73 85.2) (end 118.9496 83.9804) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 136.5104 86.4196) (end 137.73 85.2) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 128.9496 86.4196) (end 136.5104 86.4196) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 127.73 85.2) (end 128.9496 86.4196) (width 0.254) (layer F.Cu) (net 62)) - (segment (start 98.9835 98.5465) (end 97.73 99.8) (width 0.254) (layer B.Cu) (net 63)) - (segment (start 106.4765 98.5465) (end 98.9835 98.5465) (width 0.254) (layer B.Cu) (net 63)) - (segment (start 107.73 99.8) (end 106.4765 98.5465) (width 0.254) (layer B.Cu) (net 63)) - (segment (start 196.487 98.557) (end 197.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 188.973 98.557) (end 196.487 98.557) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 187.73 99.8) (end 188.973 98.557) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 223.9433 104.9667) (end 222.86 106.05) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 223.9433 103.0561) (end 223.9433 104.9667) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 223.1272 102.24) (end 223.9433 103.0561) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 200.17 102.24) (end 223.1272 102.24) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 197.73 99.8) (end 200.17 102.24) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 88.959 101.029) (end 87.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 96.501 101.029) (end 88.959 101.029) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 97.73 99.8) (end 96.501 101.029) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 176.5104 101.0196) (end 177.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 168.9496 101.0196) (end 176.5104 101.0196) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 167.73 99.8) (end 168.9496 101.0196) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 186.4749 98.5449) (end 187.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 178.9851 98.5449) (end 186.4749 98.5449) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 177.73 99.8) (end 178.9851 98.5449) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 128.9496 101.0196) (end 127.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 136.5104 101.0196) (end 128.9496 101.0196) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 137.73 99.8) (end 136.5104 101.0196) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 108.9503 101.0203) (end 107.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 116.5097 101.0203) (end 108.9503 101.0203) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 117.73 99.8) (end 116.5097 101.0203) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 126.5104 101.0196) (end 127.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 118.9496 101.0196) (end 126.5104 101.0196) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 117.73 99.8) (end 118.9496 101.0196) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 166.5031 98.5731) (end 167.73 99.8) (width 0.254) (layer B.Cu) (net 63)) - (segment (start 158.9569 98.5731) (end 166.5031 98.5731) (width 0.254) (layer B.Cu) (net 63)) - (segment (start 157.73 99.8) (end 158.9569 98.5731) (width 0.254) (layer B.Cu) (net 63)) - (segment (start 139.4579 98.0721) (end 137.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 146.0021 98.0721) (end 139.4579 98.0721) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 147.73 99.8) (end 146.0021 98.0721) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 148.9941 98.5359) (end 147.73 99.8) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 156.4659 98.5359) (end 148.9941 98.5359) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 157.73 99.8) (end 156.4659 98.5359) (width 0.254) (layer F.Cu) (net 63)) - (segment (start 148.9496 113.1804) (end 147.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 156.5104 113.1804) (end 148.9496 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 157.73 114.4) (end 156.5104 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 158.9522 115.6222) (end 157.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 166.5078 115.6222) (end 158.9522 115.6222) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 167.73 114.4) (end 166.5078 115.6222) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 178.9717 113.1583) (end 177.73 114.4) (width 0.254) (layer B.Cu) (net 64)) - (segment (start 186.4883 113.1583) (end 178.9717 113.1583) (width 0.254) (layer B.Cu) (net 64)) - (segment (start 187.73 114.4) (end 186.4883 113.1583) (width 0.254) (layer B.Cu) (net 64)) - (segment (start 196.4923 113.1623) (end 197.73 114.4) (width 0.254) (layer B.Cu) (net 64)) - (segment (start 188.9677 113.1623) (end 196.4923 113.1623) (width 0.254) (layer B.Cu) (net 64)) - (segment (start 187.73 114.4) (end 188.9677 113.1623) (width 0.254) (layer B.Cu) (net 64)) - (segment (start 118.9496 113.1804) (end 117.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 126.5104 113.1804) (end 118.9496 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 127.73 114.4) (end 126.5104 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 108.9496 113.1804) (end 107.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 116.5104 113.1804) (end 108.9496 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 117.73 114.4) (end 116.5104 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 168.9564 113.1736) (end 167.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 176.5036 113.1736) (end 168.9564 113.1736) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 177.73 114.4) (end 176.5036 113.1736) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 98.9496 113.1804) (end 97.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 106.5104 113.1804) (end 98.9496 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 107.73 114.4) (end 106.5104 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 88.9496 113.1804) (end 87.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 96.5104 113.1804) (end 88.9496 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 97.73 114.4) (end 96.5104 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 138.9496 113.1804) (end 137.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 146.5104 113.1804) (end 138.9496 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 147.73 114.4) (end 146.5104 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 128.9496 113.1804) (end 127.73 114.4) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 136.5104 113.1804) (end 128.9496 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 137.73 114.4) (end 136.5104 113.1804) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 218.9886 107.3814) (end 222.86 103.51) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 218.9886 107.3815) (end 218.9886 107.3814) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 204.7067 107.3815) (end 218.9886 107.3815) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 197.73 114.3582) (end 204.7067 107.3815) (width 0.254) (layer F.Cu) (net 64)) - (segment (start 197.73 114.4) (end 197.73 114.3582) (width 0.254) (layer F.Cu) (net 64)) - (via (at 211.7167 117.5345) (size 0.889) (layers F.Cu B.Cu) (net 65)) - (segment (start 138.9495 127.7805) (end 137.73 129) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 146.5105 127.7805) (end 138.9495 127.7805) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 147.73 129) (end 146.5105 127.7805) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 178.9495 127.7805) (end 177.73 129) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 186.5105 127.7805) (end 178.9495 127.7805) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 187.73 129) (end 186.5105 127.7805) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 166.5104 130.2196) (end 167.73 129) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 158.9496 130.2196) (end 166.5104 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 157.73 129) (end 158.9496 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 168.9496 130.2196) (end 167.73 129) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 176.5104 130.2196) (end 168.9496 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 177.73 129) (end 176.5104 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 156.5105 127.7805) (end 157.73 129) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 148.9495 127.7805) (end 156.5105 127.7805) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 147.73 129) (end 148.9495 127.7805) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 128.9719 127.7581) (end 127.73 129) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 136.4881 127.7581) (end 128.9719 127.7581) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 137.73 129) (end 136.4881 127.7581) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 98.9713 127.7587) (end 97.73 129) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 106.4887 127.7587) (end 98.9713 127.7587) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 107.73 129) (end 106.4887 127.7587) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 88.9496 127.7804) (end 87.73 129) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 96.5104 127.7804) (end 88.9496 127.7804) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 97.73 129) (end 96.5104 127.7804) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 188.9603 130.2303) (end 187.73 129) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 196.4997 130.2303) (end 188.9603 130.2303) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 197.73 129) (end 196.4997 130.2303) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 116.5104 130.2196) (end 117.73 129) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 108.9496 130.2196) (end 116.5104 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 107.73 129) (end 108.9496 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 118.9496 130.2196) (end 117.73 129) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 126.5104 130.2196) (end 118.9496 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 127.73 129) (end 126.5104 130.2196) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 209.1955 117.5345) (end 211.7167 117.5345) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 197.73 129) (end 209.1955 117.5345) (width 0.254) (layer B.Cu) (net 65)) - (segment (start 224.5007 102.6107) (end 222.86 100.97) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 224.5007 105.9974) (end 224.5007 102.6107) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 223.1781 107.32) (end 224.5007 105.9974) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 221.9312 107.32) (end 223.1781 107.32) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 211.7167 117.5345) (end 221.9312 107.32) (width 0.254) (layer F.Cu) (net 65)) - (segment (start 237.73 77.9) (end 237.73 85.2) (width 0.254) (layer B.Cu) (net 66)) - (segment (start 237.73 85.2) (end 237.73 92.5) (width 0.254) (layer B.Cu) (net 66)) - (segment (start 237.73 92.5) (end 237.73 99.8) (width 0.254) (layer B.Cu) (net 66)) - (segment (start 237.73 99.8) (end 237.73 107.1) (width 0.254) (layer B.Cu) (net 66)) - (segment (start 257.73 85.2) (end 257.73 92.5) (width 0.254) (layer B.Cu) (net 66)) - (segment (start 257.73 77.9) (end 257.73 85.2) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 237.73 107.1) (end 237.73 114.4) (width 0.254) (layer B.Cu) (net 66)) - (segment (start 237.73 114.4) (end 237.73 121.7) (width 0.254) (layer B.Cu) (net 66)) - (segment (start 256.5049 76.6749) (end 257.73 77.9) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 256.5049 71.8251) (end 256.5049 76.6749) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 256.5049 71.8251) (end 257.73 70.6) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 237.73 73.0502) (end 238.9551 71.8251) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 237.73 77.9) (end 237.73 73.0502) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 237.73 70.6) (end 238.9551 71.8251) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 238.9551 71.8251) (end 256.5049 71.8251) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 224.23 99.8) (end 222.86 98.43) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 237.73 99.8) (end 224.23 99.8) (width 0.254) (layer F.Cu) (net 66)) - (segment (start 257.73 114.4) (end 257.73 107.1) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 239.93 128.78) (end 239.93 131.32) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 28.9496 130.2196) (end 27.73 129) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 36.5104 130.2196) (end 28.9496 130.2196) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 37.73 129) (end 36.5104 130.2196) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 225.8905 118.1052) (end 223.8917 118.1052) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 236.12 128.3347) (end 225.8905 118.1052) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 236.12 131.736) (end 236.12 128.3347) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 236.896 132.512) (end 236.12 131.736) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 238.738 132.512) (end 236.896 132.512) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 239.93 131.32) (end 238.738 132.512) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 58.9496 127.7804) (end 57.73 129) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 66.5104 127.7804) (end 58.9496 127.7804) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 67.73 129) (end 66.5104 127.7804) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 48.9597 127.7703) (end 47.73 129) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 56.5003 127.7703) (end 48.9597 127.7703) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 57.73 129) (end 56.5003 127.7703) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 39.0049 130.2749) (end 37.73 129) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 46.4551 130.2749) (end 39.0049 130.2749) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 47.73 129) (end 46.4551 130.2749) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 69.4579 130.7279) (end 67.73 129) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 71.446 130.7279) (end 69.4579 130.7279) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 71.7637 130.4102) (end 71.446 130.7279) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 85.2546 130.4102) (end 71.7637 130.4102) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 86.1276 131.2832) (end 85.2546 130.4102) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 91.8681 131.2832) (end 86.1276 131.2832) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 97.5183 125.633) (end 91.8681 131.2832) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 161.6142 125.633) (end 97.5183 125.633) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 170.0493 117.1979) (end 161.6142 125.633) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 170.0493 117.1731) (end 170.0493 117.1979) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 170.5331 116.6893) (end 170.0493 117.1731) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 173.049 116.6893) (end 170.5331 116.6893) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 177.131 112.6073) (end 173.049 116.6893) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 214.4442 112.6073) (end 177.131 112.6073) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 219.9421 118.1052) (end 214.4442 112.6073) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 223.8917 118.1052) (end 219.9421 118.1052) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 223.8917 115.2401) (end 223.8917 118.1052) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 221.7524 113.1008) (end 223.8917 115.2401) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 221.7524 110.6961) (end 221.7524 113.1008) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 222.5885 109.86) (end 221.7524 110.6961) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 223.122 109.86) (end 222.5885 109.86) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 223.9609 109.0211) (end 223.122 109.86) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 223.9609 96.9909) (end 223.9609 109.0211) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 222.86 95.89) (end 223.9609 96.9909) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 257.73 107.1) (end 257.73 99.8) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 277.73 70.6) (end 277.73 77.9) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 277.73 77.9) (end 277.73 85.2) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 272.33 85.2) (end 257.73 99.8) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 277.73 85.2) (end 272.33 85.2) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 257.73 114.4) (end 257.73 121.7) (width 0.254) (layer B.Cu) (net 67)) - (segment (start 239 102.97) (end 257.73 121.7) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 239 99.336) (end 239 102.97) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 235.554 95.89) (end 239 99.336) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 222.86 95.89) (end 235.554 95.89) (width 0.254) (layer F.Cu) (net 67)) - (segment (start 66.5104 69.3804) (end 67.73 70.6) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 58.9496 69.3804) (end 66.5104 69.3804) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 57.73 70.6) (end 58.9496 69.3804) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 68.9496 69.3804) (end 67.73 70.6) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 76.5104 69.3804) (end 68.9496 69.3804) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 77.73 70.6) (end 76.5104 69.3804) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 28.9976 69.3324) (end 27.73 70.6) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 36.4624 69.3324) (end 28.9976 69.3324) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 37.73 70.6) (end 36.4624 69.3324) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 48.9976 69.3324) (end 47.73 70.6) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 56.4624 69.3324) (end 48.9976 69.3324) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 57.73 70.6) (end 56.4624 69.3324) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 38.9976 69.3324) (end 37.73 70.6) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 46.4624 69.3324) (end 38.9976 69.3324) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 47.73 70.6) (end 46.4624 69.3324) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 81.5189 72.3375) (end 81.5189 69.408) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 59.3711 94.4853) (end 81.5189 72.3375) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 59.3711 99.6096) (end 59.3711 94.4853) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 62.0804 102.3189) (end 59.3711 99.6096) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 65.6489 102.3189) (end 62.0804 102.3189) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 77.73 114.4) (end 65.6489 102.3189) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 78.9515 69.3785) (end 77.73 70.6) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 81.4894 69.3785) (end 78.9515 69.3785) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 81.5189 69.408) (end 81.4894 69.3785) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 242.47 131.32) (end 242.47 128.78) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 223.3435 89.7061) (end 221.7649 89.7061) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 236.5104 102.873) (end 223.3435 89.7061) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 236.5104 122.8204) (end 236.5104 102.873) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 242.47 128.78) (end 236.5104 122.8204) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 221.7649 89.5881) (end 221.7649 89.7061) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 199.9705 67.7937) (end 221.7649 89.5881) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 83.1332 67.7937) (end 199.9705 67.7937) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 81.5189 69.408) (end 83.1332 67.7937) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 221.7649 92.2549) (end 222.86 93.35) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 221.7649 89.7061) (end 221.7649 92.2549) (width 0.254) (layer B.Cu) (net 68)) - (segment (start 119 159.5) (end 109 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 109 159.5) (end 99 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 99 159.5) (end 89 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 119 159.5) (end 129 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 129 159.5) (end 139 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 139 159.5) (end 149 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 169 159.5) (end 179 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 179 159.5) (end 189 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 189 159.5) (end 199 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 149 159.5) (end 159 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 159 159.5) (end 169 159.5) (width 0.381) (layer F.Cu) (net 69)) - (segment (start 83.6994 134.0694) (end 82.71 133.08) (width 0.381) (layer B.Cu) (net 69)) - (segment (start 83.6994 152.4846) (end 83.6994 134.0694) (width 0.381) (layer B.Cu) (net 69)) - (segment (start 89 157.7852) (end 83.6994 152.4846) (width 0.381) (layer B.Cu) (net 69)) - (segment (start 89 159.5) (end 89 157.7852) (width 0.381) (layer B.Cu) (net 69)) - (segment (start 39 159.5) (end 49 159.5) (width 0.381) (layer F.Cu) (net 70)) - (segment (start 59 159.5) (end 69 159.5) (width 0.381) (layer F.Cu) (net 70)) - (segment (start 29 159.5) (end 39 159.5) (width 0.381) (layer F.Cu) (net 70)) - (segment (start 19.2122 133.7722) (end 14.94 129.5) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 19.2122 135.5578) (end 19.2122 133.7722) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 24.5925 140.9381) (end 19.2122 135.5578) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 24.5925 153.3777) (end 24.5925 140.9381) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 29 157.7852) (end 24.5925 153.3777) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 29 159.5) (end 29 157.7852) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 245.01 128.78) (end 245.01 131.32) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 143.5019 161.2148) (end 79 161.2148) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 149.0818 155.6349) (end 143.5019 161.2148) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 191.0458 155.6349) (end 149.0818 155.6349) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 194 152.6807) (end 191.0458 155.6349) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 194 143.03) (end 194 152.6807) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 202.5437 134.4863) (end 194 143.03) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 211.4032 134.4863) (end 202.5437 134.4863) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 213.9587 131.9308) (end 211.4032 134.4863) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 223.9137 131.9308) (end 213.9587 131.9308) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 225.0709 133.088) (end 223.9137 131.9308) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 243.242 133.088) (end 225.0709 133.088) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 245.01 131.32) (end 243.242 133.088) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 59 159.5) (end 49 159.5) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 79 159.5) (end 79 160.3574) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 79 160.3574) (end 79 161.2148) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 72.8422 160.3574) (end 71.9848 159.5) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 79 160.3574) (end 72.8422 160.3574) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 69 159.5) (end 71.9848 159.5) (width 0.381) (layer B.Cu) (net 70)) - (segment (start 219 159.5) (end 209 159.5) (width 0.381) (layer F.Cu) (net 71)) - (segment (start 229 159.5) (end 229 157.7852) (width 0.381) (layer B.Cu) (net 71)) - (segment (start 219 159.5) (end 219 157.7852) (width 0.381) (layer B.Cu) (net 71)) - (segment (start 224.0804 152.8656) (end 223.9196 152.8656) (width 0.381) (layer B.Cu) (net 71)) - (segment (start 229 157.7852) (end 224.0804 152.8656) (width 0.381) (layer B.Cu) (net 71)) - (segment (start 223.9196 134.5896) (end 223.9196 152.8656) (width 0.381) (layer B.Cu) (net 71)) - (segment (start 222.41 133.08) (end 223.9196 134.5896) (width 0.381) (layer B.Cu) (net 71)) - (segment (start 223.9196 152.8656) (end 219 157.7852) (width 0.381) (layer B.Cu) (net 71)) - (segment (start 229 159.5) (end 239 159.5) (width 0.381) (layer F.Cu) (net 71)) - (segment (start 259 159.5) (end 269 159.5) (width 0.381) (layer F.Cu) (net 71)) - (segment (start 269 159.5) (end 279 159.5) (width 0.381) (layer F.Cu) (net 71)) - (segment (start 239 159.5) (end 249 159.5) (width 0.381) (layer F.Cu) (net 71)) - (segment (start 249 159.5) (end 259 159.5) (width 0.381) (layer F.Cu) (net 71)) - (via (at 46.7355 117.1664) (size 0.889) (layers F.Cu B.Cu) (net 72)) - (segment (start 215.24 111.13) (end 214.1602 111.13) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 43.68 124) (end 42.41 125.27) (width 0.254) (layer B.Cu) (net 72)) - (segment (start 43.68 120.2219) (end 43.68 124) (width 0.254) (layer B.Cu) (net 72)) - (segment (start 46.7355 117.1664) (end 43.68 120.2219) (width 0.254) (layer B.Cu) (net 72)) - (segment (start 205.3363 119.9539) (end 214.1602 111.13) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 163.7895 119.9539) (end 205.3363 119.9539) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 163.2898 119.4542) (end 163.7895 119.9539) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 75.686 119.4542) (end 163.2898 119.4542) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 75.0777 120.0625) (end 75.686 119.4542) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 73.1045 120.0625) (end 75.0777 120.0625) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 70.7115 117.6695) (end 73.1045 120.0625) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 70.7115 117.4112) (end 70.7115 117.6695) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 67.3533 114.053) (end 70.7115 117.4112) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 49.8489 114.053) (end 67.3533 114.053) (width 0.254) (layer F.Cu) (net 72)) - (segment (start 46.7355 117.1664) (end 49.8489 114.053) (width 0.254) (layer F.Cu) (net 72)) - (via (at 46.7255 113.9784) (size 0.889) (layers F.Cu B.Cu) (net 73)) - (segment (start 41.14 119.5639) (end 46.7255 113.9784) (width 0.254) (layer B.Cu) (net 73)) - (segment (start 41.14 124) (end 41.14 119.5639) (width 0.254) (layer B.Cu) (net 73)) - (segment (start 39.87 125.27) (end 41.14 124) (width 0.254) (layer B.Cu) (net 73)) - (segment (start 204.396 119.434) (end 215.24 108.59) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 164.8008 119.434) (end 204.396 119.434) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 164.3127 118.9459) (end 164.8008 119.434) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 75.4755 118.9459) (end 164.3127 118.9459) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 74.8672 119.5542) (end 75.4755 118.9459) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 73.315 119.5542) (end 74.8672 119.5542) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 71.2198 117.459) (end 73.315 119.5542) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 71.2198 117.2007) (end 71.2198 117.459) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 67.5638 113.5447) (end 71.2198 117.2007) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 47.1592 113.5447) (end 67.5638 113.5447) (width 0.254) (layer F.Cu) (net 73)) - (segment (start 46.7255 113.9784) (end 47.1592 113.5447) (width 0.254) (layer F.Cu) (net 73)) - (via (at 74.3516 118.7284) (size 0.889) (layers F.Cu B.Cu) (net 74)) - (segment (start 70.35 122.73) (end 74.3516 118.7284) (width 0.254) (layer B.Cu) (net 74)) - (segment (start 74.6581 118.4219) (end 74.3516 118.7284) (width 0.254) (layer F.Cu) (net 74)) - (segment (start 165.8133 118.4219) (end 74.6581 118.4219) (width 0.254) (layer F.Cu) (net 74)) - (segment (start 166.279 118.8876) (end 165.8133 118.4219) (width 0.254) (layer F.Cu) (net 74)) - (segment (start 189.6176 118.8876) (end 166.279 118.8876) (width 0.254) (layer F.Cu) (net 74)) - (segment (start 202.4552 106.05) (end 189.6176 118.8876) (width 0.254) (layer F.Cu) (net 74)) - (segment (start 215.24 106.05) (end 202.4552 106.05) (width 0.254) (layer F.Cu) (net 74)) - (via (at 73.5094 117.8863) (size 0.889) (layers F.Cu B.Cu) (net 75)) - (segment (start 69.189 122.2067) (end 73.5094 117.8863) (width 0.254) (layer B.Cu) (net 75)) - (segment (start 69.189 124.109) (end 69.189 122.2067) (width 0.254) (layer B.Cu) (net 75)) - (segment (start 70.35 125.27) (end 69.189 124.109) (width 0.254) (layer B.Cu) (net 75)) - (segment (start 166.7756 117.8863) (end 73.5094 117.8863) (width 0.254) (layer F.Cu) (net 75)) - (segment (start 167.2685 118.3792) (end 166.7756 117.8863) (width 0.254) (layer F.Cu) (net 75)) - (segment (start 188.0154 118.3792) (end 167.2685 118.3792) (width 0.254) (layer F.Cu) (net 75)) - (segment (start 202.8846 103.51) (end 188.0154 118.3792) (width 0.254) (layer F.Cu) (net 75)) - (segment (start 215.24 103.51) (end 202.8846 103.51) (width 0.254) (layer F.Cu) (net 75)) - (via (at 72.0456 117.117) (size 0.889) (layers F.Cu B.Cu) (net 76)) - (segment (start 71.7875 117.117) (end 72.0456 117.117) (width 0.254) (layer B.Cu) (net 76)) - (segment (start 66.6329 122.2716) (end 71.7875 117.117) (width 0.254) (layer B.Cu) (net 76)) - (segment (start 66.6329 124.0929) (end 66.6329 122.2716) (width 0.254) (layer B.Cu) (net 76)) - (segment (start 67.81 125.27) (end 66.6329 124.0929) (width 0.254) (layer B.Cu) (net 76)) - (segment (start 212.2913 98.0213) (end 215.24 100.97) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 166.9503 98.0213) (end 212.2913 98.0213) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 152.2996 112.672) (end 166.9503 98.0213) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 77.7335 112.672) (end 152.2996 112.672) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 74.3019 116.1036) (end 77.7335 112.672) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 74.3019 116.256) (end 74.3019 116.1036) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 73.5204 117.0375) (end 74.3019 116.256) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 72.1251 117.0375) (end 73.5204 117.0375) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 72.0456 117.117) (end 72.1251 117.0375) (width 0.254) (layer F.Cu) (net 76)) - (segment (start 215.24 99.2311) (end 215.24 98.43) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 203.3834 111.0877) (end 215.24 99.2311) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 176.5976 111.0877) (end 203.3834 111.0877) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 171.5043 116.181) (end 176.5976 111.0877) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 170.3226 116.181) (end 171.5043 116.181) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 169.541 116.9626) (end 170.3226 116.181) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 169.541 116.9874) (end 169.541 116.9626) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 161.7612 124.7672) (end 169.541 116.9874) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 97.6652 124.7672) (end 161.7612 124.7672) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 91.6673 130.7651) (end 97.6652 124.7672) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 86.3283 130.7651) (end 91.6673 130.7651) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 85.4209 129.8577) (end 86.3283 130.7651) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 71.3431 129.8577) (end 85.4209 129.8577) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 70.9812 130.2196) (end 71.3431 129.8577) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 69.7306 130.2196) (end 70.9812 130.2196) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 68.9496 129.4386) (end 69.7306 130.2196) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 68.9496 128.4343) (end 68.9496 129.4386) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 68.1614 127.6461) (end 68.9496 128.4343) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 65.1061 127.6461) (end 68.1614 127.6461) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 62.73 125.27) (end 65.1061 127.6461) (width 0.254) (layer B.Cu) (net 77)) - (segment (start 166 95.89) (end 215.24 95.89) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 160.8205 101.0695) (end 166 95.89) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 143.4703 101.0695) (end 160.8205 101.0695) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 140.9812 98.5804) (end 143.4703 101.0695) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 139.7115 98.5804) (end 140.9812 98.5804) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 138.9496 99.3423) (end 139.7115 98.5804) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 138.9496 100.3221) (end 138.9496 99.3423) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 128.537 110.7347) (end 138.9496 100.3221) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 78.9357 110.7347) (end 128.537 110.7347) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 73.7936 115.8768) (end 78.9357 110.7347) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 73.7936 116.0455) (end 73.7936 115.8768) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 73.3099 116.5292) (end 73.7936 116.0455) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 72.6258 116.5292) (end 73.3099 116.5292) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 69.0864 112.9898) (end 72.6258 116.5292) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 49.8972 112.9898) (end 69.0864 112.9898) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 43.95 107.0426) (end 49.8972 112.9898) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 43.95 106.4301) (end 43.95 107.0426) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 43.1391 105.6192) (end 43.95 106.4301) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 42.2341 105.6192) (end 43.1391 105.6192) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 41.571 106.2823) (end 42.2341 105.6192) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 41.571 121.891) (end 41.571 106.2823) (width 0.254) (layer F.Cu) (net 78)) - (segment (start 42.41 122.73) (end 41.571 121.891) (width 0.254) (layer F.Cu) (net 78)) - (via (at 72.9678 115.7034) (size 0.889) (layers F.Cu B.Cu) (net 79)) - (segment (start 85.9 102.7712) (end 72.9678 115.7034) (width 0.254) (layer F.Cu) (net 79)) - (segment (start 100.8346 102.7712) (end 85.9 102.7712) (width 0.254) (layer F.Cu) (net 79)) - (segment (start 110.2558 93.35) (end 100.8346 102.7712) (width 0.254) (layer F.Cu) (net 79)) - (segment (start 215.24 93.35) (end 110.2558 93.35) (width 0.254) (layer F.Cu) (net 79)) - (segment (start 75.1941 120.4259) (end 72.89 122.73) (width 0.254) (layer B.Cu) (net 79)) - (segment (start 75.1941 117.9297) (end 75.1941 120.4259) (width 0.254) (layer B.Cu) (net 79)) - (segment (start 72.9678 115.7034) (end 75.1941 117.9297) (width 0.254) (layer B.Cu) (net 79)) - - (zone (net 0) (net_name "") (layer B.Cu) (tstamp 554E4CD1) (hatch edge 0.508) - (connect_pads (clearance 0.508)) - (min_thickness 0.254) - (keepout (tracks not_allowed) (vias not_allowed) (copperpour allowed)) - (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) - (polygon - (pts - (xy 288 140) (xy 284 140) (xy 284 156) (xy 288 156) - ) - ) - ) - (zone (net 0) (net_name "") (layer F.Cu) (tstamp 554E4CD1) (hatch edge 0.508) - (connect_pads (clearance 0.508)) - (min_thickness 0.254) - (keepout (tracks not_allowed) (vias not_allowed) (copperpour allowed)) - (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) - (polygon - (pts - (xy 288 140) (xy 284 140) (xy 284 156) (xy 288 156) - ) - ) - ) -) DELETED hardware/pdp8i/PDP8.pro Index: hardware/pdp8i/PDP8.pro ================================================================== --- hardware/pdp8i/PDP8.pro +++ /dev/null @@ -1,88 +0,0 @@ -update=17/05/2015 11:44:30 -version=1 -last_client=eeschema -[cvpcb] -version=1 -NetIExt=net -[cvpcb/libraries] -EquName1=devcms -[pcbnew] -version=1 -LastNetListRead= -UseCmpFile=1 -PadDrill=0.600000000000 -PadDrillOvalY=0.600000000000 -PadSizeH=1.500000000000 -PadSizeV=1.500000000000 -PcbTextSizeV=1.500000000000 -PcbTextSizeH=1.500000000000 -PcbTextThickness=0.300000000000 -ModuleTextSizeV=1.000000000000 -ModuleTextSizeH=1.000000000000 -ModuleTextSizeThickness=0.150000000000 -SolderMaskClearance=0.000000000000 -SolderMaskMinWidth=0.000000000000 -DrawSegmentWidth=0.200000000000 -BoardOutlineThickness=0.100000000000 -ModuleOutlineThickness=0.150000000000 -[pcbnew/libraries] -LibDir=customlibraries -LibName1=sockets -LibName2=connect -LibName3=discret -LibName4=pin_array -LibName5=divers -LibName6=smd_capacitors -LibName7=smd_resistors -LibName8=smd_crystal&oscillator -LibName9=smd_dil -LibName10=smd_transistors -LibName11=libcms -LibName12=display -LibName13=pdp8footprintlib2 -LibName14=led -LibName15=dip_sockets -LibName16=pga_sockets -LibName17=valves -[general] -version=1 -[eeschema] -version=1 -LibDir=customlibraries -NetFmtName= -RptD_X=0 -RptD_Y=100 -RptLab=1 -LabSize=60 -[eeschema/libraries] -LibName1=power -LibName2=device -LibName3=transistors -LibName4=conn -LibName5=linear -LibName6=regul -LibName7=74xx -LibName8=cmos4000 -LibName9=adc-dac -LibName10=memory -LibName11=xilinx -LibName12=special -LibName13=microcontrollers -LibName14=dsp -LibName15=microchip -LibName16=analog_switches -LibName17=motorola -LibName18=texas -LibName19=intel -LibName20=audio -LibName21=interface -LibName22=digital-audio -LibName23=philips -LibName24=display -LibName25=cypress -LibName26=siliconi -LibName27=opto -LibName28=atmel -LibName29=contrib -LibName30=valves -LibName31=pdp8_library DELETED hardware/pdp8i/PDP8.rules Index: hardware/pdp8i/PDP8.rules ================================================================== --- hardware/pdp8i/PDP8.rules +++ /dev/null @@ -1,111 +0,0 @@ - -(rules PCB PDP8 - (snap_angle - fortyfive_degree - ) - (autoroute_settings - (fanout off) - (autoroute on) - (postroute on) - (vias on) - (via_costs 50) - (plane_via_costs 5) - (start_ripup_costs 100) - (start_pass_no 19938) - (layer_rule F.Cu - (active on) - (preferred_direction horizontal) - (preferred_direction_trace_costs 1.0) - (against_preferred_direction_trace_costs 3.9) - ) - (layer_rule B.Cu - (active on) - (preferred_direction vertical) - (preferred_direction_trace_costs 1.0) - (against_preferred_direction_trace_costs 1.3) - ) - ) - (rule - (width 254.0) - (clear 254.2) - (clear 127.0 (type smd_to_turn_gap)) - (clear 63.6 (type smd_smd)) - ) - (padstack "Via[0-1]_889:635_um" - (shape - (circle F.Cu 889.0 0.0 0.0) - ) - (shape - (circle B.Cu 889.0 0.0 0.0) - ) - (attach off) - ) - (padstack "Via[0-1]_889:0_um" - (shape - (circle F.Cu 889.0 0.0 0.0) - ) - (shape - (circle B.Cu 889.0 0.0 0.0) - ) - (attach off) - ) - (via - "Via[0-1]_889:635_um" "Via[0-1]_889:635_um" default - ) - (via - "Via[0-1]_889:0_um" "Via[0-1]_889:0_um" default - ) - (via - "Via[0-1]_889:635_um-kicad_default" "Via[0-1]_889:635_um" "kicad_default" - ) - (via - "Via[0-1]_889:0_um-kicad_default" "Via[0-1]_889:0_um" "kicad_default" - ) - (via_rule - default "Via[0-1]_889:635_um" - ) - (via_rule - "kicad_default" "Via[0-1]_889:635_um-kicad_default" - ) - (class default - (clearance_class default) - (via_rule default) - (rule - (width 254.0) - ) - (circuit - (use_layer F.Cu B.Cu) - ) - ) - (class "kicad_default" - "N-0000023" "N-0000028" "N-0000029" "N-0000035" "N-0000039" "N-0000040" "N-0000041" "N-0000042" - "N-0000043" "N-0000046" "N-0000048" "N-0000049" "N-0000050" "N-0000053" "N-0000054" "N-0000055" - "N-0000056" "N-0000057" "N-0000059" "N-0000060" "N-0000061" "N-0000062" "N-0000063" "N-0000065" - "N-0000066" "N-0000067" "N-0000068" "N-0000069" "N-0000070" "N-0000071" "N-0000072" "N-0000073" - "N-0000074" "N-0000079" "N-0000085" "N-0000086" "N-0000087" "N-0000088" "N-0000089" "N-0000090" - "N-0000091" "N-0000092" "N-0000093" RX "SPARE_IO" TX col1 col10 - col11 col12 col1a col2 col2a col3 col4 col5 - col6 col7 col8 col9 led1 led2 led3 led4 - led5 led6 led7 led8 xled1 xled2 xled3 xled4 - xled5 xled6 xled7 xled8 - (clearance_class "kicad_default") - (via_rule kicad_default) - (rule - (width 254.0) - ) - (circuit - (use_layer F.Cu B.Cu) - ) - ) - (class fat - +3.3V +5V GND row1 row2 row3 - (clearance_class default) - (via_rule default) - (rule - (width 381.0) - ) - (circuit - (use_layer F.Cu B.Cu) - ) - ) -) DELETED hardware/pdp8i/PDP8.sch Index: hardware/pdp8i/PDP8.sch ================================================================== --- hardware/pdp8i/PDP8.sch +++ /dev/null @@ -1,3325 +0,0 @@ -EESchema Schematic File Version 2 -LIBS:power -LIBS:device -LIBS:transistors -LIBS:conn -LIBS:linear -LIBS:regul -LIBS:74xx -LIBS:cmos4000 -LIBS:adc-dac -LIBS:memory -LIBS:xilinx -LIBS:special -LIBS:microcontrollers -LIBS:dsp -LIBS:microchip -LIBS:analog_switches -LIBS:motorola -LIBS:texas -LIBS:intel -LIBS:audio -LIBS:interface -LIBS:digital-audio -LIBS:philips -LIBS:display -LIBS:cypress -LIBS:siliconi -LIBS:opto -LIBS:atmel -LIBS:contrib -LIBS:valves -LIBS:pdp8_library -LIBS:PDP8-cache -EELAYER 27 0 -EELAYER END -$Descr A4 11693 8268 -encoding utf-8 -Sheet 1 1 -Title "" -Date "11 may 2015" -Rev "" -Comp "" -Comment1 "" -Comment2 "" -Comment3 "" -Comment4 "" -$EndDescr -$Comp -L LED DPC1 -U 1 1 548EF34A -P 5500 900 -F 0 "DPC1" H 5500 1000 50 0000 C CNN -F 1 "LED" H 5500 800 50 0000 C CNN -F 2 "~" H 5500 900 60 0000 C CNN -F 3 "~" H 5500 900 60 0000 C CNN - 1 5500 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC2 -U 1 1 548EF399 -P 5800 900 -F 0 "DPC2" H 5800 1000 50 0000 C CNN -F 1 "LED" H 5800 800 50 0000 C CNN -F 2 "~" H 5800 900 60 0000 C CNN -F 3 "~" H 5800 900 60 0000 C CNN - 1 5800 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC3 -U 1 1 548EF3AC -P 6100 900 -F 0 "DPC3" H 6100 1000 50 0000 C CNN -F 1 "LED" H 6100 800 50 0000 C CNN -F 2 "~" H 6100 900 60 0000 C CNN -F 3 "~" H 6100 900 60 0000 C CNN - 1 6100 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC4 -U 1 1 548EF3B2 -P 6400 900 -F 0 "DPC4" H 6400 1000 50 0000 C CNN -F 1 "LED" H 6400 800 50 0000 C CNN -F 2 "~" H 6400 900 60 0000 C CNN -F 3 "~" H 6400 900 60 0000 C CNN - 1 6400 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC5 -U 1 1 548EF3B8 -P 6700 900 -F 0 "DPC5" H 6700 1000 50 0000 C CNN -F 1 "LED" H 6700 800 50 0000 C CNN -F 2 "~" H 6700 900 60 0000 C CNN -F 3 "~" H 6700 900 60 0000 C CNN - 1 6700 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC6 -U 1 1 548EF3BE -P 7000 900 -F 0 "DPC6" H 7000 1000 50 0000 C CNN -F 1 "LED" H 7000 800 50 0000 C CNN -F 2 "~" H 7000 900 60 0000 C CNN -F 3 "~" H 7000 900 60 0000 C CNN - 1 7000 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC7 -U 1 1 548EF3C4 -P 7300 900 -F 0 "DPC7" H 7300 1000 50 0000 C CNN -F 1 "LED" H 7300 800 50 0000 C CNN -F 2 "~" H 7300 900 60 0000 C CNN -F 3 "~" H 7300 900 60 0000 C CNN - 1 7300 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC8 -U 1 1 548EF3CA -P 7600 900 -F 0 "DPC8" H 7600 1000 50 0000 C CNN -F 1 "LED" H 7600 800 50 0000 C CNN -F 2 "~" H 7600 900 60 0000 C CNN -F 3 "~" H 7600 900 60 0000 C CNN - 1 7600 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC9 -U 1 1 548EF3D0 -P 7900 900 -F 0 "DPC9" H 7900 1000 50 0000 C CNN -F 1 "LED" H 7900 800 50 0000 C CNN -F 2 "~" H 7900 900 60 0000 C CNN -F 3 "~" H 7900 900 60 0000 C CNN - 1 7900 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC10 -U 1 1 548EF3D6 -P 8200 900 -F 0 "DPC10" H 8200 1000 50 0000 C CNN -F 1 "LED" H 8200 800 50 0000 C CNN -F 2 "~" H 8200 900 60 0000 C CNN -F 3 "~" H 8200 900 60 0000 C CNN - 1 8200 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC11 -U 1 1 548EF3DC -P 8500 900 -F 0 "DPC11" H 8500 1000 50 0000 C CNN -F 1 "LED" H 8500 800 50 0000 C CNN -F 2 "~" H 8500 900 60 0000 C CNN -F 3 "~" H 8500 900 60 0000 C CNN - 1 8500 900 - 0 1 1 0 -$EndComp -$Comp -L LED DPC12 -U 1 1 548EF3E2 -P 8800 900 -F 0 "DPC12" H 8800 1000 50 0000 C CNN -F 1 "LED" H 8800 800 50 0000 C CNN -F 2 "~" H 8800 900 60 0000 C CNN -F 3 "~" H 8800 900 60 0000 C CNN - 1 8800 900 - 0 1 1 0 -$EndComp -$Comp -L LED DMA1 -U 1 1 548EF463 -P 5500 1550 -F 0 "DMA1" H 5500 1650 50 0000 C CNN -F 1 "LED" H 5500 1450 50 0000 C CNN -F 2 "~" H 5500 1550 60 0000 C CNN -F 3 "~" H 5500 1550 60 0000 C CNN - 1 5500 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA2 -U 1 1 548EF47C -P 5800 1550 -F 0 "DMA2" H 5800 1650 50 0000 C CNN -F 1 "LED" H 5800 1450 50 0000 C CNN -F 2 "~" H 5800 1550 60 0000 C CNN -F 3 "~" H 5800 1550 60 0000 C CNN - 1 5800 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA3 -U 1 1 548EF482 -P 6100 1550 -F 0 "DMA3" H 6100 1650 50 0000 C CNN -F 1 "LED" H 6100 1450 50 0000 C CNN -F 2 "~" H 6100 1550 60 0000 C CNN -F 3 "~" H 6100 1550 60 0000 C CNN - 1 6100 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA4 -U 1 1 548EF488 -P 6400 1550 -F 0 "DMA4" H 6400 1650 50 0000 C CNN -F 1 "LED" H 6400 1450 50 0000 C CNN -F 2 "~" H 6400 1550 60 0000 C CNN -F 3 "~" H 6400 1550 60 0000 C CNN - 1 6400 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA5 -U 1 1 548EF48E -P 6700 1550 -F 0 "DMA5" H 6700 1650 50 0000 C CNN -F 1 "LED" H 6700 1450 50 0000 C CNN -F 2 "~" H 6700 1550 60 0000 C CNN -F 3 "~" H 6700 1550 60 0000 C CNN - 1 6700 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA6 -U 1 1 548EF494 -P 7000 1550 -F 0 "DMA6" H 7000 1650 50 0000 C CNN -F 1 "LED" H 7000 1450 50 0000 C CNN -F 2 "~" H 7000 1550 60 0000 C CNN -F 3 "~" H 7000 1550 60 0000 C CNN - 1 7000 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA7 -U 1 1 548EF49A -P 7300 1550 -F 0 "DMA7" H 7300 1650 50 0000 C CNN -F 1 "LED" H 7300 1450 50 0000 C CNN -F 2 "~" H 7300 1550 60 0000 C CNN -F 3 "~" H 7300 1550 60 0000 C CNN - 1 7300 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA8 -U 1 1 548EF4A0 -P 7600 1550 -F 0 "DMA8" H 7600 1650 50 0000 C CNN -F 1 "LED" H 7600 1450 50 0000 C CNN -F 2 "~" H 7600 1550 60 0000 C CNN -F 3 "~" H 7600 1550 60 0000 C CNN - 1 7600 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA9 -U 1 1 548EF4A6 -P 7900 1550 -F 0 "DMA9" H 7900 1650 50 0000 C CNN -F 1 "LED" H 7900 1450 50 0000 C CNN -F 2 "~" H 7900 1550 60 0000 C CNN -F 3 "~" H 7900 1550 60 0000 C CNN - 1 7900 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA10 -U 1 1 548EF4AC -P 8200 1550 -F 0 "DMA10" H 8200 1650 50 0000 C CNN -F 1 "LED" H 8200 1450 50 0000 C CNN -F 2 "~" H 8200 1550 60 0000 C CNN -F 3 "~" H 8200 1550 60 0000 C CNN - 1 8200 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA11 -U 1 1 548EF4B2 -P 8500 1550 -F 0 "DMA11" H 8500 1650 50 0000 C CNN -F 1 "LED" H 8500 1450 50 0000 C CNN -F 2 "~" H 8500 1550 60 0000 C CNN -F 3 "~" H 8500 1550 60 0000 C CNN - 1 8500 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMA12 -U 1 1 548EF4B8 -P 8800 1550 -F 0 "DMA12" H 8800 1650 50 0000 C CNN -F 1 "LED" H 8800 1450 50 0000 C CNN -F 2 "~" H 8800 1550 60 0000 C CNN -F 3 "~" H 8800 1550 60 0000 C CNN - 1 8800 1550 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMB1 -U 1 1 548EF56F -P 5500 2200 -F 0 "DMB1" H 5500 2300 50 0000 C CNN -F 1 "LED" H 5500 2100 50 0000 C CNN -F 2 "~" H 5500 2200 60 0000 C CNN -F 3 "~" H 5500 2200 60 0000 C CNN - 1 5500 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB2 -U 1 1 548EF588 -P 5800 2200 -F 0 "DMB2" H 5800 2300 50 0000 C CNN -F 1 "LED" H 5800 2100 50 0000 C CNN -F 2 "~" H 5800 2200 60 0000 C CNN -F 3 "~" H 5800 2200 60 0000 C CNN - 1 5800 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB3 -U 1 1 548EF58E -P 6100 2200 -F 0 "DMB3" H 6100 2300 50 0000 C CNN -F 1 "LED" H 6100 2100 50 0000 C CNN -F 2 "~" H 6100 2200 60 0000 C CNN -F 3 "~" H 6100 2200 60 0000 C CNN - 1 6100 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB4 -U 1 1 548EF594 -P 6400 2200 -F 0 "DMB4" H 6400 2300 50 0000 C CNN -F 1 "LED" H 6400 2100 50 0000 C CNN -F 2 "~" H 6400 2200 60 0000 C CNN -F 3 "~" H 6400 2200 60 0000 C CNN - 1 6400 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB5 -U 1 1 548EF59A -P 6700 2200 -F 0 "DMB5" H 6700 2300 50 0000 C CNN -F 1 "LED" H 6700 2100 50 0000 C CNN -F 2 "~" H 6700 2200 60 0000 C CNN -F 3 "~" H 6700 2200 60 0000 C CNN - 1 6700 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB6 -U 1 1 548EF5A0 -P 7000 2200 -F 0 "DMB6" H 7000 2300 50 0000 C CNN -F 1 "LED" H 7000 2100 50 0000 C CNN -F 2 "~" H 7000 2200 60 0000 C CNN -F 3 "~" H 7000 2200 60 0000 C CNN - 1 7000 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB7 -U 1 1 548EF5A6 -P 7300 2200 -F 0 "DMB7" H 7300 2300 50 0000 C CNN -F 1 "LED" H 7300 2100 50 0000 C CNN -F 2 "~" H 7300 2200 60 0000 C CNN -F 3 "~" H 7300 2200 60 0000 C CNN - 1 7300 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB8 -U 1 1 548EF5AC -P 7600 2200 -F 0 "DMB8" H 7600 2300 50 0000 C CNN -F 1 "LED" H 7600 2100 50 0000 C CNN -F 2 "~" H 7600 2200 60 0000 C CNN -F 3 "~" H 7600 2200 60 0000 C CNN - 1 7600 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB9 -U 1 1 548EF5B2 -P 7900 2200 -F 0 "DMB9" H 7900 2300 50 0000 C CNN -F 1 "LED" H 7900 2100 50 0000 C CNN -F 2 "~" H 7900 2200 60 0000 C CNN -F 3 "~" H 7900 2200 60 0000 C CNN - 1 7900 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB10 -U 1 1 548EF5B8 -P 8200 2200 -F 0 "DMB10" H 8200 2300 50 0000 C CNN -F 1 "LED" H 8200 2100 50 0000 C CNN -F 2 "~" H 8200 2200 60 0000 C CNN -F 3 "~" H 8200 2200 60 0000 C CNN - 1 8200 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB11 -U 1 1 548EF5BE -P 8500 2200 -F 0 "DMB11" H 8500 2300 50 0000 C CNN -F 1 "LED" H 8500 2100 50 0000 C CNN -F 2 "~" H 8500 2200 60 0000 C CNN -F 3 "~" H 8500 2200 60 0000 C CNN - 1 8500 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DMB12 -U 1 1 548EF5C4 -P 8800 2200 -F 0 "DMB12" H 8800 2300 50 0000 C CNN -F 1 "LED" H 8800 2100 50 0000 C CNN -F 2 "~" H 8800 2200 60 0000 C CNN -F 3 "~" H 8800 2200 60 0000 C CNN - 1 8800 2200 - 0 1 1 0 -$EndComp -$Comp -L LED DAC1 -U 1 1 548EF5CC -P 5500 2850 -F 0 "DAC1" H 5500 2950 50 0000 C CNN -F 1 "LED" H 5500 2750 50 0000 C CNN -F 2 "~" H 5500 2850 60 0000 C CNN -F 3 "~" H 5500 2850 60 0000 C CNN - 1 5500 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC2 -U 1 1 548EF5E5 -P 5800 2850 -F 0 "DAC2" H 5800 2950 50 0000 C CNN -F 1 "LED" H 5800 2750 50 0000 C CNN -F 2 "~" H 5800 2850 60 0000 C CNN -F 3 "~" H 5800 2850 60 0000 C CNN - 1 5800 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC3 -U 1 1 548EF5EB -P 6100 2850 -F 0 "DAC3" H 6100 2950 50 0000 C CNN -F 1 "LED" H 6100 2750 50 0000 C CNN -F 2 "~" H 6100 2850 60 0000 C CNN -F 3 "~" H 6100 2850 60 0000 C CNN - 1 6100 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC4 -U 1 1 548EF5F1 -P 6400 2850 -F 0 "DAC4" H 6400 2950 50 0000 C CNN -F 1 "LED" H 6400 2750 50 0000 C CNN -F 2 "~" H 6400 2850 60 0000 C CNN -F 3 "~" H 6400 2850 60 0000 C CNN - 1 6400 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC5 -U 1 1 548EF5F7 -P 6700 2850 -F 0 "DAC5" H 6700 2950 50 0000 C CNN -F 1 "LED" H 6700 2750 50 0000 C CNN -F 2 "~" H 6700 2850 60 0000 C CNN -F 3 "~" H 6700 2850 60 0000 C CNN - 1 6700 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC6 -U 1 1 548EF5FD -P 7000 2850 -F 0 "DAC6" H 7000 2950 50 0000 C CNN -F 1 "LED" H 7000 2750 50 0000 C CNN -F 2 "~" H 7000 2850 60 0000 C CNN -F 3 "~" H 7000 2850 60 0000 C CNN - 1 7000 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC7 -U 1 1 548EF603 -P 7300 2850 -F 0 "DAC7" H 7300 2950 50 0000 C CNN -F 1 "LED" H 7300 2750 50 0000 C CNN -F 2 "~" H 7300 2850 60 0000 C CNN -F 3 "~" H 7300 2850 60 0000 C CNN - 1 7300 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC8 -U 1 1 548EF609 -P 7600 2850 -F 0 "DAC8" H 7600 2950 50 0000 C CNN -F 1 "LED" H 7600 2750 50 0000 C CNN -F 2 "~" H 7600 2850 60 0000 C CNN -F 3 "~" H 7600 2850 60 0000 C CNN - 1 7600 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC9 -U 1 1 548EF60F -P 7900 2850 -F 0 "DAC9" H 7900 2950 50 0000 C CNN -F 1 "LED" H 7900 2750 50 0000 C CNN -F 2 "~" H 7900 2850 60 0000 C CNN -F 3 "~" H 7900 2850 60 0000 C CNN - 1 7900 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC10 -U 1 1 548EF615 -P 8200 2850 -F 0 "DAC10" H 8200 2950 50 0000 C CNN -F 1 "LED" H 8200 2750 50 0000 C CNN -F 2 "~" H 8200 2850 60 0000 C CNN -F 3 "~" H 8200 2850 60 0000 C CNN - 1 8200 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC11 -U 1 1 548EF61B -P 8500 2850 -F 0 "DAC11" H 8500 2950 50 0000 C CNN -F 1 "LED" H 8500 2750 50 0000 C CNN -F 2 "~" H 8500 2850 60 0000 C CNN -F 3 "~" H 8500 2850 60 0000 C CNN - 1 8500 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DAC12 -U 1 1 548EF621 -P 8800 2850 -F 0 "DAC12" H 8800 2950 50 0000 C CNN -F 1 "LED" H 8800 2750 50 0000 C CNN -F 2 "~" H 8800 2850 60 0000 C CNN -F 3 "~" H 8800 2850 60 0000 C CNN - 1 8800 2850 - 0 -1 -1 0 -$EndComp -$Comp -L LED DMQ1 -U 1 1 548EF629 -P 5500 3600 -F 0 "DMQ1" H 5500 3700 50 0000 C CNN -F 1 "LED" H 5500 3500 50 0000 C CNN -F 2 "~" H 5500 3600 60 0000 C CNN -F 3 "~" H 5500 3600 60 0000 C CNN - 1 5500 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ2 -U 1 1 548EF642 -P 5800 3600 -F 0 "DMQ2" H 5800 3700 50 0000 C CNN -F 1 "LED" H 5800 3500 50 0000 C CNN -F 2 "~" H 5800 3600 60 0000 C CNN -F 3 "~" H 5800 3600 60 0000 C CNN - 1 5800 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ3 -U 1 1 548EF648 -P 6100 3600 -F 0 "DMQ3" H 6100 3700 50 0000 C CNN -F 1 "LED" H 6100 3500 50 0000 C CNN -F 2 "~" H 6100 3600 60 0000 C CNN -F 3 "~" H 6100 3600 60 0000 C CNN - 1 6100 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ4 -U 1 1 548EF64E -P 6400 3600 -F 0 "DMQ4" H 6400 3700 50 0000 C CNN -F 1 "LED" H 6400 3500 50 0000 C CNN -F 2 "~" H 6400 3600 60 0000 C CNN -F 3 "~" H 6400 3600 60 0000 C CNN - 1 6400 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ5 -U 1 1 548EF654 -P 6700 3600 -F 0 "DMQ5" H 6700 3700 50 0000 C CNN -F 1 "LED" H 6700 3500 50 0000 C CNN -F 2 "~" H 6700 3600 60 0000 C CNN -F 3 "~" H 6700 3600 60 0000 C CNN - 1 6700 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ6 -U 1 1 548EF65A -P 7000 3600 -F 0 "DMQ6" H 7000 3700 50 0000 C CNN -F 1 "LED" H 7000 3500 50 0000 C CNN -F 2 "~" H 7000 3600 60 0000 C CNN -F 3 "~" H 7000 3600 60 0000 C CNN - 1 7000 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ7 -U 1 1 548EF660 -P 7300 3600 -F 0 "DMQ7" H 7300 3700 50 0000 C CNN -F 1 "LED" H 7300 3500 50 0000 C CNN -F 2 "~" H 7300 3600 60 0000 C CNN -F 3 "~" H 7300 3600 60 0000 C CNN - 1 7300 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ8 -U 1 1 548EF666 -P 7600 3600 -F 0 "DMQ8" H 7600 3700 50 0000 C CNN -F 1 "LED" H 7600 3500 50 0000 C CNN -F 2 "~" H 7600 3600 60 0000 C CNN -F 3 "~" H 7600 3600 60 0000 C CNN - 1 7600 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ9 -U 1 1 548EF66C -P 7900 3600 -F 0 "DMQ9" H 7900 3700 50 0000 C CNN -F 1 "LED" H 7900 3500 50 0000 C CNN -F 2 "~" H 7900 3600 60 0000 C CNN -F 3 "~" H 7900 3600 60 0000 C CNN - 1 7900 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ10 -U 1 1 548EF672 -P 8200 3600 -F 0 "DMQ10" H 8200 3700 50 0000 C CNN -F 1 "LED" H 8200 3500 50 0000 C CNN -F 2 "~" H 8200 3600 60 0000 C CNN -F 3 "~" H 8200 3600 60 0000 C CNN - 1 8200 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ11 -U 1 1 548EF678 -P 8500 3600 -F 0 "DMQ11" H 8500 3700 50 0000 C CNN -F 1 "LED" H 8500 3500 50 0000 C CNN -F 2 "~" H 8500 3600 60 0000 C CNN -F 3 "~" H 8500 3600 60 0000 C CNN - 1 8500 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DMQ12 -U 1 1 548EF67E -P 8800 3600 -F 0 "DMQ12" H 8800 3700 50 0000 C CNN -F 1 "LED" H 8800 3500 50 0000 C CNN -F 2 "~" H 8800 3600 60 0000 C CNN -F 3 "~" H 8800 3600 60 0000 C CNN - 1 8800 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DLINK1 -U 1 1 548EF686 -P 5200 2850 -F 0 "DLINK1" H 5200 2950 50 0000 C CNN -F 1 "LED" H 5200 2750 50 0000 C CNN -F 2 "~" H 5200 2850 60 0000 C CNN -F 3 "~" H 5200 2850 60 0000 C CNN - 1 5200 2850 - 0 1 1 0 -$EndComp -$Comp -L LED DSC1 -U 1 1 548EF6A1 -P 3350 3600 -F 0 "DSC1" H 3350 3700 50 0000 C CNN -F 1 "LED" H 3350 3500 50 0000 C CNN -F 2 "~" H 3350 3600 60 0000 C CNN -F 3 "~" H 3350 3600 60 0000 C CNN - 1 3350 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DSC2 -U 1 1 548EF6BA -P 3650 3600 -F 0 "DSC2" H 3650 3700 50 0000 C CNN -F 1 "LED" H 3650 3500 50 0000 C CNN -F 2 "~" H 3650 3600 60 0000 C CNN -F 3 "~" H 3650 3600 60 0000 C CNN - 1 3650 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DSC3 -U 1 1 548EF6C0 -P 3950 3600 -F 0 "DSC3" H 3950 3700 50 0000 C CNN -F 1 "LED" H 3950 3500 50 0000 C CNN -F 2 "~" H 3950 3600 60 0000 C CNN -F 3 "~" H 3950 3600 60 0000 C CNN - 1 3950 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DSC4 -U 1 1 548EF6C6 -P 4250 3600 -F 0 "DSC4" H 4250 3700 50 0000 C CNN -F 1 "LED" H 4250 3500 50 0000 C CNN -F 2 "~" H 4250 3600 60 0000 C CNN -F 3 "~" H 4250 3600 60 0000 C CNN - 1 4250 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DSC5 -U 1 1 548EF6CC -P 4550 3600 -F 0 "DSC5" H 4550 3700 50 0000 C CNN -F 1 "LED" H 4550 3500 50 0000 C CNN -F 2 "~" H 4550 3600 60 0000 C CNN -F 3 "~" H 4550 3600 60 0000 C CNN - 1 4550 3600 - 0 1 1 0 -$EndComp -$Comp -L LED DDF1 -U 1 1 548EF6DA -P 3350 900 -F 0 "DDF1" H 3350 1000 50 0000 C CNN -F 1 "LED" H 3350 800 50 0000 C CNN -F 2 "~" H 3350 900 60 0000 C CNN -F 3 "~" H 3350 900 60 0000 C CNN - 1 3350 900 - 0 1 1 0 -$EndComp -$Comp -L LED DDF2 -U 1 1 548EF6F3 -P 3650 900 -F 0 "DDF2" H 3650 1000 50 0000 C CNN -F 1 "LED" H 3650 800 50 0000 C CNN -F 2 "~" H 3650 900 60 0000 C CNN -F 3 "~" H 3650 900 60 0000 C CNN - 1 3650 900 - 0 1 1 0 -$EndComp -$Comp -L LED DDF3 -U 1 1 548EF6F9 -P 3950 900 -F 0 "DDF3" H 3950 1000 50 0000 C CNN -F 1 "LED" H 3950 800 50 0000 C CNN -F 2 "~" H 3950 900 60 0000 C CNN -F 3 "~" H 3950 900 60 0000 C CNN - 1 3950 900 - 0 1 1 0 -$EndComp -$Comp -L LED DIF1 -U 1 1 548EF701 -P 4250 900 -F 0 "DIF1" V 4250 1000 50 0000 C CNN -F 1 "LED" H 4250 800 50 0000 C CNN -F 2 "~" H 4250 900 60 0000 C CNN -F 3 "~" H 4250 900 60 0000 C CNN - 1 4250 900 - 0 1 1 0 -$EndComp -$Comp -L LED DIF2 -U 1 1 548EF71A -P 4550 900 -F 0 "DIF2" H 4550 1000 50 0000 C CNN -F 1 "LED" H 4550 800 50 0000 C CNN -F 2 "~" H 4550 900 60 0000 C CNN -F 3 "~" H 4550 900 60 0000 C CNN - 1 4550 900 - 0 1 1 0 -$EndComp -$Comp -L LED DIF3 -U 1 1 548EF720 -P 4850 900 -F 0 "DIF3" H 4850 1000 50 0000 C CNN -F 1 "LED" H 4850 800 50 0000 C CNN -F 2 "~" H 4850 900 60 0000 C CNN -F 3 "~" H 4850 900 60 0000 C CNN - 1 4850 900 - 0 1 1 0 -$EndComp -$Comp -L LED DAND1 -U 1 1 548EF728 -P 9500 1150 -F 0 "DAND1" H 9500 1250 50 0000 C CNN -F 1 "LED" H 9500 1050 50 0000 C CNN -F 2 "~" H 9500 1150 60 0000 C CNN -F 3 "~" H 9500 1150 60 0000 C CNN - 1 9500 1150 - 1 0 0 -1 -$EndComp -$Comp -L LED DTAD1 -U 1 1 548EF735 -P 9500 1500 -F 0 "DTAD1" H 9500 1600 50 0000 C CNN -F 1 "LED" H 9500 1400 50 0000 C CNN -F 2 "~" H 9500 1500 60 0000 C CNN -F 3 "~" H 9500 1500 60 0000 C CNN - 1 9500 1500 - 1 0 0 -1 -$EndComp -$Comp -L LED DISZ1 -U 1 1 548EF73B -P 9500 1850 -F 0 "DISZ1" H 9500 1950 50 0000 C CNN -F 1 "LED" H 9500 1750 50 0000 C CNN -F 2 "~" H 9500 1850 60 0000 C CNN -F 3 "~" H 9500 1850 60 0000 C CNN - 1 9500 1850 - 1 0 0 -1 -$EndComp -$Comp -L LED DDCA1 -U 1 1 548EF741 -P 9500 2200 -F 0 "DDCA1" H 9500 2300 50 0000 C CNN -F 1 "LED" H 9500 2100 50 0000 C CNN -F 2 "~" H 9500 2200 60 0000 C CNN -F 3 "~" H 9500 2200 60 0000 C CNN - 1 9500 2200 - 1 0 0 -1 -$EndComp -$Comp -L LED DJMS1 -U 1 1 548EF777 -P 9500 2550 -F 0 "DJMS1" H 9500 2650 50 0000 C CNN -F 1 "LED" H 9500 2450 50 0000 C CNN -F 2 "~" H 9500 2550 60 0000 C CNN -F 3 "~" H 9500 2550 60 0000 C CNN - 1 9500 2550 - 1 0 0 -1 -$EndComp -$Comp -L LED DJMP1 -U 1 1 548EF77D -P 9500 2900 -F 0 "DJMP1" H 9500 3000 50 0000 C CNN -F 1 "LED" H 9500 2800 50 0000 C CNN -F 2 "~" H 9500 2900 60 0000 C CNN -F 3 "~" H 9500 2900 60 0000 C CNN - 1 9500 2900 - 1 0 0 -1 -$EndComp -$Comp -L LED DIOT1 -U 1 1 548EF783 -P 9500 3250 -F 0 "DIOT1" H 9500 3350 50 0000 C CNN -F 1 "LED" H 9500 3150 50 0000 C CNN -F 2 "~" H 9500 3250 60 0000 C CNN -F 3 "~" H 9500 3250 60 0000 C CNN - 1 9500 3250 - 1 0 0 -1 -$EndComp -$Comp -L LED DOPR1 -U 1 1 548EF789 -P 9500 3600 -F 0 "DOPR1" H 9500 3700 50 0000 C CNN -F 1 "LED" H 9500 3500 50 0000 C CNN -F 2 "~" H 9500 3600 60 0000 C CNN -F 3 "~" H 9500 3600 60 0000 C CNN - 1 9500 3600 - 1 0 0 -1 -$EndComp -$Comp -L LED DFETCH1 -U 1 1 548EF7CB -P 10150 1150 -F 0 "DFETCH1" H 10150 1250 50 0000 C CNN -F 1 "LED" H 10150 1050 50 0000 C CNN -F 2 "~" H 10150 1150 60 0000 C CNN -F 3 "~" H 10150 1150 60 0000 C CNN - 1 10150 1150 - 1 0 0 -1 -$EndComp -$Comp -L LED DEXEC1 -U 1 1 548EF7D1 -P 10150 1500 -F 0 "DEXEC1" H 10150 1600 50 0000 C CNN -F 1 "LED" H 10150 1400 50 0000 C CNN -F 2 "~" H 10150 1500 60 0000 C CNN -F 3 "~" H 10150 1500 60 0000 C CNN - 1 10150 1500 - 1 0 0 -1 -$EndComp -$Comp -L LED DDEFER1 -U 1 1 548EF7D7 -P 10150 1850 -F 0 "DDEFER1" H 10150 1950 50 0000 C CNN -F 1 "LED" H 10150 1750 50 0000 C CNN -F 2 "~" H 10150 1850 60 0000 C CNN -F 3 "~" H 10150 1850 60 0000 C CNN - 1 10150 1850 - 1 0 0 -1 -$EndComp -$Comp -L LED DWRDCT1 -U 1 1 548EF7DD -P 10150 2200 -F 0 "DWRDCT1" H 10150 2300 50 0000 C CNN -F 1 "LED" H 10150 2100 50 0000 C CNN -F 2 "~" H 10150 2200 60 0000 C CNN -F 3 "~" H 10150 2200 60 0000 C CNN - 1 10150 2200 - 1 0 0 -1 -$EndComp -$Comp -L LED DCURAD1 -U 1 1 548EF7E3 -P 10150 2900 -F 0 "DCURAD1" H 10150 3000 50 0000 C CNN -F 1 "LED" H 10150 2800 50 0000 C CNN -F 2 "~" H 10150 2900 60 0000 C CNN -F 3 "~" H 10150 2900 60 0000 C CNN - 1 10150 2900 - 1 0 0 -1 -$EndComp -$Comp -L LED DBREAK1 -U 1 1 548EF7E9 -P 10150 3250 -F 0 "DBREAK1" H 10150 3350 50 0000 C CNN -F 1 "LED" H 10150 3150 50 0000 C CNN -F 2 "~" H 10150 3250 60 0000 C CNN -F 3 "~" H 10150 3250 60 0000 C CNN - 1 10150 3250 - 1 0 0 -1 -$EndComp -$Comp -L LED DION1 -U 1 1 548EF837 -P 10800 1150 -F 0 "DION1" H 10800 1250 50 0000 C CNN -F 1 "LED" H 10800 1050 50 0000 C CNN -F 2 "~" H 10800 1150 60 0000 C CNN -F 3 "~" H 10800 1150 60 0000 C CNN - 1 10800 1150 - 1 0 0 -1 -$EndComp -$Comp -L LED DPAUSE1 -U 1 1 548EF83D -P 10800 1500 -F 0 "DPAUSE1" H 10800 1600 50 0000 C CNN -F 1 "LED" H 10800 1400 50 0000 C CNN -F 2 "~" H 10800 1500 60 0000 C CNN -F 3 "~" H 10800 1500 60 0000 C CNN - 1 10800 1500 - 1 0 0 -1 -$EndComp -$Comp -L LED DRUN1 -U 1 1 548EF843 -P 10800 1850 -F 0 "DRUN1" H 10800 1950 50 0000 C CNN -F 1 "LED" H 10800 1750 50 0000 C CNN -F 2 "~" H 10800 1850 60 0000 C CNN -F 3 "~" H 10800 1850 60 0000 C CNN - 1 10800 1850 - 1 0 0 -1 -$EndComp -$Comp -L SWITCH_INV SW19 -U 1 1 548EF86F -P 7400 4800 -F 0 "SW19" H 7200 4950 50 0000 C CNN -F 1 "START" H 7250 4650 50 0000 C CNN -F 2 "~" H 7400 4800 60 0000 C CNN -F 3 "~" H 7400 4800 60 0000 C CNN - 1 7400 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW20 -U 1 1 548EF87C -P 7900 4800 -F 0 "SW20" H 7700 4950 50 0000 C CNN -F 1 "LOAD_ADD" H 7750 4650 50 0000 C CNN -F 2 "~" H 7900 4800 60 0000 C CNN -F 3 "~" H 7900 4800 60 0000 C CNN - 1 7900 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW21 -U 1 1 548EF882 -P 8400 4800 -F 0 "SW21" H 8200 4950 50 0000 C CNN -F 1 "DEP" H 8250 4650 50 0000 C CNN -F 2 "~" H 8400 4800 60 0000 C CNN -F 3 "~" H 8400 4800 60 0000 C CNN - 1 8400 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW22 -U 1 1 548EF888 -P 8900 4800 -F 0 "SW22" H 8700 4950 50 0000 C CNN -F 1 "EXAM" H 8750 4650 50 0000 C CNN -F 2 "~" H 8900 4800 60 0000 C CNN -F 3 "~" H 8900 4800 60 0000 C CNN - 1 8900 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW23 -U 1 1 548EF88E -P 9400 4800 -F 0 "SW23" H 9200 4950 50 0000 C CNN -F 1 "CONT" H 9250 4650 50 0000 C CNN -F 2 "~" H 9400 4800 60 0000 C CNN -F 3 "~" H 9400 4800 60 0000 C CNN - 1 9400 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW24 -U 1 1 548EF894 -P 9900 4800 -F 0 "SW24" H 9700 4950 50 0000 C CNN -F 1 "STOP" H 9750 4650 50 0000 C CNN -F 2 "~" H 9900 4800 60 0000 C CNN -F 3 "~" H 9900 4800 60 0000 C CNN - 1 9900 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW25 -U 1 1 548EF89A -P 10400 4800 -F 0 "SW25" H 10200 4950 50 0000 C CNN -F 1 "SING_STEP" H 10250 4650 50 0000 C CNN -F 2 "~" H 10400 4800 60 0000 C CNN -F 3 "~" H 10400 4800 60 0000 C CNN - 1 10400 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW26 -U 1 1 548EF8A0 -P 10900 4800 -F 0 "SW26" H 10700 4950 50 0000 C CNN -F 1 "SING_INST" H 10750 4650 50 0000 C CNN -F 2 "~" H 10900 4800 60 0000 C CNN -F 3 "~" H 10900 4800 60 0000 C CNN - 1 10900 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW7 -U 1 1 548EFAF8 -P 5050 6300 -F 0 "SW7" H 4850 6450 50 0000 C CNN -F 1 "SR1" H 4900 6150 50 0000 C CNN -F 2 "~" H 5050 6300 60 0000 C CNN -F 3 "~" H 5050 6300 60 0000 C CNN - 1 5050 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW8 -U 1 1 548EFB27 -P 5500 6300 -F 0 "SW8" H 5300 6450 50 0000 C CNN -F 1 "SR2" H 5350 6150 50 0000 C CNN -F 2 "~" H 5500 6300 60 0000 C CNN -F 3 "~" H 5500 6300 60 0000 C CNN - 1 5500 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW9 -U 1 1 548EFB2D -P 5950 6300 -F 0 "SW9" H 5750 6450 50 0000 C CNN -F 1 "SR3" H 5800 6150 50 0000 C CNN -F 2 "~" H 5950 6300 60 0000 C CNN -F 3 "~" H 5950 6300 60 0000 C CNN - 1 5950 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW10 -U 1 1 548EFB33 -P 6400 6300 -F 0 "SW10" H 6200 6450 50 0000 C CNN -F 1 "SR4" H 6250 6150 50 0000 C CNN -F 2 "~" H 6400 6300 60 0000 C CNN -F 3 "~" H 6400 6300 60 0000 C CNN - 1 6400 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW11 -U 1 1 548EFB42 -P 6900 6300 -F 0 "SW11" H 6700 6450 50 0000 C CNN -F 1 "SR5" H 6750 6150 50 0000 C CNN -F 2 "~" H 6900 6300 60 0000 C CNN -F 3 "~" H 6900 6300 60 0000 C CNN - 1 6900 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW12 -U 1 1 548EFB48 -P 7350 6300 -F 0 "SW12" H 7150 6450 50 0000 C CNN -F 1 "SR6" H 7200 6150 50 0000 C CNN -F 2 "~" H 7350 6300 60 0000 C CNN -F 3 "~" H 7350 6300 60 0000 C CNN - 1 7350 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW13 -U 1 1 548EFB4E -P 7800 6300 -F 0 "SW13" H 7600 6450 50 0000 C CNN -F 1 "SR7" H 7650 6150 50 0000 C CNN -F 2 "~" H 7800 6300 60 0000 C CNN -F 3 "~" H 7800 6300 60 0000 C CNN - 1 7800 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW14 -U 1 1 548EFB54 -P 8250 6300 -F 0 "SW14" H 8050 6450 50 0000 C CNN -F 1 "SR8" H 8100 6150 50 0000 C CNN -F 2 "~" H 8250 6300 60 0000 C CNN -F 3 "~" H 8250 6300 60 0000 C CNN - 1 8250 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW15 -U 1 1 548EFB5A -P 8750 6300 -F 0 "SW15" H 8550 6450 50 0000 C CNN -F 1 "SR9" H 8600 6150 50 0000 C CNN -F 2 "~" H 8750 6300 60 0000 C CNN -F 3 "~" H 8750 6300 60 0000 C CNN - 1 8750 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW16 -U 1 1 548EFB60 -P 9200 6300 -F 0 "SW16" H 9000 6450 50 0000 C CNN -F 1 "SR10" H 9050 6150 50 0000 C CNN -F 2 "~" H 9200 6300 60 0000 C CNN -F 3 "~" H 9200 6300 60 0000 C CNN - 1 9200 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW17 -U 1 1 548EFB66 -P 9650 6300 -F 0 "SW17" H 9450 6450 50 0000 C CNN -F 1 "SR11" H 9500 6150 50 0000 C CNN -F 2 "~" H 9650 6300 60 0000 C CNN -F 3 "~" H 9650 6300 60 0000 C CNN - 1 9650 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW18 -U 1 1 548EFB6C -P 10100 6300 -F 0 "SW18" H 9900 6450 50 0000 C CNN -F 1 "SR12" H 9950 6150 50 0000 C CNN -F 2 "~" H 10100 6300 60 0000 C CNN -F 3 "~" H 10100 6300 60 0000 C CNN - 1 10100 6300 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW1 -U 1 1 548EFBFD -P 3900 4800 -F 0 "SW1" H 3700 4950 50 0000 C CNN -F 1 "DF1" H 3750 4650 50 0000 C CNN -F 2 "~" H 3900 4800 60 0000 C CNN -F 3 "~" H 3900 4800 60 0000 C CNN - 1 3900 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW2 -U 1 1 548EFC03 -P 4350 4800 -F 0 "SW2" H 4150 4950 50 0000 C CNN -F 1 "DF2" H 4200 4650 50 0000 C CNN -F 2 "~" H 4350 4800 60 0000 C CNN -F 3 "~" H 4350 4800 60 0000 C CNN - 1 4350 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW3 -U 1 1 548EFC09 -P 4800 4800 -F 0 "SW3" H 4600 4950 50 0000 C CNN -F 1 "DF3" H 4650 4650 50 0000 C CNN -F 2 "~" H 4800 4800 60 0000 C CNN -F 3 "~" H 4800 4800 60 0000 C CNN - 1 4800 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW4 -U 1 1 548EFC0F -P 5250 4800 -F 0 "SW4" H 5050 4950 50 0000 C CNN -F 1 "IF1" H 5100 4650 50 0000 C CNN -F 2 "~" H 5250 4800 60 0000 C CNN -F 3 "~" H 5250 4800 60 0000 C CNN - 1 5250 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW5 -U 1 1 548EFC15 -P 5750 4800 -F 0 "SW5" H 5550 4950 50 0000 C CNN -F 1 "IF2" H 5600 4650 50 0000 C CNN -F 2 "~" H 5750 4800 60 0000 C CNN -F 3 "~" H 5750 4800 60 0000 C CNN - 1 5750 4800 - 0 -1 -1 0 -$EndComp -$Comp -L SWITCH_INV SW6 -U 1 1 548EFC1B -P 6200 4800 -F 0 "SW6" H 6000 4950 50 0000 C CNN -F 1 "IF3" H 6050 4650 50 0000 C CNN -F 2 "~" H 6200 4800 60 0000 C CNN -F 3 "~" H 6200 4800 60 0000 C CNN - 1 6200 4800 - 0 -1 -1 0 -$EndComp -$Comp -L RASPI_MODEL_B_PLUS_GPIO P1 -U 1 1 548F13F7 -P 1850 2150 -F 0 "P1" H 1850 3200 60 0000 C CNN -F 1 "RASPI_MODEL_B_PLUS_GPIO" V 1850 2150 20 0000 C CNN -F 2 "~" H 1850 2150 60 0000 C CNN -F 3 "~" H 1850 2150 60 0000 C CNN - 1 1850 2150 - 1 0 0 -1 -$EndComp -Text GLabel 4700 1600 2 60 Input ~ 0 -led1 -Text GLabel 4700 1700 2 60 Input ~ 0 -led2 -Text GLabel 4700 1800 2 60 Input ~ 0 -led3 -Text GLabel 4700 1900 2 60 Input ~ 0 -led4 -Text GLabel 4700 2000 2 60 Input ~ 0 -led5 -Text GLabel 4700 2100 2 60 Input ~ 0 -led6 -Text GLabel 4700 2200 2 60 Input ~ 0 -led7 -Text GLabel 4700 2300 2 60 Input ~ 0 -led8 -Text GLabel 800 1300 0 60 Input ~ 0 -col1a -Text GLabel 800 1400 0 60 Input ~ 0 -col2a -Text GLabel 800 1500 0 60 Input ~ 0 -col3 -Text GLabel 800 2600 0 60 Input ~ 0 -col4 -Text GLabel 800 2700 0 60 Input ~ 0 -col5 -Text GLabel 2900 2400 2 60 Input ~ 0 -col6 -Text GLabel 2900 2300 2 60 Input ~ 0 -col7 -Text GLabel 800 2200 0 60 Input ~ 0 -col8 -Text GLabel 800 2100 0 60 Input ~ 0 -col9 -Text GLabel 800 2300 0 60 Input ~ 0 -col10 -Text GLabel 2900 2700 2 60 Input ~ 0 -col11 -Text GLabel 800 2800 0 60 Input ~ 0 -col12 -Text GLabel 2900 2900 2 60 Input ~ 0 -row1 -Text GLabel 800 1700 0 60 Input ~ 0 -row2 -Text GLabel 2900 1700 2 60 Input ~ 0 -row3 -Text Notes 650 800 0 31 ~ 0 -Driving LEDs: a matrix of LED8 X COL12\nSensing switches: a matrix of ROW3 X COL12 -Text GLabel 8900 700 2 60 Input ~ 0 -led1 -Text GLabel 8900 1750 2 60 Input ~ 0 -led2 -Text GLabel 8900 2000 2 60 Input ~ 0 -led3 -Text GLabel 8900 3050 2 60 Input ~ 0 -led4 -Text GLabel 8900 3400 2 60 Input ~ 0 -led5 -Text GLabel 3300 1150 0 60 Input ~ 0 -col1 -Text GLabel 3600 1300 0 60 Input ~ 0 -col2 -Text GLabel 3900 1150 0 60 Input ~ 0 -col3 -Text GLabel 4200 1300 0 60 Input ~ 0 -col4 -Text GLabel 4500 1150 0 60 Input ~ 0 -col5 -Text GLabel 4800 1300 0 60 Input ~ 0 -col6 -Text GLabel 7250 1150 0 60 Input ~ 0 -col7 -Text GLabel 7550 1300 0 60 Input ~ 0 -col8 -Text GLabel 7850 1150 0 60 Input ~ 0 -col9 -Text GLabel 8150 1300 0 60 Input ~ 0 -col10 -Text GLabel 8450 1150 0 60 Input ~ 0 -col11 -Text GLabel 8750 1300 0 60 Input ~ 0 -col12 -Text GLabel 5450 3850 0 60 Input ~ 0 -col1 -Text GLabel 5750 4000 0 60 Input ~ 0 -col2 -Text GLabel 6050 3850 0 60 Input ~ 0 -col3 -Text GLabel 6350 4000 0 60 Input ~ 0 -col4 -Text GLabel 6650 3850 0 60 Input ~ 0 -col5 -Text GLabel 3300 4000 0 60 Input ~ 0 -col6 -Text GLabel 3600 3850 0 60 Input ~ 0 -col7 -Text GLabel 3900 4000 0 60 Input ~ 0 -col8 -Text GLabel 4200 3850 0 60 Input ~ 0 -col9 -Text GLabel 4500 4000 0 60 Input ~ 0 -col10 -Text GLabel 8450 3850 0 60 Input ~ 0 -col11 -Text GLabel 8750 4000 0 60 Input ~ 0 -col12 -Text GLabel 9300 1050 1 60 Input ~ 0 -led6 -Text GLabel 9750 1150 1 60 Input ~ 0 -col1 -Text GLabel 9750 1500 1 60 Input ~ 0 -col2 -Text GLabel 9750 1850 1 60 Input ~ 0 -col3 -Text GLabel 9750 2200 1 60 Input ~ 0 -col4 -Text GLabel 9750 2550 1 60 Input ~ 0 -col5 -Text GLabel 9750 2900 1 60 Input ~ 0 -col6 -Text GLabel 9750 3250 1 60 Input ~ 0 -col7 -Text GLabel 9750 3600 1 60 Input ~ 0 -col8 -Text GLabel 9950 1050 1 60 Input ~ 0 -led6 -Text GLabel 10400 1150 1 60 Input ~ 0 -col9 -Text GLabel 10400 1500 1 60 Input ~ 0 -col10 -Text GLabel 10400 1850 1 60 Input ~ 0 -col11 -Text GLabel 10400 2200 1 60 Input ~ 0 -col12 -Text GLabel 9950 2750 1 60 Input ~ 0 -led7 -Text GLabel 10400 2900 1 60 Input ~ 0 -col1 -Text GLabel 10400 3250 1 60 Input ~ 0 -col2 -Text GLabel 10600 1050 1 60 Input ~ 0 -led7 -Text GLabel 11050 1150 1 60 Input ~ 0 -col3 -Text GLabel 11050 1500 1 60 Input ~ 0 -col4 -Text GLabel 11050 1850 1 60 Input ~ 0 -col5 -Text GLabel 4600 3400 2 60 Input ~ 0 -led7 -Text GLabel 3300 700 0 60 Input ~ 0 -led8 -Text GLabel 5150 2650 0 60 Input ~ 0 -led8 -Text GLabel 5150 3050 0 60 Input ~ 0 -col7 -Text GLabel 5450 1150 0 60 Input ~ 0 -col1 -Text GLabel 5750 1300 0 60 Input ~ 0 -col2 -Text GLabel 6050 1150 0 60 Input ~ 0 -col3 -Text GLabel 6350 1300 0 60 Input ~ 0 -col4 -Text GLabel 6650 1150 0 60 Input ~ 0 -col5 -Text GLabel 6950 1300 0 60 Input ~ 0 -col6 -Text GLabel 7250 2450 0 60 Input ~ 0 -col7 -Text GLabel 7550 2600 0 60 Input ~ 0 -col8 -Text GLabel 7850 2450 0 60 Input ~ 0 -col9 -Text GLabel 8150 2600 0 60 Input ~ 0 -col10 -Text GLabel 8450 2450 0 60 Input ~ 0 -col11 -Text GLabel 8750 2600 0 60 Input ~ 0 -col12 -Text GLabel 6950 2600 0 60 Input ~ 0 -col6 -Text GLabel 5450 2450 0 60 Input ~ 0 -col1 -Text GLabel 5750 2600 0 60 Input ~ 0 -col2 -Text GLabel 6050 2450 0 60 Input ~ 0 -col3 -Text GLabel 6350 2600 0 60 Input ~ 0 -col4 -Text GLabel 6650 2450 0 60 Input ~ 0 -col5 -Text GLabel 7250 3850 0 60 Input ~ 0 -col7 -Text GLabel 7550 4000 0 60 Input ~ 0 -col8 -Text GLabel 7850 3850 0 60 Input ~ 0 -col9 -Text GLabel 8150 4000 0 60 Input ~ 0 -col10 -Text GLabel 6950 4000 0 60 Input ~ 0 -col6 -Text GLabel 4900 5750 0 60 Input ~ 0 -row1 -Text GLabel 4650 7050 2 60 Input ~ 0 -col1 -Text GLabel 5100 7050 2 60 Input ~ 0 -col2 -Text GLabel 5550 7050 2 60 Input ~ 0 -col3 -Text GLabel 6000 7050 2 60 Input ~ 0 -col4 -Text GLabel 6500 7050 2 60 Input ~ 0 -col5 -Text GLabel 9250 7050 2 60 Input ~ 0 -col11 -Text GLabel 9700 7050 2 60 Input ~ 0 -col12 -Text GLabel 7400 7050 2 60 Input ~ 0 -col7 -Text GLabel 7850 7050 2 60 Input ~ 0 -col8 -Text GLabel 8350 7050 2 60 Input ~ 0 -col9 -Text GLabel 8800 7050 2 60 Input ~ 0 -col10 -Text GLabel 6950 7050 2 60 Input ~ 0 -col6 -Text GLabel 3500 5550 2 60 Input ~ 0 -col1 -Text GLabel 3950 5550 2 60 Input ~ 0 -col2 -Text GLabel 4400 5550 2 60 Input ~ 0 -col3 -Text GLabel 4850 5550 2 60 Input ~ 0 -col4 -Text GLabel 5350 5550 2 60 Input ~ 0 -col5 -Text GLabel 5800 5550 2 60 Input ~ 0 -col6 -Text GLabel 3750 4250 0 60 Input ~ 0 -row2 -Text GLabel 7250 4250 0 60 Input ~ 0 -row3 -Text GLabel 7000 5550 2 60 Input ~ 0 -col1 -Text GLabel 7500 5550 2 60 Input ~ 0 -col2 -Text GLabel 8000 5550 2 60 Input ~ 0 -col3 -Text GLabel 8500 5550 2 60 Input ~ 0 -col4 -Text GLabel 9000 5550 2 60 Input ~ 0 -col5 -Text GLabel 9500 5550 2 60 Input ~ 0 -col6 -Text GLabel 10000 5550 2 60 Input ~ 0 -col7 -Text GLabel 10500 5550 2 60 Input ~ 0 -col8 -$Comp -L DIODE D1 -U 1 1 54904DF0 -P 3700 5350 -F 0 "D1" H 3700 5450 40 0000 C CNN -F 1 "1N4148" H 3700 5250 40 0000 C CNN -F 2 "~" H 3700 5350 60 0000 C CNN -F 3 "~" H 3700 5350 60 0000 C CNN - 1 3700 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D2 -U 1 1 5490504C -P 4150 5350 -F 0 "D2" H 4150 5450 40 0000 C CNN -F 1 "1N4148" H 4150 5250 40 0000 C CNN -F 2 "~" H 4150 5350 60 0000 C CNN -F 3 "~" H 4150 5350 60 0000 C CNN - 1 4150 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D3 -U 1 1 54905056 -P 4600 5350 -F 0 "D3" H 4600 5450 40 0000 C CNN -F 1 "1N4148" H 4600 5250 40 0000 C CNN -F 2 "~" H 4600 5350 60 0000 C CNN -F 3 "~" H 4600 5350 60 0000 C CNN - 1 4600 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D4 -U 1 1 5490505E -P 5050 5350 -F 0 "D4" H 5050 5450 40 0000 C CNN -F 1 "1N4148" H 5050 5250 40 0000 C CNN -F 2 "~" H 5050 5350 60 0000 C CNN -F 3 "~" H 5050 5350 60 0000 C CNN - 1 5050 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D5 -U 1 1 54905068 -P 5550 5350 -F 0 "D5" H 5550 5450 40 0000 C CNN -F 1 "1N4148" H 5550 5250 40 0000 C CNN -F 2 "~" H 5550 5350 60 0000 C CNN -F 3 "~" H 5550 5350 60 0000 C CNN - 1 5550 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D6 -U 1 1 5490506E -P 6000 5350 -F 0 "D6" H 6000 5450 40 0000 C CNN -F 1 "1N4148" H 6000 5250 40 0000 C CNN -F 2 "~" H 6000 5350 60 0000 C CNN -F 3 "~" H 6000 5350 60 0000 C CNN - 1 6000 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D7 -U 1 1 549055F9 -P 4850 6850 -F 0 "D7" H 4850 6950 40 0000 C CNN -F 1 "1N4148" H 4850 6750 40 0000 C CNN -F 2 "~" H 4850 6850 60 0000 C CNN -F 3 "~" H 4850 6850 60 0000 C CNN - 1 4850 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D8 -U 1 1 549055FF -P 5300 6850 -F 0 "D8" H 5300 6950 40 0000 C CNN -F 1 "1N4148" H 5300 6750 40 0000 C CNN -F 2 "~" H 5300 6850 60 0000 C CNN -F 3 "~" H 5300 6850 60 0000 C CNN - 1 5300 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D9 -U 1 1 54905605 -P 5750 6850 -F 0 "D9" H 5750 6950 40 0000 C CNN -F 1 "1N4148" H 5750 6750 40 0000 C CNN -F 2 "~" H 5750 6850 60 0000 C CNN -F 3 "~" H 5750 6850 60 0000 C CNN - 1 5750 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D10 -U 1 1 5490560B -P 6200 6850 -F 0 "D10" H 6200 6950 40 0000 C CNN -F 1 "1N4148" H 6200 6750 40 0000 C CNN -F 2 "~" H 6200 6850 60 0000 C CNN -F 3 "~" H 6200 6850 60 0000 C CNN - 1 6200 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D11 -U 1 1 54905611 -P 6700 6850 -F 0 "D11" H 6700 6950 40 0000 C CNN -F 1 "1N4148" H 6700 6750 40 0000 C CNN -F 2 "~" H 6700 6850 60 0000 C CNN -F 3 "~" H 6700 6850 60 0000 C CNN - 1 6700 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D12 -U 1 1 54905640 -P 7150 6850 -F 0 "D12" H 7150 6950 40 0000 C CNN -F 1 "1N4148" H 7150 6750 40 0000 C CNN -F 2 "~" H 7150 6850 60 0000 C CNN -F 3 "~" H 7150 6850 60 0000 C CNN - 1 7150 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D13 -U 1 1 54905646 -P 7600 6850 -F 0 "D13" H 7600 6950 40 0000 C CNN -F 1 "1N4148" H 7600 6750 40 0000 C CNN -F 2 "~" H 7600 6850 60 0000 C CNN -F 3 "~" H 7600 6850 60 0000 C CNN - 1 7600 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D14 -U 1 1 5490564C -P 8050 6850 -F 0 "D14" H 8050 6950 40 0000 C CNN -F 1 "1N4148" H 8050 6750 40 0000 C CNN -F 2 "~" H 8050 6850 60 0000 C CNN -F 3 "~" H 8050 6850 60 0000 C CNN - 1 8050 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D15 -U 1 1 54905652 -P 8550 6850 -F 0 "D15" H 8550 6950 40 0000 C CNN -F 1 "1N4148" H 8550 6750 40 0000 C CNN -F 2 "~" H 8550 6850 60 0000 C CNN -F 3 "~" H 8550 6850 60 0000 C CNN - 1 8550 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D16 -U 1 1 54905658 -P 9000 6850 -F 0 "D16" H 9000 6950 40 0000 C CNN -F 1 "1N4148" H 9000 6750 40 0000 C CNN -F 2 "~" H 9000 6850 60 0000 C CNN -F 3 "~" H 9000 6850 60 0000 C CNN - 1 9000 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D17 -U 1 1 5490565E -P 9450 6850 -F 0 "D17" H 9450 6950 40 0000 C CNN -F 1 "1N4148" H 9450 6750 40 0000 C CNN -F 2 "~" H 9450 6850 60 0000 C CNN -F 3 "~" H 9450 6850 60 0000 C CNN - 1 9450 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D18 -U 1 1 54905664 -P 9900 6850 -F 0 "D18" H 9900 6950 40 0000 C CNN -F 1 "1N4148" H 9900 6750 40 0000 C CNN -F 2 "~" H 9900 6850 60 0000 C CNN -F 3 "~" H 9900 6850 60 0000 C CNN - 1 9900 6850 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D19 -U 1 1 549070C3 -P 7200 5350 -F 0 "D19" H 7200 5450 40 0000 C CNN -F 1 "1N4148" H 7200 5250 40 0000 C CNN -F 2 "~" H 7200 5350 60 0000 C CNN -F 3 "~" H 7200 5350 60 0000 C CNN - 1 7200 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D20 -U 1 1 549070C9 -P 7700 5350 -F 0 "D20" H 7700 5450 40 0000 C CNN -F 1 "1N4148" H 7700 5250 40 0000 C CNN -F 2 "~" H 7700 5350 60 0000 C CNN -F 3 "~" H 7700 5350 60 0000 C CNN - 1 7700 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D21 -U 1 1 549070CF -P 8200 5350 -F 0 "D21" H 8200 5450 40 0000 C CNN -F 1 "1N4148" H 8200 5250 40 0000 C CNN -F 2 "~" H 8200 5350 60 0000 C CNN -F 3 "~" H 8200 5350 60 0000 C CNN - 1 8200 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D22 -U 1 1 549070D5 -P 8700 5350 -F 0 "D22" H 8700 5450 40 0000 C CNN -F 1 "1N4148" H 8700 5250 40 0000 C CNN -F 2 "~" H 8700 5350 60 0000 C CNN -F 3 "~" H 8700 5350 60 0000 C CNN - 1 8700 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D23 -U 1 1 549070DB -P 9200 5350 -F 0 "D23" H 9200 5450 40 0000 C CNN -F 1 "1N4148" H 9200 5250 40 0000 C CNN -F 2 "~" H 9200 5350 60 0000 C CNN -F 3 "~" H 9200 5350 60 0000 C CNN - 1 9200 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D24 -U 1 1 549070E1 -P 9700 5350 -F 0 "D24" H 9700 5450 40 0000 C CNN -F 1 "1N4148" H 9700 5250 40 0000 C CNN -F 2 "~" H 9700 5350 60 0000 C CNN -F 3 "~" H 9700 5350 60 0000 C CNN - 1 9700 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D25 -U 1 1 549070E7 -P 10200 5350 -F 0 "D25" H 10200 5450 40 0000 C CNN -F 1 "1N4148" H 10200 5250 40 0000 C CNN -F 2 "~" H 10200 5350 60 0000 C CNN -F 3 "~" H 10200 5350 60 0000 C CNN - 1 10200 5350 - 1 0 0 -1 -$EndComp -$Comp -L DIODE D26 -U 1 1 549070ED -P 10700 5350 -F 0 "D26" H 10700 5450 40 0000 C CNN -F 1 "1N4148" H 10700 5250 40 0000 C CNN -F 2 "~" H 10700 5350 60 0000 C CNN -F 3 "~" H 10700 5350 60 0000 C CNN - 1 10700 5350 - 1 0 0 -1 -$EndComp -$Comp -L R R1 -U 1 1 5490833D -P 2800 4150 -F 0 "R1" V 2880 4150 40 0000 C CNN -F 1 "390" V 2807 4151 40 0000 C CNN -F 2 "~" V 2730 4150 30 0000 C CNN -F 3 "~" H 2800 4150 30 0000 C CNN - 1 2800 4150 - 1 0 0 -1 -$EndComp -$Comp -L R R2 -U 1 1 5490834A -P 2800 5700 -F 0 "R2" V 2880 5700 40 0000 C CNN -F 1 "390" V 2807 5701 40 0000 C CNN -F 2 "~" V 2730 5700 30 0000 C CNN -F 3 "~" H 2800 5700 30 0000 C CNN - 1 2800 5700 - -1 0 0 1 -$EndComp -$Comp -L R R3 -U 1 1 54908350 -P 1100 1500 -F 0 "R3" V 1180 1500 40 0000 C CNN -F 1 "390" V 1107 1501 40 0000 C CNN -F 2 "~" V 1030 1500 30 0000 C CNN -F 3 "~" H 1100 1500 30 0000 C CNN - 1 1100 1500 - 0 -1 -1 0 -$EndComp -$Comp -L R R4 -U 1 1 54908356 -P 1100 2600 -F 0 "R4" V 1180 2600 40 0000 C CNN -F 1 "390" V 1107 2601 40 0000 C CNN -F 2 "~" V 1030 2600 30 0000 C CNN -F 3 "~" H 1100 2600 30 0000 C CNN - 1 1100 2600 - 0 -1 -1 0 -$EndComp -$Comp -L R R5 -U 1 1 5490835C -P 1100 2700 -F 0 "R5" V 1180 2700 40 0000 C CNN -F 1 "390" V 1107 2701 40 0000 C CNN -F 2 "~" V 1030 2700 30 0000 C CNN -F 3 "~" H 1100 2700 30 0000 C CNN - 1 1100 2700 - 0 -1 -1 0 -$EndComp -$Comp -L R R6 -U 1 1 54908362 -P 2600 2400 -F 0 "R6" V 2680 2400 40 0000 C CNN -F 1 "390" V 2607 2401 40 0000 C CNN -F 2 "~" V 2530 2400 30 0000 C CNN -F 3 "~" H 2600 2400 30 0000 C CNN - 1 2600 2400 - 0 1 1 0 -$EndComp -$Comp -L R R7 -U 1 1 54908368 -P 2600 2300 -F 0 "R7" V 2680 2300 40 0000 C CNN -F 1 "390" V 2607 2301 40 0000 C CNN -F 2 "~" V 2530 2300 30 0000 C CNN -F 3 "~" H 2600 2300 30 0000 C CNN - 1 2600 2300 - 0 -1 -1 0 -$EndComp -$Comp -L R R8 -U 1 1 5490836E -P 1100 2200 -F 0 "R8" V 1180 2200 40 0000 C CNN -F 1 "390" V 1107 2201 40 0000 C CNN -F 2 "~" V 1030 2200 30 0000 C CNN -F 3 "~" H 1100 2200 30 0000 C CNN - 1 1100 2200 - 0 1 1 0 -$EndComp -$Comp -L R R9 -U 1 1 54908374 -P 1100 2100 -F 0 "R9" V 1180 2100 40 0000 C CNN -F 1 "390" V 1107 2101 40 0000 C CNN -F 2 "~" V 1030 2100 30 0000 C CNN -F 3 "~" H 1100 2100 30 0000 C CNN - 1 1100 2100 - 0 1 1 0 -$EndComp -$Comp -L R R10 -U 1 1 5490837A -P 1100 2300 -F 0 "R10" V 1180 2300 40 0000 C CNN -F 1 "390" V 1107 2301 40 0000 C CNN -F 2 "~" V 1030 2300 30 0000 C CNN -F 3 "~" H 1100 2300 30 0000 C CNN - 1 1100 2300 - 0 1 1 0 -$EndComp -$Comp -L R R11 -U 1 1 54908380 -P 2600 2700 -F 0 "R11" V 2680 2700 40 0000 C CNN -F 1 "390" V 2607 2701 40 0000 C CNN -F 2 "~" V 2530 2700 30 0000 C CNN -F 3 "~" H 2600 2700 30 0000 C CNN - 1 2600 2700 - 0 -1 -1 0 -$EndComp -$Comp -L R R12 -U 1 1 54908386 -P 1100 2800 -F 0 "R12" V 1180 2800 40 0000 C CNN -F 1 "390" V 1107 2801 40 0000 C CNN -F 2 "~" V 1030 2800 30 0000 C CNN -F 3 "~" H 1100 2800 30 0000 C CNN - 1 1100 2800 - 0 1 1 0 -$EndComp -$Comp -L R R_ROW1 -U 1 1 5490838C -P 2600 2900 -F 0 "R_ROW1" V 2680 2900 40 0000 C CNN -F 1 "1K" V 2607 2901 40 0000 C CNN -F 2 "~" V 2530 2900 30 0000 C CNN -F 3 "~" H 2600 2900 30 0000 C CNN - 1 2600 2900 - 0 -1 -1 0 -$EndComp -$Comp -L R R_ROW2 -U 1 1 5490839E -P 1100 1700 -F 0 "R_ROW2" V 1180 1700 40 0000 C CNN -F 1 "1K" V 1107 1701 40 0000 C CNN -F 2 "~" V 1030 1700 30 0000 C CNN -F 3 "~" H 1100 1700 30 0000 C CNN - 1 1100 1700 - 0 1 1 0 -$EndComp -$Comp -L R R_ROW3 -U 1 1 549083A4 -P 2600 1700 -F 0 "R_ROW3" V 2680 1700 40 0000 C CNN -F 1 "1K" V 2607 1701 40 0000 C CNN -F 2 "~" V 2530 1700 30 0000 C CNN -F 3 "~" H 2600 1700 30 0000 C CNN - 1 2600 1700 - 0 -1 -1 0 -$EndComp -$Comp -L UDN2981A P2 -U 1 1 54B17386 -P 4250 2000 -F 0 "P2" H 4250 2550 30 0000 C CNN -F 1 "UDN2981A" H 4250 1450 30 0000 C CNN -F 2 "~" H 4250 2000 60 0000 C CNN -F 3 "~" H 4250 2000 60 0000 C CNN - 1 4250 2000 - 1 0 0 -1 -$EndComp -Text GLabel 3800 1600 0 60 Input ~ 0 -xled1 -Text GLabel 3800 1700 0 60 Input ~ 0 -xled2 -Text GLabel 3800 1800 0 60 Input ~ 0 -xled3 -Text GLabel 3800 1900 0 60 Input ~ 0 -xled4 -Text GLabel 3800 2000 0 60 Input ~ 0 -xled5 -Text GLabel 3800 2100 0 60 Input ~ 0 -xled6 -Text GLabel 3800 2200 0 60 Input ~ 0 -xled7 -Text GLabel 3800 2300 0 60 Input ~ 0 -xled8 -Text GLabel 2900 3000 2 60 Input ~ 0 -xled1 -Text GLabel 2900 3100 2 60 Input ~ 0 -xled2 -Text GLabel 800 1900 0 60 Input ~ 0 -xled3 -Text GLabel 2900 1900 2 60 Input ~ 0 -xled4 -Text GLabel 2900 2000 2 60 Input ~ 0 -xled5 -Text GLabel 2900 2200 2 60 Input ~ 0 -xled6 -Text GLabel 800 3000 0 60 Input ~ 0 -xled7 -Text GLabel 800 1800 0 60 Input ~ 0 -xled8 -NoConn ~ 2250 2500 -NoConn ~ 1450 2500 -$Comp -L GND #PWR01 -U 1 1 54B19131 -P 2300 2600 -F 0 "#PWR01" H 2300 2600 30 0001 C CNN -F 1 "GND" H 2300 2530 30 0001 C CNN -F 2 "" H 2300 2600 60 0000 C CNN -F 3 "" H 2300 2600 60 0000 C CNN - 1 2300 2600 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR02 -U 1 1 54B1913E -P 2300 2100 -F 0 "#PWR02" H 2300 2100 30 0001 C CNN -F 1 "GND" H 2300 2030 30 0001 C CNN -F 2 "" H 2300 2100 60 0000 C CNN -F 3 "" H 2300 2100 60 0000 C CNN - 1 2300 2100 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR03 -U 1 1 54B19150 -P 1400 1600 -F 0 "#PWR03" H 1400 1600 30 0001 C CNN -F 1 "GND" H 1400 1530 30 0001 C CNN -F 2 "" H 1400 1600 60 0000 C CNN -F 3 "" H 1400 1600 60 0000 C CNN - 1 1400 1600 - 0 1 1 0 -$EndComp -$Comp -L GND #PWR04 -U 1 1 54B19156 -P 2300 1400 -F 0 "#PWR04" H 2300 1400 30 0001 C CNN -F 1 "GND" H 2300 1330 30 0001 C CNN -F 2 "" H 2300 1400 60 0000 C CNN -F 3 "" H 2300 1400 60 0000 C CNN - 1 2300 1400 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR05 -U 1 1 54B19903 -P 1400 3100 -F 0 "#PWR05" H 1400 3100 30 0001 C CNN -F 1 "GND" H 1400 3030 30 0001 C CNN -F 2 "" H 1400 3100 60 0000 C CNN -F 3 "" H 1400 3100 60 0000 C CNN - 1 1400 3100 - 0 1 1 0 -$EndComp -NoConn ~ 2250 2800 -$Comp -L +3.3V #PWR06 -U 1 1 54B1C371 -P 1350 1100 -F 0 "#PWR06" H 1350 1060 30 0001 C CNN -F 1 "+3.3V" H 1350 1210 30 0000 C CNN -F 2 "" H 1350 1100 60 0000 C CNN -F 3 "" H 1350 1100 60 0000 C CNN - 1 1350 1100 - 1 0 0 -1 -$EndComp -$Comp -L GND #PWR07 -U 1 1 54B1C4F8 -P 4750 2550 -F 0 "#PWR07" H 4750 2550 30 0001 C CNN -F 1 "GND" H 4750 2480 30 0001 C CNN -F 2 "" H 4750 2550 60 0000 C CNN -F 3 "" H 4750 2550 60 0000 C CNN - 1 4750 2550 - 0 -1 -1 0 -$EndComp -NoConn ~ 4000 4300 -NoConn ~ 4450 4300 -NoConn ~ 4900 4300 -NoConn ~ 5350 4300 -NoConn ~ 5850 4300 -NoConn ~ 6300 4300 -NoConn ~ 7500 4300 -NoConn ~ 8000 4300 -NoConn ~ 8500 4300 -NoConn ~ 9000 4300 -NoConn ~ 9500 4300 -NoConn ~ 10000 4300 -NoConn ~ 10500 4300 -NoConn ~ 11000 4300 -NoConn ~ 10200 5800 -NoConn ~ 9750 5800 -NoConn ~ 9300 5800 -NoConn ~ 8850 5800 -NoConn ~ 8350 5800 -NoConn ~ 7900 5800 -NoConn ~ 7450 5800 -NoConn ~ 7000 5800 -NoConn ~ 6500 5800 -NoConn ~ 5150 5800 -NoConn ~ 5600 5800 -NoConn ~ 6050 5800 -$Comp -L CONN_1 M1 -U 1 1 54B1CC4A -P 6150 7400 -F 0 "M1" H 6230 7400 40 0000 L CNN -F 1 "M" H 6150 7455 30 0001 C CNN -F 2 "" H 6150 7400 60 0000 C CNN -F 3 "" H 6150 7400 60 0000 C CNN - 1 6150 7400 - 0 -1 -1 0 -$EndComp -$Comp -L CONN_1 M2 -U 1 1 54B1CC76 -P 6250 7400 -F 0 "M2" H 6330 7400 40 0000 L CNN -F 1 "M" H 6250 7455 30 0001 C CNN -F 2 "" H 6250 7400 60 0000 C CNN -F 3 "" H 6250 7400 60 0000 C CNN - 1 6250 7400 - 0 -1 -1 0 -$EndComp -$Comp -L CONN_1 M3 -U 1 1 54B1CC7C -P 6350 7400 -F 0 "M3" H 6430 7400 40 0000 L CNN -F 1 "M" H 6350 7455 30 0001 C CNN -F 2 "" H 6350 7400 60 0000 C CNN -F 3 "" H 6350 7400 60 0000 C CNN - 1 6350 7400 - 0 -1 -1 0 -$EndComp -$Comp -L CONN_1 M4 -U 1 1 54B1CC82 -P 6450 7400 -F 0 "M4" H 6530 7400 40 0000 L CNN -F 1 "M" H 6450 7455 30 0001 C CNN -F 2 "" H 6450 7400 60 0000 C CNN -F 3 "" H 6450 7400 60 0000 C CNN - 1 6450 7400 - 0 -1 -1 0 -$EndComp -NoConn ~ 6150 7550 -NoConn ~ 6250 7550 -NoConn ~ 6350 7550 -NoConn ~ 6450 7550 -$Comp -L +5V #PWR08 -U 1 1 54BCFC39 -P 2400 1100 -F 0 "#PWR08" H 2400 1190 20 0001 C CNN -F 1 "+5V" H 2400 1190 30 0000 C CNN -F 2 "" H 2400 1100 60 0000 C CNN -F 3 "" H 2400 1100 60 0000 C CNN - 1 2400 1100 - 1 0 0 -1 -$EndComp -Text GLabel 2750 1500 2 60 Input ~ 0 -TX -Text GLabel 2750 1600 2 60 Input ~ 0 -RX -Text GLabel 1350 2900 0 60 Input ~ 0 -SPARE_IO -Text GLabel 2300 7600 0 60 Input ~ 0 -TX -Text GLabel 2300 7500 0 60 Input ~ 0 -RX -$Comp -L GND #PWR09 -U 1 1 54BD292E -P 2850 7100 -F 0 "#PWR09" H 2850 7100 30 0001 C CNN -F 1 "GND" H 2850 7030 30 0001 C CNN -F 2 "" H 2850 7100 60 0000 C CNN -F 3 "" H 2850 7100 60 0000 C CNN - 1 2850 7100 - -1 0 0 1 -$EndComp -NoConn ~ 1450 2400 -NoConn ~ 2250 1800 -$Comp -L CONN_1 M5 -U 1 1 54BD36C6 -P 6550 7400 -F 0 "M5" H 6630 7400 40 0000 L CNN -F 1 "M" H 6550 7455 30 0001 C CNN -F 2 "" H 6550 7400 60 0000 C CNN -F 3 "" H 6550 7400 60 0000 C CNN - 1 6550 7400 - 0 -1 -1 0 -$EndComp -$Comp -L CONN_1 M6 -U 1 1 54BD36CC -P 6650 7400 -F 0 "M6" H 6730 7400 40 0000 L CNN -F 1 "M" H 6650 7455 30 0001 C CNN -F 2 "" H 6650 7400 60 0000 C CNN -F 3 "" H 6650 7400 60 0000 C CNN - 1 6650 7400 - 0 -1 -1 0 -$EndComp -NoConn ~ 6550 7550 -NoConn ~ 6650 7550 -$Comp -L CONN_1 M7 -U 1 1 54BD36D2 -P 6750 7400 -F 0 "M7" H 6830 7400 40 0000 L CNN -F 1 "M" H 6750 7455 30 0001 C CNN -F 2 "" H 6750 7400 60 0000 C CNN -F 3 "" H 6750 7400 60 0000 C CNN - 1 6750 7400 - 0 -1 -1 0 -$EndComp -NoConn ~ 6750 7550 -$Comp -L +5V #PWR010 -U 1 1 54BD75EA -P 3400 2500 -F 0 "#PWR010" H 3400 2590 20 0001 C CNN -F 1 "+5V" H 3400 2590 30 0000 C CNN -F 2 "" H 3400 2500 60 0000 C CNN -F 3 "" H 3400 2500 60 0000 C CNN - 1 3400 2500 - -1 0 0 1 -$EndComp -$Comp -L DIODE DZ1 -U 1 1 54BD85A3 -P 3600 2400 -F 0 "DZ1" H 3600 2500 40 0000 C CNN -F 1 "ZENER" H 3600 2300 40 0000 C CNN -F 2 "~" H 3600 2400 60 0000 C CNN -F 3 "~" H 3600 2400 60 0000 C CNN - 1 3600 2400 - 1 0 0 -1 -$EndComp -$Comp -L CONN_20X2 P3 -U 1 1 554E0D39 -P 1650 5050 -F 0 "P3" H 1650 6100 60 0000 C CNN -F 1 "EXPANSION_20X2" V 1650 5050 50 0000 C CNN -F 2 "" H 1650 5050 60 0000 C CNN -F 3 "" H 1650 5050 60 0000 C CNN - 1 1650 5050 - 1 0 0 -1 -$EndComp -$Comp -L +5V #PWR011 -U 1 1 554E0D4F -P 1100 4100 -F 0 "#PWR011" H 1100 4190 20 0001 C CNN -F 1 "+5V" H 1100 4190 30 0000 C CNN -F 2 "" H 1100 4100 60 0000 C CNN -F 3 "" H 1100 4100 60 0000 C CNN - 1 1100 4100 - 0 -1 -1 0 -$EndComp -NoConn ~ 1250 4200 -NoConn ~ 2050 4200 -$Comp -L +3.3V #PWR012 -U 1 1 554E0D7A -P 1100 4300 -F 0 "#PWR012" H 1100 4260 30 0001 C CNN -F 1 "+3.3V" H 1100 4410 30 0000 C CNN -F 2 "" H 1100 4300 60 0000 C CNN -F 3 "" H 1100 4300 60 0000 C CNN - 1 1100 4300 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR013 -U 1 1 554E0D8A -P 1100 4400 -F 0 "#PWR013" H 1100 4400 30 0001 C CNN -F 1 "GND" H 1100 4330 30 0001 C CNN -F 2 "" H 1100 4400 60 0000 C CNN -F 3 "" H 1100 4400 60 0000 C CNN - 1 1100 4400 - 0 1 1 0 -$EndComp -Text GLabel 1100 4800 0 60 Input ~ 0 -SPARE_IO -Text GLabel 1100 4500 0 60 Input ~ 0 -led7 -Text GLabel 1100 4600 0 60 Input ~ 0 -led8 -Text GLabel 1100 4900 0 60 Input ~ 0 -col1 -Text GLabel 1100 5000 0 60 Input ~ 0 -col2 -Text GLabel 1100 5100 0 60 Input ~ 0 -col3 -Text GLabel 1100 5200 0 60 Input ~ 0 -col4 -Text GLabel 1100 5300 0 60 Input ~ 0 -col5 -Text GLabel 1100 5400 0 60 Input ~ 0 -col6 -Text GLabel 1100 5500 0 60 Input ~ 0 -col7 -Text GLabel 1100 5600 0 60 Input ~ 0 -col8 -Text GLabel 1100 5700 0 60 Input ~ 0 -col9 -Text GLabel 1100 5800 0 60 Input ~ 0 -col10 -Text GLabel 1100 5900 0 60 Input ~ 0 -col11 -Text GLabel 1100 6000 0 60 Input ~ 0 -col12 -Text GLabel 1100 4700 0 60 Input ~ 0 -row2 -$Comp -L CONN_4 P5 -U 1 1 554E5206 -P 3250 7450 -F 0 "P5" V 3200 7450 50 0000 C CNN -F 1 "SERIAL 5V TTL" V 3300 7450 50 0000 C CNN -F 2 "" H 3250 7450 60 0000 C CNN -F 3 "" H 3250 7450 60 0000 C CNN - 1 3250 7450 - 1 0 0 -1 -$EndComp -$Comp -L +5V #PWR014 -U 1 1 554E5213 -P 2800 7400 -F 0 "#PWR014" H 2800 7490 20 0001 C CNN -F 1 "+5V" H 2800 7490 30 0000 C CNN -F 2 "" H 2800 7400 60 0000 C CNN -F 3 "" H 2800 7400 60 0000 C CNN - 1 2800 7400 - 0 -1 -1 0 -$EndComp -$Comp -L R R_S1 -U 1 1 554E5219 -P 2600 7500 -F 0 "R_S1" V 2680 7500 40 0000 C CNN -F 1 "300" V 2607 7501 40 0000 C CNN -F 2 "~" V 2530 7500 30 0000 C CNN -F 3 "~" H 2600 7500 30 0000 C CNN - 1 2600 7500 - 0 1 1 0 -$EndComp -$Comp -L R R_S2 -U 1 1 554E5233 -P 2600 7300 -F 0 "R_S2" V 2680 7300 40 0000 C CNN -F 1 "620" V 2607 7301 40 0000 C CNN -F 2 "~" V 2530 7300 30 0000 C CNN -F 3 "~" H 2600 7300 30 0000 C CNN - 1 2600 7300 - 0 1 1 0 -$EndComp -Text GLabel 2800 3850 1 60 Input ~ 0 -col1 -Text GLabel 2800 6000 3 60 Input ~ 0 -col2 -Text GLabel 2700 4400 1 60 Input ~ 0 -col1a -Text GLabel 2700 5450 3 60 Input ~ 0 -col2a -Text GLabel 2900 4400 1 60 Input ~ 0 -TX -Text GLabel 2900 5450 3 60 Input ~ 0 -RX -Text Notes 1100 3700 0 31 ~ 0 -2 Expansion ports -Text Notes 2350 6250 1 31 ~ 0 -Serial Port Option jumper.\nWarning: enabling Serial Port requires modification on Raspberry Pi.\nWarning2: circuit board traces 1-2 are added\non the PiDP circuit board to enable default option \n(no serial port, unmodified RPI). Cut traces and \njumper 2-3 to enable serial port after \nmodifying the RPi. -Text Notes 2250 6800 0 31 ~ 0 -5V TTL compatible serial port (option). \nWarning: requires mod on RPi (remove R23/24)\n & trace cut/jumper on PiDP\nWarning: do not install resistors R_S1/R_S2 until \n this mod has been done\n -$Comp -L LED DPAUSE2 -U 1 1 554E5897 -P 10800 2750 -F 0 "DPAUSE2" H 10800 2850 50 0000 C CNN -F 1 "LED" H 10800 2650 50 0000 C CNN -F 2 "~" H 10800 2750 60 0000 C CNN -F 3 "~" H 10800 2750 60 0000 C CNN - 1 10800 2750 - 1 0 0 -1 -$EndComp -$Comp -L LED DRUN2 -U 1 1 554E589D -P 10800 3100 -F 0 "DRUN2" H 10800 3200 50 0000 C CNN -F 1 "LED" H 10800 3000 50 0000 C CNN -F 2 "~" H 10800 3100 60 0000 C CNN -F 3 "~" H 10800 3100 60 0000 C CNN - 1 10800 3100 - 1 0 0 -1 -$EndComp -Text GLabel 10600 2600 1 60 Input ~ 0 -led7 -Text GLabel 11050 2750 1 60 Input ~ 0 -col4 -Text GLabel 11050 3100 1 60 Input ~ 0 -col5 -Text Notes 10550 2250 0 60 ~ 0 -LEDs ONLY for\nStraight Eight: -$Comp -L CONN_3 J_COL1 -U 1 1 554F46DF -P 2800 4800 -F 0 "J_COL1" V 2750 4800 50 0000 C CNN -F 1 "CONN_3" V 2850 4800 40 0000 C CNN -F 2 "" H 2800 4800 60 0000 C CNN -F 3 "" H 2800 4800 60 0000 C CNN - 1 2800 4800 - 0 -1 1 0 -$EndComp -$Comp -L CONN_3 J_COL2 -U 1 1 554F46EE -P 2800 5050 -F 0 "J_COL2" V 2750 5050 50 0000 C CNN -F 1 "CONN_3" V 2850 5050 40 0000 C CNN -F 2 "" H 2800 5050 60 0000 C CNN -F 3 "" H 2800 5050 60 0000 C CNN - 1 2800 5050 - 0 -1 -1 0 -$EndComp -Wire Wire Line - 9300 1050 9300 3600 -Connection ~ 9300 1150 -Connection ~ 9300 1500 -Connection ~ 9300 1850 -Connection ~ 9300 2200 -Connection ~ 9300 2550 -Connection ~ 9300 2900 -Connection ~ 9300 3250 -Wire Wire Line - 9950 1050 9950 2200 -Connection ~ 9950 1150 -Connection ~ 9950 1500 -Connection ~ 9950 1850 -Wire Wire Line - 9950 2750 9950 3250 -Connection ~ 9950 2900 -Wire Wire Line - 10600 1050 10600 1850 -Connection ~ 10600 1150 -Connection ~ 10600 1500 -Wire Wire Line - 11000 1150 11050 1150 -Wire Wire Line - 11000 1500 11050 1500 -Wire Wire Line - 11000 1850 11050 1850 -Wire Wire Line - 10350 1150 10400 1150 -Wire Wire Line - 10350 1500 10400 1500 -Wire Wire Line - 10350 1850 10400 1850 -Wire Wire Line - 10350 2200 10400 2200 -Wire Wire Line - 9700 1150 9750 1150 -Wire Wire Line - 9700 1500 9750 1500 -Wire Wire Line - 9700 1850 9750 1850 -Wire Wire Line - 9700 2200 9750 2200 -Wire Wire Line - 9700 2550 9750 2550 -Wire Wire Line - 9700 2900 9750 2900 -Wire Wire Line - 9700 3250 9750 3250 -Wire Wire Line - 9700 3600 9750 3600 -Wire Wire Line - 5500 3050 8900 3050 -Connection ~ 8800 3050 -Connection ~ 8500 3050 -Connection ~ 8200 3050 -Connection ~ 7900 3050 -Connection ~ 7600 3050 -Connection ~ 7300 3050 -Connection ~ 7000 3050 -Connection ~ 6700 3050 -Connection ~ 6400 3050 -Connection ~ 6100 3050 -Connection ~ 5800 3050 -Wire Wire Line - 5500 2000 8900 2000 -Connection ~ 5800 2000 -Connection ~ 6100 2000 -Connection ~ 6400 2000 -Connection ~ 6700 2000 -Connection ~ 7000 2000 -Connection ~ 7300 2000 -Connection ~ 7600 2000 -Connection ~ 7900 2000 -Connection ~ 8200 2000 -Connection ~ 8500 2000 -Connection ~ 8800 2000 -Wire Wire Line - 5500 1750 8900 1750 -Connection ~ 8800 1750 -Connection ~ 8500 1750 -Connection ~ 8200 1750 -Connection ~ 7900 1750 -Connection ~ 7600 1750 -Connection ~ 7300 1750 -Connection ~ 7000 1750 -Connection ~ 6700 1750 -Connection ~ 6400 1750 -Connection ~ 6100 1750 -Connection ~ 5800 1750 -Wire Wire Line - 5500 700 8900 700 -Connection ~ 5800 700 -Connection ~ 6100 700 -Connection ~ 6400 700 -Connection ~ 6700 700 -Connection ~ 7000 700 -Connection ~ 7300 700 -Connection ~ 7600 700 -Connection ~ 7900 700 -Connection ~ 8200 700 -Connection ~ 8500 700 -Connection ~ 8800 700 -Wire Wire Line - 5500 3400 8900 3400 -Connection ~ 8800 3400 -Connection ~ 8500 3400 -Connection ~ 8200 3400 -Connection ~ 7900 3400 -Connection ~ 7600 3400 -Connection ~ 7300 3400 -Connection ~ 7000 3400 -Connection ~ 6700 3400 -Connection ~ 6400 3400 -Connection ~ 6100 3400 -Connection ~ 5800 3400 -Wire Wire Line - 6950 1300 7000 1300 -Wire Wire Line - 7000 1100 7000 1350 -Wire Wire Line - 7250 1150 7300 1150 -Wire Wire Line - 7300 1100 7300 1350 -Wire Wire Line - 7550 1300 7600 1300 -Wire Wire Line - 7600 1100 7600 1350 -Wire Wire Line - 7850 1150 7900 1150 -Wire Wire Line - 7900 1100 7900 1350 -Wire Wire Line - 8150 1300 8200 1300 -Wire Wire Line - 8200 1100 8200 1350 -Wire Wire Line - 8450 1150 8500 1150 -Wire Wire Line - 8500 1100 8500 1350 -Wire Wire Line - 8750 1300 8800 1300 -Wire Wire Line - 8800 1100 8800 1350 -Wire Wire Line - 10350 2900 10400 2900 -Wire Wire Line - 10350 3250 10400 3250 -Wire Wire Line - 5450 3850 5500 3850 -Wire Wire Line - 5500 3850 5500 3800 -Wire Wire Line - 5750 4000 5800 4000 -Wire Wire Line - 5800 4000 5800 3800 -Wire Wire Line - 6050 3850 6100 3850 -Wire Wire Line - 6100 3850 6100 3800 -Wire Wire Line - 6350 4000 6400 4000 -Wire Wire Line - 6400 4000 6400 3800 -Wire Wire Line - 6650 3850 6700 3850 -Wire Wire Line - 6700 3850 6700 3800 -Wire Wire Line - 8150 4000 8200 4000 -Wire Wire Line - 8200 4000 8200 3800 -Wire Wire Line - 8450 3850 8500 3850 -Wire Wire Line - 8500 3850 8500 3800 -Wire Wire Line - 8750 4000 8800 4000 -Wire Wire Line - 8800 4000 8800 3800 -Wire Wire Line - 3300 4000 3350 4000 -Wire Wire Line - 3350 4000 3350 3800 -Wire Wire Line - 3600 3850 3650 3850 -Wire Wire Line - 3650 3850 3650 3800 -Wire Wire Line - 3900 4000 3950 4000 -Wire Wire Line - 3950 4000 3950 3800 -Wire Wire Line - 4200 3850 4250 3850 -Wire Wire Line - 4250 3850 4250 3800 -Wire Wire Line - 4500 4000 4550 4000 -Wire Wire Line - 4550 4000 4550 3800 -Wire Wire Line - 3350 3400 4600 3400 -Connection ~ 4550 3400 -Connection ~ 4250 3400 -Connection ~ 3950 3400 -Connection ~ 3650 3400 -Wire Wire Line - 3300 700 4850 700 -Connection ~ 3350 700 -Connection ~ 3650 700 -Connection ~ 3950 700 -Connection ~ 4250 700 -Connection ~ 4550 700 -Wire Wire Line - 3300 1150 3350 1150 -Wire Wire Line - 3350 1150 3350 1100 -Wire Wire Line - 3600 1300 3650 1300 -Wire Wire Line - 3650 1300 3650 1100 -Wire Wire Line - 3900 1150 3950 1150 -Wire Wire Line - 3950 1150 3950 1100 -Wire Wire Line - 4200 1300 4250 1300 -Wire Wire Line - 4250 1300 4250 1100 -Wire Wire Line - 4500 1150 4550 1150 -Wire Wire Line - 4550 1150 4550 1100 -Wire Wire Line - 4800 1300 4850 1300 -Wire Wire Line - 4850 1300 4850 1100 -Wire Wire Line - 5150 2650 5200 2650 -Wire Wire Line - 5150 3050 5200 3050 -Wire Wire Line - 5450 1150 5500 1150 -Wire Wire Line - 5500 1100 5500 1350 -Wire Wire Line - 5750 1300 5800 1300 -Wire Wire Line - 5800 1100 5800 1350 -Wire Wire Line - 6050 1150 6100 1150 -Wire Wire Line - 6100 1100 6100 1350 -Wire Wire Line - 6350 1300 6400 1300 -Wire Wire Line - 6400 1100 6400 1350 -Wire Wire Line - 6650 1150 6700 1150 -Wire Wire Line - 6700 1100 6700 1350 -Wire Wire Line - 5450 2450 5500 2450 -Wire Wire Line - 5500 2400 5500 2650 -Wire Wire Line - 5750 2600 5800 2600 -Wire Wire Line - 5800 2400 5800 2650 -Wire Wire Line - 6050 2450 6100 2450 -Wire Wire Line - 6100 2400 6100 2650 -Wire Wire Line - 6350 2600 6400 2600 -Wire Wire Line - 6400 2400 6400 2650 -Wire Wire Line - 6650 2450 6700 2450 -Wire Wire Line - 6700 2400 6700 2650 -Wire Wire Line - 6950 2600 7000 2600 -Wire Wire Line - 7000 2400 7000 2650 -Wire Wire Line - 7250 2450 7300 2450 -Wire Wire Line - 7300 2400 7300 2650 -Wire Wire Line - 7550 2600 7600 2600 -Wire Wire Line - 7600 2400 7600 2650 -Wire Wire Line - 7850 2450 7900 2450 -Wire Wire Line - 7900 2400 7900 2650 -Wire Wire Line - 8150 2600 8200 2600 -Wire Wire Line - 8200 2400 8200 2650 -Wire Wire Line - 8450 2450 8500 2450 -Wire Wire Line - 8500 2400 8500 2650 -Wire Wire Line - 8750 2600 8800 2600 -Wire Wire Line - 8800 2400 8800 2650 -Wire Wire Line - 6950 4000 7000 4000 -Wire Wire Line - 7000 4000 7000 3800 -Wire Wire Line - 7250 3850 7300 3850 -Wire Wire Line - 7300 3850 7300 3800 -Wire Wire Line - 7550 4000 7600 4000 -Wire Wire Line - 7600 4000 7600 3800 -Wire Wire Line - 7850 3850 7900 3850 -Wire Wire Line - 7900 3850 7900 3800 -Wire Wire Line - 3750 4250 6100 4250 -Wire Wire Line - 3800 4250 3800 4300 -Wire Wire Line - 4250 4250 4250 4300 -Connection ~ 3800 4250 -Wire Wire Line - 4700 4250 4700 4300 -Connection ~ 4250 4250 -Wire Wire Line - 5150 4250 5150 4300 -Connection ~ 4700 4250 -Wire Wire Line - 5650 4250 5650 4300 -Connection ~ 5150 4250 -Wire Wire Line - 6100 4250 6100 4300 -Connection ~ 5650 4250 -Wire Wire Line - 7250 4250 10800 4250 -Wire Wire Line - 7300 4250 7300 4300 -Wire Wire Line - 7800 4250 7800 4300 -Connection ~ 7300 4250 -Wire Wire Line - 8300 4250 8300 4300 -Connection ~ 7800 4250 -Wire Wire Line - 8800 4250 8800 4300 -Connection ~ 8300 4250 -Wire Wire Line - 9300 4250 9300 4300 -Connection ~ 8800 4250 -Wire Wire Line - 9800 4250 9800 4300 -Connection ~ 9300 4250 -Wire Wire Line - 10300 4250 10300 4300 -Connection ~ 9800 4250 -Wire Wire Line - 10800 4250 10800 4300 -Connection ~ 10300 4250 -Wire Wire Line - 4900 5750 10000 5750 -Wire Wire Line - 4950 5750 4950 5800 -Wire Wire Line - 5400 5750 5400 5800 -Connection ~ 4950 5750 -Wire Wire Line - 5850 5750 5850 5800 -Connection ~ 5400 5750 -Wire Wire Line - 6300 5750 6300 5800 -Connection ~ 5850 5750 -Wire Wire Line - 6800 5750 6800 5800 -Connection ~ 6300 5750 -Wire Wire Line - 7250 5750 7250 5800 -Connection ~ 6800 5750 -Wire Wire Line - 7700 5750 7700 5800 -Connection ~ 7250 5750 -Wire Wire Line - 8150 5750 8150 5800 -Connection ~ 7700 5750 -Wire Wire Line - 8650 5750 8650 5800 -Connection ~ 8150 5750 -Wire Wire Line - 9100 5750 9100 5800 -Connection ~ 8650 5750 -Wire Wire Line - 9550 5750 9550 5800 -Connection ~ 9100 5750 -Wire Wire Line - 10000 5750 10000 5800 -Connection ~ 9550 5750 -Wire Wire Line - 3500 5550 3500 5350 -Wire Wire Line - 3950 5350 3950 5550 -Wire Wire Line - 4400 5350 4400 5550 -Wire Wire Line - 4850 5350 4850 5550 -Wire Wire Line - 5350 5350 5350 5550 -Wire Wire Line - 5800 5350 5800 5550 -Wire Wire Line - 4650 7050 4650 6850 -Wire Wire Line - 5100 7050 5100 6850 -Wire Wire Line - 5550 7050 5550 6850 -Wire Wire Line - 6000 7050 6000 6850 -Wire Wire Line - 6500 7050 6500 6850 -Wire Wire Line - 6950 7050 6950 6850 -Wire Wire Line - 7400 7050 7400 6850 -Wire Wire Line - 7850 7050 7850 6850 -Wire Wire Line - 8350 7050 8350 6850 -Wire Wire Line - 8800 7050 8800 6850 -Wire Wire Line - 9250 7050 9250 6850 -Wire Wire Line - 9700 7050 9700 6850 -Wire Wire Line - 10100 6850 10100 6800 -Wire Wire Line - 9650 6850 9650 6800 -Wire Wire Line - 9200 6850 9200 6800 -Wire Wire Line - 8750 6850 8750 6800 -Wire Wire Line - 8250 6850 8250 6800 -Wire Wire Line - 7800 6850 7800 6800 -Wire Wire Line - 7350 6850 7350 6800 -Wire Wire Line - 6900 6850 6900 6800 -Wire Wire Line - 6400 6850 6400 6800 -Wire Wire Line - 5950 6850 5950 6800 -Wire Wire Line - 5500 6850 5500 6800 -Wire Wire Line - 5050 6850 5050 6800 -Wire Wire Line - 7000 5350 7000 5550 -Wire Wire Line - 7500 5350 7500 5550 -Wire Wire Line - 8000 5350 8000 5550 -Wire Wire Line - 8500 5350 8500 5550 -Wire Wire Line - 9000 5350 9000 5550 -Wire Wire Line - 9500 5350 9500 5550 -Wire Wire Line - 10000 5350 10000 5550 -Wire Wire Line - 10500 5350 10500 5550 -Wire Wire Line - 10900 5350 10900 5300 -Wire Wire Line - 10400 5350 10400 5300 -Wire Wire Line - 9900 5350 9900 5300 -Wire Wire Line - 9400 5350 9400 5300 -Wire Wire Line - 8900 5350 8900 5300 -Wire Wire Line - 8400 5350 8400 5300 -Wire Wire Line - 7900 5350 7900 5300 -Wire Wire Line - 7400 5350 7400 5300 -Wire Wire Line - 4600 1600 4700 1600 -Wire Wire Line - 4600 1700 4700 1700 -Wire Wire Line - 4600 1800 4700 1800 -Wire Wire Line - 4600 1900 4700 1900 -Wire Wire Line - 4600 2000 4700 2000 -Wire Wire Line - 4600 2100 4700 2100 -Wire Wire Line - 4600 2200 4700 2200 -Wire Wire Line - 4600 2300 4700 2300 -Wire Wire Line - 3800 1600 3900 1600 -Wire Wire Line - 3800 1700 3900 1700 -Wire Wire Line - 3800 1800 3900 1800 -Wire Wire Line - 3800 1900 3900 1900 -Wire Wire Line - 3800 2000 3900 2000 -Wire Wire Line - 3800 2100 3900 2100 -Wire Wire Line - 3800 2200 3900 2200 -Wire Wire Line - 3800 2300 3900 2300 -Wire Wire Line - 2250 1400 2300 1400 -Wire Wire Line - 2250 2100 2300 2100 -Wire Wire Line - 2250 2600 2300 2600 -Wire Wire Line - 1450 1600 1400 1600 -Wire Wire Line - 1400 3100 1450 3100 -Wire Wire Line - 2850 2300 2900 2300 -Wire Wire Line - 850 2200 800 2200 -Wire Wire Line - 850 2100 800 2100 -Wire Wire Line - 850 2300 800 2300 -Wire Wire Line - 2850 2700 2900 2700 -Wire Wire Line - 850 2800 800 2800 -Wire Wire Line - 2850 2900 2900 2900 -Wire Wire Line - 850 1700 800 1700 -Wire Wire Line - 2850 1700 2900 1700 -Wire Wire Line - 800 1500 850 1500 -Wire Wire Line - 800 2600 850 2600 -Wire Wire Line - 800 2700 850 2700 -Wire Wire Line - 2900 2400 2850 2400 -Wire Wire Line - 1350 1100 1350 1200 -Wire Wire Line - 4750 2550 4600 2550 -Wire Wire Line - 4600 2550 4600 2400 -Wire Wire Line - 3900 5300 3900 5350 -Wire Wire Line - 4350 5300 4350 5350 -Wire Wire Line - 4800 5300 4800 5350 -Wire Wire Line - 5250 5300 5250 5350 -Wire Wire Line - 5750 5300 5750 5350 -Wire Wire Line - 6200 5300 6200 5350 -Wire Wire Line - 2250 1200 2400 1200 -Wire Wire Line - 2400 1200 2400 1100 -Wire Wire Line - 800 1900 1450 1900 -Wire Wire Line - 800 1800 1450 1800 -Wire Wire Line - 1350 1500 1450 1500 -Wire Wire Line - 1350 1700 1450 1700 -Wire Wire Line - 1350 2100 1450 2100 -Wire Wire Line - 1350 2200 1450 2200 -Wire Wire Line - 1350 2600 1450 2600 -Wire Wire Line - 1350 2700 1450 2700 -Wire Wire Line - 1350 2800 1450 2800 -Wire Wire Line - 1350 2900 1450 2900 -Wire Wire Line - 800 3000 1450 3000 -Wire Wire Line - 2250 1500 2750 1500 -Wire Wire Line - 2250 1600 2750 1600 -Wire Wire Line - 2250 1700 2350 1700 -Wire Wire Line - 2250 2200 2900 2200 -Wire Wire Line - 2250 1900 2900 1900 -Wire Wire Line - 2250 2000 2900 2000 -Wire Wire Line - 2250 2300 2350 2300 -Wire Wire Line - 2250 2700 2350 2700 -Wire Wire Line - 2250 2900 2350 2900 -Wire Wire Line - 2250 3000 2900 3000 -Wire Wire Line - 2250 3100 2900 3100 -Wire Wire Line - 1350 2300 1450 2300 -Wire Wire Line - 2250 2400 2350 2400 -Wire Wire Line - 2850 7100 2850 7300 -Connection ~ 1350 1200 -Connection ~ 2250 1200 -Wire Wire Line - 2250 1200 2250 1300 -Wire Wire Line - 3800 2400 3900 2400 -Wire Wire Line - 3400 2500 3400 2400 -Connection ~ 5500 1150 -Connection ~ 5800 1300 -Connection ~ 6100 1150 -Connection ~ 6400 1300 -Connection ~ 6700 1150 -Connection ~ 7000 1300 -Connection ~ 7300 1150 -Connection ~ 7600 1300 -Connection ~ 5500 2450 -Connection ~ 6100 2450 -Connection ~ 6700 2450 -Connection ~ 7300 2450 -Connection ~ 5800 2600 -Connection ~ 6400 2600 -Connection ~ 7000 2600 -Connection ~ 7600 2600 -Connection ~ 7900 2450 -Connection ~ 8200 2600 -Connection ~ 8500 2450 -Connection ~ 8800 2600 -Connection ~ 7900 1150 -Connection ~ 8200 1300 -Connection ~ 8500 1150 -Connection ~ 8800 1300 -Wire Wire Line - 1100 4100 2050 4100 -Connection ~ 1250 4100 -Wire Wire Line - 1100 4300 2050 4300 -Connection ~ 1250 4300 -Wire Wire Line - 1100 4400 2050 4400 -Connection ~ 1250 4400 -Wire Wire Line - 1100 4500 2050 4500 -Connection ~ 1250 4500 -Wire Wire Line - 1100 4600 2050 4600 -Connection ~ 1250 4600 -Wire Wire Line - 1100 4700 2050 4700 -Connection ~ 1250 4700 -Connection ~ 1250 4800 -Wire Wire Line - 1100 4900 2050 4900 -Connection ~ 1250 4900 -Wire Wire Line - 1100 4800 2050 4800 -Wire Wire Line - 1100 5000 2050 5000 -Connection ~ 1250 5000 -Wire Wire Line - 1100 5100 2050 5100 -Connection ~ 1250 5100 -Wire Wire Line - 1100 5200 2050 5200 -Connection ~ 1250 5200 -Wire Wire Line - 1100 5300 2050 5300 -Connection ~ 1250 5300 -Wire Wire Line - 1100 5400 2050 5400 -Connection ~ 1250 5400 -Wire Wire Line - 1100 5500 2050 5500 -Connection ~ 1250 5500 -Wire Wire Line - 1100 5600 2050 5600 -Connection ~ 1250 5600 -Wire Wire Line - 1100 5700 2050 5700 -Connection ~ 1250 5700 -Wire Wire Line - 1100 5800 2050 5800 -Connection ~ 1250 5800 -Wire Wire Line - 1100 5900 2050 5900 -Connection ~ 1250 5900 -Wire Wire Line - 1100 6000 2050 6000 -Connection ~ 1250 6000 -Wire Wire Line - 2300 7600 2900 7600 -Wire Wire Line - 2850 7500 2900 7500 -Wire Wire Line - 2800 7400 2900 7400 -Wire Wire Line - 2850 7300 2900 7300 -Wire Wire Line - 2350 7500 2300 7500 -Wire Wire Line - 800 1400 1450 1400 -Wire Wire Line - 11000 2750 11050 2750 -Wire Wire Line - 11000 3100 11050 3100 -Wire Wire Line - 10600 2600 10600 3100 -Connection ~ 10600 2750 -Wire Notes Line - 11200 2100 10500 2100 -Wire Notes Line - 10500 2100 10500 3300 -Wire Notes Line - 10500 3300 11200 3300 -Wire Notes Line - 11200 3300 11200 2100 -Wire Notes Line - 1750 6650 3600 6650 -Wire Notes Line - 3600 6650 3600 7700 -Wire Notes Line - 3600 7700 1800 7700 -Wire Notes Line - 1800 7700 1800 6650 -Wire Notes Line - 2250 6300 3000 6300 -Wire Notes Line - 3000 6300 3000 3550 -Wire Notes Line - 3000 3550 2250 3550 -Wire Notes Line - 2250 3550 2250 6300 -Wire Wire Line - 2700 5400 2700 5450 -Wire Wire Line - 2800 5400 2800 5450 -Wire Wire Line - 2900 5400 2900 5450 -Wire Wire Line - 2800 5950 2800 6000 -Wire Wire Line - 2800 3850 2800 3900 -Wire Wire Line - 2700 4400 2700 4450 -Wire Wire Line - 2800 4400 2800 4450 -Wire Wire Line - 2900 4400 2900 4450 -Wire Wire Line - 2900 7500 2900 7450 -Wire Wire Line - 2900 7450 2350 7450 -Wire Wire Line - 2350 7450 2350 7300 -Wire Wire Line - 1450 1300 800 1300 -Wire Wire Line - 1350 1200 1450 1200 -NoConn ~ 1450 2000 -Wire Wire Line - 2900 4450 2800 4450 -Wire Wire Line - 2800 5400 2900 5400 -Wire Wire Line - 3400 2400 3500 2400 -Wire Wire Line - 3500 2400 3500 2600 -Wire Wire Line - 3500 2600 3800 2600 -Wire Wire Line - 3800 2600 3800 2400 -$EndSCHEMATC DELETED hardware/pdp8i/PDP8.ses Index: hardware/pdp8i/PDP8.ses ================================================================== --- hardware/pdp8i/PDP8.ses +++ /dev/null @@ -1,3782 +0,0 @@ - -(session PDP8.ses - (base_design PDP8.dsn) - (placement - (resolution um 10) - (component R3 - (place R9 579200 -1029400 back 270) - (place R1 376000 -1029400 back 90) - (place R2 401400 -1029400 back 90) - (place R3 426800 -1029400 back 90) - (place R4 452200 -1029400 back 90) - (place R5 477600 -1029400 back 90) - (place R6 503000 -1029400 back 90) - (place R7 528400 -1029400 back 270) - (place R8 553800 -1029400 back 270) - (place R10 604600 -1029400 back 270) - (place R11 630000 -1029400 back 270) - (place R12 655400 -1029400 back 270) - (place R_ROW1 789000 -1330800 front 0) - (place R_ROW2 187500 -1295000 front 180) - (place R_ROW3 2186000 -1330800 front 0) - (place R_S1 187500 -1330000 front 0) - (place R_S2 187500 -1365000 front 0) - ) - (component "DIP-18__300" - (place P2 2190500 -1009700 back 270) - ) - (component 1pin - (place M1 130000 -680000 front 0) - (place M2 130000 -1590000 front 0) - (place M3 2850000 -680000 front 0) - (place M4 2860000 -1590000 front 0) - (place M5 2080000 -680000 front 0) - (place M6 2850000 -1320000 front 0) - (place M7 2080000 -1320000 front 0) - ) - (component D2 - (place D23 2490000 -1365000 front 0) - (place D24 2590000 -1365000 front 0) - (place D22 2390000 -1365000 front 0) - (place D25 2690000 -1365000 front 0) - (place D26 2790000 -1365000 front 0) - (place D12 1390000 -1365000 front 0) - (place D2 390000 -1365000 front 0) - (place D3 490000 -1365000 front 0) - (place D4 590000 -1365000 front 0) - (place D5 690000 -1365000 front 0) - (place D6 790000 -1365000 front 0) - (place D7 890000 -1365000 front 0) - (place D8 990000 -1365000 front 0) - (place D9 1090000 -1365000 front 0) - (place D10 1190000 -1365000 front 0) - (place D11 1290000 -1365000 front 0) - (place D1 290000 -1365000 front 0) - (place D13 1490000 -1365000 front 0) - (place D14 1590000 -1365000 front 0) - (place D15 1690000 -1365000 front 0) - (place D16 1790000 -1365000 front 0) - (place D17 1890000 -1365000 front 0) - (place D18 1990000 -1365000 front 0) - (place D19 2090000 -1365000 front 0) - (place D20 2190000 -1365000 front 0) - (place D21 2290000 -1365000 front 0) - ) - (component RASPI_BPLUS_MIRRORED - (place P1 640000 -1240000 back 0) - ) - (component D3 - (place DZ1 2190000 -1170000 front 0) - ) - (component "LED-3-PDP" - (place DMB9 1690000 -998000 front 0) - (place DMB10 1790000 -998000 front 0) - (place DMB11 1890000 -998000 front 0) - (place DMB12 1990000 -998000 front 0) - (place DAC1 890000 -1144000 front 0) - (place DAC2 990000 -1144000 front 0) - (place DAC3 1090000 -1144000 front 0) - (place DAC4 1190000 -1144000 front 0) - (place DAC5 1290000 -1144000 front 0) - (place DAC6 1390000 -1144000 front 0) - (place DAC7 1490000 -1144000 front 0) - (place DAC8 1590000 -1144000 front 0) - (place DAC9 1690000 -1144000 front 0) - (place DAC10 1790000 -1144000 front 0) - (place DPC1 890000 -706000 front 0) - (place DAC12 1990000 -1144000 front 0) - (place DMQ1 890000 -1290000 front 0) - (place DMQ2 990000 -1290000 front 0) - (place DMQ3 1090000 -1290000 front 0) - (place DMQ4 1190000 -1290000 front 0) - (place DMQ5 1290000 -1290000 front 0) - (place DMQ6 1390000 -1290000 front 0) - (place DMQ7 1490000 -1290000 front 0) - (place DMQ8 1590000 -1290000 front 0) - (place DMQ9 1690000 -1290000 front 0) - (place DMQ10 1790000 -1290000 front 0) - (place DMQ11 1890000 -1290000 front 0) - (place DMQ12 1990000 -1290000 front 0) - (place DLINK1 790000 -1144000 front 0) - (place DSC1 290000 -1290000 front 0) - (place DAC11 1890000 -1144000 front 0) - (place DPC2 990000 -706000 front 0) - (place DPC3 1090000 -706000 front 0) - (place DPC4 1190000 -706000 front 0) - (place DPC5 1290000 -706000 front 0) - (place DPC6 1390000 -706000 front 0) - (place DPC7 1490000 -706000 front 0) - (place DPC8 1590000 -706000 front 0) - (place DPC9 1690000 -706000 front 0) - (place DPC10 1790000 -706000 front 0) - (place DPC11 1890000 -706000 front 0) - (place DPC12 1990000 -706000 front 0) - (place DMA1 890000 -852000 front 0) - (place DMA2 990000 -852000 front 0) - (place DMA3 1090000 -852000 front 0) - (place DMB8 1590000 -998000 front 0) - (place DMA5 1290000 -852000 front 0) - (place DMA6 1390000 -852000 front 0) - (place DMA7 1490000 -852000 front 0) - (place DMA8 1590000 -852000 front 0) - (place DMA9 1690000 -852000 front 0) - (place DMA10 1790000 -852000 front 0) - (place DMA11 1890000 -852000 front 0) - (place DMA12 1990000 -852000 front 0) - (place DMB1 890000 -998000 front 0) - (place DMB2 990000 -998000 front 0) - (place DMB3 1090000 -998000 front 0) - (place DMB4 1190000 -998000 front 0) - (place DMB5 1290000 -998000 front 0) - (place DMB6 1390000 -998000 front 0) - (place DMB7 1490000 -998000 front 0) - (place DMA4 1190000 -852000 front 0) - (place DRUN1 2790000 -852000 front 0) - (place DPAUSE1 2790000 -779000 front 0) - (place DION1 2790000 -706000 front 0) - (place DBREAK1 2590000 -1071000 front 0) - (place DCURAD1 2590000 -998000 front 0) - (place DWRDCT1 2590000 -925000 front 0) - (place DDEFER1 2590000 -852000 front 0) - (place DEXEC1 2590000 -779000 front 0) - (place DFETCH1 2590000 -706000 front 0) - (place DOPR1 2390000 -1217000 front 0) - (place DIOT1 2390000 -1144000 front 0) - (place DJMP1 2390000 -1071000 front 0) - (place DJMS1 2390000 -998000 front 0) - (place DDCA1 2390000 -925000 front 0) - (place DSC2 390000 -1290000 front 0) - (place DSC4 590000 -1290000 front 0) - (place DSC5 690000 -1290000 front 0) - (place DDF1 290000 -706000 front 0) - (place DDF2 390000 -706000 front 0) - (place DDF3 490000 -706000 front 0) - (place DSC3 490000 -1290000 front 0) - (place DTAD1 2390000 -779000 front 0) - (place DAND1 2390000 -706000 front 0) - (place DISZ1 2390000 -852000 front 0) - (place DIF2 690000 -706000 front 0) - (place DIF3 790000 -706000 front 0) - (place DIF1 590000 -706000 front 0) - ) - (component SW_KND2_PDP2 - (place SW6 790000 -1595000 front 0) - (place SW5 690000 -1595000 front 0) - (place SW4 590000 -1595000 front 0) - (place SW3 490000 -1595000 front 0) - (place SW2 390000 -1595000 front 0) - (place SW1 290000 -1595000 front 0) - (place SW18 1990000 -1595000 front 0) - (place SW17 1890000 -1595000 front 0) - (place SW15 1690000 -1595000 front 0) - (place SW14 1590000 -1595000 front 0) - (place SW13 1490000 -1595000 front 0) - (place SW12 1390000 -1595000 front 0) - (place SW19 2090000 -1595000 front 0) - (place SW20 2190000 -1595000 front 0) - (place SW16 1790000 -1595000 front 0) - (place SW22 2390000 -1595000 front 0) - (place SW23 2490000 -1595000 front 0) - (place SW24 2590000 -1595000 front 0) - (place SW25 2690000 -1595000 front 0) - (place SW26 2790000 -1595000 front 0) - (place SW7 890000 -1595000 front 0) - (place SW8 990000 -1595000 front 0) - (place SW9 1090000 -1595000 front 0) - (place SW10 1190000 -1595000 front 0) - (place SW11 1290000 -1595000 front 0) - (place SW21 2290000 -1595000 front 0) - ) - (component PIN_ARRAY_4x1 - (place P5 115000 -1360000 front 270) - ) - (component PIN_ARRAY_20X2 - (place P3 2539000 -1300500 back 180) - ) - (component "LED-3-StrEight" - (place DPAUSE2 2590000 -1144000 front 0) - (place DRUN2 2590000 -1217000 front 0) - ) - (component PIN_ARRAY_3X1 - (place J_COL1 643000 -1118000 back 180) - (place J_COL2 643000 -1152000 back 180) - ) - ) - (was_is - ) - (routes - (resolution um 10) - (parser - (host_cad "KiCad's Pcbnew") - (host_version "(2013-07-07 BZR 4022)-stable") - ) - (library_out - (padstack "Via[0-1]_889:635_um" - (shape - (circle F.Cu 8890 0 0) - ) - (shape - (circle B.Cu 8890 0 0) - ) - (attach off) - ) - (padstack "Via[0-1]_889:0_um" - (shape - (circle F.Cu 8890 0 0) - ) - (shape - (circle B.Cu 8890 0 0) - ) - (attach off) - ) - ) - (network_out - (net +3.3V - (wire - (path F.Cu 3810 - 893368 -1227300 - 913651 -1207017 - 1290368 -1207017 - 1308107 -1224756 - 1308107 -1239060 - 1377069 -1308022 - 2011889 -1308022 - 2044180 -1275731 - 2336431 -1275731 - 2348500 -1287800 - ) - ) - (wire - (path F.Cu 3810 - 881300 -1227300 - 893368 -1227300 - ) - ) - (wire - (path B.Cu 3810 - 2348500 -1287800 - 2348500 -1313200 - ) - ) - ) - (net +5V - (wire - (path F.Cu 3810 - 2151900 -1170000 - 2116585 -1205315 - 1384946 -1205315 - 1379892 -1200261 - 886410 -1200261 - 869231 -1217440 - 869231 -1240631 - 881300 -1252700 - ) - ) - (wire - (path F.Cu 3810 - 855900 -1252700 - 761300 -1347300 - 115000 -1347300 - ) - ) - (wire - (path B.Cu 3810 - 881300 -1252700 - 855900 -1252700 - ) - ) - (wire - (path F.Cu 3810 - 2297700 -1287800 - 2297700 -1299868 - ) - ) - (wire - (path F.Cu 3810 - 2297700 -1313200 - 2297700 -1299868 - ) - ) - (wire - (path B.Cu 3810 - 2297700 -1287800 - 2285632 -1287800 - ) - ) - (wire - (path B.Cu 3810 - 2285632 -1287800 - 2167832 -1170000 - 2151900 -1170000 - ) - ) - ) - (net GND - (wire - (path B.Cu 3810 - 2373900 -1287800 - 2298356 -1212256 - 2298356 -977856 - 2228600 -908100 - ) - ) - (wire - (path B.Cu 3810 - 2373900 -1313200 - 2373900 -1287800 - ) - ) - (wire - (path B.Cu 3810 - 792400 -1257101 - 784638 -1264863 - 664863 -1264863 - 652700 -1252700 - ) - ) - (wire - (path B.Cu 3810 - 792400 -1257101 - 792400 -1240000 - 779700 -1227300 - ) - ) - (wire - (path B.Cu 3810 - 792400 -1257101 - 800256 -1264957 - 818243 -1264957 - 830500 -1252700 - ) - ) - (wire - (path B.Cu 3810 - 115000 -1321900 - 127068 -1321900 - ) - ) - (wire - (path B.Cu 3810 - 127068 -1321900 - 130612 -1318356 - 154053 -1318356 - 160929 -1325232 - 160929 -1353471 - 149400 -1365000 - ) - ) - (wire - (path F.Cu 3810 - 398700 -1227300 - 411400 -1240000 - 513000 -1240000 - 525700 -1252700 - ) - ) - (wire - (path F.Cu 3810 - 364101 -1206624 - 378024 -1206624 - 398700 -1227300 - ) - ) - (wire - (path F.Cu 3810 - 652700 -1252700 - 640631 -1264769 - 537769 -1264769 - 525700 -1252700 - ) - ) - (wire - (path F.Cu 3810 - 127068 -1321900 - 139384 -1321900 - 254660 -1206624 - 364101 -1206624 - ) - ) - (wire - (path F.Cu 3810 - 2228600 -908100 - 2216749 -919951 - 1100418 -919951 - 1019637 -839170 - 511529 -839170 - 364101 -986598 - 364101 -1206624 - ) - ) - (wire - (path F.Cu 3810 - 115000 -1321900 - 127068 -1321900 - ) - ) - ) - (net "N-0000023" - (wire - (path B.Cu 2540 - 2228100 -1170000 - 2228100 -1159202 - ) - ) - (wire - (path B.Cu 2540 - 2228100 -1159202 - 2167001 -1098103 - 2167001 -922701 - 2152400 -908100 - ) - ) - ) - (net "N-0000028" - (wire - (path F.Cu 2540 - 643000 -1118000 - 631567 -1106567 - 551911 -1106567 - 515700 -1070356 - 515700 -1064381 - 502323 -1051004 - 392496 -1051004 - 376000 -1067500 - ) - ) - ) - (net "N-0000029" - (wire - (path B.Cu 2540 - 643000 -1152000 - 631566 -1140566 - 619213 -1140566 - 606166 -1127519 - 606166 -1107927 - 626625 -1087468 - 650924 -1087468 - 666200 -1072192 - 666200 -1062830 - 644354 -1040984 - 427916 -1040984 - 401400 -1067500 - ) - ) - ) - (net "N-0000035" - (wire - (path F.Cu 2540 - 115000 -1372700 - 118419 -1376119 - 214481 -1376119 - 225600 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 115000 -1372700 - 149400 -1338300 - 149400 -1330000 - ) - ) - ) - (net "N-0000039" - (wire - (path B.Cu 2540 - 576500 -1252700 - 563800 -1240000 - 563800 -1223523 - 503000 -1162723 - 503000 -1067500 - ) - ) - ) - (net "N-0000040" - (wire - (path B.Cu 2540 - 601900 -1227300 - 542629 -1168029 - 542629 -1063326 - 549319 -1056636 - 593736 -1056636 - 604600 -1067500 - ) - ) - ) - (net "N-0000041" - (wire - (path B.Cu 2540 - 449500 -1252700 - 458311 -1252700 - 490000 -1284389 - 490000 -1294620 - 526180 -1330800 - 750900 -1330800 - ) - ) - ) - (net "N-0000042" - (wire - (path B.Cu 2540 - 500300 -1252700 - 514266 -1238734 - 530434 -1238734 - 537535 -1231633 - 537535 -1220894 - 492201 -1175560 - 492201 -1062927 - 503589 -1051539 - 614039 -1051539 - 630000 -1067500 - ) - ) - ) - (net "N-0000043" - (wire - (path B.Cu 2540 - 601900 -1252700 - 589200 -1240000 - 589200 -1221790 - 528400 -1160990 - 528400 -1067500 - ) - ) - ) - (net "N-0000046" - (wire - (path F.Cu 2540 - 754300 -1252700 - 765788 -1241212 - 860806 -1241212 - 868600 -1249006 - 868600 -1256571 - 884342 -1272313 - 977570 -1272313 - 990000 -1284743 - 990000 -1294994 - 1008747 -1313741 - 2032306 -1313741 - 2062707 -1344142 - 2105187 -1344142 - 2118529 -1330800 - 2147900 -1330800 - ) - ) - ) - (net "N-0000048" - (wire - (path B.Cu 2540 - 655400 -1067500 - 633967 -1046067 - 432397 -1046067 - 415681 -1062783 - 415681 -1072465 - 475614 -1132398 - 475614 -1226586 - 474900 -1227300 - ) - ) - ) - (net "N-0000049" - (wire - (path B.Cu 2540 - 500300 -1227300 - 480697 -1207697 - 480697 -1112509 - 441005 -1072817 - 441005 -1063223 - 447939 -1056289 - 466389 -1056289 - 477600 -1067500 - ) - ) - ) - (net "N-0000050" - (wire - (path B.Cu 2540 - 525700 -1227300 - 485781 -1187381 - 485781 -1101081 - 452200 -1067500 - ) - ) - ) - (net "N-0000053" - (wire - (path B.Cu 2540 - 790000 -1539200 - 790000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 790000 -1522687 - 825560 -1487127 - 825560 -1365000 - ) - ) - ) - (net "N-0000054" - (wire - (path B.Cu 2540 - 627300 -1227300 - 587011 -1187011 - 587011 -1100711 - 553800 -1067500 - ) - ) - ) - (net "N-0000055" - (wire - (path B.Cu 2540 - 652700 -1227300 - 594636 -1169236 - 594636 -1082936 - 579200 -1067500 - ) - ) - ) - (net "N-0000056" - (wire - (path F.Cu 2540 - 754300 -1227300 - 740334 -1241266 - 698766 -1241266 - 690800 -1249232 - 690800 -1256341 - 674806 -1272335 - 248265 -1272335 - 225600 -1295000 - ) - ) - ) - (net "N-0000057" - (wire - (path F.Cu 2540 - 426800 -1067500 - 426800 -1142787 - 496975 -1212962 - 790762 -1212962 - 805100 -1227300 - ) - ) - ) - (net "N-0000059" - (wire - (path B.Cu 2540 - 690000 -1539200 - 690000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 690000 -1522687 - 725560 -1487127 - 725560 -1365000 - ) - ) - ) - (net "N-0000060" - (wire - (path B.Cu 2540 - 590000 -1539200 - 590000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 590000 -1522687 - 625560 -1487127 - 625560 -1365000 - ) - ) - ) - (net "N-0000061" - (wire - (path B.Cu 2540 - 490000 -1539200 - 490000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 490000 -1522687 - 525560 -1487127 - 525560 -1365000 - ) - ) - ) - (net "N-0000062" - (wire - (path F.Cu 2540 - 390000 -1539200 - 390000 -1522687 - ) - ) - (wire - (path F.Cu 2540 - 390000 -1522687 - 425560 -1487127 - 425560 -1365000 - ) - ) - ) - (net "N-0000063" - (wire - (path B.Cu 2540 - 290000 -1539200 - 290000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 290000 -1522687 - 325560 -1487127 - 325560 -1365000 - ) - ) - ) - (net "N-0000065" - (wire - (path B.Cu 2540 - 2390000 -1539200 - 2390000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 2390000 -1522687 - 2425560 -1487127 - 2425560 -1365000 - ) - ) - ) - (net "N-0000066" - (wire - (path B.Cu 2540 - 2490000 -1539200 - 2490000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 2490000 -1522687 - 2525560 -1487127 - 2525560 -1365000 - ) - ) - ) - (net "N-0000067" - (wire - (path B.Cu 2540 - 2590000 -1539200 - 2590000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 2590000 -1522687 - 2625560 -1487127 - 2625560 -1365000 - ) - ) - ) - (net "N-0000068" - (wire - (path B.Cu 2540 - 2690000 -1539200 - 2690000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 2690000 -1522687 - 2725560 -1487127 - 2725560 -1365000 - ) - ) - ) - (net "N-0000069" - (wire - (path F.Cu 2540 - 2790000 -1539200 - 2790000 -1522687 - ) - ) - (wire - (path F.Cu 2540 - 2790000 -1522687 - 2825560 -1487127 - 2825560 -1365000 - ) - ) - ) - (net "N-0000070" - (wire - (path F.Cu 2540 - 2290000 -1539200 - 2290000 -1522687 - ) - ) - (wire - (path F.Cu 2540 - 2290000 -1522687 - 2325560 -1487127 - 2325560 -1365000 - ) - ) - ) - (net "N-0000071" - (wire - (path B.Cu 2540 - 890000 -1539200 - 890000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 890000 -1522687 - 925560 -1487127 - 925560 -1365000 - ) - ) - ) - (net "N-0000072" - (wire - (path B.Cu 2540 - 990000 -1539200 - 990000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 990000 -1522687 - 1025560 -1487127 - 1025560 -1365000 - ) - ) - ) - (net "N-0000073" - (wire - (path B.Cu 2540 - 1090000 -1539200 - 1090000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 1090000 -1522687 - 1125560 -1487127 - 1125560 -1365000 - ) - ) - ) - (net "N-0000074" - (wire - (path B.Cu 2540 - 1190000 -1539200 - 1190000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 1190000 -1522687 - 1225560 -1487127 - 1225560 -1365000 - ) - ) - ) - (net "N-0000079" - (wire - (path B.Cu 2540 - 1290000 -1522687 - 1325560 -1487127 - 1325560 -1375798 - ) - ) - (wire - (path B.Cu 2540 - 1325560 -1365000 - 1325560 -1375798 - ) - ) - (wire - (path B.Cu 2540 - 1290000 -1539200 - 1290000 -1522687 - ) - ) - ) - (net "N-0000085" - (wire - (path B.Cu 2540 - 2090000 -1539200 - 2090000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 2090000 -1522687 - 2125560 -1487127 - 2125560 -1365000 - ) - ) - ) - (net "N-0000086" - (wire - (path B.Cu 2540 - 2190000 -1539200 - 2190000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 2190000 -1522687 - 2225560 -1487127 - 2225560 -1365000 - ) - ) - ) - (net "N-0000087" - (wire - (path F.Cu 2540 - 1390000 -1539200 - 1390000 -1522687 - ) - ) - (wire - (path F.Cu 2540 - 1390000 -1522687 - 1425560 -1487127 - 1425560 -1365000 - ) - ) - ) - (net "N-0000088" - (wire - (path B.Cu 2540 - 1490000 -1539200 - 1490000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 1490000 -1522687 - 1525560 -1487127 - 1525560 -1365000 - ) - ) - ) - (net "N-0000089" - (wire - (path F.Cu 2540 - 1590000 -1539200 - 1590000 -1522687 - ) - ) - (wire - (path F.Cu 2540 - 1590000 -1522687 - 1625560 -1487127 - 1625560 -1365000 - ) - ) - ) - (net "N-0000090" - (wire - (path F.Cu 2540 - 1690000 -1539200 - 1690000 -1522687 - ) - ) - (wire - (path F.Cu 2540 - 1690000 -1522687 - 1725560 -1487127 - 1725560 -1365000 - ) - ) - ) - (net "N-0000091" - (wire - (path B.Cu 2540 - 1790000 -1539200 - 1790000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 1790000 -1522687 - 1825560 -1487127 - 1825560 -1365000 - ) - ) - ) - (net "N-0000092" - (wire - (path B.Cu 2540 - 1890000 -1539200 - 1890000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 1890000 -1522687 - 1925560 -1487127 - 1925560 -1365000 - ) - ) - ) - (net "N-0000093" - (wire - (path B.Cu 2540 - 1990000 -1539200 - 1990000 -1522687 - ) - ) - (wire - (path B.Cu 2540 - 1990000 -1522687 - 2025560 -1487127 - 2025560 -1365000 - ) - ) - ) - (net RX - (wire - (path B.Cu 2540 - 668400 -1152000 - 671787 -1148613 - 732959 -1148613 - 767000 -1182654 - 767000 -1240000 - 779700 -1252700 - ) - ) - (wire - (path F.Cu 2540 - 779700 -1252700 - 702400 -1330000 - 225600 -1330000 - ) - ) - ) - (net SPARE_IO - (wire - (path B.Cu 2540 - 449500 -1227300 - 463466 -1241266 - 479661 -1241266 - 487600 -1249205 - 487600 -1256169 - 548876 -1317445 - 718670 -1317445 - 721583 -1314532 - 848598 -1314532 - 857128 -1323062 - 926456 -1323062 - 982540 -1266978 - 1619792 -1266978 - 1622826 -1270012 - ) - ) - (wire - (path F.Cu 2540 - 2475500 -1287800 - 2457712 -1270012 - 1622826 -1270012 - ) - ) - (via "Via[0-1]_889:635_um" 1622826 -1270012 - ) - (wire - (path F.Cu 2540 - 2475500 -1287800 - 2475500 -1313200 - ) - ) - ) - (net TX - (wire - (path B.Cu 2540 - 668400 -1118000 - 712498 -1118000 - 817006 -1222508 - 817006 -1240794 - 805100 -1252700 - ) - ) - (wire - (path F.Cu 2540 - 805100 -1252700 - 716849 -1340951 - 135623 -1340951 - 129910 -1335238 - 110826 -1335238 - 103482 -1342582 - 103482 -1386582 - 115000 -1398100 - ) - ) - ) - (net col1 - (wire - (path F.Cu 2540 - 902700 -1319828 - 897072 -1319828 - 851900 -1365000 - ) - ) - (wire - (path F.Cu 2540 - 2051900 -1365000 - 2006728 -1319828 - 902700 -1319828 - ) - ) - (wire - (path F.Cu 2540 - 902700 -1319828 - 902700 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 2051900 -1365000 - 2095110 -1365000 - 2115968 -1344142 - 2469958 -1344142 - 2500900 -1313200 - ) - ) - (wire - (path F.Cu 2540 - 902700 -980060 - 902700 -852000 - ) - ) - (wire - (path F.Cu 2540 - 902700 -998000 - 902700 -980060 - ) - ) - (wire - (path F.Cu 2540 - 902700 -980060 - 387240 -980060 - 376000 -991300 - ) - ) - (wire - (path B.Cu 2540 - 2402700 -766805 - 2397650 -766805 - 2390505 -773950 - 2390505 -807429 - 2424985 -841909 - 2424985 -910277 - 2500900 -986192 - 2500900 -1287800 - ) - ) - (wire - (path B.Cu 2540 - 2602700 -998000 - 2590197 -1010503 - 2572282 -1010503 - 2450476 -888697 - 2450476 -809530 - 2407751 -766805 - 2402700 -766805 - ) - ) - (wire - (path B.Cu 2540 - 2402700 -766805 - 2402700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 2500900 -1313200 - 2500900 -1287800 - ) - ) - (wire - (path B.Cu 2540 - 902700 -852000 - 897645 -846945 - 897645 -711055 - 902700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 902700 -1144000 - 902700 -998000 - ) - ) - (wire - (path B.Cu 2540 - 376000 -991300 - 251900 -1115400 - 251900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 302700 -706000 - 302700 -918000 - 376000 -991300 - ) - ) - (wire - (path B.Cu 2540 - 902700 -1290000 - 897475 -1284775 - 897475 -1149225 - 902700 -1144000 - ) - ) - ) - (net col10 - (wire - (path B.Cu 2540 - 2602700 -779000 - 2564706 -816994 - 2564706 -934782 - 2729500 -1099576 - 2729500 -1287800 - ) - ) - (wire - (path F.Cu 2540 - 1802700 -706000 - 1820450 -723750 - 2119706 -723750 - 2149900 -693556 - 2583066 -693556 - 2590000 -700490 - 2590000 -766300 - 2602700 -779000 - ) - ) - (wire - (path B.Cu 2540 - 1802700 -998000 - 1802700 -1061727 - 1707700 -1156727 - 1701121 -1156727 - 1690327 -1167521 - 1690327 -1167769 - 1621397 -1236699 - 979385 -1236699 - 913517 -1302567 - 872621 -1302567 - 860054 -1290000 - 844466 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 844466 -1290000 - 702700 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 844466 -1290000 - 844466 -1247966 - 852432 -1240000 - 860267 -1240000 - 867466 -1232801 - 867466 -1190925 - 684168 -1007627 - 620927 -1007627 - 604600 -991300 - ) - ) - (wire - (path B.Cu 2540 - 1802700 -852000 - 1802700 -998000 - ) - ) - (wire - (path B.Cu 2540 - 2729500 -1313200 - 2729500 -1287800 - ) - ) - (wire - (path B.Cu 2540 - 1802700 -1290000 - 1802700 -1314200 - 1751900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 1802700 -1144000 - 1802700 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 1802700 -998000 - 1802700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1802700 -706000 - 1802700 -852000 - ) - ) - ) - (net col11 - (wire - (path B.Cu 2540 - 2754900 -1287800 - 2754900 -1096506 - 2590000 -931606 - 2590000 -864700 - 2602700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 2754900 -1313200 - 2754900 -1287800 - ) - ) - (wire - (path F.Cu 2540 - 2602700 -852000 - 2615335 -864635 - 2615335 -929633 - 2607730 -937238 - 2502897 -937238 - 2440222 -874563 - 1925263 -874563 - 1902700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 1902700 -852000 - 1902700 -998000 - ) - ) - (wire - (path B.Cu 2540 - 1902700 -706000 - 1902700 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1902700 -998000 - 1902700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1902700 -706000 - 1884949 -688249 - 877805 -688249 - 683427 -882627 - 683427 -978664 - 659879 -1002212 - 640912 -1002212 - 630000 -991300 - ) - ) - (wire - (path B.Cu 2540 - 1902700 -1290000 - 1902700 -1314200 - 1851900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 1902700 -1144000 - 1902700 -1290000 - ) - ) - ) - (net col12 - (wire - (path F.Cu 2540 - 2002700 -1144000 - 2002700 -1130259 - 2030340 -1102619 - ) - ) - (wire - (path B.Cu 2540 - 2002700 -998000 - 2002700 -1074979 - 2030340 -1102619 - ) - ) - (wire - (path B.Cu 2540 - 1994465 -839286 - 1972445 -839286 - 1965105 -846626 - 1965105 -960405 - 2002700 -998000 - ) - ) - (via "Via[0-1]_889:635_um" 2030340 -1102619 - ) - (wire - (path B.Cu 2540 - 1994465 -839286 - 1994465 -843765 - 2002700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 1994465 -718196 - 1994465 -839286 - ) - ) - (wire - (path B.Cu 2540 - 1994465 -718196 - 2002700 -709961 - 2002700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 655400 -991300 - 655400 -902970 - 875205 -683165 - 1903320 -683165 - 1938351 -718196 - 1994465 -718196 - ) - ) - (wire - (path B.Cu 2540 - 2780300 -1287800 - 2780300 -1102600 - 2602700 -925000 - ) - ) - (wire - (path B.Cu 2540 - 2780300 -1313200 - 2780300 -1287800 - ) - ) - (wire - (path F.Cu 2540 - 2602700 -925000 - 2547039 -869339 - 2020039 -869339 - 2002700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 1970417 -1302410 - 1970417 -1346483 - 1951900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 2002700 -1144000 - 1965005 -1181695 - 1965005 -1296998 - 1970417 -1302410 - ) - ) - (wire - (path B.Cu 2540 - 1970417 -1302410 - 1990290 -1302410 - 2002700 -1290000 - ) - ) - ) - (net col1a - (wire - (path B.Cu 2540 - 855900 -1227300 - 832312 -1203712 - 811814 -1203712 - 714668 -1106566 - 637609 -1106566 - 629033 -1115142 - 629033 -1118000 - ) - ) - (wire - (path B.Cu 2540 - 617600 -1118000 - 629033 -1118000 - ) - ) - ) - (net col2 - (wire - (path F.Cu 2540 - 2151900 -1365000 - 2140935 -1375965 - 1985324 -1375965 - 1953253 -1343894 - 973006 -1343894 - 951900 -1365000 - ) - ) - (wire - (path F.Cu 2540 - 2526300 -1313200 - 2487734 -1351766 - 2165134 -1351766 - 2151900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 2572572 -1058449 - 2590149 -1058449 - 2602700 -1071000 - ) - ) - (wire - (path B.Cu 2540 - 2526300 -1287800 - 2526300 -1104721 - 2572572 -1058449 - ) - ) - (wire - (path B.Cu 2540 - 2572572 -1058449 - 2572572 -1017981 - 2445392 -890801 - 2445392 -821692 - 2402700 -779000 - ) - ) - (wire - (path B.Cu 2540 - 401400 -991300 - 264733 -1127967 - 264733 -1294831 - 291142 -1321240 - 308140 -1321240 - 351900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 402700 -706000 - 402700 -990000 - 401400 -991300 - ) - ) - (wire - (path F.Cu 2540 - 1002700 -1290000 - 1002700 -1228440 - ) - ) - (wire - (path B.Cu 2540 - 1002700 -1228440 - 1002700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1002700 -1144000 - 1002700 -998000 - ) - ) - (via "Via[0-1]_889:635_um" 1002700 -1228440 - ) - (wire - (path F.Cu 2540 - 1002700 -706000 - 990172 -693472 - 654471 -693472 - 629540 -718403 - 415103 -718403 - 402700 -706000 - ) - ) - (wire - (path F.Cu 2540 - 1002700 -998000 - 1002700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 2526300 -1313200 - 2526300 -1287800 - ) - ) - (wire - (path B.Cu 2540 - 1002700 -1290000 - 1002700 -1314200 - 951900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 1002700 -852000 - 1002700 -706000 - ) - ) - ) - (net col2a - (wire - (path F.Cu 2540 - 617600 -1152000 - 629033 -1152000 - ) - ) - (wire - (path F.Cu 2540 - 629033 -1152000 - 629033 -1154858 - 680123 -1205948 - 809148 -1205948 - 830500 -1227300 - ) - ) - ) - (net col3 - (wire - (path B.Cu 2540 - 426800 -991300 - 422334 -991300 - 290000 -1123634 - 290000 -1295160 - 338877 -1344037 - 430937 -1344037 - 451900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 502700 -706000 - 426800 -781900 - 426800 -991300 - ) - ) - (wire - (path F.Cu 2540 - 2251900 -1365000 - 2235851 -1381049 - 1983220 -1381049 - 1951149 -1348978 - 1067922 -1348978 - 1051900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 2488200 -1316770 - 2488200 -985930 - 2402700 -900430 - 2402700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 2551700 -1313200 - 2539781 -1325119 - 2496549 -1325119 - 2488200 -1316770 - ) - ) - (wire - (path B.Cu 2540 - 2488200 -1316770 - 2468371 -1336599 - 2280301 -1336599 - 2251900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 2551700 -1287800 - 2551700 -1313200 - ) - ) - (wire - (path F.Cu 2540 - 1102700 -1290000 - 1102700 -1228440 - ) - ) - (wire - (path B.Cu 2540 - 1102700 -1144000 - 1102700 -1228440 - ) - ) - (wire - (path B.Cu 2540 - 1102700 -998000 - 1102700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1102700 -852000 - 1102700 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1102700 -706000 - 1080006 -683306 - 525394 -683306 - 502700 -706000 - ) - ) - (wire - (path F.Cu 2540 - 2402700 -852000 - 2414956 -864256 - 2582306 -864256 - 2590000 -856562 - 2590000 -847385 - 2708089 -729296 - 2779404 -729296 - 2802700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1102700 -706000 - 1102700 -852000 - ) - ) - (via "Via[0-1]_889:635_um" 1102700 -1228440 - ) - (wire - (path B.Cu 2540 - 1102700 -1290000 - 1102700 -1314200 - 1051900 -1365000 - ) - ) - ) - (net col4 - (wire - (path F.Cu 2540 - 1151900 -1365000 - 1141101 -1375799 - 798427 -1375799 - 776829 -1354201 - 562699 -1354201 - 551900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 2577100 -1287800 - 2577100 -1313200 - ) - ) - (wire - (path B.Cu 2540 - 2602700 -1144000 - 2590000 -1156700 - 2590000 -1274900 - 2577100 -1287800 - ) - ) - (wire - (path F.Cu 2540 - 2584450 -1106750 - 2602700 -1125000 - 2602700 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 2402700 -925000 - 2584450 -1106750 - ) - ) - (wire - (path F.Cu 2540 - 2584450 -1106750 - 2790000 -901200 - 2790000 -791700 - 2802700 -779000 - ) - ) - (wire - (path F.Cu 2540 - 1202700 -852000 - 1246336 -895636 - 2373336 -895636 - 2402700 -925000 - ) - ) - (wire - (path B.Cu 2540 - 452200 -991300 - 452200 -856500 - 602700 -706000 - ) - ) - (wire - (path F.Cu 2540 - 1202700 -1290000 - 1202700 -1228440 - ) - ) - (wire - (path B.Cu 2540 - 1202700 -1144000 - 1202700 -1228440 - ) - ) - (wire - (path B.Cu 2540 - 1202700 -1290000 - 1202700 -1314200 - 1151900 -1365000 - ) - ) - (wire - (path F.Cu 2540 - 1202700 -706000 - 1190492 -718208 - 1038889 -718208 - 1009070 -688389 - 620311 -688389 - 602700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 2351900 -1365000 - 2374911 -1341989 - 2548311 -1341989 - 2577100 -1313200 - ) - ) - (wire - (path B.Cu 2540 - 1202700 -998000 - 1202700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1202700 -852000 - 1202700 -998000 - ) - ) - (wire - (path B.Cu 2540 - 1202700 -706000 - 1202700 -852000 - ) - ) - (via "Via[0-1]_889:635_um" 1202700 -1228440 - ) - ) - (net col5 - (wire - (path F.Cu 2540 - 1302700 -998000 - 1352674 -948026 - 2352726 -948026 - 2402700 -998000 - ) - ) - (wire - (path F.Cu 2540 - 2584412 -1179711 - 2402700 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1285409 -723291 - 1302700 -706000 - ) - ) - (wire - (path F.Cu 2540 - 702700 -706000 - 714958 -718258 - 914410 -718258 - 915172 -717496 - 964914 -717496 - 970709 -723291 - 1285409 -723291 - ) - ) - (wire - (path F.Cu 2540 - 1302700 -852000 - 1302700 -740582 - 1285409 -723291 - ) - ) - (wire - (path F.Cu 2540 - 2602700 -1217000 - 2602700 -1198000 - 2584412 -1179711 - ) - ) - (wire - (path F.Cu 2540 - 2802700 -852000 - 2802700 -961423 - 2584412 -1179711 - ) - ) - (wire - (path B.Cu 2540 - 702700 -706000 - 702700 -766200 - 477600 -991300 - ) - ) - (wire - (path B.Cu 2540 - 2602500 -1287800 - 2602500 -1313200 - ) - ) - (wire - (path B.Cu 2540 - 2602700 -1217000 - 2602500 -1217200 - 2602500 -1287800 - ) - ) - (wire - (path F.Cu 2540 - 1251900 -1365000 - 1230860 -1386040 - 672940 -1386040 - 651900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 1302700 -1290000 - 1302700 -1314200 - 1251900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 1302700 -1144000 - 1302700 -1224954 - 1299214 -1228440 - ) - ) - (wire - (path F.Cu 2540 - 1302700 -1290000 - 1299214 -1286514 - 1299214 -1228440 - ) - ) - (wire - (path B.Cu 2540 - 2451900 -1365000 - 2466850 -1350050 - 2565650 -1350050 - 2602500 -1313200 - ) - ) - (via "Via[0-1]_889:635_um" 1299214 -1228440 - ) - (wire - (path B.Cu 2540 - 1302700 -998000 - 1302700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1302700 -852000 - 1302700 -998000 - ) - ) - ) - (net col6 - (wire - (path F.Cu 2540 - 1402700 -998000 - 1420560 -1015860 - 1612551 -1015860 - 1653282 -975129 - 2125019 -975129 - 2148688 -998798 - 2235908 -998798 - 2287164 -1050054 - 2381754 -1050054 - 2402700 -1071000 - ) - ) - (wire - (path B.Cu 2540 - 503000 -991300 - 765293 -729007 - 779693 -729007 - 802700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 311683 -1290000 - 311683 -1109141 - 400177 -1020647 - 473653 -1020647 - 503000 -991300 - ) - ) - (wire - (path F.Cu 2540 - 1402700 -1228050 - 1402700 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1402700 -1144000 - 1402700 -1228050 - ) - ) - (wire - (path B.Cu 2540 - 751900 -1365000 - 725853 -1338953 - 360636 -1338953 - 311683 -1290000 - ) - ) - (via "Via[0-1]_889:635_um" 1402700 -1228050 - ) - (wire - (path B.Cu 2540 - 1402700 -998000 - 1402700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1402700 -1290000 - 1402700 -1314200 - 1351900 -1365000 - ) - ) - (wire - (path F.Cu 2540 - 2627900 -1287800 - 2411100 -1071000 - 2402700 -1071000 - ) - ) - (wire - (path F.Cu 2540 - 1351900 -1365000 - 1341101 -1354201 - 1194682 -1354201 - 1167935 -1380948 - 767848 -1380948 - 751900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 311683 -1290000 - 302700 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1402700 -998000 - 1402700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 1402700 -706000 - 1402700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 2627900 -1313200 - 2576100 -1365000 - 2551900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 2627900 -1287800 - 2627900 -1313200 - ) - ) - ) - (net col7 - (wire - (path B.Cu 2540 - 802700 -1144000 - 790503 -1156197 - 771780 -1156197 - 646395 -1030812 - 567912 -1030812 - 528400 -991300 - ) - ) - (wire - (path B.Cu 2540 - 528400 -991300 - 484585 -1035115 - 418307 -1035115 - 387266 -1066156 - 387266 -1274566 - 402700 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1502700 -1290000 - 1502700 -1314200 - 1451900 -1365000 - ) - ) - (wire - (path F.Cu 2540 - 1580419 -1215844 - 2330856 -1215844 - 2402700 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1502700 -1290000 - 1576856 -1215844 - 1580419 -1215844 - ) - ) - (wire - (path F.Cu 2540 - 2641571 -1299529 - 2641571 -1301471 - 2653300 -1313200 - ) - ) - (wire - (path F.Cu 2540 - 2653300 -1287800 - 2641571 -1299529 - ) - ) - (wire - (path F.Cu 2540 - 2641571 -1299529 - 2623462 -1299529 - 2615200 -1291267 - 2615200 -1284253 - 2474947 -1144000 - 2402700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1502700 -1144000 - 1508575 -1144000 - 1580419 -1215844 - ) - ) - (wire - (path B.Cu 2540 - 1502700 -998000 - 1502700 -1144000 - ) - ) - (via "Via[0-1]_889:635_um" 1580419 -1215844 - ) - (wire - (path B.Cu 2540 - 1502700 -852000 - 1502700 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1502700 -1144000 - 1490412 -1156288 - 814988 -1156288 - 802700 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 2653300 -1313200 - 2653300 -1363600 - 2651900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 1502700 -852000 - 1502700 -706000 - ) - ) - ) - (net col8 - (wire - (path B.Cu 2540 - 1602700 -852000 - 1602700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1602700 -1010468 - 1572441 -1010468 - 1564896 -1002923 - 1564896 -889804 - 1602700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 553800 -991300 - 542967 -980467 - 523962 -980467 - 517499 -986930 - 517499 -992073 - 483842 -1025730 - 402357 -1025730 - 317164 -1110923 - 317164 -1253492 - 344426 -1280754 - ) - ) - (wire - (path B.Cu 2540 - 1622028 -1224390 - 1602700 -1205062 - 1602700 -1144000 - ) - ) - (via "Via[0-1]_889:635_um" 1622028 -1224390 - ) - (wire - (path F.Cu 2540 - 1630305 -1232667 - 1602700 -1260272 - 1602700 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 2402700 -1217000 - 2387033 -1232667 - 1630305 -1232667 - ) - ) - (wire - (path F.Cu 2540 - 1630305 -1232667 - 1622028 -1224390 - ) - ) - (wire - (path B.Cu 2540 - 1602700 -1010468 - 1602700 -998000 - ) - ) - (wire - (path B.Cu 2540 - 1602700 -1144000 - 1602700 -1010468 - ) - ) - (wire - (path B.Cu 2540 - 502700 -1290000 - 535228 -1322528 - 720775 -1322528 - 723687 -1319616 - 833665 -1319616 - 864229 -1350180 - 930720 -1350180 - 936932 -1356392 - 936932 -1365769 - 947424 -1376261 - 980985 -1376261 - 1047575 -1309671 - 1074969 -1309671 - 1090000 -1294640 - 1090000 -1285169 - 1103090 -1272079 - 1584779 -1272079 - 1602700 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 502700 -1290000 - 490476 -1302224 - 450282 -1302224 - 425862 -1277804 - 347376 -1277804 - 344426 -1280754 - ) - ) - (wire - (path B.Cu 2540 - 1602700 -1290000 - 1602700 -1314200 - 1551900 -1365000 - ) - ) - (via "Via[0-1]_889:635_um" 344426 -1280754 - ) - (wire - (path F.Cu 2540 - 2678700 -1313200 - 2667097 -1324803 - 2623000 -1324803 - 2613934 -1315737 - 2613934 -1308466 - 2604702 -1299234 - 2597766 -1299234 - 2589800 -1291268 - 2589800 -1284209 - 2570520 -1264929 - 2450628 -1264929 - 2450628 -1264928 - 2402700 -1217000 - ) - ) - (wire - (path F.Cu 2540 - 2678700 -1287800 - 2678700 -1313200 - ) - ) - (wire - (path B.Cu 2540 - 2678700 -1313200 - 2716105 -1350605 - 2737505 -1350605 - 2751900 -1365000 - ) - ) - ) - (net col9 - (wire - (path F.Cu 2540 - 567816 -1093605 - 567816 -1002684 - 579200 -991300 - ) - ) - (wire - (path B.Cu 2540 - 613856 -1290000 - 613856 -1223086 - 567816 -1177046 - 567816 -1093605 - ) - ) - (wire - (path F.Cu 2540 - 2602700 -706000 - 2585172 -688472 - 2125676 -688472 - 2109943 -704205 - 2066267 -704205 - 2055364 -693302 - 1715398 -693302 - 1702700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 613856 -1290000 - 602700 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1693295 -1261413 - 977441 -1261413 - 920876 -1317978 - 859234 -1317978 - 850612 -1309356 - 719571 -1309356 - 716565 -1312362 - 636218 -1312362 - 613856 -1290000 - ) - ) - (via "Via[0-1]_889:635_um" 567816 -1093605 - ) - (wire - (path B.Cu 2540 - 2704100 -1287800 - 2704100 -1081367 - 2559498 -936765 - 2559498 -749202 - 2602700 -706000 - ) - ) - (wire - (path B.Cu 2540 - 2704100 -1313200 - 2704100 -1287800 - ) - ) - (wire - (path B.Cu 2540 - 1702700 -1290000 - 1693295 -1280595 - 1693295 -1261413 - ) - ) - (wire - (path B.Cu 2540 - 1708751 -1175151 - 1693295 -1190607 - 1693295 -1261413 - ) - ) - (via "Via[0-1]_889:635_um" 1708751 -1175151 - ) - (wire - (path F.Cu 2540 - 1702700 -1144000 - 1708751 -1150051 - 1708751 -1175151 - ) - ) - (wire - (path B.Cu 2540 - 1702700 -1290000 - 1702700 -1314200 - 1651900 -1365000 - ) - ) - (wire - (path B.Cu 2540 - 1702700 -852000 - 1702700 -998000 - ) - ) - (wire - (path B.Cu 2540 - 1702700 -706000 - 1702700 -852000 - ) - ) - (wire - (path B.Cu 2540 - 1702700 -1144000 - 1702700 -998000 - ) - ) - ) - (net led1 - (wire - (path B.Cu 2540 - 1977300 -706000 - 1989496 -693804 - 2008244 -693804 - 2146246 -831806 - 2146246 -866766 - 2225680 -946200 - 2231880 -946200 - 2244891 -959211 - 2244891 -1095009 - 2228600 -1111300 - ) - ) - (wire - (path B.Cu 2540 - 1777300 -706000 - 1789699 -693601 - 1864901 -693601 - 1877300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1777300 -706000 - 1765105 -693805 - 1689495 -693805 - 1677300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1677300 -706000 - 1665105 -693805 - 1589495 -693805 - 1577300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1577300 -706000 - 1565105 -693805 - 1489495 -693805 - 1477300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1477300 -706000 - 1465105 -693805 - 1389495 -693805 - 1377300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1377300 -706000 - 1365105 -693805 - 1289495 -693805 - 1277300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1277300 -706000 - 1265105 -693805 - 1189495 -693805 - 1177300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1177300 -706000 - 1165105 -693805 - 1089495 -693805 - 1077300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 1077300 -706000 - 1065105 -693805 - 989495 -693805 - 977300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 977300 -706000 - 965105 -693805 - 889495 -693805 - 877300 -706000 - ) - ) - (wire - (path F.Cu 2540 - 1977300 -706000 - 1964948 -718352 - 1889652 -718352 - 1877300 -706000 - ) - ) - ) - (net led2 - (wire - (path F.Cu 2540 - 1277300 -852000 - 1289496 -864196 - 1365104 -864196 - 1377300 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1177300 -852000 - 1189496 -839804 - 1265104 -839804 - 1277300 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1977300 -852000 - 1964713 -839413 - 1889887 -839413 - 1877300 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1877300 -852000 - 1865104 -839804 - 1789496 -839804 - 1777300 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1777300 -852000 - 1764657 -864643 - 1689943 -864643 - 1677300 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1677300 -852000 - 1665104 -839804 - 1589496 -839804 - 1577300 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1577300 -852000 - 1564657 -864643 - 1489943 -864643 - 1477300 -852000 - ) - ) - (wire - (path F.Cu 2540 - 1477300 -852000 - 1465104 -839804 - 1389496 -839804 - 1377300 -852000 - ) - ) - (wire - (path B.Cu 2540 - 1977300 -852000 - 2020025 -894725 - 2154577 -894725 - 2213999 -954147 - 2213999 -1071299 - 2228600 -1085900 - ) - ) - (wire - (path F.Cu 2540 - 1177300 -852000 - 1164995 -864305 - 1089605 -864305 - 1077300 -852000 - ) - ) - (wire - (path B.Cu 2540 - 1077300 -852000 - 1065104 -864196 - 989496 -864196 - 977300 -852000 - ) - ) - (wire - (path B.Cu 2540 - 877300 -852000 - 889496 -864196 - 965104 -864196 - 977300 -852000 - ) - ) - ) - (net led3 - (wire - (path F.Cu 2540 - 1577300 -998000 - 1564659 -985359 - 1489941 -985359 - 1477300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1477300 -998000 - 1460021 -980721 - 1394579 -980721 - 1377300 -998000 - ) - ) - (wire - (path B.Cu 2540 - 1577300 -998000 - 1589569 -985731 - 1665031 -985731 - 1677300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1177300 -998000 - 1189496 -1010196 - 1265104 -1010196 - 1277300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1177300 -998000 - 1165097 -1010203 - 1089503 -1010203 - 1077300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1377300 -998000 - 1365104 -1010196 - 1289496 -1010196 - 1277300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1777300 -998000 - 1789851 -985449 - 1864749 -985449 - 1877300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1677300 -998000 - 1689496 -1010196 - 1765104 -1010196 - 1777300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 977300 -998000 - 965010 -1010290 - 889590 -1010290 - 877300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 1977300 -998000 - 2001700 -1022400 - 2231272 -1022400 - 2239433 -1030561 - 2239433 -1049667 - 2228600 -1060500 - ) - ) - (wire - (path F.Cu 2540 - 1877300 -998000 - 1889730 -985570 - 1964870 -985570 - 1977300 -998000 - ) - ) - (wire - (path B.Cu 2540 - 1077300 -998000 - 1064765 -985465 - 989835 -985465 - 977300 -998000 - ) - ) - ) - (net led4 - (wire - (path F.Cu 2540 - 1977300 -1144000 - 1977300 -1143582 - 2047067 -1073815 - 2189886 -1073815 - 2189886 -1073814 - 2228600 -1035100 - ) - ) - (wire - (path F.Cu 2540 - 1377300 -1144000 - 1365104 -1131804 - 1289496 -1131804 - 1277300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1477300 -1144000 - 1465104 -1131804 - 1389496 -1131804 - 1377300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 977300 -1144000 - 965104 -1131804 - 889496 -1131804 - 877300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1077300 -1144000 - 1065104 -1131804 - 989496 -1131804 - 977300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1777300 -1144000 - 1765036 -1131736 - 1689564 -1131736 - 1677300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1177300 -1144000 - 1165104 -1131804 - 1089496 -1131804 - 1077300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1277300 -1144000 - 1265104 -1131804 - 1189496 -1131804 - 1177300 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1877300 -1144000 - 1889677 -1131623 - 1964923 -1131623 - 1977300 -1144000 - ) - ) - (wire - (path B.Cu 2540 - 1877300 -1144000 - 1864883 -1131583 - 1789717 -1131583 - 1777300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1677300 -1144000 - 1665078 -1156222 - 1589522 -1156222 - 1577300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 1577300 -1144000 - 1565104 -1131804 - 1489496 -1131804 - 1477300 -1144000 - ) - ) - ) - (net led5 - (wire - (path F.Cu 2540 - 2117167 -1175345 - 2219312 -1073200 - 2231781 -1073200 - 2245007 -1059974 - 2245007 -1026107 - 2228600 -1009700 - ) - ) - (via "Via[0-1]_889:635_um" 2117167 -1175345 - ) - (wire - (path B.Cu 2540 - 1977300 -1290000 - 2091955 -1175345 - 2117167 -1175345 - ) - ) - (wire - (path F.Cu 2540 - 1277300 -1290000 - 1265104 -1302196 - 1189496 -1302196 - 1177300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 1077300 -1290000 - 1089496 -1302196 - 1165104 -1302196 - 1177300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 1977300 -1290000 - 1964997 -1302303 - 1889603 -1302303 - 1877300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 977300 -1290000 - 965104 -1277804 - 889496 -1277804 - 877300 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1077300 -1290000 - 1064887 -1277587 - 989713 -1277587 - 977300 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1377300 -1290000 - 1364881 -1277581 - 1289719 -1277581 - 1277300 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1477300 -1290000 - 1489495 -1277805 - 1565105 -1277805 - 1577300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 1777300 -1290000 - 1765104 -1302196 - 1689496 -1302196 - 1677300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 1577300 -1290000 - 1589496 -1302196 - 1665104 -1302196 - 1677300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 1877300 -1290000 - 1865105 -1277805 - 1789495 -1277805 - 1777300 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 1477300 -1290000 - 1465105 -1277805 - 1389495 -1277805 - 1377300 -1290000 - ) - ) - ) - (net led6 - (wire - (path F.Cu 2540 - 2377300 -998000 - 2242300 -998000 - 2228600 -984300 - ) - ) - (wire - (path F.Cu 2540 - 2389551 -718251 - 2565049 -718251 - ) - ) - (wire - (path F.Cu 2540 - 2377300 -706000 - 2389551 -718251 - ) - ) - (wire - (path F.Cu 2540 - 2377300 -779000 - 2377300 -730502 - 2389551 -718251 - ) - ) - (wire - (path F.Cu 2540 - 2565049 -718251 - 2577300 -706000 - ) - ) - (wire - (path F.Cu 2540 - 2565049 -718251 - 2565049 -766749 - 2577300 -779000 - ) - ) - (wire - (path B.Cu 2540 - 2377300 -1144000 - 2377300 -1217000 - ) - ) - (wire - (path B.Cu 2540 - 2377300 -1071000 - 2377300 -1144000 - ) - ) - (wire - (path F.Cu 2540 - 2577300 -779000 - 2577300 -852000 - ) - ) - (wire - (path B.Cu 2540 - 2577300 -852000 - 2577300 -925000 - ) - ) - (wire - (path B.Cu 2540 - 2377300 -998000 - 2377300 -1071000 - ) - ) - (wire - (path B.Cu 2540 - 2377300 -925000 - 2377300 -998000 - ) - ) - (wire - (path B.Cu 2540 - 2377300 -852000 - 2377300 -925000 - ) - ) - (wire - (path B.Cu 2540 - 2377300 -779000 - 2377300 -852000 - ) - ) - ) - (net led7 - (wire - (path F.Cu 2540 - 2228600 -958900 - 2355540 -958900 - 2390000 -993360 - 2390000 -1029700 - 2577300 -1217000 - ) - ) - (wire - (path B.Cu 2540 - 2577300 -1144000 - 2577300 -1217000 - ) - ) - (wire - (path F.Cu 2540 - 2777300 -852000 - 2723300 -852000 - 2577300 -998000 - ) - ) - (wire - (path F.Cu 2540 - 2777300 -779000 - 2777300 -852000 - ) - ) - (wire - (path B.Cu 2540 - 2777300 -706000 - 2777300 -779000 - ) - ) - (wire - (path F.Cu 2540 - 2577300 -1071000 - 2577300 -998000 - ) - ) - (wire - (path B.Cu 2540 - 2228600 -958900 - 2239609 -969909 - 2239609 -1090211 - 2231220 -1098600 - 2225885 -1098600 - 2217524 -1106961 - 2217524 -1131008 - 2238917 -1152401 - 2238917 -1181052 - ) - ) - (wire - (path B.Cu 2540 - 2238917 -1181052 - 2199421 -1181052 - 2144442 -1126073 - 1771310 -1126073 - 1730490 -1166893 - 1705331 -1166893 - 1700493 -1171731 - 1700493 -1171979 - 1616142 -1256330 - 975183 -1256330 - 918681 -1312832 - 861276 -1312832 - 852546 -1304102 - 717637 -1304102 - 714460 -1307279 - 694579 -1307279 - 677300 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 477300 -1290000 - 464551 -1302749 - 390049 -1302749 - 377300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 577300 -1290000 - 565003 -1277703 - 489597 -1277703 - 477300 -1290000 - ) - ) - (wire - (path F.Cu 2540 - 677300 -1290000 - 665104 -1277804 - 589496 -1277804 - 577300 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 2399300 -1313200 - 2387380 -1325120 - 2368960 -1325120 - 2361200 -1317360 - 2361200 -1283347 - 2258905 -1181052 - 2238917 -1181052 - ) - ) - (wire - (path F.Cu 2540 - 377300 -1290000 - 365104 -1302196 - 289496 -1302196 - 277300 -1290000 - ) - ) - (wire - (path B.Cu 2540 - 2399300 -1287800 - 2399300 -1313200 - ) - ) - (wire - (path B.Cu 2540 - 2577300 -1144000 - 2577300 -1071000 - ) - ) - ) - (net led8 - (wire - (path B.Cu 2540 - 2217649 -897061 - 2217649 -922549 - 2228600 -933500 - ) - ) - (wire - (path B.Cu 2540 - 815189 -694080 - 831332 -677937 - 1999705 -677937 - 2217649 -895881 - 2217649 -897061 - ) - ) - (wire - (path B.Cu 2540 - 2424700 -1287800 - 2365104 -1228204 - 2365104 -1028730 - 2233435 -897061 - 2217649 -897061 - ) - ) - (wire - (path B.Cu 2540 - 2424700 -1313200 - 2424700 -1287800 - ) - ) - (wire - (path B.Cu 2540 - 815189 -694080 - 814894 -693785 - 789515 -693785 - 777300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 777300 -1144000 - 656489 -1023189 - 620804 -1023189 - 593711 -996096 - 593711 -944853 - 815189 -723375 - 815189 -694080 - ) - ) - (wire - (path B.Cu 2540 - 477300 -706000 - 464624 -693324 - 389976 -693324 - 377300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 577300 -706000 - 564624 -693324 - 489976 -693324 - 477300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 377300 -706000 - 364624 -693324 - 289976 -693324 - 277300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 777300 -706000 - 765104 -693804 - 689496 -693804 - 677300 -706000 - ) - ) - (wire - (path B.Cu 2540 - 577300 -706000 - 589496 -693804 - 665104 -693804 - 677300 -706000 - ) - ) - ) - (net row1 - (wire - (path B.Cu 3810 - 890000 -1595000 - 890000 -1577852 - ) - ) - (wire - (path B.Cu 3810 - 890000 -1577852 - 836994 -1524846 - 836994 -1340694 - 827100 -1330800 - ) - ) - (wire - (path F.Cu 3810 - 1590000 -1595000 - 1690000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1490000 -1595000 - 1590000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1890000 -1595000 - 1990000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1790000 -1595000 - 1890000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1690000 -1595000 - 1790000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1390000 -1595000 - 1490000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1290000 -1595000 - 1390000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1190000 -1595000 - 1290000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 990000 -1595000 - 890000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1090000 -1595000 - 990000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 1190000 -1595000 - 1090000 -1595000 - ) - ) - ) - (net row2 - (wire - (path B.Cu 3810 - 690000 -1595000 - 719848 -1595000 - ) - ) - (wire - (path B.Cu 3810 - 790000 -1603574 - 728422 -1603574 - 719848 -1595000 - ) - ) - (wire - (path B.Cu 3810 - 790000 -1603574 - 790000 -1612148 - ) - ) - (wire - (path B.Cu 3810 - 790000 -1595000 - 790000 -1603574 - ) - ) - (wire - (path B.Cu 3810 - 590000 -1595000 - 490000 -1595000 - ) - ) - (wire - (path B.Cu 3810 - 2450100 -1313200 - 2432420 -1330880 - 2250709 -1330880 - 2239137 -1319308 - 2139587 -1319308 - 2114032 -1344863 - 2025437 -1344863 - 1940000 -1430300 - 1940000 -1526807 - 1910458 -1556349 - 1490818 -1556349 - 1435019 -1612148 - 790000 -1612148 - ) - ) - (wire - (path B.Cu 3810 - 2450100 -1287800 - 2450100 -1313200 - ) - ) - (wire - (path B.Cu 3810 - 290000 -1595000 - 290000 -1577852 - ) - ) - (wire - (path B.Cu 3810 - 290000 -1577852 - 245925 -1533777 - 245925 -1409381 - 192122 -1355578 - 192122 -1337722 - 149400 -1295000 - ) - ) - (wire - (path F.Cu 3810 - 290000 -1595000 - 390000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 590000 -1595000 - 690000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 390000 -1595000 - 490000 -1595000 - ) - ) - ) - (net row3 - (wire - (path F.Cu 3810 - 2490000 -1595000 - 2590000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 2390000 -1595000 - 2490000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 2690000 -1595000 - 2790000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 2590000 -1595000 - 2690000 -1595000 - ) - ) - (wire - (path F.Cu 3810 - 2290000 -1595000 - 2390000 -1595000 - ) - ) - (wire - (path B.Cu 3810 - 2239196 -1528656 - 2190000 -1577852 - ) - ) - (wire - (path B.Cu 3810 - 2224100 -1330800 - 2239196 -1345896 - 2239196 -1528656 - ) - ) - (wire - (path B.Cu 3810 - 2290000 -1577852 - 2240804 -1528656 - 2239196 -1528656 - ) - ) - (wire - (path B.Cu 3810 - 2190000 -1595000 - 2190000 -1577852 - ) - ) - (wire - (path B.Cu 3810 - 2290000 -1595000 - 2290000 -1577852 - ) - ) - (wire - (path F.Cu 3810 - 2190000 -1595000 - 2090000 -1595000 - ) - ) - ) - (net xled1 - (wire - (path F.Cu 2540 - 467355 -1171664 - 498489 -1140530 - 673533 -1140530 - 707115 -1174112 - 707115 -1176695 - 731045 -1200625 - 750777 -1200625 - 756860 -1194542 - 1632898 -1194542 - 1637895 -1199539 - 2053363 -1199539 - 2141602 -1111300 - ) - ) - (wire - (path B.Cu 2540 - 467355 -1171664 - 436800 -1202219 - 436800 -1240000 - 424100 -1252700 - ) - ) - (wire - (path F.Cu 2540 - 2152400 -1111300 - 2141602 -1111300 - ) - ) - (via "Via[0-1]_889:635_um" 467355 -1171664 - ) - ) - (net xled2 - (wire - (path F.Cu 2540 - 467255 -1139784 - 471592 -1135447 - 675638 -1135447 - 712198 -1172007 - 712198 -1174590 - 733150 -1195542 - 748672 -1195542 - 754755 -1189459 - 1643127 -1189459 - 1648008 -1194340 - 2043960 -1194340 - 2152400 -1085900 - ) - ) - (wire - (path B.Cu 2540 - 398700 -1252700 - 411400 -1240000 - 411400 -1195639 - 467255 -1139784 - ) - ) - (via "Via[0-1]_889:635_um" 467255 -1139784 - ) - ) - (net xled3 - (wire - (path F.Cu 2540 - 2152400 -1060500 - 2024552 -1060500 - 1896176 -1188876 - 1662790 -1188876 - 1658133 -1184219 - 746581 -1184219 - 743516 -1187284 - ) - ) - (wire - (path B.Cu 2540 - 703500 -1227300 - 743516 -1187284 - ) - ) - (via "Via[0-1]_889:635_um" 743516 -1187284 - ) - ) - (net xled4 - (wire - (path F.Cu 2540 - 2152400 -1035100 - 2028846 -1035100 - 1880154 -1183792 - 1672685 -1183792 - 1667756 -1178863 - 735094 -1178863 - ) - ) - (wire - (path B.Cu 2540 - 703500 -1252700 - 691890 -1241090 - 691890 -1222067 - 735094 -1178863 - ) - ) - (via "Via[0-1]_889:635_um" 735094 -1178863 - ) - ) - (net xled5 - (wire - (path F.Cu 2540 - 720456 -1171170 - 721251 -1170375 - 735204 -1170375 - 743019 -1162560 - 743019 -1161036 - 777335 -1126720 - 1522996 -1126720 - 1669503 -980213 - 2122913 -980213 - 2152400 -1009700 - ) - ) - (wire - (path B.Cu 2540 - 678100 -1252700 - 666329 -1240929 - 666329 -1222716 - 717875 -1171170 - 720456 -1171170 - ) - ) - (via "Via[0-1]_889:635_um" 720456 -1171170 - ) - ) - (net xled6 - (wire - (path B.Cu 2540 - 627300 -1252700 - 651061 -1276461 - 681614 -1276461 - 689496 -1284343 - 689496 -1294386 - 697306 -1302196 - 709812 -1302196 - 713431 -1298577 - 854209 -1298577 - 863283 -1307651 - 916673 -1307651 - 976652 -1247672 - 1617612 -1247672 - 1695410 -1169874 - 1695410 -1169626 - 1703226 -1161810 - 1715043 -1161810 - 1765976 -1110877 - 2033834 -1110877 - 2152400 -992311 - 2152400 -984300 - ) - ) - ) - (net xled7 - (wire - (path F.Cu 2540 - 424100 -1227300 - 415710 -1218910 - 415710 -1062823 - 422341 -1056192 - 431391 -1056192 - 439500 -1064301 - 439500 -1070426 - 498972 -1129898 - 690864 -1129898 - 726258 -1165292 - 733099 -1165292 - 737936 -1160455 - 737936 -1158768 - 789357 -1107347 - 1285370 -1107347 - 1389496 -1003221 - 1389496 -993423 - 1397115 -985804 - 1409812 -985804 - 1434703 -1010695 - 1608205 -1010695 - 1660000 -958900 - 2152400 -958900 - ) - ) - ) - (net xled8 - (wire - (path B.Cu 2540 - 729678 -1157034 - 751941 -1179297 - 751941 -1204259 - 728900 -1227300 - ) - ) - (wire - (path F.Cu 2540 - 2152400 -933500 - 1102558 -933500 - 1008346 -1027712 - 859000 -1027712 - 729678 -1157034 - ) - ) - (via "Via[0-1]_889:635_um" 729678 -1157034 - ) - ) - ) - ) -) DELETED hardware/pdp8i/customlibraries/pdp8_library.dcm Index: hardware/pdp8i/customlibraries/pdp8_library.dcm ================================================================== --- hardware/pdp8i/customlibraries/pdp8_library.dcm +++ /dev/null @@ -1,7 +0,0 @@ -EESchema-DOCLIB Version 2.0 Date: 19/01/2015 21:56:03 -# -$CMP UDN2981A -D UDN2981A -$ENDCMP -# -#End Doc Library DELETED hardware/pdp8i/customlibraries/pdp8_library.lib Index: hardware/pdp8i/customlibraries/pdp8_library.lib ================================================================== --- hardware/pdp8i/customlibraries/pdp8_library.lib +++ /dev/null @@ -1,138 +0,0 @@ -EESchema-LIBRARY Version 2.3 Date: 19/01/2015 21:56:03 -#encoding utf-8 -# -# CONN_20X2 -# -DEF CONN_20X2 P 0 10 Y N 1 F N -F0 "P" 0 1050 60 H V C CNN -F1 "CONN_20X2" 0 0 50 V V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -100 1000 100 -1000 0 1 0 N -X P1 1 -400 950 300 R 60 30 1 1 P I -X P2 2 400 950 300 L 60 30 1 1 P I -X P3 3 -400 850 300 R 60 30 1 1 P I -X P4 4 400 850 300 L 60 30 1 1 P I -X P5 5 -400 750 300 R 60 30 1 1 P I -X P6 6 400 750 300 L 60 30 1 1 P I -X P7 7 -400 650 300 R 60 30 1 1 P I -X P8 8 400 650 300 L 60 30 1 1 P I -X P9 9 -400 550 300 R 60 30 1 1 P I -X P10 10 400 550 300 L 60 30 1 1 P I -X P20 20 400 50 300 L 60 30 1 1 P I -X P30 30 400 -450 300 L 60 30 1 1 P I -X P40 40 400 -950 300 L 60 30 1 1 P I -X P11 11 -400 450 300 R 60 30 1 1 P I -X P21 21 -400 -50 300 R 60 30 1 1 P I -X P31 31 -400 -550 300 R 60 30 1 1 P I -X P12 12 400 450 300 L 60 30 1 1 P I -X P22 22 400 -50 300 L 60 30 1 1 P I -X P32 32 400 -550 300 L 60 30 1 1 P I -X P13 13 -400 350 300 R 60 30 1 1 P I -X P23 23 -400 -150 300 R 60 30 1 1 P I -X P33 33 -400 -650 300 R 60 30 1 1 P I -X P14 14 400 350 300 L 60 30 1 1 P I -X P24 24 400 -150 300 L 60 30 1 1 P I -X P34 34 400 -650 300 L 60 30 1 1 P I -X P15 15 -400 250 300 R 60 30 1 1 P I -X ~ 25 -400 -250 300 R 60 30 1 1 P I -X P35 35 -400 -750 300 R 60 30 1 1 P I -X P16 16 400 250 300 L 60 30 1 1 P I -X P26 26 400 -250 300 L 60 30 1 1 P I -X P36 36 400 -750 300 L 60 30 1 1 P I -X P17 17 -400 150 300 R 60 30 1 1 P I -X P27 27 -400 -350 300 R 60 30 1 1 P I -X P37 37 -400 -850 300 R 60 30 1 1 P I -X P18 18 400 150 300 L 60 30 1 1 P I -X P28 28 400 -350 300 L 60 30 1 1 P I -X P38 38 400 -850 300 L 60 30 1 1 P I -X P19 19 -400 50 300 R 60 30 1 1 P I -X P29 29 -400 -450 300 R 60 30 1 1 P I -X P39 39 -400 -950 300 R 60 30 1 1 P I -ENDDRAW -ENDDEF -# -# RASPI_MODEL_B_PLUS_GPIO -# -DEF RASPI_MODEL_B_PLUS_GPIO P 0 10 Y Y 1 F N -F0 "P" 0 1050 60 H V C CNN -F1 "RASPI_MODEL_B_PLUS_GPIO" 0 0 20 V V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -100 1000 100 -1000 0 1 0 N -X 3.3v 1 -400 950 300 R 60 30 1 1 w I -X 5v 2 400 950 300 L 60 30 1 1 w I -X g2 3 -400 850 300 R 60 30 1 1 P I -X 5v 4 400 850 300 L 60 30 1 1 P I -X g3 5 -400 750 300 R 60 30 1 1 P I -X GND 6 400 750 300 L 60 30 1 1 w I -X g4 7 -400 650 300 R 60 30 1 1 P I -X g14 8 400 650 300 L 60 30 1 1 P I -X GND 9 -400 550 300 R 60 30 1 1 P I -X g15 10 400 550 300 L 60 30 1 1 P I -X GND 20 400 50 300 L 60 30 1 1 P I -X GND 30 400 -450 300 L 60 30 1 1 P I -X g21 40 400 -950 300 L 60 30 1 1 P I -X g17 11 -400 450 300 R 60 30 1 1 P I -X g9 21 -400 -50 300 R 60 30 1 1 P I -X g6 31 -400 -550 300 R 60 30 1 1 P I -X g18 12 400 450 300 L 60 30 1 1 P I -X g25 22 400 -50 300 L 60 30 1 1 P I -X g12 32 400 -550 300 L 60 30 1 1 P I -X g27 13 -400 350 300 R 60 30 1 1 P I -X g11 23 -400 -150 300 R 60 30 1 1 P I -X g13 33 -400 -650 300 R 60 30 1 1 P I -X GND 14 400 350 300 L 60 30 1 1 P I -X g8 24 400 -150 300 L 60 30 1 1 P I -X GND 34 400 -650 300 L 60 30 1 1 P I -X g22 15 -400 250 300 R 60 30 1 1 P I -X GND 25 -400 -250 300 R 60 30 1 1 P I -X g19 35 -400 -750 300 R 60 30 1 1 P I -X g23 16 400 250 300 L 60 30 1 1 P I -X g7 26 400 -250 300 L 60 30 1 1 P I -X g16 36 400 -750 300 L 60 30 1 1 P I -X 3.3v 17 -400 150 300 R 60 30 1 1 P I -X n/c 27 -400 -350 300 R 60 30 1 1 P I -X g26 37 -400 -850 300 R 60 30 1 1 P I -X g24 18 400 150 300 L 60 30 1 1 P I -X n/c 28 400 -350 300 L 60 30 1 1 P I -X g20 38 400 -850 300 L 60 30 1 1 P I -X g10 19 -400 50 300 R 60 30 1 1 P I -X g5 29 -400 -450 300 R 60 30 1 1 P I -X GND 39 -400 -950 300 R 60 30 1 1 P I -ENDDRAW -ENDDEF -# -# UDN2981A -# -DEF UDN2981A P 0 40 Y Y 1 F N -F0 "P" 0 550 30 H V C CNN -F1 "UDN2981A" 0 -550 30 H V C CNN -F2 "~" 0 0 60 H V C CNN -F3 "~" 0 0 60 H V C CNN -DRAW -S -150 500 150 -500 0 1 0 N -X IN1 1 -350 400 200 R 40 20 1 1 I I -X IN2 2 -350 300 200 R 40 20 1 1 I I -X IN3 3 -350 200 200 R 40 20 1 1 I I -X IN4 4 -350 100 200 R 40 20 1 1 I I -X IN5 5 -350 0 200 R 40 20 1 1 I I -X IN6 6 -350 -100 200 R 40 20 1 1 I I -X IN7 7 -350 -200 200 R 40 20 1 1 I I -X IN8 8 -350 -300 200 R 40 20 1 1 I I -X Vs 9 -350 -400 200 R 40 20 1 1 P I -X GND 10 350 -400 200 L 40 20 1 1 P I -X OUT8 11 350 -300 200 L 40 20 1 1 O I -X OUT7 12 350 -200 200 L 40 20 1 1 O I -X OUT6 13 350 -100 200 L 40 20 1 1 O I -X OUT5 14 350 0 200 L 40 20 1 1 O I -X OUT4 15 350 100 200 L 40 20 1 1 O I -X OUT3 16 350 200 200 L 40 20 1 1 O I -X OUT2 17 350 300 200 L 40 20 1 1 O I -X OUT1 18 350 400 200 L 40 20 1 1 O I -ENDDRAW -ENDDEF -# -#End Library DELETED hardware/pdp8i/customlibraries/pdp8footprintlib2.mod Index: hardware/pdp8i/customlibraries/pdp8footprintlib2.mod ================================================================== --- hardware/pdp8i/customlibraries/pdp8footprintlib2.mod +++ /dev/null @@ -1,1070 +0,0 @@ -PCBNEW-LibModule-V1 09/05/2015 20:49:52 -# encoding utf-8 -Units mm -$INDEX -D2 -LED-3-PDP -LED-3-StrEight -RASPI_BPLUS -RASPI_BPLUS_MIRRORED -SIL-3PDP -SIL-5PDP -SW_KND2 -SW_KND2_PDP -SW_KND2_PDP2 -$EndINDEX -$MODULE D2 -Po 0 0 0 15 54B29F05 00000000 ~~ -Li D2 -Cd Diode 3 pas -Kw DIODE DEV -Sc 0 -AR -Op 0 0 0 -T0 0 -0.508 0.25 0.25 0 0.05 N V 21 N "D2" -T1 -0.508 0.508 0.381 0.381 0 0.0762 N I 21 N "D***" -DS -2.032 1.016 2.032 1.016 0.3048 21 -DS -2.032 -1.016 2.032 -1.016 0.3048 21 -DS 2.794 0 2.032 0 0.3048 21 -DS 2.032 0 2.032 -1.016 0.3048 21 -DS -2.032 -1.016 -2.032 0 0.3048 21 -DS -2.032 0 -2.794 0 0.3048 21 -DS -2.032 0 -2.032 1.016 0.3048 21 -DS 2.032 1.016 2.032 0 0.3048 21 -DS 1.524 -1.016 1.524 1.016 0.3048 21 -DS 1.27 1.016 1.27 -1.016 0.3048 21 -$PAD -Sh "2" R 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 3.556 0 -$EndPAD -$PAD -Sh "1" C 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -3.81 0 -$EndPAD -$SHAPE3D -Na "discret/diode.wrl" -Sc 0.3 0.3 0.3 -Of 0 0 0 -Ro 0 0 0 -$EndSHAPE3D -$EndMODULE D2 -$MODULE LED-3-PDP -Po 0 0 0 15 54BD7621 00000000 ~~ -Li LED-3-PDP -Cd LED 3mm - Lead pitch 100mil (2,54mm) -Kw LED led 3mm 3MM 100mil 2,54mm -Sc 0 -AR /548EF4B8 -Op 0 0 0 -T0 0 -5.5372 0.7 0.7 0 0.025 N V 21 N "DMA12" -T1 0 2.54 0.762 0.762 0 0.0889 N I 21 N "LED" -DS -2.4 1.5 -2.4 -1.5 0.15 21 -DS 1.5 2.4 -1.5 2.4 0.15 21 -DS 2.4 -1.5 2.4 1.5 0.15 21 -DS -1.5 -2.4 1.5 -2.4 0.15 21 -DA -1.5 1.5 -1.5 2.4 900 0.15 21 -DA 1.5 1.5 2.4 1.5 900 0.15 21 -DA -1.5 -1.5 -2.4 -1.5 900 0.15 21 -DA 1.5 -1.5 1.5 -2.4 900 0.15 21 -$PAD -Sh "1" C 1.6764 1.6764 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 2 "led2" -Po -1.27 0 -$EndPAD -$PAD -Sh "2" C 1.6764 1.6764 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 1 "N-000004" -Po 1.27 0 -$EndPAD -$SHAPE3D -Na "discret/leds/led3_vertical_verde.wrl" -Sc 1 1 1 -Of 0 0 0 -Ro 0 0 0 -$EndSHAPE3D -$EndMODULE LED-3-PDP -$MODULE LED-3-StrEight -Po 0 0 0 15 554E561D 00000000 ~~ -Li LED-3-StrEight -Cd LED -Kw LED -Sc 0 -AR /548EF4B8 -Op 0 0 0 -T0 0 -5.5372 0.7 0.7 0 0.025 N I 21 N "Str8" -T1 0 2.54 0.762 0.762 0 0.0889 N I 21 N "LED" -$PAD -Sh "1" C 1.6764 1.6764 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 2 "led2" -Po -1.27 0 -$EndPAD -$PAD -Sh "2" C 1.6764 1.6764 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 1 "N-000004" -Po 1.27 0 -$EndPAD -$SHAPE3D -Na "discret/leds/led3_vertical_verde.wrl" -Sc 1 1 1 -Of 0 0 0 -Ro 0 0 0 -$EndSHAPE3D -$EndMODULE LED-3-StrEight -$MODULE RASPI_BPLUS -Po 0 0 0 15 54B191EE 00000000 ~~ -Li RASPI_BPLUS -Cd Double rangee de contacts 2 x 12 pins -Kw CONN -Sc 0 -AR -Op 0 0 0 -T0 0 -3.81 1.016 1.016 0 0.27432 N V 21 N "REF*" -T1 0 3.81 1.016 1.016 0 0.2032 N V 21 N "PIN_ARRAY_20X2" -T2 8 26.5 1 1 0 0.15 N V 21 N "GPIO and mount holes exact, port placement approx." -T2 6 20.5 1 1 0 0.15 N V 21 N "COMPONENT SIDE (TOP)" -T2 -19 48 1 1 0 0.15 N V 21 N "microUSB" -DS -22 52.5 -22 49 0.15 21 -DS -22 49 -16 52.5 0.15 21 -DS -16 52.5 -16 49 0.15 21 -DS -16 49 -22 52.5 0.15 21 -T2 0 49 1 1 0 0.15 N V 21 N "HDMI" -DS -7 52.5 -7 48.5 0.15 21 -DS -7 48.5 6 52.5 0.15 21 -DS 6 52.5 6 48.5 0.15 21 -DS 6 48.5 -7 52.5 0.15 21 -T2 50.5 24 1 1 900 0.15 N V 21 N "USB" -T2 50.5 7 1 1 900 0.15 N V 21 N "USB" -DS 50.5 18.5 55 18.5 0.15 21 -DS 55 18.5 55 29.5 0.15 21 -DS 55 29.5 51 29.5 0.15 21 -DS 50.5 1.5 55 1.5 0.15 21 -DS 55 1.5 55 13 0.15 21 -DS 55 13 50.5 13 0.15 21 -DS -32.5 -3.5 52.5 -3.5 0.15 21 -DS 52.5 -3.5 52.5 52.5 0.15 21 -DS 52.5 52.5 32 52.5 0.15 21 -DS -32.5 -3.5 -32.5 52.5 0.15 21 -DS -32.5 52.5 32.5 52.5 0.15 21 -DS 25.4 2.54 -25.4 2.54 0.3048 21 -DS 25.4 -2.54 -25.4 -2.54 0.3048 21 -DS 25.4 -2.54 25.4 2.54 0.3048 21 -DS -25.4 -2.54 -25.4 2.54 0.3048 21 -$PAD -Sh "1" R 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -24.13 1.27 -$EndPAD -$PAD -Sh "2" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 1 "GND" -Po -24.13 -1.27 -$EndPAD -$PAD -Sh "11" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 18 "PA8_1" -Po -11.43 1.27 -$EndPAD -$PAD -Sh "4" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 11 "PA1_1" -Po -21.59 -1.27 -$EndPAD -$PAD -Sh "13" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 5 "PA10_1" -Po -8.89 1.27 -$EndPAD -$PAD -Sh "6" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 13 "PA3_1" -Po -19.05 -1.27 -$EndPAD -$PAD -Sh "15" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 7 "PA12_1" -Po -6.35 1.27 -$EndPAD -$PAD -Sh "8" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 15 "PA5_1" -Po -16.51 -1.27 -$EndPAD -$PAD -Sh "17" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 9 "PA14_1" -Po -3.81 1.27 -$EndPAD -$PAD -Sh "10" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 17 "PA7_1" -Po -13.97 -1.27 -$EndPAD -$PAD -Sh "19" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -1.27 1.27 -$EndPAD -$PAD -Sh "12" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 19 "PA9_1" -Po -11.43 -1.27 -$EndPAD -$PAD -Sh "21" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 1.27 1.27 -$EndPAD -$PAD -Sh "14" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 6 "PA11_1" -Po -8.89 -1.27 -$EndPAD -$PAD -Sh "23" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "INT1_1" -Po 3.81 1.27 -$EndPAD -$PAD -Sh "16" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 8 "PA13_1" -Po -6.35 -1.27 -$EndPAD -$PAD -Sh "25" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 6.35 1.27 -$EndPAD -$PAD -Sh "18" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 10 "PA15_1" -Po -3.81 -1.27 -$EndPAD -$PAD -Sh "27" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 8.89 1.27 -$EndPAD -$PAD -Sh "20" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -1.27 -1.27 -$EndPAD -$PAD -Sh "29" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 22 "VCC" -Po 11.43 1.27 -$EndPAD -$PAD -Sh "22" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 1.27 -1.27 -$EndPAD -$PAD -Sh "31" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 22 "VCC" -Po 13.97 1.27 -$EndPAD -$PAD -Sh "24" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 3 "INT2_1" -Po 3.81 -1.27 -$EndPAD -$PAD -Sh "26" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 6.35 -1.27 -$EndPAD -$PAD -Sh "33" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 21 "Tin1_cold_1" -Po 16.51 1.27 -$EndPAD -$PAD -Sh "28" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 10 "PA15_1" -Po 8.89 -1.27 -$EndPAD -$PAD -Sh "32" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 1 "GND" -Po 13.97 -1.27 -$EndPAD -$PAD -Sh "34" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 16.51 -1.27 -$EndPAD -$PAD -Sh "36" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 19.05 -1.27 -$EndPAD -$PAD -Sh "38" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 21.59 -1.27 -$EndPAD -$PAD -Sh "35" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 19.05 1.27 -$EndPAD -$PAD -Sh "37" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 20 "PB4_1" -Po 21.59 1.27 -$EndPAD -$PAD -Sh "3" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 4 "PA0_1" -Po -21.59 1.27 -$EndPAD -$PAD -Sh "5" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 12 "PA2_1" -Po -19.05 1.27 -$EndPAD -$PAD -Sh "7" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 14 "PA4_1" -Po -16.51 1.27 -$EndPAD -$PAD -Sh "9" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 16 "PA6_1" -Po -13.97 1.27 -$EndPAD -$PAD -Sh "39" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 24.13 1.27 -$EndPAD -$PAD -Sh "40" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 24.13 -1.27 -$EndPAD -$PAD -Sh "30" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 1 "GND" -Po 11.43 -1.27 -$EndPAD -$PAD -Sh "2" C 6.2 6.2 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -29 0 -$EndPAD -$PAD -Sh "3" C 6.2 6.2 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 29 0 -$EndPAD -$PAD -Sh "4" C 6.2 6.2 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -29 49 -$EndPAD -$PAD -Sh "5" C 6.2 6.2 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 29 49 -$EndPAD -$SHAPE3D -Na "pin_array/pins_array_20x2.wrl" -Sc 1 1 1 -Of 0 0 0 -Ro 0 0 0 -$EndSHAPE3D -$EndMODULE RASPI_BPLUS -$MODULE RASPI_BPLUS_MIRRORED -Po 0 0 0 15 54B2FF09 00000000 ~~ -Li RASPI_BPLUS_MIRRORED -Cd Double rangee de contacts 2 x 12 pins -Kw CONN -Sc 0 -AR /548F13F7 -Op 0 0 0 -T0 0 -3.81 1.016 1.016 0 0.27432 N V 21 N "P1" -T1 0 3.81 1.016 1.016 0 0.2032 N V 21 N "RASPI_MODEL_B_PLUS_GPIO" -T2 49.53 -43.18 1 1 900 0.15 N V 21 N "ETH" -DS 48.768 -49.022 53.594 -49.022 0.15 21 -DS 53.594 -49.022 53.594 -38.354 0.15 21 -DS 53.594 -38.354 49.784 -38.354 0.15 21 -T2 7.5 -18 1 1 0 0.15 N V 21 N "GPIO and mount holes exact, port placement approx." -T2 0 -24.5 1 1 0 0.15 N V 21 N "RASPI B PLUS (MIRROR IMAGE)" -T2 -19 -47 1 1 0 0.15 N V 21 N "microUSB" -DS -22 -49.008 -22 -52.508 0.15 21 -DS -16 -49.008 -16 -52.508 0.15 21 -T2 0 -47 1 1 0 0.15 N V 21 N "HDMI" -DS -7 -48.5 -7 -52.5 0.15 21 -DS 6 -48.5 6 -52.5 0.15 21 -T2 49.5 -3.5 1 1 900 0.15 N V 21 N "USB" -T2 49.5 -20.5 1 1 900 0.15 N V 21 N "USB" -DS 49.5 -11.032 54 -11.032 0.15 21 -DS 54 -11.032 54 -0.032 0.15 21 -DS 54 -0.032 50 -0.032 0.15 21 -DS 49.5 -28.032 54 -28.032 0.15 21 -DS 54 -28.032 54 -16.532 0.15 21 -DS 54 -16.532 49.5 -16.532 0.15 21 -DS -32.5 3.5 52.5 3.5 0.15 21 -DS 52.5 -52.5 52.5 3.5 0.15 21 -DS 52.5 -52.5 32 -52.5 0.15 21 -DS -32.5 -52.5 -32.5 3.5 0.15 21 -DS -32.5 -52.5 32.5 -52.5 0.15 21 -DS 25.4 2.54 -25.4 2.54 0.3048 21 -DS 25.4 -2.54 -25.4 -2.54 0.3048 21 -DS 25.4 -2.54 25.4 2.54 0.3048 21 -DS -25.4 -2.54 -25.4 2.54 0.3048 21 -$PAD -Sh "1" R 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 1 "+3.3V" -Po -24.13 -1.27 -$EndPAD -$PAD -Sh "2" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -24.13 1.27 -$EndPAD -$PAD -Sh "11" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 21 "xled4" -Po -11.43 -1.27 -$EndPAD -$PAD -Sh "4" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -21.59 1.27 -$EndPAD -$PAD -Sh "13" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 22 "xled5" -Po -8.89 -1.27 -$EndPAD -$PAD -Sh "6" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "GND" -Po -19.05 1.27 -$EndPAD -$PAD -Sh "15" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 23 "xled6" -Po -6.35 -1.27 -$EndPAD -$PAD -Sh "8" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 7 "N-0000031" -Po -16.51 1.27 -$EndPAD -$PAD -Sh "17" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -3.81 -1.27 -$EndPAD -$PAD -Sh "10" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 8 "N-0000032" -Po -13.97 1.27 -$EndPAD -$PAD -Sh "19" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 24 "xled7" -Po -1.27 -1.27 -$EndPAD -$PAD -Sh "12" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 9 "N-0000033" -Po -11.43 1.27 -$EndPAD -$PAD -Sh "21" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 25 "xled8" -Po 1.27 -1.27 -$EndPAD -$PAD -Sh "14" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "GND" -Po -8.89 1.27 -$EndPAD -$PAD -Sh "23" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 17 "N-0000092" -Po 3.81 -1.27 -$EndPAD -$PAD -Sh "16" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 10 "N-0000034" -Po -6.35 1.27 -$EndPAD -$PAD -Sh "25" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "GND" -Po 6.35 -1.27 -$EndPAD -$PAD -Sh "18" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 3 "N-0000027" -Po -3.81 1.27 -$EndPAD -$PAD -Sh "27" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 8.89 -1.27 -$EndPAD -$PAD -Sh "20" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "GND" -Po -1.27 1.27 -$EndPAD -$PAD -Sh "29" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 15 "N-0000090" -Po 11.43 -1.27 -$EndPAD -$PAD -Sh "22" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 11 "N-0000035" -Po 1.27 1.27 -$EndPAD -$PAD -Sh "31" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 16 "N-0000091" -Po 13.97 -1.27 -$EndPAD -$PAD -Sh "24" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 12 "N-0000036" -Po 3.81 1.27 -$EndPAD -$PAD -Sh "26" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 13 "N-0000037" -Po 6.35 1.27 -$EndPAD -$PAD -Sh "33" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 4 "N-0000028" -Po 16.51 -1.27 -$EndPAD -$PAD -Sh "28" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 8.89 1.27 -$EndPAD -$PAD -Sh "32" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 14 "N-0000038" -Po 13.97 1.27 -$EndPAD -$PAD -Sh "34" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 16.51 1.27 -$EndPAD -$PAD -Sh "36" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 19.05 1.27 -$EndPAD -$PAD -Sh "38" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 21.59 1.27 -$EndPAD -$PAD -Sh "35" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 5 "N-0000029" -Po 19.05 -1.27 -$EndPAD -$PAD -Sh "37" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 6 "N-0000030" -Po 21.59 -1.27 -$EndPAD -$PAD -Sh "3" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 18 "xled1" -Po -21.59 -1.27 -$EndPAD -$PAD -Sh "5" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 19 "xled2" -Po -19.05 -1.27 -$EndPAD -$PAD -Sh "7" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 20 "xled3" -Po -16.51 -1.27 -$EndPAD -$PAD -Sh "9" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "GND" -Po -13.97 -1.27 -$EndPAD -$PAD -Sh "39" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "GND" -Po 24.13 -1.27 -$EndPAD -$PAD -Sh "40" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 24.13 1.27 -$EndPAD -$PAD -Sh "30" C 1.524 1.524 0 0 0 -Dr 1.016 0 0 -At STD N 00E0FFFF -Ne 2 "GND" -Po 11.43 1.27 -$EndPAD -$PAD -Sh "H2" C 5.7 5.7 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -29 0 -$EndPAD -$PAD -Sh "H3" C 5.7 5.7 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 29 0 -$EndPAD -$PAD -Sh "H4" C 5.7 5.7 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 29 -49 -$EndPAD -$PAD -Sh "H1" C 5.7 5.7 0 0 0 -Dr 2.75 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -29 -49 -$EndPAD -$SHAPE3D -Na "pin_array/pins_array_20x2.wrl" -Sc 1 1 1 -Of 0 0 0 -Ro 0 0 0 -$EndSHAPE3D -$EndMODULE RASPI_BPLUS_MIRRORED -$MODULE SIL-3PDP -Po 0 0 0 15 54BD2D6F 00000000 ~~ -Li SIL-3PDP -Cd Connecteur 3 pins -Kw CONN DEV -Sc 0 -AR /54BD28E4 -Op 0 0 0 -T0 3.175 -2.54 0.5 0.5 0 0.125 N V 21 N "P3" -T1 -2.286 -2.54 0.5 0.5 0 0.125 N I 21 N "SERIAL3V" -T2 2.54 -1.778 0.5 0.5 0 0.1 N V 21 N "TX" -T2 0 -1.778 0.5 0.5 0 0.1 N V 21 N "RX" -T2 -2.54 -1.778 0.5 0.5 0 0.1 N V 21 N "GND" -DS -3.81 1.27 -3.81 -1.27 0.3048 21 -DS -3.81 -1.27 3.81 -1.27 0.3048 21 -DS 3.81 -1.27 3.81 1.27 0.3048 21 -DS 3.81 1.27 -3.81 1.27 0.3048 21 -DS -1.27 -1.27 -1.27 1.27 0.3048 21 -$PAD -Sh "1" R 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 1 "GND" -Po -2.54 0 -$EndPAD -$PAD -Sh "2" C 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 2 "RX" -Po 0 0 -$EndPAD -$PAD -Sh "3" C 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 3 "TX" -Po 2.54 0 -$EndPAD -$EndMODULE SIL-3PDP -$MODULE SIL-5PDP -Po 0 0 0 15 54BD2E53 00000000 ~~ -Li SIL-5PDP -Cd Connecteur 5 pins -Kw CONN DEV -Sc 0 -AR /54BD2904 -Op 0 0 0 -T0 4.699 -2.54 0.5 0.5 0 0.125 N V 21 N "P4" -T1 -5.715 -2.54 0.5 0.5 0 0.125 N I 21 N "EXPANSION" -T2 3.81 -1.778 0.5 0.5 0 0.1 N V 21 N "GPIO" -T2 1.27 -1.778 0.5 0.5 0 0.1 N V 21 N "GND" -T2 -1.27 -1.778 0.5 0.5 0 0.1 N V 21 N "5V" -T2 -3.81 -1.778 0.5 0.5 0 0.1 N V 21 N "N/C" -T2 -6.223 -1.778 0.5 0.5 0 0.1 N V 21 N "3.3V" -DS -7.62 1.27 -7.62 -1.27 0.3048 21 -DS -7.62 -1.27 5.08 -1.27 0.3048 21 -DS 5.08 -1.27 5.08 1.27 0.3048 21 -DS 5.08 1.27 -7.62 1.27 0.3048 21 -DS -5.08 1.27 -5.08 -1.27 0.3048 21 -$PAD -Sh "1" R 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 1 "+3.3V" -Po -6.35 0 -$EndPAD -$PAD -Sh "2" C 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po -3.81 0 -$EndPAD -$PAD -Sh "3" C 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 2 "+5V" -Po -1.27 0 -$EndPAD -$PAD -Sh "4" C 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 3 "GND" -Po 1.27 0 -$EndPAD -$PAD -Sh "5" C 1.397 1.397 0 0 0 -Dr 0.8128 0 0 -At STD N 00E0FFFF -Ne 4 "SPARE_IO" -Po 3.81 0 -$EndPAD -$EndMODULE SIL-5PDP -$MODULE SW_KND2 -Po 0 0 0 15 548F15A7 00000000 ~~ -Li SW_KND2 -Cd Switch inverseur -Kw SWITCH DEV -Sc 0 -AR -Op 0 0 0 -T0 3.5 7.9 1.016 1.016 900 0.2032 N V 21 N "SW_KND2_1x2" -T1 -0.05 -20.3 1.016 1.016 0 0.2032 N V 21 N "SW*" -DS -4.75 -18.9 -4.75 18.9 0.15 21 -DS -4.75 18.9 4.75 18.9 0.15 21 -DS 4.75 18.9 4.75 -18.9 0.15 21 -DS 4.75 -18.9 -4.75 -18.9 0.15 21 -DS -4.75 -10.3 -4.75 10.3 0.15 21 -DS -4.75 10.3 4.75 10.3 0.15 21 -DS 4.75 10.3 4.75 -10.3 0.15 21 -DS 4.75 -10.3 -4.75 -10.3 0.15 21 -$PAD -Sh "2" O 3.81 2.54 0 0 0 -Dr 2.5 0 0 O 2.5 0.8 -At STD N 00E0FFFF -Ne 0 "" -Po 0 0 -$EndPAD -$PAD -Sh "1" O 3.81 2.54 0 0 0 -Dr 2.5 0 0 O 2.5 0.8 -At STD N 00E0FFFF -Ne 0 "" -Po 0 -5.58 -$EndPAD -$PAD -Sh "3" O 3.81 2.54 0 0 0 -Dr 2.5 0 0 O 2.5 0.8 -At STD N 00E0FFFF -Ne 0 "" -Po 0 5.58 -$EndPAD -$PAD -Sh "H1" C 4 4 0 0 0 -Dr 3 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 0 -15 -$EndPAD -$PAD -Sh "H2" C 4 4 0 0 0 -Dr 3 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 0 15 -$EndPAD -$EndMODULE SW_KND2 -$MODULE SW_KND2_PDP -Po 0 0 0 15 54B2AA91 00000000 ~~ -Li SW_KND2_PDP -Cd Switch inverseur -Kw SWITCH DEV -Sc 0 -AR -Op 0 0 0 -T0 4 0 0.3 0.3 900 0.05 N I 21 N "SW_KND2_1x2_PDP" -T1 -0.05 -20.3 1.2 1.2 0 0.2032 N V 21 N "SW*" -DS -4.75 7.8 -4.75 -10.3 0.15 21 -DS -4.75 7.8 4.75 7.8 0.15 21 -DS 4.75 7.8 4.75 -10.3 0.15 21 -DS -4.75 -10.3 -4.75 -18.9 0.15 21 -DS 4.75 -10.3 4.75 -18.9 0.15 21 -DS 4.75 -18.9 -4.75 -18.9 0.15 21 -DS 4.75 -10.3 -4.75 -10.3 0.15 21 -$PAD -Sh "1" O 3.81 2.54 0 0 0 -Dr 2.5 0 0 O 2.5 0.8 -At STD N 00E0FFFF -Ne 0 "" -Po 0 0 -$EndPAD -$PAD -Sh "2" O 3.81 2.54 0 0 0 -Dr 2.5 0 0 O 2.5 0.8 -At STD N 00E0FFFF -Ne 0 "" -Po 0 -5.58 -$EndPAD -$PAD -Sh "3" O 3.81 2.54 0 0 0 -Dr 2.5 0 0 O 2.5 0.8 -At STD N 00E0FFFF -Ne 0 "" -Po 0 5.58 -$EndPAD -$PAD -Sh "H1" C 4 4 0 0 0 -Dr 3 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 0 -15 -$EndPAD -$EndMODULE SW_KND2_PDP -$MODULE SW_KND2_PDP2 -Po 0 0 0 15 554E2AD7 00000000 ~~ -Li SW_KND2_PDP2 -Cd Switch inverseur -Kw SWITCH DEV -Sc 0 -AR -Op 0 0 0 -T0 3.429 -3.683 0.3 0.3 900 0.05 N I 21 N "SW_KND2_1x2_PDP" -T1 -0.05 -20.3 1.2 1.2 0 0.2032 N V 21 N "SW*" -DS -4.75 1.95 -4.75 -10.35 0.15 21 -DS 4.75 -10.3 4.75 1.95 0.15 21 -DS -4.75 1.958 4.75 1.958 0.15 21 -DS -4.75 -10.3 -4.75 -18.9 0.15 21 -DS 4.75 -10.3 4.75 -18.9 0.15 21 -DS 4.75 -18.9 -4.75 -18.9 0.15 21 -DS 4.75 -10.3 -4.75 -10.3 0.15 21 -$PAD -Sh "1" O 5.08 2.54 0 0 0 -Dr 3.45 0 0 O 3.45 1.18 -At STD N 00E0FFFF -Ne 0 "" -Po 0 0 -$EndPAD -$PAD -Sh "2" O 5.08 2.54 0 0 0 -Dr 3.45 0 0 O 3.45 1.15 -At STD N 00E0FFFF -Ne 0 "" -Po 0 -5.58 -$EndPAD -$PAD -Sh "3" C 4 4 0 0 0 -Dr 3 0 0 -At STD N 00E0FFFF -Ne 0 "" -Po 0 -15 -$EndPAD -$EndMODULE SW_KND2_PDP2 -$EndLIBRARY DELETED hardware/pdp8i/schematic.pdf Index: hardware/pdp8i/schematic.pdf ================================================================== --- hardware/pdp8i/schematic.pdf +++ /dev/null cannot compute difference between binary files ADDED hardware/pidp8i/PDP8-cache.lib Index: hardware/pidp8i/PDP8-cache.lib ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8-cache.lib @@ -0,0 +1,242 @@ +EESchema-LIBRARY Version 2.3 Date: 12/22/2018 8:34:02 PM +#encoding utf-8 +# +# +3.3V +# +DEF +3.3V #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -40 30 H I C CNN +F1 "+3.3V" 0 110 30 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +ALIAS +3,3V +DRAW +X +3.3V 1 0 0 0 U 30 30 0 0 W N +C 0 60 20 0 1 0 N +P 3 0 1 0 0 0 0 40 0 40 N +ENDDRAW +ENDDEF +# +# +5V +# +DEF +5V #PWR 0 40 Y Y 1 F P +F0 "#PWR" 0 90 20 H I C CNN +F1 "+5V" 0 90 30 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +X +5V 1 0 0 0 U 20 20 0 0 W N +C 0 50 20 0 1 0 N +P 4 0 1 0 0 0 0 30 0 30 0 30 N +ENDDRAW +ENDDEF +# +# CONN_1 +# +DEF ~CONN_1 P 0 30 N N 1 F N +F0 "P" 80 0 40 H V L CNN +F1 "CONN_1" 0 55 30 H I C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +C 0 0 31 0 1 0 N +P 2 0 1 0 -30 0 -50 0 N +X 1 1 -150 0 100 R 60 60 1 1 P +ENDDRAW +ENDDEF +# +# CONN_4 +# +DEF CONN_4 P 0 40 Y N 1 F N +F0 "P" -50 0 50 V V C CNN +F1 "CONN_4" 50 0 50 V V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +S -100 200 100 -200 0 1 0 N +X P1 1 -350 150 250 R 50 50 1 1 P I +X P2 2 -350 50 250 R 50 50 1 1 P I +X P3 3 -350 -50 250 R 50 50 1 1 P I +X P4 4 -350 -150 250 R 50 50 1 1 P I +ENDDRAW +ENDDEF +# +# DIODE +# +DEF DIODE D 0 40 N N 1 F N +F0 "D" 0 100 40 H V C CNN +F1 "DIODE" 0 -100 40 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +$FPLIST + D? + S* +$ENDFPLIST +DRAW +P 2 0 1 6 50 50 50 -50 N +P 3 0 1 0 -50 50 50 0 -50 -50 F +X A 1 -200 0 150 R 40 40 1 1 P +X K 2 200 0 150 L 40 40 1 1 P +ENDDRAW +ENDDEF +# +# GND +# +DEF ~GND #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 0 30 H I C CNN +F1 "GND" 0 -70 30 H I C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N +X GND 1 0 0 0 U 30 30 1 1 W N +ENDDRAW +ENDDEF +# +# LED +# +DEF LED D 0 40 Y N 1 F N +F0 "D" 0 100 50 H V C CNN +F1 "LED" 0 -100 50 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +$FPLIST + LED-3MM + LED-5MM + LED-10MM + LED-0603 + LED-0805 + LED-1206 + LEDV +$ENDFPLIST +DRAW +P 2 0 1 0 50 50 50 -50 N +P 3 0 1 0 -50 50 50 0 -50 -50 F +P 3 0 1 0 65 -40 110 -80 105 -55 N +P 3 0 1 0 80 -25 125 -65 120 -40 N +X A 1 -200 0 150 R 40 40 1 1 P +X K 2 200 0 150 L 40 40 1 1 P +ENDDRAW +ENDDEF +# +# R +# +DEF R R 0 0 N Y 1 F N +F0 "R" 80 0 40 V V C CNN +F1 "R" 7 1 40 V V C CNN +F2 "~" -70 0 30 V V C CNN +F3 "~" 0 0 30 H V C CNN +$FPLIST + R? + SM0603 + SM0805 + R?-* + SM1206 +$ENDFPLIST +DRAW +S -40 150 40 -150 0 1 12 N +X ~ 1 0 250 100 D 60 60 1 1 P +X ~ 2 0 -250 100 U 60 60 1 1 P +ENDDRAW +ENDDEF +# +# RASPI_MODEL_B_PLUS_GPIO +# +DEF RASPI_MODEL_B_PLUS_GPIO P 0 10 Y Y 1 F N +F0 "P" 0 1050 60 H V C CNN +F1 "RASPI_MODEL_B_PLUS_GPIO" 0 0 20 V V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +S -100 1000 100 -1000 0 1 0 N +X 3.3v 1 -400 950 300 R 60 30 1 1 w I +X 5v 2 400 950 300 L 60 30 1 1 w I +X g2 3 -400 850 300 R 60 30 1 1 P I +X 5v 4 400 850 300 L 60 30 1 1 P I +X g3 5 -400 750 300 R 60 30 1 1 P I +X GND 6 400 750 300 L 60 30 1 1 w I +X g4 7 -400 650 300 R 60 30 1 1 P I +X g14 8 400 650 300 L 60 30 1 1 P I +X GND 9 -400 550 300 R 60 30 1 1 P I +X g15 10 400 550 300 L 60 30 1 1 P I +X GND 20 400 50 300 L 60 30 1 1 P I +X GND 30 400 -450 300 L 60 30 1 1 P I +X g21 40 400 -950 300 L 60 30 1 1 P I +X g17 11 -400 450 300 R 60 30 1 1 P I +X g9 21 -400 -50 300 R 60 30 1 1 P I +X g6 31 -400 -550 300 R 60 30 1 1 P I +X g18 12 400 450 300 L 60 30 1 1 P I +X g25 22 400 -50 300 L 60 30 1 1 P I +X g12 32 400 -550 300 L 60 30 1 1 P I +X g27 13 -400 350 300 R 60 30 1 1 P I +X g11 23 -400 -150 300 R 60 30 1 1 P I +X g13 33 -400 -650 300 R 60 30 1 1 P I +X GND 14 400 350 300 L 60 30 1 1 P I +X g8 24 400 -150 300 L 60 30 1 1 P I +X GND 34 400 -650 300 L 60 30 1 1 P I +X g22 15 -400 250 300 R 60 30 1 1 P I +X GND 25 -400 -250 300 R 60 30 1 1 P I +X g19 35 -400 -750 300 R 60 30 1 1 P I +X g23 16 400 250 300 L 60 30 1 1 P I +X g7 26 400 -250 300 L 60 30 1 1 P I +X g16 36 400 -750 300 L 60 30 1 1 P I +X 3.3v 17 -400 150 300 R 60 30 1 1 P I +X n/c 27 -400 -350 300 R 60 30 1 1 P I +X g26 37 -400 -850 300 R 60 30 1 1 P I +X g24 18 400 150 300 L 60 30 1 1 P I +X n/c 28 400 -350 300 L 60 30 1 1 P I +X g20 38 400 -850 300 L 60 30 1 1 P I +X g10 19 -400 50 300 R 60 30 1 1 P I +X g5 29 -400 -450 300 R 60 30 1 1 P I +X GND 39 -400 -950 300 R 60 30 1 1 P I +ENDDRAW +ENDDEF +# +# SWITCH_INV +# +DEF SWITCH_INV SW 0 0 N Y 1 F N +F0 "SW" -200 150 50 H V C CNN +F1 "SWITCH_INV" -150 -150 50 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +C -150 0 50 0 0 0 N +C 150 -100 50 0 0 0 N +C 150 100 50 0 1 0 N +P 2 0 1 0 -100 0 150 50 N +X 1 1 500 100 300 L 60 60 1 1 P +X 2 2 -500 0 300 R 60 60 1 1 P +X 3 3 500 -100 300 L 60 60 1 1 P +ENDDRAW +ENDDEF +# +# UDN2981A +# +DEF UDN2981A P 0 40 Y Y 1 F N +F0 "P" 0 550 30 H V C CNN +F1 "UDN2981A" 0 -550 30 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +S -150 500 150 -500 0 1 0 N +X IN1 1 -350 400 200 R 40 20 1 1 I I +X IN2 2 -350 300 200 R 40 20 1 1 I I +X IN3 3 -350 200 200 R 40 20 1 1 I I +X IN4 4 -350 100 200 R 40 20 1 1 I I +X IN5 5 -350 0 200 R 40 20 1 1 I I +X IN6 6 -350 -100 200 R 40 20 1 1 I I +X IN7 7 -350 -200 200 R 40 20 1 1 I I +X IN8 8 -350 -300 200 R 40 20 1 1 I I +X Vs 9 -350 -400 200 R 40 20 1 1 P I +X GND 10 350 -400 200 L 40 20 1 1 P I +X OUT8 11 350 -300 200 L 40 20 1 1 O I +X OUT7 12 350 -200 200 L 40 20 1 1 O I +X OUT6 13 350 -100 200 L 40 20 1 1 O I +X OUT5 14 350 0 200 L 40 20 1 1 O I +X OUT4 15 350 100 200 L 40 20 1 1 O I +X OUT3 16 350 200 200 L 40 20 1 1 O I +X OUT2 17 350 300 200 L 40 20 1 1 O I +X OUT1 18 350 400 200 L 40 20 1 1 O I +ENDDRAW +ENDDEF +# +#End Library ADDED hardware/pidp8i/PDP8-rescue.lib Index: hardware/pidp8i/PDP8-rescue.lib ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8-rescue.lib @@ -0,0 +1,159 @@ +EESchema-LIBRARY Version 2.4 +#encoding utf-8 +# +# +3.3V +# +DEF +3.3V #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 -40 30 H I C CNN +F1 "+3.3V" 0 110 30 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 60 20 0 1 0 N +P 3 0 1 0 0 0 0 40 0 40 N +X +3.3V 1 0 0 0 U 30 30 0 0 W N +ENDDRAW +ENDDEF +# +# +5V +# +DEF +5V #PWR 0 40 Y Y 1 F P +F0 "#PWR" 0 90 20 H I C CNN +F1 "+5V" 0 90 30 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 50 20 0 1 0 N +P 4 0 1 0 0 0 0 30 0 30 0 30 N +X +5V 1 0 0 0 U 20 20 0 0 W N +ENDDRAW +ENDDEF +# +# CONN_1 +# +DEF CONN_1 P 0 30 N N 1 F N +F0 "P" 80 0 40 H V L CNN +F1 "CONN_1" 0 55 30 H I C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C 0 0 31 0 1 0 N +P 2 0 1 0 -30 0 -50 0 N +X 1 1 -150 0 100 R 60 60 1 1 P +ENDDRAW +ENDDEF +# +# CONN_4 +# +DEF CONN_4 P 0 40 Y N 1 F N +F0 "P" -50 0 50 V V C CNN +F1 "CONN_4" 50 0 50 V V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +S -100 200 100 -200 0 1 0 N +X P1 1 -350 150 250 R 50 50 1 1 P I +X P2 2 -350 50 250 R 50 50 1 1 P I +X P3 3 -350 -50 250 R 50 50 1 1 P I +X P4 4 -350 -150 250 R 50 50 1 1 P I +ENDDRAW +ENDDEF +# +# DIODE +# +DEF DIODE D 0 40 N N 1 F N +F0 "D" 0 100 40 H V C CNN +F1 "DIODE" 0 -100 40 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + D? + S* +$ENDFPLIST +DRAW +P 2 0 1 6 50 50 50 -50 N +P 3 0 1 0 -50 50 50 0 -50 -50 F +X A 1 -200 0 150 R 40 40 1 1 P +X K 2 200 0 150 L 40 40 1 1 P +ENDDRAW +ENDDEF +# +# GND +# +DEF GND #PWR 0 0 Y Y 1 F P +F0 "#PWR" 0 0 30 H I C CNN +F1 "GND" 0 -70 30 H I C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N +X GND 1 0 0 0 U 30 30 1 1 W N +ENDDRAW +ENDDEF +# +# LED +# +DEF LED D 0 40 Y N 1 F N +F0 "D" 0 100 50 H V C CNN +F1 "LED" 0 -100 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +$FPLIST + LED-3MM + LED-5MM + LED-10MM + LED-0603 + LED-0805 + LED-1206 + LEDV +$ENDFPLIST +DRAW +P 2 0 1 0 50 50 50 -50 N +P 3 0 1 0 -50 50 50 0 -50 -50 F +P 3 0 1 0 65 -40 110 -80 105 -55 N +P 3 0 1 0 80 -25 125 -65 120 -40 N +X A 1 -200 0 150 R 40 40 1 1 P +X K 2 200 0 150 L 40 40 1 1 P +ENDDRAW +ENDDEF +# +# R +# +DEF R R 0 0 N Y 1 F N +F0 "R" 80 0 40 V V C CNN +F1 "R" 7 1 40 V V C CNN +F2 "" -70 0 30 V V C CNN +F3 "" 0 0 30 H V C CNN +$FPLIST + R? + SM0603 + SM0805 + R?-* + SM1206 +$ENDFPLIST +DRAW +S -40 150 40 -150 0 1 12 N +X ~ 1 0 250 100 D 60 60 1 1 P +X ~ 2 0 -250 100 U 60 60 1 1 P +ENDDRAW +ENDDEF +# +# SWITCH_INV +# +DEF SWITCH_INV SW 0 0 N Y 1 F N +F0 "SW" -200 150 50 H V C CNN +F1 "SWITCH_INV" -150 -150 50 H V C CNN +F2 "" 0 0 60 H V C CNN +F3 "" 0 0 60 H V C CNN +DRAW +C -150 0 50 0 0 0 N +C 150 -100 50 0 0 0 N +C 150 100 50 0 1 0 N +P 2 0 1 0 -100 0 150 50 N +X 1 1 500 100 300 L 60 60 1 1 P +X 2 2 -500 0 300 R 60 60 1 1 P +X 3 3 500 -100 300 L 60 60 1 1 P +ENDDRAW +ENDDEF +# +#End Library ADDED hardware/pidp8i/PDP8.cmp Index: hardware/pidp8i/PDP8.cmp ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8.cmp @@ -0,0 +1,1186 @@ +Cmp-Mod V01 Created by CvPcb (2013-07-07 BZR 4022)-stable date = 12/22/2018 8:34:06 PM + +BeginCmp +TimeStamp = /54904DF0; +Reference = D1; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /5490504C; +Reference = D2; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905056; +Reference = D3; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /5490505E; +Reference = D4; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905068; +Reference = D5; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /5490506E; +Reference = D6; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549055F9; +Reference = D7; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549055FF; +Reference = D8; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905605; +Reference = D9; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /5490560B; +Reference = D10; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905611; +Reference = D11; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905640; +Reference = D12; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905646; +Reference = D13; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /5490564C; +Reference = D14; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905652; +Reference = D15; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905658; +Reference = D16; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /5490565E; +Reference = D17; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54905664; +Reference = D18; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070C3; +Reference = D19; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070C9; +Reference = D20; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070CF; +Reference = D21; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070D5; +Reference = D22; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070DB; +Reference = D23; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070E1; +Reference = D24; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070E7; +Reference = D25; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /549070ED; +Reference = D26; +ValeurCmp = 1N4148; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /548EF5CC; +Reference = DAC1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5E5; +Reference = DAC2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5EB; +Reference = DAC3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5F1; +Reference = DAC4; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5F7; +Reference = DAC5; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5FD; +Reference = DAC6; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF603; +Reference = DAC7; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF609; +Reference = DAC8; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF60F; +Reference = DAC9; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF615; +Reference = DAC10; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF61B; +Reference = DAC11; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF621; +Reference = DAC12; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF728; +Reference = DAND1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF7E9; +Reference = DBREAK1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF7E3; +Reference = DCURAD1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF741; +Reference = DDCA1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF7D7; +Reference = DDEFER1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF6DA; +Reference = DDF1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF6F3; +Reference = DDF2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF6F9; +Reference = DDF3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF7D1; +Reference = DEXEC1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF7CB; +Reference = DFETCH1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF701; +Reference = DIF1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF71A; +Reference = DIF2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF720; +Reference = DIF3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF837; +Reference = DION1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF783; +Reference = DIOT1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF73B; +Reference = DISZ1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF77D; +Reference = DJMP1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF777; +Reference = DJMS1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF686; +Reference = DLINK1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF463; +Reference = DMA1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF47C; +Reference = DMA2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF482; +Reference = DMA3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF488; +Reference = DMA4; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF48E; +Reference = DMA5; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF494; +Reference = DMA6; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF49A; +Reference = DMA7; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF4A0; +Reference = DMA8; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF4A6; +Reference = DMA9; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF4AC; +Reference = DMA10; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF4B2; +Reference = DMA11; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF4B8; +Reference = DMA12; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF56F; +Reference = DMB1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF588; +Reference = DMB2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF58E; +Reference = DMB3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF594; +Reference = DMB4; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF59A; +Reference = DMB5; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5A0; +Reference = DMB6; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5A6; +Reference = DMB7; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5AC; +Reference = DMB8; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5B2; +Reference = DMB9; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5B8; +Reference = DMB10; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5BE; +Reference = DMB11; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF5C4; +Reference = DMB12; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF629; +Reference = DMQ1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF642; +Reference = DMQ2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF648; +Reference = DMQ3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF64E; +Reference = DMQ4; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF654; +Reference = DMQ5; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF65A; +Reference = DMQ6; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF660; +Reference = DMQ7; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF666; +Reference = DMQ8; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF66C; +Reference = DMQ9; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF672; +Reference = DMQ10; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF678; +Reference = DMQ11; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF67E; +Reference = DMQ12; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF789; +Reference = DOPR1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF83D; +Reference = DPAUSE1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /554E5897; +Reference = DPAUSE2; +ValeurCmp = LED; +IdModule = LED-3-StrEight; +EndCmp + +BeginCmp +TimeStamp = /548EF34A; +Reference = DPC1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF399; +Reference = DPC2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3AC; +Reference = DPC3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3B2; +Reference = DPC4; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3B8; +Reference = DPC5; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3BE; +Reference = DPC6; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3C4; +Reference = DPC7; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3CA; +Reference = DPC8; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3D0; +Reference = DPC9; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3D6; +Reference = DPC10; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3DC; +Reference = DPC11; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF3E2; +Reference = DPC12; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF843; +Reference = DRUN1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /554E589D; +Reference = DRUN2; +ValeurCmp = LED; +IdModule = LED-3-StrEight; +EndCmp + +BeginCmp +TimeStamp = /548EF6A1; +Reference = DSC1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF6BA; +Reference = DSC2; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF6C0; +Reference = DSC3; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF6C6; +Reference = DSC4; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF6CC; +Reference = DSC5; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF735; +Reference = DTAD1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /548EF7DD; +Reference = DWRDCT1; +ValeurCmp = LED; +IdModule = LED-3-PDP; +EndCmp + +BeginCmp +TimeStamp = /54BD85A3; +Reference = DZ1; +ValeurCmp = ZENER; +IdModule = D2; +EndCmp + +BeginCmp +TimeStamp = /54B1CC4A; +Reference = M1; +ValeurCmp = M; +IdModule = 1pin; +EndCmp + +BeginCmp +TimeStamp = /54B1CC76; +Reference = M2; +ValeurCmp = M; +IdModule = 1pin; +EndCmp + +BeginCmp +TimeStamp = /54B1CC7C; +Reference = M3; +ValeurCmp = M; +IdModule = 1pin; +EndCmp + +BeginCmp +TimeStamp = /54B1CC82; +Reference = M4; +ValeurCmp = M; +IdModule = 1pin; +EndCmp + +BeginCmp +TimeStamp = /54BD36C6; +Reference = M5; +ValeurCmp = M; +IdModule = 1pin; +EndCmp + +BeginCmp +TimeStamp = /54BD36CC; +Reference = M6; +ValeurCmp = M; +IdModule = 1pin; +EndCmp + +BeginCmp +TimeStamp = /54BD36D2; +Reference = M7; +ValeurCmp = M; +IdModule = 1pin; +EndCmp + +BeginCmp +TimeStamp = /548F13F7; +Reference = P1; +ValeurCmp = RASPI_MODEL_B_PLUS_GPIO; +IdModule = RASPI_BPLUS_MIRRORED; +EndCmp + +BeginCmp +TimeStamp = /54B17386; +Reference = P2; +ValeurCmp = UDN2981A; +IdModule = DIP-18__300; +EndCmp + +BeginCmp +TimeStamp = /5C1DA337; +Reference = P3; +ValeurCmp = CONN_4; +IdModule = PIN_ARRAY_4x1; +EndCmp + +BeginCmp +TimeStamp = /5490833D; +Reference = R1; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /5490834A; +Reference = R2; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /54908350; +Reference = R3; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /54908356; +Reference = R4; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /5490835C; +Reference = R5; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /54908362; +Reference = R6; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /54908368; +Reference = R7; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /5490836E; +Reference = R8; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /54908374; +Reference = R9; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /5490837A; +Reference = R10; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /54908380; +Reference = R11; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /54908386; +Reference = R12; +ValeurCmp = 390; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /5490838C; +Reference = R_ROW1; +ValeurCmp = 1K; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /5490839E; +Reference = R_ROW2; +ValeurCmp = 1K; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /549083A4; +Reference = R_ROW3; +ValeurCmp = 1K; +IdModule = R3; +EndCmp + +BeginCmp +TimeStamp = /548EFBFD; +Reference = SW1; +ValeurCmp = DF1; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFC03; +Reference = SW2; +ValeurCmp = DF2; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFC09; +Reference = SW3; +ValeurCmp = DF3; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFC0F; +Reference = SW4; +ValeurCmp = IF1; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFC15; +Reference = SW5; +ValeurCmp = IF2; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFC1B; +Reference = SW6; +ValeurCmp = IF3; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFAF8; +Reference = SW7; +ValeurCmp = SR1; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB27; +Reference = SW8; +ValeurCmp = SR2; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB2D; +Reference = SW9; +ValeurCmp = SR3; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB33; +Reference = SW10; +ValeurCmp = SR4; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB42; +Reference = SW11; +ValeurCmp = SR5; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB48; +Reference = SW12; +ValeurCmp = SR6; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB4E; +Reference = SW13; +ValeurCmp = SR7; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB54; +Reference = SW14; +ValeurCmp = SR8; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB5A; +Reference = SW15; +ValeurCmp = SR9; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB60; +Reference = SW16; +ValeurCmp = SR10; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB66; +Reference = SW17; +ValeurCmp = SR11; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EFB6C; +Reference = SW18; +ValeurCmp = SR12; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF86F; +Reference = SW19; +ValeurCmp = START; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF87C; +Reference = SW20; +ValeurCmp = LOAD_ADD; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF882; +Reference = SW21; +ValeurCmp = DEP; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF888; +Reference = SW22; +ValeurCmp = EXAM; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF88E; +Reference = SW23; +ValeurCmp = CONT; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF894; +Reference = SW24; +ValeurCmp = STOP; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF89A; +Reference = SW25; +ValeurCmp = SING_STEP; +IdModule = SW_PIDP2019; +EndCmp + +BeginCmp +TimeStamp = /548EF8A0; +Reference = SW26; +ValeurCmp = SING_INST; +IdModule = SW_PIDP2019; +EndCmp + +EndListe ADDED hardware/pidp8i/PDP8.dsn Index: hardware/pidp8i/PDP8.dsn ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8.dsn @@ -0,0 +1,918 @@ +(pcb C:\temp49\pidp8\PDP8KICAD2019\PDP8_2019.dsn + (parser + (string_quote ") + (space_in_quoted_tokens on) + (host_cad "KiCad's Pcbnew") + (host_version "(2013-07-07 BZR 4022)-stable") + ) + (resolution um 10) + (unit um) + (structure + (layer F.Cu + (type signal) + (property + (index 0) + ) + ) + (layer B.Cu + (type signal) + (property + (index 1) + ) + ) + (boundary + (path pcb 0 9500 -174500 9500 -65800 290000 -65800 290000 -174500 + 9500 -174500) + ) + (keepout "" (polygon B.Cu 0 288000 -140000 284000 -140000 284000 -156000 288000 -156000)) + (keepout "" (polygon F.Cu 0 288000 -140000 284000 -140000 284000 -156000 288000 -156000)) + (keepout "" (polygon B.Cu 0 24000 -162000 16000 -162000 16000 -156200 9800 -156200 + 9800 -141400 13000 -141400 13000 -137800 20600 -137800 24000 -141200)) + (keepout "" (polygon F.Cu 0 24000 -162000 16000 -162000 16000 -156200 9800 -156200 + 9800 -141400 13000 -141400 13000 -137800 20600 -137800 24000 -141200)) + (via "Via[0-1]_889:635_um" "Via[0-1]_889:0_um") + (rule + (width 508) + (clearance 254.1) + (clearance 254.1 (type default_smd)) + (clearance 63.5 (type smd_smd)) + ) + ) + (placement + (component R3 + (place R9 174100 -121725 back 0 (PN 390)) + (place R1 94050 -121975 back 0 (PN 390)) + (place R2 104100 -121975 back 0 (PN 390)) + (place R3 114100 -121975 back 180 (PN 390)) + (place R4 124100 -121925 back 180 (PN 390)) + (place R5 134050 -121925 back 180 (PN 390)) + (place R6 144150 -121875 back 180 (PN 390)) + (place R7 154100 -121875 back 0 (PN 390)) + (place R8 164050 -121825 back 0 (PN 390)) + (place R10 184000 -121675 back 0 (PN 390)) + (place R11 194050 -121625 back 0 (PN 390)) + (place R12 204050 -121625 back 0 (PN 390)) + (place R_ROW1 189250 -148450 back 0 (PN 1K)) + (place R_ROW2 79000 -148500 front 180 (PN 1K)) + (place R_ROW3 229000 -148450 back 180 (PN 1K)) + ) + (component "DIP-18__300" + (place P2 266800 -139800 front 0 (PN UDN2981A)) + ) + (component 1pin + (place M1 13500 -70000 front 0 (PN M)) + (place M2 13500 -159000 front 0 (PN M)) + (place M3 286000 -70000 front 0 (PN M)) + (place M4 286000 -159000 front 0 (PN M)) + (place M5 207100 -82600 front 0 (PN M)) + ) + (component D2 + (place D23 249080 -172150 front 0 (PN 1N4148)) + (place D24 259080 -172150 front 0 (PN 1N4148)) + (place D22 239080 -172150 front 0 (PN 1N4148)) + (place D25 269080 -172150 front 0 (PN 1N4148)) + (place D26 279080 -172150 front 0 (PN 1N4148)) + (place D12 139080 -172150 front 0 (PN 1N4148)) + (place D2 39080 -172150 front 0 (PN 1N4148)) + (place D3 49080 -172150 front 0 (PN 1N4148)) + (place D4 59080 -172150 front 0 (PN 1N4148)) + (place D5 69080 -172150 front 0 (PN 1N4148)) + (place D6 79080 -172150 front 0 (PN 1N4148)) + (place D7 89080 -172150 front 0 (PN 1N4148)) + (place D8 99080 -172150 front 0 (PN 1N4148)) + (place D9 109080 -172150 front 0 (PN 1N4148)) + (place D10 119080 -172150 front 0 (PN 1N4148)) + (place D11 129080 -172150 front 0 (PN 1N4148)) + (place D1 29080 -172150 front 0 (PN 1N4148)) + (place D13 149080 -172150 front 0 (PN 1N4148)) + (place D14 159080 -172150 front 0 (PN 1N4148)) + (place D15 169080 -172150 front 0 (PN 1N4148)) + (place D16 179080 -172150 front 0 (PN 1N4148)) + (place D17 189080 -172150 front 0 (PN 1N4148)) + (place D18 199080 -172150 front 0 (PN 1N4148)) + (place D19 209080 -172150 front 0 (PN 1N4148)) + (place D20 219080 -172150 front 0 (PN 1N4148)) + (place D21 229080 -172150 front 0 (PN 1N4148)) + (place DZ1 244250 -143900 back 180 (PN ZENER)) + ) + (component "LED-3-PDP" + (place DMB9 169000 -99800 front 0 (PN LED)) + (place DMB10 179000 -99800 front 0 (PN LED)) + (place DMB11 189000 -99800 front 0 (PN LED)) + (place DMB12 199000 -99800 front 0 (PN LED)) + (place DAC1 89000 -114400 front 0 (PN LED)) + (place DAC2 99000 -114400 front 0 (PN LED)) + (place DAC3 109000 -114400 front 0 (PN LED)) + (place DAC4 119000 -114400 front 0 (PN LED)) + (place DAC5 129000 -114400 front 0 (PN LED)) + (place DAC6 139000 -114400 front 0 (PN LED)) + (place DAC7 149000 -114400 front 0 (PN LED)) + (place DAC8 159000 -114400 front 0 (PN LED)) + (place DAC9 169000 -114400 front 0 (PN LED)) + (place DAC10 179000 -114400 front 0 (PN LED)) + (place DPC1 89000 -70600 front 0 (PN LED)) + (place DAC12 199000 -114400 front 0 (PN LED)) + (place DMQ1 89000 -129000 front 0 (PN LED)) + (place DMQ2 99000 -129000 front 0 (PN LED)) + (place DMQ3 109000 -129000 front 0 (PN LED)) + (place DMQ4 119000 -129000 front 0 (PN LED)) + (place DMQ5 129000 -129000 front 0 (PN LED)) + (place DMQ6 139000 -129000 front 0 (PN LED)) + (place DMQ7 149000 -129000 front 0 (PN LED)) + (place DMQ8 159000 -129000 front 0 (PN LED)) + (place DMQ9 169000 -129000 front 0 (PN LED)) + (place DMQ10 179000 -129000 front 0 (PN LED)) + (place DMQ11 189000 -129000 front 0 (PN LED)) + (place DMQ12 199000 -129000 front 0 (PN LED)) + (place DLINK1 79000 -114400 front 0 (PN LED)) + (place DSC1 29000 -129000 front 0 (PN LED)) + (place DAC11 189000 -114400 front 0 (PN LED)) + (place DPC2 99000 -70600 front 0 (PN LED)) + (place DPC3 109000 -70600 front 0 (PN LED)) + (place DPC4 119000 -70600 front 0 (PN LED)) + (place DPC5 129000 -70600 front 0 (PN LED)) + (place DPC6 139000 -70600 front 0 (PN LED)) + (place DPC7 149000 -70600 front 0 (PN LED)) + (place DPC8 159000 -70600 front 0 (PN LED)) + (place DPC9 169000 -70600 front 0 (PN LED)) + (place DPC10 179000 -70600 front 0 (PN LED)) + (place DPC11 189000 -70600 front 0 (PN LED)) + (place DPC12 199000 -70600 front 0 (PN LED)) + (place DMA1 89000 -85200 front 0 (PN LED)) + (place DMA2 99000 -85200 front 0 (PN LED)) + (place DMA3 109000 -85200 front 0 (PN LED)) + (place DMB8 159000 -99800 front 0 (PN LED)) + (place DMA5 129000 -85200 front 0 (PN LED)) + (place DMA6 139000 -85200 front 0 (PN LED)) + (place DMA7 149000 -85200 front 0 (PN LED)) + (place DMA8 159000 -85200 front 0 (PN LED)) + (place DMA9 169000 -85200 front 0 (PN LED)) + (place DMA10 179000 -85200 front 0 (PN LED)) + (place DMA11 189000 -85200 front 0 (PN LED)) + (place DMA12 199000 -85200 front 0 (PN LED)) + (place DMB1 89000 -99800 front 0 (PN LED)) + (place DMB2 99000 -99800 front 0 (PN LED)) + (place DMB3 109000 -99800 front 0 (PN LED)) + (place DMB4 119000 -99800 front 0 (PN LED)) + (place DMB5 129000 -99800 front 0 (PN LED)) + (place DMB6 139000 -99800 front 0 (PN LED)) + (place DMB7 149000 -99800 front 0 (PN LED)) + (place DMA4 119000 -85200 front 0 (PN LED)) + (place DRUN1 279000 -85200 front 0 (PN LED)) + (place DPAUSE1 279000 -77900 front 0 (PN LED)) + (place DION1 279000 -70600 front 0 (PN LED)) + (place DBREAK1 259000 -107100 front 0 (PN LED)) + (place DCURAD1 259000 -99800 front 0 (PN LED)) + (place DWRDCT1 259000 -92500 front 0 (PN LED)) + (place DDEFER1 259000 -85200 front 0 (PN LED)) + (place DEXEC1 259000 -77900 front 0 (PN LED)) + (place DFETCH1 259000 -70600 front 0 (PN LED)) + (place DOPR1 239000 -121400 front 0 (PN LED)) + (place DIOT1 239000 -114200 front 0 (PN LED)) + (place DJMP1 239000 -107000 front 0 (PN LED)) + (place DJMS1 239000 -99800 front 0 (PN LED)) + (place DDCA1 239000 -92500 front 0 (PN LED)) + (place DSC2 39000 -129000 front 0 (PN LED)) + (place DSC4 59000 -129000 front 0 (PN LED)) + (place DSC5 69000 -129000 front 0 (PN LED)) + (place DDF1 29000 -70600 front 0 (PN LED)) + (place DDF2 39000 -70600 front 0 (PN LED)) + (place DDF3 49000 -70600 front 0 (PN LED)) + (place DSC3 49000 -129000 front 0 (PN LED)) + (place DTAD1 239000 -77900 front 0 (PN LED)) + (place DAND1 239000 -70600 front 0 (PN LED)) + (place DISZ1 239000 -85200 front 0 (PN LED)) + (place DIF2 69000 -70600 front 0 (PN LED)) + (place DIF3 79000 -70600 front 0 (PN LED)) + (place DIF1 59000 -70600 front 0 (PN LED)) + ) + (component "LED-3-StrEight" + (place DPAUSE2 259000 -114400 front 0 (PN LED)) + (place DRUN2 259000 -121700 front 0 (PN LED)) + ) + (component RASPI_BPLUS_MIRRORED + (place P1 216300 -140000 back 0 (PN RASPI_MODEL_B_PLUS_GPIO)) + ) + (component PIN_ARRAY_4x1 + (place P3 236626 -135230 back 0 (PN CONN_4)) + ) + (component SW_PIDP2019 + (place SW6 79000 -159900 front 0 (PN IF3)) + (place SW5 69000 -159900 front 0 (PN IF2)) + (place SW4 59000 -159900 front 0 (PN IF1)) + (place SW3 49000 -159900 front 0 (PN DF3)) + (place SW2 39000 -159900 front 0 (PN DF2)) + (place SW1 29000 -159900 front 0 (PN DF1)) + (place SW18 199000 -159900 front 0 (PN SR12)) + (place SW17 189000 -159900 front 0 (PN SR11)) + (place SW15 169000 -159900 front 0 (PN SR9)) + (place SW14 159000 -159900 front 0 (PN SR8)) + (place SW13 149000 -159900 front 0 (PN SR7)) + (place SW12 139000 -159900 front 0 (PN SR6)) + (place SW19 209000 -159900 front 0 (PN START)) + (place SW20 219000 -159900 front 0 (PN LOAD_ADD)) + (place SW16 179000 -159900 front 0 (PN SR10)) + (place SW22 239000 -159900 front 0 (PN EXAM)) + (place SW23 249000 -159900 front 0 (PN CONT)) + (place SW24 259000 -159900 front 0 (PN STOP)) + (place SW25 269000 -159900 front 0 (PN SING_STEP)) + (place SW26 279000 -159900 front 0 (PN SING_INST)) + (place SW7 89000 -159900 front 0 (PN SR1)) + (place SW8 99000 -159900 front 0 (PN SR2)) + (place SW9 109000 -159900 front 0 (PN SR3)) + (place SW10 119000 -159900 front 0 (PN SR4)) + (place SW11 129000 -159900 front 0 (PN SR5)) + (place SW21 229000 -159900 front 0 (PN DEP)) + ) + ) + (library + (image R3 + (outline (path signal 203.2 -3810 0 -3302 0)) + (outline (path signal 203.2 3810 0 3302 0)) + (outline (path signal 203.2 3302 0 3302 1016)) + (outline (path signal 203.2 3302 1016 -3302 1016)) + (outline (path signal 203.2 -3302 1016 -3302 -1016)) + (outline (path signal 203.2 -3302 -1016 3302 -1016)) + (outline (path signal 203.2 3302 -1016 3302 0)) + (outline (path signal 203.2 -3302 508 -2794 1016)) + (pin Round[A]Pad_1397_um 1 -3810 0) + (pin Round[A]Pad_1397_um 2 3810 0) + ) + (image "DIP-18__300" + (outline (path signal 381 -12700 1270 -11430 1270)) + (outline (path signal 381 -11430 1270 -11430 -1270)) + (outline (path signal 381 -11430 -1270 -12700 -1270)) + (outline (path signal 381 -12700 2540 12700 2540)) + (outline (path signal 381 12700 2540 12700 -2540)) + (outline (path signal 381 12700 -2540 -12700 -2540)) + (outline (path signal 381 -12700 -2540 -12700 2540)) + (pin Rect[A]Pad_1397x1397_um 1 -10160 -3810) + (pin Round[A]Pad_1397_um 2 -7620 -3810) + (pin Round[A]Pad_1397_um 3 -5080 -3810) + (pin Round[A]Pad_1397_um 4 -2540 -3810) + (pin Round[A]Pad_1397_um 5 0 -3810) + (pin Round[A]Pad_1397_um 6 2540 -3810) + (pin Round[A]Pad_1397_um 7 5080 -3810) + (pin Round[A]Pad_1397_um 8 7620 -3810) + (pin Round[A]Pad_1397_um 9 10160 -3810) + (pin Round[A]Pad_1397_um 10 10160 3810) + (pin Round[A]Pad_1397_um 11 7620 3810) + (pin Round[A]Pad_1397_um 12 5080 3810) + (pin Round[A]Pad_1397_um 13 2540 3810) + (pin Round[A]Pad_1397_um 14 0 3810) + (pin Round[A]Pad_1397_um 15 -2540 3810) + (pin Round[A]Pad_1397_um 16 -5080 3810) + (pin Round[A]Pad_1397_um 17 -7620 3810) + (pin Round[A]Pad_1397_um 18 -10160 3810) + ) + (image 1pin + (outline (path signal 381 2286 0 2174.11 -706.412 1849.41 -1343.68 1343.68 -1849.41 + 706.412 -2174.11 0 -2286 -706.412 -2174.11 -1343.68 -1849.41 + -1849.41 -1343.68 -2174.11 -706.412 -2286 0 -2174.11 706.412 + -1849.41 1343.68 -1343.68 1849.41 -706.412 2174.11 0 2286 + 706.412 2174.11 1343.68 1849.41 1849.41 1343.68 2174.11 706.412)) + (pin Round[A]Pad_4064_um 1 0 0) + ) + (image D2 + (outline (path signal 304.8 -2032 -1016 2032 -1016)) + (outline (path signal 304.8 -2032 1016 2032 1016)) + (outline (path signal 304.8 2794 0 2032 0)) + (outline (path signal 304.8 2032 0 2032 1016)) + (outline (path signal 304.8 -2032 1016 -2032 0)) + (outline (path signal 304.8 -2032 0 -2794 0)) + (outline (path signal 304.8 -2032 0 -2032 -1016)) + (outline (path signal 304.8 2032 -1016 2032 0)) + (outline (path signal 304.8 1524 1016 1524 -1016)) + (outline (path signal 304.8 1270 -1016 1270 1016)) + (pin Rect[A]Pad_1397x1397_um 2 3556 0) + (pin Round[A]Pad_1397_um 1 -3810 0) + ) + (image "LED-3-PDP" + (outline (path signal 150 -2400 -1500 -2400 1500)) + (outline (path signal 150 1500 -2400 -1500 -2400)) + (outline (path signal 150 2400 1500 2400 -1500)) + (outline (path signal 150 -1500 2400 1500 2400)) + (pin Round[A]Pad_1676.4_um 1 -1270 0) + (pin Round[A]Pad_1676.4_um 2 1270 0) + ) + (image "LED-3-StrEight" + (pin Round[A]Pad_1676.4_um 1 -1270 0) + (pin Round[A]Pad_1676.4_um 2 1270 0) + ) + (image RASPI_BPLUS_MIRRORED + (outline (path signal 150 48768 49022 53594 49022)) + (outline (path signal 150 53594 49022 53594 38354)) + (outline (path signal 150 53594 38354 49784 38354)) + (outline (path signal 150 -22000 49008 -22000 52508)) + (outline (path signal 150 -16000 49008 -16000 52508)) + (outline (path signal 150 -7000 48500 -7000 52500)) + (outline (path signal 150 6000 48500 6000 52500)) + (outline (path signal 150 49500 11032 54000 11032)) + (outline (path signal 150 54000 11032 54000 32)) + (outline (path signal 150 54000 32 50000 32)) + (outline (path signal 150 49500 28032 54000 28032)) + (outline (path signal 150 54000 28032 54000 16532)) + (outline (path signal 150 54000 16532 49500 16532)) + (outline (path signal 150 -32500 -3500 52500 -3500)) + (outline (path signal 150 52500 52500 52500 -3500)) + (outline (path signal 150 52500 52500 32000 52500)) + (outline (path signal 150 -32500 52500 -32500 -3500)) + (outline (path signal 150 -32500 52500 32500 52500)) + (outline (path signal 304.8 25400 -2540 -25400 -2540)) + (outline (path signal 304.8 25400 2540 -25400 2540)) + (outline (path signal 304.8 25400 2540 25400 -2540)) + (outline (path signal 304.8 -25400 2540 -25400 -2540)) + (pin Rect[A]Pad_1524x1524_um 1 -24130 1270) + (pin Round[A]Pad_1524_um 2 -24130 -1270) + (pin Round[A]Pad_1524_um 11 -11430 1270) + (pin Round[A]Pad_1524_um 4 -21590 -1270) + (pin Round[A]Pad_1524_um 13 -8890 1270) + (pin Round[A]Pad_1524_um 6 -19050 -1270) + (pin Round[A]Pad_1524_um 15 -6350 1270) + (pin Round[A]Pad_1524_um 8 -16510 -1270) + (pin Round[A]Pad_1524_um 17 -3810 1270) + (pin Round[A]Pad_1524_um 10 -13970 -1270) + (pin Round[A]Pad_1524_um 19 -1270 1270) + (pin Round[A]Pad_1524_um 12 -11430 -1270) + (pin Round[A]Pad_1524_um 21 1270 1270) + (pin Round[A]Pad_1524_um 14 -8890 -1270) + (pin Round[A]Pad_1524_um 23 3810 1270) + (pin Round[A]Pad_1524_um 16 -6350 -1270) + (pin Round[A]Pad_1524_um 25 6350 1270) + (pin Round[A]Pad_1524_um 18 -3810 -1270) + (pin Round[A]Pad_1524_um 27 8890 1270) + (pin Round[A]Pad_1524_um 20 -1270 -1270) + (pin Round[A]Pad_1524_um 29 11430 1270) + (pin Round[A]Pad_1524_um 22 1270 -1270) + (pin Round[A]Pad_1524_um 31 13970 1270) + (pin Round[A]Pad_1524_um 24 3810 -1270) + (pin Round[A]Pad_1524_um 26 6350 -1270) + (pin Round[A]Pad_1524_um 33 16510 1270) + (pin Round[A]Pad_1524_um 28 8890 -1270) + (pin Round[A]Pad_1524_um 32 13970 -1270) + (pin Round[A]Pad_1524_um 34 16510 -1270) + (pin Round[A]Pad_1524_um 36 19050 -1270) + (pin Round[A]Pad_1524_um 38 21590 -1270) + (pin Round[A]Pad_1524_um 35 19050 1270) + (pin Round[A]Pad_1524_um 37 21590 1270) + (pin Round[A]Pad_1524_um 3 -21590 1270) + (pin Round[A]Pad_1524_um 5 -19050 1270) + (pin Round[A]Pad_1524_um 7 -16510 1270) + (pin Round[A]Pad_1524_um 9 -13970 1270) + (pin Round[A]Pad_1524_um 39 24130 1270) + (pin Round[A]Pad_1524_um 40 24130 -1270) + (pin Round[A]Pad_1524_um 30 11430 -1270) + (pin Round[A]Pad_2850_um H2 -29000 0) + (pin Round[A]Pad_2850_um H3 29000 0) + (pin Round[A]Pad_2850_um H4 29000 49000) + (pin Round[A]Pad_2850_um H1 -29000 49000) + ) + (image PIN_ARRAY_4x1 + (outline (path signal 254 5080 -1270 -5080 -1270)) + (outline (path signal 254 5080 1270 -5080 1270)) + (outline (path signal 254 -5080 1270 -5080 -1270)) + (outline (path signal 254 5080 -1270 5080 1270)) + (pin Rect[A]Pad_1524x1524_um 1 -3810 0) + (pin Round[A]Pad_1524_um 2 -1270 0) + (pin Round[A]Pad_1524_um 3 1270 0) + (pin Round[A]Pad_1524_um 4 3810 0) + ) + (image SW_PIDP2019 + (outline (path signal 150 -4700 10000 4700 10000)) + (outline (path signal 150 4750 -5750 4750 -2000)) + (outline (path signal 150 -4750 -5750 -4750 -2000)) + (outline (path signal 150 -4750 -5750 4750 -5750)) + (outline (path signal 150 -4750 -1950 -4750 10350)) + (outline (path signal 150 4750 10300 4750 -1950)) + (pin Round[A]Pad_2500_um 1 0 0) + (pin Round[A]Pad_2500_um 2 0 4700) + (pin Round[A]Pad_2500_um @1 1600 7875) + (pin Round[A]Pad_2500_um @2 0 -4700) + (pin Round[A]Pad_2500_um @3 -1600 -7875) + (pin Round[A]Pad_2500_um @4 -1600 7875) + (pin Round[A]Pad_2500_um @5 1600 -7875) + ) + (padstack Round[A]Pad_1397_um + (shape (circle F.Cu 1397)) + (shape (circle B.Cu 1397)) + (attach off) + ) + (padstack Round[A]Pad_1524_um + (shape (circle F.Cu 1524)) + (shape (circle B.Cu 1524)) + (attach off) + ) + (padstack Round[A]Pad_1676.4_um + (shape (circle F.Cu 1676.4)) + (shape (circle B.Cu 1676.4)) + (attach off) + ) + (padstack Round[A]Pad_2500_um + (shape (circle F.Cu 2500)) + (shape (circle B.Cu 2500)) + (attach off) + ) + (padstack Round[A]Pad_2850_um + (shape (circle F.Cu 2850)) + (shape (circle B.Cu 2850)) + (attach off) + ) + (padstack Round[A]Pad_4064_um + (shape (circle F.Cu 4064)) + (shape (circle B.Cu 4064)) + (attach off) + ) + (padstack Rect[A]Pad_1397x1397_um + (shape (rect F.Cu -698.5 -698.5 698.5 698.5)) + (shape (rect B.Cu -698.5 -698.5 698.5 698.5)) + (attach off) + ) + (padstack Rect[A]Pad_1524x1524_um + (shape (rect F.Cu -762 -762 762 762)) + (shape (rect B.Cu -762 -762 762 762)) + (attach off) + ) + (padstack "Via[0-1]_889:635_um" + (shape (circle F.Cu 889)) + (shape (circle B.Cu 889)) + (attach off) + ) + (padstack "Via[0-1]_889:0_um" + (shape (circle F.Cu 889)) + (shape (circle B.Cu 889)) + (attach off) + ) + ) + (network + (net +3.3V + (pins P1-1 P3-1) + ) + (net +5V + (pins P1-2 P1-4 DZ1-1) + ) + (net GND + (pins P2-10 P1-6 P1-20) + ) + (net "N-00000101" + (pins D12-2 SW12-2) + ) + (net "N-00000104" + (pins D18-2 SW18-2) + ) + (net "N-00000105" + (pins D17-2 SW17-2) + ) + (net "N-00000106" + (pins D16-2 SW16-2) + ) + (net "N-00000107" + (pins D15-2 SW15-2) + ) + (net "N-00000108" + (pins D14-2 SW14-2) + ) + (net "N-00000109" + (pins D13-2 SW13-2) + ) + (net "N-00000110" + (pins D11-2 SW11-2) + ) + (net "N-00000111" + (pins D10-2 SW10-2) + ) + (net "N-00000112" + (pins D9-2 SW9-2) + ) + (net "N-00000113" + (pins D8-2 SW8-2) + ) + (net "N-00000114" + (pins D7-2 SW7-2) + ) + (net "N-00000119" + (pins D26-2 SW26-2) + ) + (net "N-00000120" + (pins D25-2 SW25-2) + ) + (net "N-0000060" + (pins P2-9 DZ1-2) + ) + (net "N-0000064" + (pins D1-2 SW1-2) + ) + (net "N-0000065" + (pins D6-2 SW6-2) + ) + (net "N-0000066" + (pins D5-2 SW5-2) + ) + (net "N-0000067" + (pins D4-2 SW4-2) + ) + (net "N-0000068" + (pins D3-2 SW3-2) + ) + (net "N-0000069" + (pins D2-2 SW2-2) + ) + (net "N-0000070" + (pins R3-2 P1-7) + ) + (net "N-0000071" + (pins R_ROW2-1 P1-11) + ) + (net "N-0000072" + (pins R9-1 P1-19) + ) + (net "N-0000073" + (pins R8-1 P1-21) + ) + (net "N-0000074" + (pins R4-2 P1-29) + ) + (net "N-0000075" + (pins R5-2 P1-31) + ) + (net "N-0000076" + (pins R12-1 P1-33) + ) + (net "N-0000077" + (pins R_ROW3-1 P1-12) + ) + (net "N-0000078" + (pins R7-1 P1-24) + ) + (net "N-0000079" + (pins R11-1 P1-32) + ) + (net "N-0000080" + (pins R_ROW1-1 P1-36) + ) + (net "N-0000081" + (pins D23-2 SW23-2) + ) + (net "N-0000082" + (pins D22-2 SW22-2) + ) + (net "N-0000083" + (pins D21-2 SW21-2) + ) + (net "N-0000084" + (pins D20-2 SW20-2) + ) + (net "N-0000085" + (pins D19-2 SW19-2) + ) + (net "N-0000087" + (pins R1-1 P1-8) + ) + (net "N-0000088" + (pins R2-1 P1-10) + ) + (net "N-0000095" + (pins R10-1 P1-23) + ) + (net "N-0000096" + (pins R6-2 P1-26) + ) + (net "N-0000097" + (pins D24-2 SW24-2) + ) + (net col1 + (pins R1-2 D7-1 D1-1 D19-1 DAC1-2 DPC1-2 DMQ1-2 DMA1-2 DMB1-2 DCURAD1-2 DDF1-2 + DAND1-2) + ) + (net col10 + (pins R10-2 D16-1 DMB10-2 DAC10-2 DMQ10-2 DPC10-2 DMA10-2 DEXEC1-2 DSC5-2) + ) + (net col11 + (pins R11-2 D17-1 DMB11-2 DMQ11-2 DAC11-2 DPC11-2 DMA11-2 DDEFER1-2) + ) + (net col12 + (pins R12-2 D18-1 DMB12-2 DAC12-2 DMQ12-2 DPC12-2 DMA12-2 DWRDCT1-2) + ) + (net col2 + (pins R2-2 D2-1 D8-1 D20-1 DAC2-2 DMQ2-2 DPC2-2 DMA2-2 DMB2-2 DBREAK1-2 DDF2-2 + DTAD1-2) + ) + (net col3 + (pins R3-1 D3-1 D9-1 D21-1 DAC3-2 DMQ3-2 DPC3-2 DMA3-2 DMB3-2 DION1-2 DDF3-2 + DISZ1-2) + ) + (net col4 + (pins R4-1 D22-1 D4-1 D10-1 DAC4-2 DMQ4-2 DPC4-2 DMB4-2 DMA4-2 DPAUSE1-2 DDCA1-2 + DIF1-2 DPAUSE2-2) + ) + (net col5 + (pins R5-1 D23-1 D5-1 D11-1 DAC5-2 DMQ5-2 DPC5-2 DMA5-2 DMB5-2 DRUN1-2 DJMS1-2 + DIF2-2 DRUN2-2) + ) + (net col6 + (pins R6-1 D24-1 D12-1 D6-1 DAC6-2 DMQ6-2 DSC1-2 DPC6-2 DMA6-2 DMB6-2 DJMP1-2 + DIF3-2) + ) + (net col7 + (pins R7-2 D25-1 D13-1 DAC7-2 DMQ7-2 DLINK1-2 DPC7-2 DMA7-2 DMB7-2 DIOT1-2 DSC2-2) + ) + (net col8 + (pins R8-2 D26-1 D14-1 DAC8-2 DMQ8-2 DPC8-2 DMB8-2 DMA8-2 DOPR1-2 DSC3-2) + ) + (net col9 + (pins R9-2 D15-1 DMB9-2 DAC9-2 DMQ9-2 DPC9-2 DMA9-2 DFETCH1-2 DSC4-2) + ) + (net i2cgnd + (pins P1-9 P3-4) + ) + (net led1 + (pins P2-18 DPC1-1 DPC2-1 DPC3-1 DPC4-1 DPC5-1 DPC6-1 DPC7-1 DPC8-1 DPC9-1 DPC10-1 + DPC11-1 DPC12-1) + ) + (net led2 + (pins P2-17 DMA1-1 DMA2-1 DMA3-1 DMA5-1 DMA6-1 DMA7-1 DMA8-1 DMA9-1 DMA10-1 + DMA11-1 DMA12-1 DMA4-1) + ) + (net led3 + (pins P2-16 DMB9-1 DMB10-1 DMB11-1 DMB12-1 DMB8-1 DMB1-1 DMB2-1 DMB3-1 DMB4-1 + DMB5-1 DMB6-1 DMB7-1) + ) + (net led4 + (pins P2-15 DAC1-1 DAC2-1 DAC3-1 DAC4-1 DAC5-1 DAC6-1 DAC7-1 DAC8-1 DAC9-1 DAC10-1 + DAC12-1 DAC11-1) + ) + (net led5 + (pins P2-14 DMQ1-1 DMQ2-1 DMQ3-1 DMQ4-1 DMQ5-1 DMQ6-1 DMQ7-1 DMQ8-1 DMQ9-1 DMQ10-1 + DMQ11-1 DMQ12-1) + ) + (net led6 + (pins P2-13 DWRDCT1-1 DDEFER1-1 DEXEC1-1 DFETCH1-1 DOPR1-1 DIOT1-1 DJMP1-1 DJMS1-1 + DDCA1-1 DTAD1-1 DAND1-1 DISZ1-1) + ) + (net led7 + (pins P2-12 DSC1-1 DRUN1-1 DPAUSE1-1 DION1-1 DBREAK1-1 DCURAD1-1 DSC2-1 DSC4-1 + DSC5-1 DSC3-1 DPAUSE2-1 DRUN2-1) + ) + (net led8 + (pins P2-11 DLINK1-1 DDF1-1 DDF2-1 DDF3-1 DIF2-1 DIF3-1 DIF1-1) + ) + (net row1 + (pins R_ROW1-2 SW18-1 SW17-1 SW15-1 SW14-1 SW13-1 SW12-1 SW16-1 SW7-1 SW8-1 + SW9-1 SW10-1 SW11-1) + ) + (net row2 + (pins R_ROW2-2 SW6-1 SW5-1 SW4-1 SW3-1 SW2-1 SW1-1) + ) + (net row3 + (pins R_ROW3-2 SW19-1 SW20-1 SW22-1 SW23-1 SW24-1 SW25-1 SW26-1 SW21-1) + ) + (net scl + (pins P1-5 P3-3) + ) + (net sda + (pins P1-3 P3-2) + ) + (net xled1 + (pins P2-1 P1-38) + ) + (net xled2 + (pins P2-2 P1-40) + ) + (net xled3 + (pins P2-3 P1-15) + ) + (net xled4 + (pins P2-4 P1-16) + ) + (net xled5 + (pins P2-5 P1-18) + ) + (net xled6 + (pins P2-6 P1-22) + ) + (net xled7 + (pins P2-7 P1-37) + ) + (net xled8 + (pins P2-8 P1-13) + ) + (class kicad_default "" "N-00000101" "N-00000104" "N-00000105" "N-00000106" + "N-00000107" "N-00000108" "N-00000109" "N-00000110" "N-00000111" "N-00000112" + "N-00000113" "N-00000114" "N-00000119" "N-00000120" "N-0000060" "N-0000064" + "N-0000065" "N-0000066" "N-0000067" "N-0000068" "N-0000069" "N-0000070" + "N-0000071" "N-0000072" "N-0000073" "N-0000074" "N-0000075" "N-0000076" + "N-0000077" "N-0000078" "N-0000079" "N-0000080" "N-0000081" "N-0000082" + "N-0000083" "N-0000084" "N-0000085" "N-0000087" "N-0000088" "N-0000095" + "N-0000096" "N-0000097" col1 col10 col11 col12 col2 col3 col4 col5 col6 + col7 col8 col9 i2cgnd led1 led2 led3 led4 led5 led6 led7 led8 scl sda + xled1 xled2 xled3 xled4 xled5 xled6 xled7 xled8 + (circuit + (use_via Via[0-1]_889:635_um) + ) + (rule + (width 508) + (clearance 254.1) + ) + ) + (class Strong +3.3V +5V GND row1 row2 row3 + (circuit + (use_via Via[0-1]_889:635_um) + ) + (rule + (width 508) + (clearance 381.1) + ) + ) + ) + (wiring + (wire (path B.Cu 508 89000 -155200 89200 -155200)(net "N-00000114")(type protect)) + (wire (path B.Cu 508 92636 -158636 92636 -172150)(net "N-00000114")(type protect)) + (wire (path B.Cu 508 89200 -155200 92636 -158636)(net "N-00000114")(type protect)) + (wire (path B.Cu 508 25270 -172150 25270 -114930)(net col1)(type protect)) + (wire (path B.Cu 508 30270 -109930 30270 -70600)(net col1)(type protect)) + (wire (path B.Cu 508 25270 -114930 30270 -109930)(net col1)(type protect)) + (wire (path B.Cu 508 90270 -129000 90270 -143730)(net col1)(type protect)) + (wire (path B.Cu 508 85270 -148730 85270 -172150)(net col1)(type protect)) + (wire (path B.Cu 508 90270 -143730 85270 -148730)(net col1)(type protect)) + (wire (path B.Cu 508 90270 -114400 90270 -125120 90240 -125150 90240 -128970 + 90270 -129000)(net col1)(type protect)) + (wire (path B.Cu 508 90270 -99800 90270 -114400)(net col1)(type protect)) + (wire (path B.Cu 508 90270 -85200 90270 -99800)(net col1)(type protect)) + (wire (path B.Cu 508 90270 -70600 90270 -85200)(net col1)(type protect)) + (wire (path B.Cu 508 180270 -70600 180270 -85200 180270 -99800 180270 -114400 + 180190 -114480 180190 -128920 180270 -129000)(net col10)(type protect)) + (wire (path B.Cu 508 190270 -129000 190270 -124830 190270 -114400 190270 -99800 + 190270 -85200 190270 -70600)(net col11)(type protect)) + (wire (path B.Cu 508 200270 -70600 200270 -85200 200270 -99800 200270 -114400 + 200240 -114430 200240 -128970 200270 -129000)(net col12)(type protect)) + (wire (path B.Cu 508 35270 -172150 35270 -115430)(net col2)(type protect)) + (wire (path B.Cu 508 40270 -110430 40270 -70600)(net col2)(type protect)) + (wire (path B.Cu 508 35270 -115430 40270 -110430)(net col2)(type protect)) + (wire (path B.Cu 508 100270 -129000 100270 -142935)(net col2)(type protect)) + (wire (path B.Cu 508 95270 -147935 95270 -172150)(net col2)(type protect)) + (wire (path B.Cu 508 100270 -142935 95270 -147935)(net col2)(type protect)) + (wire (path B.Cu 508 100270 -70600 100270 -85200 100270 -99800 100270 -114400 + 100290 -114420 100290 -128980 100270 -129000)(net col2)(type protect)) + (wire (path B.Cu 508 50270 -70600 50270 -111070)(net col3)(type protect)) + (wire (path B.Cu 508 45270 -116070 45270 -172150)(net col3)(type protect)) + (wire (path B.Cu 508 50270 -111070 45270 -116070)(net col3)(type protect)) + (wire (path B.Cu 508 105270 -172150 105270 -148095)(net col3)(type protect)) + (wire (path B.Cu 508 110270 -143095 110270 -129000)(net col3)(type protect)) + (wire (path B.Cu 508 105270 -148095 110270 -143095)(net col3)(type protect)) + (wire (path B.Cu 508 110270 -70600 110270 -85200 110270 -99800 110270 -114400 + 110290 -114420 110290 -128980 110270 -129000)(net col3)(type protect)) + (wire (path B.Cu 508 55270 -172150 55270 -171670)(net col4)(type protect)) + (wire (path B.Cu 508 60270 -112330 60270 -70600)(net col4)(type protect)) + (wire (path B.Cu 508 55100 -117500 60270 -112330)(net col4)(type protect)) + (wire (path B.Cu 508 55100 -171500 55100 -117500)(net col4)(type protect)) + (wire (path B.Cu 508 55270 -171670 55100 -171500)(net col4)(type protect)) + (wire (path B.Cu 508 120270 -129000 120270 -125120 120270 -114400 120300 -114370 + 120300 -85230 120270 -85200 120270 -70600)(net col4)(type protect)) + (wire (path B.Cu 508 65270 -172150 65270 -117630)(net col5)(type protect)) + (wire (path B.Cu 508 70270 -112630 70270 -70600)(net col5)(type protect)) + (wire (path B.Cu 508 65270 -117630 70270 -112630)(net col5)(type protect)) + (wire (path B.Cu 508 130270 -70600 130270 -85200 130270 -99800 130270 -114400 + 130240 -114430 130240 -128970 130270 -129000)(net col5)(type protect)) + (wire (path B.Cu 508 75270 -172150 75270 -150630)(net col6)(type protect)) + (wire (path B.Cu 508 80270 -105030 80270 -70600)(net col6)(type protect)) + (wire (path B.Cu 508 74200 -111100 80270 -105030)(net col6)(type protect)) + (wire (path B.Cu 508 74200 -117200 74200 -111100)(net col6)(type protect)) + (wire (path B.Cu 508 77000 -120000 74200 -117200)(net col6)(type protect)) + (wire (path B.Cu 508 77000 -148900 77000 -120000)(net col6)(type protect)) + (wire (path B.Cu 508 75270 -150630 77000 -148900)(net col6)(type protect)) + (wire (path B.Cu 508 140270 -70600 140270 -85200 140270 -99800 140270 -114400 + 140340 -114470 140340 -128930 140270 -129000)(net col6)(type protect)) + (wire (path B.Cu 508 150270 -70600 150270 -85200 150270 -99800 150270 -114400 + 150290 -114420 150290 -128980 150270 -129000)(net col7)(type protect)) + (wire (path B.Cu 508 160270 -70600 160270 -85200 160270 -99800 160270 -114400 + 160240 -114430 160240 -128970 160270 -129000)(net col8)(type protect)) + (wire (path B.Cu 508 170290 -128980 170270 -129000)(net col9)(type protect)) + (wire (path B.Cu 508 170290 -114420 170290 -128980)(net col9)(type protect)) + (wire (path B.Cu 508 170270 -114400 170290 -114420)(net col9)(type protect)) + (wire (path B.Cu 508 170270 -99800 170270 -114400)(net col9)(type protect)) + (wire (path B.Cu 508 170270 -85200 170270 -99800)(net col9)(type protect)) + (wire (path B.Cu 508 170270 -70600 170270 -85200)(net col9)(type protect)) + (wire (path F.Cu 508 97730 -70600 97730 -74930 97790 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 107730 -70600 107730 -74930 107950 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 117730 -70600 117730 -74930 117475 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 127730 -70600 127730 -74930 128270 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 137730 -70600 137730 -74930 137795 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 147730 -70600 147730 -74930 147955 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 157730 -70600 157730 -74930 158115 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 167730 -70600 167730 -74930 167640 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 177730 -70600 177730 -74930 177800 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 187730 -70600 187730 -74930 187960 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 87730 -70600 87730 -74830)(net led1)(type protect)) + (wire (path F.Cu 508 193400 -74930 197730 -70600)(net led1)(type protect)) + (wire (path F.Cu 508 87830 -74930 97790 -74930 107950 -74930 117475 -74930 + 128270 -74930 137795 -74930 147955 -74930 158115 -74930 167640 -74930 + 177800 -74930 187960 -74930 193400 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 87730 -74830 87830 -74930)(net led1)(type protect)) + (wire (path F.Cu 508 88900 -88900 87630 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 97790 -88900 89535 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 88900 -88900 89535 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 87730 -88800 87730 -85200)(net led2)(type protect)) + (wire (path F.Cu 508 87630 -88900 87730 -88800)(net led2)(type protect)) + (wire (path F.Cu 508 97730 -85200 97730 -88900 97790 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 107730 -85200 107730 -88900 107950 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 117730 -85200 117730 -88900 117475 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 127730 -85200 127730 -88900 127635 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 137730 -85200 137730 -88900 137795 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 147730 -85200 147730 -88900 147320 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 157730 -85200 157730 -88900 158115 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 167730 -85200 167730 -88900 167640 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 177730 -85200 177730 -88900 177165 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 187730 -85200 187730 -88900 187325 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 194030 -88900 197730 -85200)(net led2)(type protect)) + (wire (path F.Cu 508 97790 -88900 107950 -88900 117475 -88900 127635 -88900 + 137795 -88900 147320 -88900 158115 -88900 167640 -88900 177165 -88900 + 187325 -88900 194030 -88900)(net led2)(type protect)) + (wire (path F.Cu 508 97730 -99800 97730 -104775 97790 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 107730 -99800 107730 -104775 107950 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 117730 -99800 117730 -104775 117475 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 127730 -99800 127730 -104775 127635 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 137730 -99800 137730 -104775 137795 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 147730 -99800 147730 -104775 147320 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 157730 -99800 157730 -104775 157480 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 167730 -99800 167730 -104775 167640 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 177730 -99800 177730 -104775 177800 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 187730 -99800 187730 -104775 187960 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 87730 -99800 87730 -104675)(net led3)(type protect)) + (wire (path F.Cu 508 192755 -104775 197730 -99800)(net led3)(type protect)) + (wire (path F.Cu 508 87830 -104775 97790 -104775 107950 -104775 117475 -104775 + 127635 -104775 137795 -104775 147320 -104775 157480 -104775 + 167640 -104775 177800 -104775 187960 -104775 192755 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 87730 -104675 87830 -104775)(net led3)(type protect)) + (wire (path F.Cu 508 97730 -114400 97730 -118745 97790 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 107730 -114400 107730 -118745 107315 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 117730 -114400 117730 -118745 117475 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 127730 -114400 127730 -118745 127635 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 137730 -114400 137730 -118745 137795 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 147730 -114400 147730 -118745 147955 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 157730 -114400 157730 -118745 158115 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 167730 -114400 167730 -118745 167640 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 177730 -114400 177730 -118745 177800 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 187730 -114400 187730 -118745 187325 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 87730 -114400 87730 -118645)(net led4)(type protect)) + (wire (path F.Cu 508 193385 -118745 197730 -114400)(net led4)(type protect)) + (wire (path F.Cu 508 87830 -118745 97790 -118745 107315 -118745 117475 -118745 + 127635 -118745 137795 -118745 147955 -118745 158115 -118745 + 167640 -118745 177800 -118745 187325 -118745 193385 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 87730 -118645 87830 -118745)(net led4)(type protect)) + (wire (path F.Cu 508 97730 -129000 97730 -125095 97790 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 107730 -129000 107730 -125095 107950 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 117730 -129000 117730 -125095 117475 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 127730 -129000 127730 -125095 127635 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 137730 -129000 137730 -125095 137795 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 147730 -129000 147730 -125095 147955 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 157730 -129000 157730 -125095 157480 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 167730 -129000 167730 -125095 167640 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 177730 -129000 177730 -125095 177800 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 187730 -129000 187730 -125095 187960 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 87730 -129000 87730 -125195)(net led5)(type protect)) + (wire (path F.Cu 508 193825 -125095 197730 -129000)(net led5)(type protect)) + (wire (path F.Cu 508 87830 -125095 97790 -125095 107950 -125095 117475 -125095 + 127635 -125095 137795 -125095 147955 -125095 157480 -125095 + 167640 -125095 177800 -125095 187960 -125095 193825 -125095)(net led5)(type protect)) + (wire (path F.Cu 508 87730 -125195 87830 -125095)(net led5)(type protect)) + (wire (path B.Cu 508 257730 -92500 257730 -85200 257730 -77900 257730 -70600)(net led6)(type protect)) + (wire (path B.Cu 508 237730 -70600 237730 -77900 237730 -85200 237730 -92500 + 237730 -99800 237730 -107000 237730 -121400)(net led6)(type protect)) + (wire (path B.Cu 508 277730 -70600 277730 -75800 277730 -85200)(net led7)(type protect)) + (wire (path B.Cu 508 257730 -99800 257730 -107100 257730 -114400 257730 -121700)(net led7)(type protect)) + (wire (path F.Cu 508 37730 -129000 37730 -125095 38100 -125095)(net led7)(type protect)) + (wire (path F.Cu 508 47730 -129000 47730 -125095 47625 -125095)(net led7)(type protect)) + (wire (path F.Cu 508 57730 -129000 57730 -125095 57785 -125095)(net led7)(type protect)) + (wire (path F.Cu 508 27730 -129000 27730 -125305)(net led7)(type protect)) + (wire (path F.Cu 508 63825 -125095 67730 -129000)(net led7)(type protect)) + (wire (path F.Cu 508 27940 -125095 38100 -125095 47625 -125095 57785 -125095 + 63825 -125095)(net led7)(type protect)) + (wire (path F.Cu 508 27730 -125305 27940 -125095)(net led7)(type protect)) + (wire (path F.Cu 508 73400 -74930 77730 -70600)(net led8)(type protect)) + (wire (path F.Cu 508 73400 -74930 67945 -74930)(net led8)(type protect)) + (wire (path F.Cu 508 67730 -70600 67730 -74930 67945 -74930)(net led8)(type protect)) + (wire (path F.Cu 508 57730 -70600 57730 -74930 57785 -74930)(net led8)(type protect)) + (wire (path F.Cu 508 47730 -70600 47730 -74930 47625 -74930)(net led8)(type protect)) + (wire (path F.Cu 508 37730 -70600 37730 -74930 38100 -74930)(net led8)(type protect)) + (wire (path F.Cu 508 27730 -70600 27730 -74720)(net led8)(type protect)) + (wire (path F.Cu 508 27940 -74930 38100 -74930 47625 -74930 57785 -74930 67945 -74930)(net led8)(type protect)) + (wire (path F.Cu 508 27730 -74720 27940 -74930)(net led8)(type protect)) + (wire (path F.Cu 508 185440 -148450 185440 -148570)(net row1)(type protect)) + (wire (path F.Cu 508 184150 -149860 184150 -159900)(net row1)(type protect)) + (wire (path F.Cu 508 185440 -148570 184150 -149860)(net row1)(type protect)) + (wire (path F.Cu 508 89000 -159900 99000 -159900 109000 -159900 119000 -159900 + 129000 -159900 139000 -159900 149000 -159900 159000 -159900 + 169000 -159900 179000 -159900 184150 -159900 189000 -159900 + 199000 -159900)(net row1)(type protect)) + (wire (path F.Cu 508 75190 -148500 75190 -148810)(net row2)(type protect)) + (wire (path F.Cu 508 74000 -150000 74000 -159900)(net row2)(type protect)) + (wire (path F.Cu 508 75190 -148810 74000 -150000)(net row2)(type protect)) + (wire (path F.Cu 508 29000 -159900 39000 -159900 49000 -159900 59000 -159900 + 69000 -159900 74000 -159900 79000 -159900)(net row2)(type protect)) + (wire (path F.Cu 508 232810 -148450 232810 -148610)(net row3)(type protect)) + (wire (path F.Cu 508 234100 -149900 234100 -159900)(net row3)(type protect)) + (wire (path F.Cu 508 232810 -148610 234100 -149900)(net row3)(type protect)) + (wire (path F.Cu 508 209000 -159900 219000 -159900 229000 -159900 234100 -159900 + 239000 -159900 249000 -159900 259000 -159900 269000 -159900 + 279000 -159900)(net row3)(type protect)) + ) +) ADDED hardware/pidp8i/PDP8.kicad_pcb Index: hardware/pidp8i/PDP8.kicad_pcb ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8.kicad_pcb @@ -0,0 +1,7837 @@ +(kicad_pcb (version 3) (host pcbnew "(2013-07-07 BZR 4022)-stable") + + (general + (links 292) + (no_connects 0) + (area 9.149999 64.3193 291.050001 174.850001) + (thickness 1.6) + (drawings 65) + (tracks 987) + (zones 0) + (modules 169) + (nets 80) + ) + + (page A4) + (layers + (15 F.Cu signal) + (0 B.Cu signal) + (16 B.Adhes user) + (17 F.Adhes user) + (18 B.Paste user) + (19 F.Paste user) + (20 B.SilkS user) + (21 F.SilkS user) + (22 B.Mask user) + (23 F.Mask user) + (24 Dwgs.User user) + (25 Cmts.User user) + (26 Eco1.User user) + (27 Eco2.User user) + (28 Edge.Cuts user) + ) + + (setup + (last_trace_width 0.508) + (trace_clearance 0.254) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.254) + (segment_width 0.1) + (edge_width 0.1) + (via_size 0.889) + (via_drill 0.635) + (via_min_size 0.889) + (via_min_drill 0.508) + (uvia_size 0.508) + (uvia_drill 0.127) + (uvias_allowed no) + (uvia_min_size 0.508) + (uvia_min_drill 0.127) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.01) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 3.9 2.1) + (pad_drill 2.9) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements 7FFFFF3F) + (pcbplotparams + (layerselection 284196865) + (usegerberextensions true) + (excludeedgelayer false) + (linewidth 0.150000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotothertext true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk true) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory gerber20190414/)) + ) + + (net 0 "") + (net 1 +3.3V) + (net 2 +5V) + (net 3 GND) + (net 4 N-00000101) + (net 5 N-00000104) + (net 6 N-00000105) + (net 7 N-00000106) + (net 8 N-00000107) + (net 9 N-00000108) + (net 10 N-00000109) + (net 11 N-00000110) + (net 12 N-00000111) + (net 13 N-00000112) + (net 14 N-00000113) + (net 15 N-00000114) + (net 16 N-00000119) + (net 17 N-00000120) + (net 18 N-0000060) + (net 19 N-0000064) + (net 20 N-0000065) + (net 21 N-0000066) + (net 22 N-0000067) + (net 23 N-0000068) + (net 24 N-0000069) + (net 25 N-0000070) + (net 26 N-0000071) + (net 27 N-0000072) + (net 28 N-0000073) + (net 29 N-0000074) + (net 30 N-0000075) + (net 31 N-0000076) + (net 32 N-0000077) + (net 33 N-0000078) + (net 34 N-0000079) + (net 35 N-0000080) + (net 36 N-0000081) + (net 37 N-0000082) + (net 38 N-0000083) + (net 39 N-0000084) + (net 40 N-0000085) + (net 41 N-0000087) + (net 42 N-0000088) + (net 43 N-0000095) + (net 44 N-0000096) + (net 45 N-0000097) + (net 46 col1) + (net 47 col10) + (net 48 col11) + (net 49 col12) + (net 50 col2) + (net 51 col3) + (net 52 col4) + (net 53 col5) + (net 54 col6) + (net 55 col7) + (net 56 col8) + (net 57 col9) + (net 58 i2cgnd) + (net 59 led1) + (net 60 led2) + (net 61 led3) + (net 62 led4) + (net 63 led5) + (net 64 led6) + (net 65 led7) + (net 66 led8) + (net 67 row1) + (net 68 row2) + (net 69 row3) + (net 70 scl) + (net 71 sda) + (net 72 xled1) + (net 73 xled2) + (net 74 xled3) + (net 75 xled4) + (net 76 xled5) + (net 77 xled6) + (net 78 xled7) + (net 79 xled8) + + (net_class Default "This is the default net class." + (clearance 0.254) + (trace_width 0.508) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net "") + (add_net N-00000101) + (add_net N-00000104) + (add_net N-00000105) + (add_net N-00000106) + (add_net N-00000107) + (add_net N-00000108) + (add_net N-00000109) + (add_net N-00000110) + (add_net N-00000111) + (add_net N-00000112) + (add_net N-00000113) + (add_net N-00000114) + (add_net N-00000119) + (add_net N-00000120) + (add_net N-0000060) + (add_net N-0000064) + (add_net N-0000065) + (add_net N-0000066) + (add_net N-0000067) + (add_net N-0000068) + (add_net N-0000069) + (add_net N-0000070) + (add_net N-0000071) + (add_net N-0000072) + (add_net N-0000073) + (add_net N-0000074) + (add_net N-0000075) + (add_net N-0000076) + (add_net N-0000077) + (add_net N-0000078) + (add_net N-0000079) + (add_net N-0000080) + (add_net N-0000081) + (add_net N-0000082) + (add_net N-0000083) + (add_net N-0000084) + (add_net N-0000085) + (add_net N-0000087) + (add_net N-0000088) + (add_net N-0000095) + (add_net N-0000096) + (add_net N-0000097) + (add_net col1) + (add_net col10) + (add_net col11) + (add_net col12) + (add_net col2) + (add_net col3) + (add_net col4) + (add_net col5) + (add_net col6) + (add_net col7) + (add_net col8) + (add_net col9) + (add_net i2cgnd) + (add_net led1) + (add_net led2) + (add_net led3) + (add_net led4) + (add_net led5) + (add_net led6) + (add_net led7) + (add_net led8) + (add_net scl) + (add_net sda) + (add_net xled1) + (add_net xled2) + (add_net xled3) + (add_net xled4) + (add_net xled5) + (add_net xled6) + (add_net xled7) + (add_net xled8) + ) + + (net_class Strong "" + (clearance 0.381) + (trace_width 0.508) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net +3.3V) + (add_net +5V) + (add_net GND) + (add_net row1) + (add_net row2) + (add_net row3) + ) + + (module 1pin (layer F.Cu) (tedit 5CB3500A) (tstamp 5C1FB991) + (at 207.1 82.6) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path /54BD36C6) + (fp_text reference M5 (at 0 -3.048) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value M (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (pad 1 thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.048) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module 1pin (layer F.Cu) (tedit 5CB34FDB) (tstamp 5CB4A5C6) + (at 124 141) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path 1pin) + (fp_text reference 1PIN (at 0 -3.048) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value P*** (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (pad 1 thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.048) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17F96) + (at 174.1 121.725 180) + (descr "Resitance 3 pas") + (tags R) + (path /54908374) + (autoplace_cost180 10) + (fp_text reference R9 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 27 N-0000072) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 5C1E87DC) + (at 94.05 121.975 180) + (descr "Resitance 3 pas") + (tags R) + (path /5490833D) + (autoplace_cost180 10) + (fp_text reference R1 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 41 N-0000087) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17F67) + (at 104.1 121.975 180) + (descr "Resitance 3 pas") + (tags R) + (path /5490834A) + (autoplace_cost180 10) + (fp_text reference R2 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 42 N-0000088) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 5C1E8A26) + (at 114.1 121.975) + (descr "Resitance 3 pas") + (tags R) + (path /54908350) + (autoplace_cost180 10) + (fp_text reference R3 (at 0 0.127) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 25 N-0000070) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17C54) + (at 124.1 121.925) + (descr "Resitance 3 pas") + (tags R) + (path /54908356) + (autoplace_cost180 10) + (fp_text reference R4 (at 0 0.127) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 29 N-0000074) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17C62) + (at 134.05 121.925) + (descr "Resitance 3 pas") + (tags R) + (path /5490835C) + (autoplace_cost180 10) + (fp_text reference R5 (at 0 0.127) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 30 N-0000075) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17C70) + (at 144.15 121.875) + (descr "Resitance 3 pas") + (tags R) + (path /54908362) + (autoplace_cost180 10) + (fp_text reference R6 (at 0 0.127) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 44 N-0000096) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17C7E) + (at 154.1 121.875 180) + (descr "Resitance 3 pas") + (tags R) + (path /54908368) + (autoplace_cost180 10) + (fp_text reference R7 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 33 N-0000078) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17C8C) + (at 164.05 121.825 180) + (descr "Resitance 3 pas") + (tags R) + (path /5490836E) + (autoplace_cost180 10) + (fp_text reference R8 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 28 N-0000073) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B1C0BD) + (at 184 121.675 180) + (descr "Resitance 3 pas") + (tags R) + (path /5490837A) + (autoplace_cost180 10) + (fp_text reference R10 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 43 N-0000095) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17CA8) + (at 194.05 121.625 180) + (descr "Resitance 3 pas") + (tags R) + (path /54908380) + (autoplace_cost180 10) + (fp_text reference R11 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 34 N-0000079) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17CB6) + (at 204.05 121.625 180) + (descr "Resitance 3 pas") + (tags R) + (path /54908386) + (autoplace_cost180 10) + (fp_text reference R12 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 390 (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 31 N-0000076) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 5CB38C8F) + (at 189.25 148.45 180) + (descr "Resitance 3 pas") + (tags R) + (path /5490838C) + (autoplace_cost180 10) + (fp_text reference R_ROW1 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 1K (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 35 N-0000080) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 54B17CD2) + (at 79 148.5 180) + (descr "Resitance 3 pas") + (tags R) + (path /5490839E) + (autoplace_cost180 10) + (fp_text reference R_ROW2 (at 0 0.127 180) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 1K (at 0 0.127 180) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 26 N-0000071) + ) + (pad 2 thru_hole circle (at 3.81 0 180) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 68 row2) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module R3 (layer F.Cu) (tedit 4E4C0E65) (tstamp 5CB38C80) + (at 229 148.45) + (descr "Resitance 3 pas") + (tags R) + (path /549083A4) + (autoplace_cost180 10) + (fp_text reference R_ROW3 (at 0 0.127) (layer F.SilkS) hide + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_text value 1K (at 0 0.127) (layer F.SilkS) + (effects (font (size 1.397 1.27) (thickness 0.2032))) + ) + (fp_line (start -3.81 0) (end -3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.81 0) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 0) (end 3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 -1.016) (end -3.302 -1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -1.016) (end -3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 1.016) (end 3.302 1.016) (layer F.SilkS) (width 0.2032)) + (fp_line (start 3.302 1.016) (end 3.302 0) (layer F.SilkS) (width 0.2032)) + (fp_line (start -3.302 -0.508) (end -2.794 -1.016) (layer F.SilkS) (width 0.2032)) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 32 N-0000077) + ) + (pad 2 thru_hole circle (at 3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + ) + (model discret/resistor.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module DIP-18__300 (layer F.Cu) (tedit 200000) (tstamp 54B17CFD) + (at 266.8 139.8) + (descr "8 pins DIL package, round pads") + (path /54B17386) + (fp_text reference P2 (at -7.62 -1.27) (layer F.SilkS) + (effects (font (size 1.778 1.143) (thickness 0.3048))) + ) + (fp_text value UDN2981A (at 5.08 1.27) (layer F.SilkS) + (effects (font (size 1.778 1.143) (thickness 0.3048))) + ) + (fp_line (start -12.7 -1.27) (end -11.43 -1.27) (layer F.SilkS) (width 0.381)) + (fp_line (start -11.43 -1.27) (end -11.43 1.27) (layer F.SilkS) (width 0.381)) + (fp_line (start -11.43 1.27) (end -12.7 1.27) (layer F.SilkS) (width 0.381)) + (fp_line (start -12.7 -2.54) (end 12.7 -2.54) (layer F.SilkS) (width 0.381)) + (fp_line (start 12.7 -2.54) (end 12.7 2.54) (layer F.SilkS) (width 0.381)) + (fp_line (start 12.7 2.54) (end -12.7 2.54) (layer F.SilkS) (width 0.381)) + (fp_line (start -12.7 2.54) (end -12.7 -2.54) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole rect (at -10.16 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 72 xled1) + ) + (pad 2 thru_hole circle (at -7.62 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 73 xled2) + ) + (pad 3 thru_hole circle (at -5.08 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 74 xled3) + ) + (pad 4 thru_hole circle (at -2.54 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 75 xled4) + ) + (pad 5 thru_hole circle (at 0 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 76 xled5) + ) + (pad 6 thru_hole circle (at 2.54 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 77 xled6) + ) + (pad 7 thru_hole circle (at 5.08 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 78 xled7) + ) + (pad 8 thru_hole circle (at 7.62 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 79 xled8) + ) + (pad 9 thru_hole circle (at 10.16 3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 18 N-0000060) + ) + (pad 10 thru_hole circle (at 10.16 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 3 GND) + ) + (pad 11 thru_hole circle (at 7.62 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 12 thru_hole circle (at 5.08 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 13 thru_hole circle (at 2.54 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 14 thru_hole circle (at 0 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 15 thru_hole circle (at -2.54 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 16 thru_hole circle (at -5.08 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 17 thru_hole circle (at -7.62 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 18 thru_hole circle (at -10.16 -3.81) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (model dil/dil_18.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54B1C854) + (at 14 70) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path /54B1CC4A) + (fp_text reference M1 (at 0 -3.048) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value M (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 5C2B7A95) + (at 14 165.4) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path /54B1CC76) + (fp_text reference M2 (at 0 -3.048) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value M (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 54B1C860) + (at 286 70) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path /54B1CC7C) + (fp_text reference M3 (at 0 -3.048) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value M (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module 1pin (layer F.Cu) (tedit 200000) (tstamp 5C1FB93D) + (at 286 165.4) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path /54B1CC82) + (fp_text reference M4 (at 0 -3.048) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value M (at 0 2.794) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_circle (center 0 0) (end 0 -2.286) (layer F.SilkS) (width 0.381)) + (pad 1 thru_hole circle (at 0 0) (size 4.064 4.064) (drill 3.048) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A6CD) + (at 249.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070DB) + (fp_text reference D23 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 36 N-0000081) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A6DE) + (at 259.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070E1) + (fp_text reference D24 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 45 N-0000097) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A6BC) + (at 239.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070D5) + (fp_text reference D22 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 37 N-0000082) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A6EF) + (at 269.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070E7) + (fp_text reference D25 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 17 N-00000120) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A733) + (at 279.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070ED) + (fp_text reference D26 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 16 N-00000119) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D5D) + (at 139.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905640) + (fp_text reference D12 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 4 N-00000101) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D6D) + (at 39.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /5490504C) + (fp_text reference D2 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 24 N-0000069) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D7D) + (at 49.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905056) + (fp_text reference D3 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 23 N-0000068) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D8D) + (at 59.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /5490505E) + (fp_text reference D4 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 22 N-0000067) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17D9D) + (at 69.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905068) + (fp_text reference D5 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 21 N-0000066) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DAD) + (at 79.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /5490506E) + (fp_text reference D6 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 20 N-0000065) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DBD) + (at 89.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549055F9) + (fp_text reference D7 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 15 N-00000114) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DCD) + (at 99.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549055FF) + (fp_text reference D8 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 14 N-00000113) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DDD) + (at 109.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905605) + (fp_text reference D9 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 13 N-00000112) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DED) + (at 119.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /5490560B) + (fp_text reference D10 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 12 N-00000111) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17DFD) + (at 129.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905611) + (fp_text reference D11 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 11 N-00000110) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E0D) + (at 29.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54904DF0) + (fp_text reference D1 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 19 N-0000064) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E1D) + (at 149.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905646) + (fp_text reference D13 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 10 N-00000109) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E2D) + (at 159.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /5490564C) + (fp_text reference D14 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 9 N-00000108) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E3D) + (at 169.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905652) + (fp_text reference D15 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 8 N-00000107) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E4D) + (at 179.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905658) + (fp_text reference D16 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 7 N-00000106) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E5D) + (at 189.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /5490565E) + (fp_text reference D17 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 6 N-00000105) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54B17E6D) + (at 199.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54905664) + (fp_text reference D18 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 5 N-00000104) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A689) + (at 209.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070C3) + (fp_text reference D19 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 40 N-0000085) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A69A) + (at 219.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070C9) + (fp_text reference D20 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 39 N-0000084) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 5CB4A6AB) + (at 229.08 171.55) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /549070CF) + (fp_text reference D21 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value 1N4148 (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 38 N-0000083) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F22E4) + (at 169 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5B2) + (fp_text reference DMB9 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F22CB) + (at 179 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5B8) + (fp_text reference DMB10 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F22B2) + (at 189 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5BE) + (fp_text reference DMB11 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2299) + (at 199 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5C4) + (fp_text reference DMB12 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2280) + (at 89 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5CC) + (fp_text reference DAC1 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2267) + (at 99 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5E5) + (fp_text reference DAC2 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F224E) + (at 109 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5EB) + (fp_text reference DAC3 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2235) + (at 119 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5F1) + (fp_text reference DAC4 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F221C) + (at 129 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5F7) + (fp_text reference DAC5 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2203) + (at 139 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5FD) + (fp_text reference DAC6 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F21EA) + (at 149 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF603) + (fp_text reference DAC7 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F21D1) + (at 159 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF609) + (fp_text reference DAC8 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F21B8) + (at 169 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF60F) + (fp_text reference DAC9 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F219F) + (at 179 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF615) + (fp_text reference DAC10 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3ADF) (tstamp 548F2186) + (at 89 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF34A) + (fp_text reference DPC1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F216D) + (at 199 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF621) + (fp_text reference DAC12 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2154) + (at 89 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF629) + (fp_text reference DMQ1 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F213B) + (at 99 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF642) + (fp_text reference DMQ2 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2122) + (at 109 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF648) + (fp_text reference DMQ3 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2109) + (at 119 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF64E) + (fp_text reference DMQ4 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20F0) + (at 129 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF654) + (fp_text reference DMQ5 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20D7) + (at 139 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF65A) + (fp_text reference DMQ6 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20BE) + (at 149 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF660) + (fp_text reference DMQ7 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F20A5) + (at 159 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF666) + (fp_text reference DMQ8 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F208C) + (at 169 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF66C) + (fp_text reference DMQ9 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2073) + (at 179 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF672) + (fp_text reference DMQ10 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F205A) + (at 189 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF678) + (fp_text reference DMQ11 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2041) + (at 199 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF67E) + (fp_text reference DMQ12 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 63 led5) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F2028) + (at 79 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF686) + (fp_text reference DLINK1 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F200F) + (at 29 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6A1) + (fp_text reference DSC1 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1FF6) + (at 189 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF61B) + (fp_text reference DAC11 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 62 led4) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AD6) (tstamp 548F1FDD) + (at 99 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF399) + (fp_text reference DPC2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AD0) (tstamp 548F1FC4) + (at 109 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3AC) + (fp_text reference DPC3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3ACA) (tstamp 548F1FAB) + (at 119 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3B2) + (fp_text reference DPC4 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AC4) (tstamp 548F1F92) + (at 129 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3B8) + (fp_text reference DPC5 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AB9) (tstamp 548F1F79) + (at 139 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3BE) + (fp_text reference DPC6 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AB3) (tstamp 548F1F60) + (at 149 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3C4) + (fp_text reference DPC7 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AAE) (tstamp 548F1F47) + (at 159 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3CA) + (fp_text reference DPC8 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AA8) (tstamp 548F1F2E) + (at 169 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3D0) + (fp_text reference DPC9 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3A9F) (tstamp 548F1F15) + (at 179 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3D6) + (fp_text reference DPC10 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3A99) (tstamp 548F1EFC) + (at 189 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3DC) + (fp_text reference DPC11 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3A92) (tstamp 548F1EE3) + (at 199 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3E2) + (fp_text reference DPC12 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 59 led1) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1ECA) + (at 89 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF463) + (fp_text reference DMA1 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1EB1) + (at 99 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF47C) + (fp_text reference DMA2 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E98) + (at 109 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF482) + (fp_text reference DMA3 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E7F) + (at 159 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5AC) + (fp_text reference DMB8 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E66) + (at 129 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF48E) + (fp_text reference DMA5 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E4D) + (at 139 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF494) + (fp_text reference DMA6 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E34) + (at 149 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF49A) + (fp_text reference DMA7 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E1B) + (at 159 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4A0) + (fp_text reference DMA8 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1E02) + (at 169 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4A6) + (fp_text reference DMA9 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1DE9) + (at 179 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4AC) + (fp_text reference DMA10 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1DD0) + (at 189 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4B2) + (fp_text reference DMA11 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1DB7) + (at 199 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4B8) + (fp_text reference DMA12 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D9E) + (at 89 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF56F) + (fp_text reference DMB1 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D85) + (at 99 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF588) + (fp_text reference DMB2 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D6C) + (at 109 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF58E) + (fp_text reference DMB3 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D53) + (at 119 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF594) + (fp_text reference DMB4 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D3A) + (at 129 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF59A) + (fp_text reference DMB5 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D21) + (at 139 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5A0) + (fp_text reference DMB6 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1D08) + (at 149 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5A6) + (fp_text reference DMB7 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 61 led3) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1CEF) + (at 119 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF488) + (fp_text reference DMA4 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 60 led2) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD77AA) (tstamp 548F1CD6) + (at 279 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF843) + (fp_text reference DRUN1 (at -9 -1.7) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD77A3) (tstamp 548F1CBD) + (at 279 77.9) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF83D) + (fp_text reference DPAUSE1 (at -8.5 -1.9) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD77A5) (tstamp 548F1CA4) + (at 279 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF837) + (fp_text reference DION1 (at -9.5 -2.1) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD778C) (tstamp 548F1C8B) + (at 259 107.1) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7E9) + (fp_text reference DBREAK1 (at -8.5 -1.6) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7784) (tstamp 548F1C72) + (at 259 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7E3) + (fp_text reference DCURAD1 (at -8.5 -1.8) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD777C) (tstamp 548F1C59) + (at 259 92.5) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7DD) + (fp_text reference DWRDCT1 (at -8.5 -2) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 49 col12) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7779) (tstamp 548F1C40) + (at 259 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7D7) + (fp_text reference DDEFER1 (at -8.5 -1.7) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 48 col11) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7795) (tstamp 548F1C27) + (at 259 77.9) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7D1) + (fp_text reference DEXEC1 (at -9 -1.9) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7797) (tstamp 548F1C0E) + (at 259 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7CB) + (fp_text reference DFETCH1 (at -9 -2.1) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD774F) (tstamp 548F1BF5) + (at 239 121.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF789) + (fp_text reference DOPR1 (at -7.5 -1.7) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD773D) (tstamp 548F1BDC) + (at 239 114.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF783) + (fp_text reference DIOT1 (at -7.5 -1.9) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7737) (tstamp 548F1BC3) + (at 239 107) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF77D) + (fp_text reference DJMP1 (at -7.5 -1.6) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD772E) (tstamp 548F1BAA) + (at 239 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF777) + (fp_text reference DJMS1 (at -8 -1.8) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7708) (tstamp 548F1B91) + (at 239 92.5) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF741) + (fp_text reference DDCA1 (at -8 -1.5) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1B78) + (at 39 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6BA) + (fp_text reference DSC2 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 55 col7) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1B5F) + (at 59 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6C6) + (fp_text reference DSC4 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 57 col9) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1B46) + (at 69 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6CC) + (fp_text reference DSC5 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 47 col10) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3B04) (tstamp 548F1B14) + (at 29 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6DA) + (fp_text reference DDF1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AFF) (tstamp 548F1AFB) + (at 39 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6F3) + (fp_text reference DDF2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AF9) (tstamp 548F1AE2) + (at 49 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6F9) + (fp_text reference DDF3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7621) (tstamp 548F1AC9) + (at 49 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6C0) + (fp_text reference DSC3 (at 0 -5.5372) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 56 col8) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7714) (tstamp 548F1AB0) + (at 239 77.9) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF735) + (fp_text reference DTAD1 (at -8 -1.9) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 50 col2) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD7712) (tstamp 548F1A97) + (at 239 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF728) + (fp_text reference DAND1 (at -8 -2.1) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 46 col1) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 54BD771B) (tstamp 548F1A7E) + (at 239 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF73B) + (fp_text reference DISZ1 (at -8 -1.7) (layer F.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 64 led6) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 51 col3) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AEA) (tstamp 548F1A65) + (at 69 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF71A) + (fp_text reference DIF2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AE4) (tstamp 548F1A4C) + (at 79 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF720) + (fp_text reference DIF3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 54 col6) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-PDP (layer F.Cu) (tedit 562A3AF4) (tstamp 548F1A33) + (at 59 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF701) + (fp_text reference DIF1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (fp_line (start -2.4 1.5) (end -2.4 -1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.5 2.4) (end -1.5 2.4) (layer F.SilkS) (width 0.15)) + (fp_line (start 2.4 -1.5) (end 2.4 1.5) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.5 -2.4) (end 1.5 -2.4) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 1.5) (end -1.5 2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 1.5) (end 2.4 1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start -1.5 -1.5) (end -2.4 -1.5) (angle 90) (layer F.SilkS) (width 0.15)) + (fp_arc (start 1.5 -1.5) (end 1.5 -2.4) (angle 90) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 66 led8) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-StrEight (layer F.Cu) (tedit 554E561D) (tstamp 554E5741) + (at 259 114.4) + (descr LED) + (tags LED) + (path /554E5897) + (fp_text reference DPAUSE2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 52 col4) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LED-3-StrEight (layer F.Cu) (tedit 554E561D) (tstamp 554E5747) + (at 259 121.7) + (descr LED) + (tags LED) + (path /554E589D) + (fp_text reference DRUN2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad 1 thru_hole circle (at -1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 65 led7) + ) + (pad 2 thru_hole circle (at 1.27 0) (size 1.6764 1.6764) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 53 col5) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module RASPI_BPLUS_MIRRORED (layer B.Cu) (tedit 5C1EE4DD) (tstamp 5C1E52A8) + (at 216.3 140 180) + (descr "Double rangee de contacts 2 x 12 pins") + (tags CONN) + (path /548F13F7) + (fp_text reference P1 (at 0 3.81 180) (layer B.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.27432)) (justify mirror)) + ) + (fp_text value RASPI_MODEL_B_PLUS_GPIO (at 0 -3.81 180) (layer B.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) + ) + (fp_text user ETH (at 49.53 43.18 450) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start 48.768 49.022) (end 53.594 49.022) (layer B.SilkS) (width 0.15)) + (fp_line (start 53.594 49.022) (end 53.594 38.354) (layer B.SilkS) (width 0.15)) + (fp_line (start 53.594 38.354) (end 49.784 38.354) (layer B.SilkS) (width 0.15)) + (fp_text user "GPIO and mount holes exact, port placement approx." (at 8.274 14.778 180) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user "RASPI B PLUS (MIRROR IMAGE)" (at 0 24.5 180) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user microUSB (at -19 47 180) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start -22 49.008) (end -22 52.508) (layer B.SilkS) (width 0.15)) + (fp_line (start -16 49.008) (end -16 52.508) (layer B.SilkS) (width 0.15)) + (fp_text user HDMI (at 0 47 180) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start -7 48.5) (end -7 52.5) (layer B.SilkS) (width 0.15)) + (fp_line (start 6 48.5) (end 6 52.5) (layer B.SilkS) (width 0.15)) + (fp_text user USB (at 49.5 3.5 450) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text user USB (at 49.5 20.5 450) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start 49.5 11.032) (end 54 11.032) (layer B.SilkS) (width 0.15)) + (fp_line (start 54 11.032) (end 54 0.032) (layer B.SilkS) (width 0.15)) + (fp_line (start 54 0.032) (end 50 0.032) (layer B.SilkS) (width 0.15)) + (fp_line (start 49.5 28.032) (end 54 28.032) (layer B.SilkS) (width 0.15)) + (fp_line (start 54 28.032) (end 54 16.532) (layer B.SilkS) (width 0.15)) + (fp_line (start 54 16.532) (end 49.5 16.532) (layer B.SilkS) (width 0.15)) + (fp_line (start -32.5 -3.5) (end 52.5 -3.5) (layer B.SilkS) (width 0.15)) + (fp_line (start 52.5 52.5) (end 52.5 -3.5) (layer B.SilkS) (width 0.15)) + (fp_line (start 52.5 52.5) (end 32 52.5) (layer B.SilkS) (width 0.15)) + (fp_line (start -32.5 52.5) (end -32.5 -3.5) (layer B.SilkS) (width 0.15)) + (fp_line (start -32.5 52.5) (end 32.5 52.5) (layer B.SilkS) (width 0.15)) + (fp_line (start 25.4 -2.54) (end -25.4 -2.54) (layer B.SilkS) (width 0.3048)) + (fp_line (start 25.4 2.54) (end -25.4 2.54) (layer B.SilkS) (width 0.3048)) + (fp_line (start 25.4 2.54) (end 25.4 -2.54) (layer B.SilkS) (width 0.3048)) + (fp_line (start -25.4 2.54) (end -25.4 -2.54) (layer B.SilkS) (width 0.3048)) + (pad 1 thru_hole rect (at -24.13 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 1 +3.3V) + ) + (pad 2 thru_hole circle (at -24.13 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 2 +5V) + ) + (pad 11 thru_hole circle (at -11.43 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 26 N-0000071) + ) + (pad 4 thru_hole circle (at -21.59 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 2 +5V) + ) + (pad 13 thru_hole circle (at -8.89 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 79 xled8) + ) + (pad 6 thru_hole circle (at -19.05 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 3 GND) + ) + (pad 15 thru_hole circle (at -6.35 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 74 xled3) + ) + (pad 8 thru_hole circle (at -16.51 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 41 N-0000087) + ) + (pad 17 thru_hole circle (at -3.81 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 10 thru_hole circle (at -13.97 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 42 N-0000088) + ) + (pad 19 thru_hole circle (at -1.27 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 27 N-0000072) + ) + (pad 12 thru_hole circle (at -11.43 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 32 N-0000077) + ) + (pad 21 thru_hole circle (at 1.27 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 28 N-0000073) + ) + (pad 14 thru_hole circle (at -8.89 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 23 thru_hole circle (at 3.81 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 43 N-0000095) + ) + (pad 16 thru_hole circle (at -6.35 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 75 xled4) + ) + (pad 25 thru_hole circle (at 6.35 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 18 thru_hole circle (at -3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 76 xled5) + ) + (pad 27 thru_hole circle (at 8.89 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 20 thru_hole circle (at -1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 3 GND) + ) + (pad 29 thru_hole circle (at 11.43 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 29 N-0000074) + ) + (pad 22 thru_hole circle (at 1.27 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 77 xled6) + ) + (pad 31 thru_hole circle (at 13.97 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 30 N-0000075) + ) + (pad 24 thru_hole circle (at 3.81 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 33 N-0000078) + ) + (pad 26 thru_hole circle (at 6.35 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 44 N-0000096) + ) + (pad 33 thru_hole circle (at 16.51 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 31 N-0000076) + ) + (pad 28 thru_hole circle (at 8.89 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 32 thru_hole circle (at 13.97 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 34 N-0000079) + ) + (pad 34 thru_hole circle (at 16.51 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 36 thru_hole circle (at 19.05 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 35 N-0000080) + ) + (pad 38 thru_hole circle (at 21.59 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 72 xled1) + ) + (pad 35 thru_hole circle (at 19.05 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 37 thru_hole circle (at 21.59 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 78 xled7) + ) + (pad 3 thru_hole circle (at -21.59 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 71 sda) + ) + (pad 5 thru_hole circle (at -19.05 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 70 scl) + ) + (pad 7 thru_hole circle (at -16.51 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 25 N-0000070) + ) + (pad 9 thru_hole circle (at -13.97 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 58 i2cgnd) + ) + (pad 39 thru_hole circle (at 24.13 1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad 40 thru_hole circle (at 24.13 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 73 xled2) + ) + (pad 30 thru_hole circle (at 11.43 -1.27 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + ) + (pad H2 thru_hole circle (at -29 0 180) (size 2.85 2.85) (drill 2.75) + (layers *.Cu *.Mask B.SilkS) + ) + (pad H3 thru_hole circle (at 29 0 180) (size 2.85 2.85) (drill 2.75) + (layers *.Cu *.Mask B.SilkS) + ) + (pad H4 thru_hole circle (at 29 49 180) (size 2.85 2.85) (drill 2.75) + (layers *.Cu *.Mask B.SilkS) + ) + (pad H1 thru_hole circle (at -29 49 180) (size 2.85 2.85) (drill 2.75) + (layers *.Cu *.Mask B.SilkS) + ) + (model pin_array/pins_array_20x2.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module D2 (layer F.Cu) (tedit 54B29F05) (tstamp 54BD7076) + (at 244.25 143.9) + (descr "Diode 3 pas") + (tags "DIODE DEV") + (path /54BD85A3) + (fp_text reference DZ1 (at 0 -0.508) (layer F.SilkS) + (effects (font (size 0.25 0.25) (thickness 0.05))) + ) + (fp_text value ZENER (at -0.508 0.508) (layer F.SilkS) hide + (effects (font (size 0.381 0.381) (thickness 0.0762))) + ) + (fp_line (start -2.032 1.016) (end 2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.794 0) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 0) (end 2.032 -1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 -1.016) (end -2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.794 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start -2.032 0) (end -2.032 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 2.032 1.016) (end 2.032 0) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.524 -1.016) (end 1.524 1.016) (layer F.SilkS) (width 0.3048)) + (fp_line (start 1.27 1.016) (end 1.27 -1.016) (layer F.SilkS) (width 0.3048)) + (pad 2 thru_hole rect (at 3.556 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 18 N-0000060) + ) + (pad 1 thru_hole circle (at -3.81 0) (size 1.397 1.397) (drill 0.8128) + (layers *.Cu *.Mask F.SilkS) + (net 2 +5V) + ) + (model discret/diode.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.3 0.3 0.3)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIN_ARRAY_4x1 (layer B.Cu) (tedit 5C2B7968) (tstamp 5C1E83FF) + (at 236.626 135.23 180) + (descr "Double rangee de contacts 2 x 5 pins") + (tags CONN) + (path /5C1DA337) + (fp_text reference "I2C (ANGLED HEADER, OPTIONAL)" (at 0 2.54 180) (layer B.SilkS) + (effects (font (size 0.7 0.7) (thickness 0.175)) (justify mirror)) + ) + (fp_text value CONN_4 (at 0 -2.54 180) (layer B.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) + ) + (fp_line (start 5.08 -1.27) (end -5.08 -1.27) (layer B.SilkS) (width 0.254)) + (fp_line (start 5.08 1.27) (end -5.08 1.27) (layer B.SilkS) (width 0.254)) + (fp_line (start -5.08 1.27) (end -5.08 -1.27) (layer B.SilkS) (width 0.254)) + (fp_line (start 5.08 -1.27) (end 5.08 1.27) (layer B.SilkS) (width 0.254)) + (pad 1 thru_hole rect (at -3.81 0 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 1 +3.3V) + ) + (pad 2 thru_hole circle (at -1.27 0 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 71 sda) + ) + (pad 3 thru_hole circle (at 1.27 0 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 70 scl) + ) + (pad 4 thru_hole circle (at 3.81 0 180) (size 1.524 1.524) (drill 1.016) + (layers *.Cu *.Mask B.SilkS) + (net 58 i2cgnd) + ) + (model pin_array\pins_array_4x1.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module LOGO (layer F.Cu) (tedit 0) (tstamp 5C1EEB2B) + (at 40 100) + (fp_text reference G*** (at 0 3.89382) (layer F.SilkS) hide + (effects (font (size 1.524 1.524) (thickness 0.3048))) + ) + (fp_text value LOGO (at 0 -3.89382) (layer F.SilkS) hide + (effects (font (size 1.524 1.524) (thickness 0.3048))) + ) + (fp_poly (pts (xy 21.16582 3.13182) (xy 20.87118 3.13182) (xy 20.87118 2.83718) (xy 20.87118 0) + (xy 20.87118 -2.83718) (xy 0 -2.83718) (xy -20.87118 -2.83718) (xy -20.89404 -0.08636) + (xy -20.89658 0.5842) (xy -20.89912 1.20142) (xy -20.89658 1.74498) (xy -20.89404 2.19456) + (xy -20.88896 2.5273) (xy -20.88134 2.72796) (xy -20.87372 2.77114) (xy -20.8407 2.78384) + (xy -20.74672 2.794) (xy -20.5867 2.80416) (xy -20.35302 2.81432) (xy -20.04568 2.82194) + (xy -19.65198 2.82956) (xy -19.17192 2.83464) (xy -18.60042 2.84226) (xy -17.92732 2.84734) + (xy -17.15262 2.84988) (xy -16.26616 2.85496) (xy -15.2654 2.8575) (xy -14.14526 2.86004) + (xy -12.89812 2.86258) (xy -11.52144 2.86258) (xy -10.0076 2.86258) (xy -8.35152 2.86258) + (xy -6.54812 2.86258) (xy -4.59232 2.86004) (xy -2.47904 2.86004) (xy -0.2032 2.8575) + (xy 0.01778 2.8575) (xy 20.87118 2.83718) (xy 20.87118 3.13182) (xy 0 3.13182) + (xy -21.16582 3.13182) (xy -21.16582 0) (xy -21.16582 -3.13182) (xy 0 -3.13182) + (xy 21.16582 -3.13182) (xy 21.16582 0) (xy 21.16582 3.13182) (xy 21.16582 3.13182)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -18.37182 2.20218) (xy -18.542 2.20218) (xy -18.542 1.19126) (xy -18.542 0.04572) + (xy -18.542 -1.09982) (xy -18.75282 -1.09982) (xy -18.8849 -1.08458) (xy -18.94586 -1.00838) + (xy -18.96364 -0.82296) (xy -18.96618 -0.71882) (xy -18.96618 -0.33528) (xy -19.17446 -0.4699) + (xy -19.42338 -0.5588) (xy -19.65198 -0.50292) (xy -19.84502 -0.33528) (xy -19.98726 -0.08382) + (xy -20.066 0.22352) (xy -20.05838 0.56134) (xy -19.95678 0.89662) (xy -19.94154 0.9271) + (xy -19.79168 1.14808) (xy -19.6088 1.23444) (xy -19.34718 1.22174) (xy -19.06524 1.1938) + (xy -18.81632 1.18618) (xy -18.542 1.19126) (xy -18.542 2.20218) (xy -19.24812 2.20218) + (xy -19.61642 2.19456) (xy -19.92122 2.18186) (xy -20.12188 2.16154) (xy -20.1803 2.14376) + (xy -20.19554 2.04724) (xy -20.20824 1.80594) (xy -20.22094 1.44018) (xy -20.22856 0.9779) + (xy -20.23364 0.43942) (xy -20.23618 -0.01524) (xy -20.23618 -2.11582) (xy -19.304 -2.11582) + (xy -18.37182 -2.11582) (xy -18.37182 0.04318) (xy -18.37182 2.20218) (xy -18.37182 2.20218)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -16.16964 -2.11582) (xy -16.1925 0.02032) (xy -16.21282 2.159) (xy -16.93418 2.17678) + (xy -16.93418 0.54102) (xy -16.93418 0.33782) (xy -16.93418 -0.04572) (xy -16.93418 -0.8509) + (xy -16.93418 -0.889) (xy -16.96974 -1.05156) (xy -17.1069 -1.09982) (xy -17.145 -1.09982) + (xy -17.30756 -1.0668) (xy -17.35582 -0.92964) (xy -17.35582 -0.889) (xy -17.3228 -0.72898) + (xy -17.18564 -0.67818) (xy -17.145 -0.67818) (xy -16.98498 -0.71374) (xy -16.93418 -0.8509) + (xy -16.93418 -0.04572) (xy -16.94434 -0.2921) (xy -16.96974 -0.42926) (xy -17.01546 -0.49276) + (xy -17.0942 -0.508) (xy -17.145 -0.508) (xy -17.24152 -0.50292) (xy -17.30248 -0.46736) + (xy -17.33804 -0.3683) (xy -17.35328 -0.1778) (xy -17.35582 0.13462) (xy -17.35582 0.33782) + (xy -17.35582 0.72136) (xy -17.34566 0.96774) (xy -17.3228 1.10744) (xy -17.27454 1.1684) + (xy -17.1958 1.18364) (xy -17.145 1.18618) (xy -17.04848 1.17856) (xy -16.98752 1.143) + (xy -16.9545 1.04648) (xy -16.93672 0.85598) (xy -16.93418 0.54102) (xy -16.93418 2.17678) + (xy -17.12468 2.18186) (xy -18.034 2.20726) (xy -18.034 0.04572) (xy -18.034 -2.11582) + (xy -17.10182 -2.11582) (xy -16.16964 -2.11582) (xy -16.16964 -2.11582)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -14.05382 2.20218) (xy -14.2113 2.20218) (xy -14.2113 -0.508) (xy -14.42974 -0.508) + (xy -14.5923 -0.48006) (xy -14.64818 -0.42164) (xy -14.7066 -0.40132) (xy -14.84884 -0.46736) + (xy -14.85646 -0.4699) (xy -15.1003 -0.55626) (xy -15.3289 -0.50038) (xy -15.52194 -0.33528) + (xy -15.66926 -0.09144) (xy -15.75054 0.20066) (xy -15.75562 0.51308) (xy -15.66672 0.8128) + (xy -15.57274 0.96266) (xy -15.36446 1.12268) (xy -15.10284 1.18872) (xy -14.859 1.1557) + (xy -14.74978 1.08458) (xy -14.66596 1.03886) (xy -14.64818 1.1176) (xy -14.69644 1.27762) + (xy -14.73454 1.3589) (xy -14.86916 1.47828) (xy -15.0622 1.524) (xy -15.23238 1.48844) + (xy -15.28318 1.44018) (xy -15.38224 1.38176) (xy -15.5448 1.35636) (xy -15.69212 1.36144) + (xy -15.748 1.40208) (xy -15.6845 1.5748) (xy -15.53718 1.75768) (xy -15.38224 1.86436) + (xy -15.0876 1.9177) (xy -14.76248 1.8669) (xy -14.48816 1.73482) (xy -14.4399 1.69418) + (xy -14.36624 1.6002) (xy -14.3129 1.4732) (xy -14.27734 1.2827) (xy -14.25702 0.99314) + (xy -14.23924 0.5715) (xy -14.23924 0.50546) (xy -14.2113 -0.508) (xy -14.2113 2.20218) + (xy -14.986 2.20218) (xy -15.91818 2.20218) (xy -15.91818 0.04318) (xy -15.91818 -2.11582) + (xy -14.986 -2.11582) (xy -14.05382 -2.11582) (xy -14.05382 0.04318) (xy -14.05382 2.20218) + (xy -14.05382 2.20218)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -11.85164 -2.11582) (xy -11.8745 0.02032) (xy -11.89482 2.159) (xy -12.61618 2.17678) + (xy -12.61618 0.54102) (xy -12.61618 0.33782) (xy -12.61618 -0.04572) (xy -12.61618 -0.8509) + (xy -12.61618 -0.889) (xy -12.65174 -1.05156) (xy -12.7889 -1.09982) (xy -12.827 -1.09982) + (xy -12.98956 -1.0668) (xy -13.03782 -0.92964) (xy -13.03782 -0.889) (xy -13.0048 -0.72898) + (xy -12.86764 -0.67818) (xy -12.827 -0.67818) (xy -12.66698 -0.71374) (xy -12.61618 -0.8509) + (xy -12.61618 -0.04572) (xy -12.62634 -0.2921) (xy -12.65174 -0.42926) (xy -12.69746 -0.49276) + (xy -12.7762 -0.508) (xy -12.827 -0.508) (xy -12.92352 -0.50292) (xy -12.98448 -0.46736) + (xy -13.02004 -0.3683) (xy -13.03528 -0.1778) (xy -13.03782 0.13462) (xy -13.03782 0.33782) + (xy -13.03782 0.72136) (xy -13.02766 0.96774) (xy -13.0048 1.10744) (xy -12.95654 1.1684) + (xy -12.8778 1.18364) (xy -12.827 1.18618) (xy -12.73048 1.17856) (xy -12.66952 1.143) + (xy -12.6365 1.04648) (xy -12.61872 0.85598) (xy -12.61618 0.54102) (xy -12.61618 2.17678) + (xy -12.80668 2.18186) (xy -13.716 2.20726) (xy -13.716 0.04572) (xy -13.716 -2.11582) + (xy -12.78382 -2.11582) (xy -11.85164 -2.11582) (xy -11.85164 -2.11582)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -9.73582 2.20218) (xy -10.24382 2.20218) (xy -10.24382 -0.33782) (xy -10.29716 -0.47752) + (xy -10.37082 -0.508) (xy -10.47242 -0.58166) (xy -10.49782 -0.76708) (xy -10.51814 -0.94996) + (xy -10.59942 -1.00584) (xy -10.68832 -1.00076) (xy -10.84834 -0.91948) (xy -10.90676 -0.74168) + (xy -10.94994 -0.5715) (xy -11.01344 -0.508) (xy -11.07694 -0.43688) (xy -11.09218 -0.33782) + (xy -11.05662 -0.20066) (xy -11.00582 -0.17018) (xy -10.96264 -0.09144) (xy -10.9347 0.11684) + (xy -10.922 0.41656) (xy -10.9093 0.78232) (xy -10.86104 1.016) (xy -10.78484 1.14046) + (xy -10.59434 1.24714) (xy -10.40638 1.2319) (xy -10.27938 1.10744) (xy -10.2616 1.03632) + (xy -10.28192 0.87884) (xy -10.36574 0.84582) (xy -10.44194 0.8128) (xy -10.48258 0.6858) + (xy -10.49782 0.43434) (xy -10.49782 0.33782) (xy -10.4902 0.04318) (xy -10.45464 -0.1143) + (xy -10.3886 -0.16764) (xy -10.37082 -0.17018) (xy -10.26922 -0.2413) (xy -10.24382 -0.33782) + (xy -10.24382 2.20218) (xy -10.668 2.20218) (xy -11.60018 2.20218) (xy -11.60018 0.04318) + (xy -11.60018 -2.11582) (xy -10.668 -2.11582) (xy -9.73582 -2.11582) (xy -9.73582 0.04318) + (xy -9.73582 2.20218) (xy -9.73582 2.20218)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -7.62 2.20218) (xy -7.83082 2.20218) (xy -7.83082 1.18618) (xy -7.8613 0.4445) + (xy -7.88162 0.09906) (xy -7.91718 -0.18796) (xy -7.95782 -0.3683) (xy -7.9756 -0.39878) + (xy -8.17626 -0.5334) (xy -8.43788 -0.5715) (xy -8.71474 -0.52578) (xy -8.95604 -0.41148) + (xy -9.11098 -0.23876) (xy -9.144 -0.10668) (xy -9.07796 -0.0254) (xy -8.93572 -0.00254) + (xy -8.79856 -0.04826) (xy -8.763 -0.08382) (xy -8.64616 -0.14986) (xy -8.49884 -0.17018) + (xy -8.3312 -0.13462) (xy -8.2931 -0.04572) (xy -8.37184 0.05842) (xy -8.5471 0.14732) + (xy -8.67156 0.1778) (xy -8.99414 0.2921) (xy -9.17956 0.50292) (xy -9.22782 0.7493) + (xy -9.16178 1.02108) (xy -8.98398 1.1938) (xy -8.72998 1.23698) (xy -8.68172 1.22936) + (xy -8.4074 1.19126) (xy -8.128 1.1811) (xy -7.83082 1.18618) (xy -7.83082 2.20218) + (xy -8.509 2.20218) (xy -9.398 2.20218) (xy -9.398 0.04318) (xy -9.398 -2.11582) + (xy -8.509 -2.11582) (xy -7.62 -2.11582) (xy -7.62 0.04318) (xy -7.62 2.20218) + (xy -7.62 2.20218)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -5.41782 2.20218) (xy -6.17982 2.20218) (xy -6.17982 1.18618) (xy -6.17982 0.04318) + (xy -6.17982 -1.09982) (xy -6.39318 -1.09982) (xy -6.604 -1.09982) (xy -6.604 0.04318) + (xy -6.604 1.18618) (xy -6.39318 1.18618) (xy -6.17982 1.18618) (xy -6.17982 2.20218) + (xy -6.35 2.20218) (xy -7.28218 2.20218) (xy -7.28218 0.04318) (xy -7.28218 -2.11582) + (xy -6.35 -2.11582) (xy -5.41782 -2.11582) (xy -5.41782 0.04318) (xy -5.41782 2.20218) + (xy -5.41782 2.20218)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy 0.40894 -0.6223) (xy 0.37846 -0.27178) (xy 0.27178 0.03556) (xy 0.09398 0.24892) + (xy 0.05334 0.27178) (xy -0.06096 0.29972) (xy -0.06096 -0.59182) (xy -0.06858 -0.80772) + (xy -0.10668 -0.96266) (xy -0.19558 -1.0668) (xy -0.36322 -1.13284) (xy -0.62992 -1.1684) + (xy -1.02108 -1.18364) (xy -1.53416 -1.18618) (xy -2.794 -1.18618) (xy -2.794 -0.59182) + (xy -2.794 0) (xy -1.53416 0) (xy -1.02616 -0.00254) (xy -0.66294 -0.01524) + (xy -0.41656 -0.03556) (xy -0.26416 -0.06858) (xy -0.18034 -0.11684) (xy -0.16764 -0.12954) + (xy -0.09906 -0.29464) (xy -0.0635 -0.53848) (xy -0.06096 -0.59182) (xy -0.06096 0.29972) + (xy -0.10414 0.31242) (xy -0.40386 0.35052) (xy -0.82296 0.381) (xy -1.3335 0.40386) + (xy -1.4605 0.4064) (xy -2.794 0.44196) (xy -2.794 1.02616) (xy -2.79654 1.33096) + (xy -2.81686 1.50622) (xy -2.86512 1.58496) (xy -2.95402 1.60782) (xy -3.00482 1.60782) + (xy -3.21818 1.60782) (xy -3.21818 -0.0127) (xy -3.21818 -1.63322) (xy -1.6637 -1.5875) + (xy -1.15062 -1.56972) (xy -0.69342 -1.54178) (xy -0.31496 -1.5113) (xy -0.05334 -1.47828) + (xy 0.0635 -1.45034) (xy 0.254 -1.26238) (xy 0.3683 -0.97028) (xy 0.40894 -0.6223) + (xy 0.40894 -0.6223)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy 4.89712 -0.19304) (xy 4.89458 0.36576) (xy 4.84378 0.7874) (xy 4.73202 1.09474) + (xy 4.55676 1.31826) (xy 4.47294 1.37922) (xy 4.47294 -0.19558) (xy 4.46278 -0.32258) + (xy 4.43484 -0.61468) (xy 4.38658 -0.83312) (xy 4.2926 -0.98806) (xy 4.13512 -1.08966) + (xy 3.88874 -1.14808) (xy 3.53314 -1.17602) (xy 3.04292 -1.18618) (xy 2.70002 -1.18618) + (xy 1.35382 -1.18618) (xy 1.35382 0) (xy 1.35382 1.18618) (xy 2.71018 1.18618) + (xy 3.22326 1.18364) (xy 3.5941 1.17602) (xy 3.85318 1.16078) (xy 4.02336 1.13538) + (xy 4.13258 1.0922) (xy 4.21386 1.03378) (xy 4.2291 1.02108) (xy 4.38912 0.75438) + (xy 4.4704 0.35052) (xy 4.47294 -0.19558) (xy 4.47294 1.37922) (xy 4.44246 1.40462) + (xy 4.33832 1.4605) (xy 4.191 1.50114) (xy 3.98018 1.53162) (xy 3.68046 1.55448) + (xy 3.2639 1.5748) (xy 2.71018 1.59004) (xy 2.57556 1.59258) (xy 1.9939 1.60274) + (xy 1.5621 1.60782) (xy 1.25476 1.6002) (xy 1.05664 1.58496) (xy 0.94234 1.55702) + (xy 0.89154 1.51892) (xy 0.889 1.5113) (xy 0.87376 1.38938) (xy 0.86614 1.1303) + (xy 0.86106 0.762) (xy 0.86106 0.31242) (xy 0.86614 -0.0889) (xy 0.889 -1.56718) + (xy 1.73482 -1.59512) (xy 2.22504 -1.6002) (xy 2.7813 -1.59258) (xy 3.31216 -1.57226) + (xy 3.45694 -1.56464) (xy 3.8608 -1.53416) (xy 4.13766 -1.50114) (xy 4.32562 -1.45034) + (xy 4.46786 -1.37668) (xy 4.59994 -1.27) (xy 4.7244 -1.15316) (xy 4.80314 -1.0414) + (xy 4.84886 -0.89154) (xy 4.8768 -0.66548) (xy 4.89204 -0.32512) (xy 4.89712 -0.19304) + (xy 4.89712 -0.19304)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy 9.144 -0.5969) (xy 9.12622 -0.2794) (xy 9.06018 -0.03556) (xy 8.9281 0.14478) + (xy 8.71982 0.26416) (xy 8.71982 -0.59182) (xy 8.70458 -0.86868) (xy 8.64362 -1.02616) + (xy 8.55726 -1.09728) (xy 8.41502 -1.1303) (xy 8.13562 -1.1557) (xy 7.75716 -1.17602) + (xy 7.31012 -1.18618) (xy 7.16026 -1.18618) (xy 5.92582 -1.18618) (xy 5.92582 -0.59182) + (xy 5.92582 0) (xy 7.16026 0) (xy 7.62 -0.00508) (xy 8.02386 -0.02286) + (xy 8.33882 -0.04572) (xy 8.52678 -0.0762) (xy 8.55726 -0.0889) (xy 8.6614 -0.18542) + (xy 8.70966 -0.36576) (xy 8.71982 -0.59182) (xy 8.71982 0.26416) (xy 8.70966 0.27178) + (xy 8.38708 0.3556) (xy 7.94004 0.40132) (xy 7.3533 0.4191) (xy 7.0485 0.42164) + (xy 5.92582 0.42418) (xy 5.92582 1.016) (xy 5.92074 1.32588) (xy 5.90042 1.50622) + (xy 5.8547 1.5875) (xy 5.77088 1.60782) (xy 5.7531 1.60782) (xy 5.59562 1.5621) + (xy 5.53974 1.4986) (xy 5.52704 1.38176) (xy 5.51942 1.12522) (xy 5.51688 0.75946) + (xy 5.51688 0.31496) (xy 5.52196 -0.0889) (xy 5.54482 -1.56718) (xy 7.15264 -1.55448) + (xy 8.75792 -1.53924) (xy 8.95096 -1.31572) (xy 9.07034 -1.13538) (xy 9.12876 -0.91186) + (xy 9.144 -0.5969) (xy 9.144 -0.5969)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy 16.002 0.70612) (xy 15.96644 1.03886) (xy 15.84452 1.27) (xy 15.61084 1.41732) + (xy 15.57274 1.42494) (xy 15.57274 0.60706) (xy 15.5321 0.37338) (xy 15.48892 0.30734) + (xy 15.48892 -0.76962) (xy 15.4432 -0.99314) (xy 15.37716 -1.0922) (xy 15.23238 -1.13792) + (xy 14.93266 -1.16332) (xy 14.47292 -1.17094) (xy 14.09192 -1.16586) (xy 12.92606 -1.143) + (xy 12.84478 -0.9017) (xy 12.81684 -0.58674) (xy 12.85748 -0.4572) (xy 12.90066 -0.37592) + (xy 12.95908 -0.32004) (xy 13.06576 -0.28448) (xy 13.2461 -0.26416) (xy 13.52804 -0.25654) + (xy 13.94206 -0.254) (xy 14.11986 -0.254) (xy 14.67866 -0.26162) (xy 15.07236 -0.28194) + (xy 15.31112 -0.32004) (xy 15.3924 -0.3556) (xy 15.47114 -0.53086) (xy 15.48892 -0.76962) + (xy 15.48892 0.30734) (xy 15.45336 0.25654) (xy 15.30858 0.20574) (xy 15.0368 0.17018) + (xy 14.67612 0.14732) (xy 14.26718 0.13462) (xy 13.85316 0.13716) (xy 13.46962 0.1524) + (xy 13.1572 0.18288) (xy 12.95908 0.22352) (xy 12.92352 0.24384) (xy 12.827 0.41402) + (xy 12.78636 0.66548) (xy 12.80668 0.91694) (xy 12.88542 1.08458) (xy 13.01496 1.1303) + (xy 13.2969 1.16332) (xy 13.73632 1.1811) (xy 14.15034 1.18618) (xy 14.63802 1.1811) + (xy 14.98346 1.1684) (xy 15.21714 1.14554) (xy 15.36192 1.10744) (xy 15.44574 1.05156) + (xy 15.5448 0.86106) (xy 15.57274 0.60706) (xy 15.57274 1.42494) (xy 15.24 1.5113) + (xy 15.15618 1.52654) (xy 14.74216 1.56718) (xy 14.26464 1.59004) (xy 13.78966 1.59258) + (xy 13.37818 1.57226) (xy 13.208 1.55194) (xy 12.81938 1.4732) (xy 12.56792 1.36906) + (xy 12.42822 1.2065) (xy 12.3698 0.96012) (xy 12.36218 0.71882) (xy 12.40028 0.35052) + (xy 12.51458 0.10414) (xy 12.69492 0) (xy 12.72794 -0.00254) (xy 12.7381 -0.04572) + (xy 12.6365 -0.14986) (xy 12.61618 -0.16764) (xy 12.48156 -0.29972) (xy 12.4206 -0.47244) + (xy 12.40282 -0.74676) (xy 12.40282 -0.75438) (xy 12.43838 -1.11252) (xy 12.54506 -1.32334) + (xy 12.77112 -1.4478) (xy 13.15466 -1.5367) (xy 13.6906 -1.5875) (xy 14.224 -1.6002) + (xy 14.85646 -1.57988) (xy 15.33906 -1.51892) (xy 15.66164 -1.41732) (xy 15.80642 -1.30556) + (xy 15.89278 -1.08712) (xy 15.92072 -0.8001) (xy 15.89278 -0.50546) (xy 15.81404 -0.27178) + (xy 15.7607 -0.2032) (xy 15.66164 -0.10414) (xy 15.66926 -0.01778) (xy 15.79118 0.11938) + (xy 15.80134 0.13208) (xy 15.94612 0.33782) (xy 15.99946 0.6096) (xy 16.002 0.70612) + (xy 16.002 0.70612)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy 18.28292 -1.50368) (xy 18.25244 -1.39446) (xy 18.17116 -1.15316) (xy 18.0467 -0.80772) + (xy 17.88922 -0.38608) (xy 17.71142 0.08382) (xy 17.51076 0.60198) (xy 17.35836 0.98552) + (xy 17.24406 1.25222) (xy 17.15262 1.42494) (xy 17.07388 1.524) (xy 16.99768 1.57226) + (xy 16.91132 1.59258) (xy 16.89862 1.59258) (xy 16.73352 1.59766) (xy 16.69542 1.5367) + (xy 16.71574 1.46558) (xy 16.76654 1.34112) (xy 16.86306 1.08458) (xy 17.00022 0.72644) + (xy 17.16532 0.29464) (xy 17.33296 -0.14732) (xy 17.53108 -0.66548) (xy 17.68348 -1.04648) + (xy 17.79778 -1.3081) (xy 17.88922 -1.47574) (xy 17.96542 -1.56718) (xy 18.03654 -1.60274) + (xy 18.08734 -1.60782) (xy 18.23974 -1.57226) (xy 18.28292 -1.50368) (xy 18.28292 -1.50368)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy 19.939 0.54864) (xy 19.93392 0.9525) (xy 19.9263 1.23444) (xy 19.90852 1.41478) + (xy 19.88058 1.51892) (xy 19.8374 1.56972) (xy 19.77898 1.5875) (xy 19.7485 1.59258) + (xy 19.58086 1.56972) (xy 19.51228 1.50622) (xy 19.49958 1.38684) (xy 19.49196 1.12776) + (xy 19.48688 0.75946) (xy 19.48688 0.31242) (xy 19.49196 -0.0889) (xy 19.51482 -1.56718) + (xy 19.72818 -1.56718) (xy 19.939 -1.56718) (xy 19.939 0) (xy 19.939 0.54864) + (xy 19.939 0.54864)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy 11.684 0.42418) (xy 10.795 0.42418) (xy 9.906 0.42418) (xy 9.906 0.21082) + (xy 9.906 0) (xy 10.795 0) (xy 11.684 0) (xy 11.684 0.21082) + (xy 11.684 0.42418) (xy 11.684 0.42418)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -18.98142 0.21082) (xy -18.98396 0.45212) (xy -19.07032 0.67056) (xy -19.23542 0.81026) + (xy -19.3167 0.83058) (xy -19.5199 0.8001) (xy -19.59102 0.71628) (xy -19.64944 0.42926) + (xy -19.61896 0.1651) (xy -19.51736 -0.0381) (xy -19.36242 -0.1397) (xy -19.23542 -0.13208) + (xy -19.0627 -0.00254) (xy -18.98142 0.21082) (xy -18.98142 0.21082)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -14.6812 0.49276) (xy -14.76502 0.70866) (xy -14.9098 0.83312) (xy -15.0876 0.83566) + (xy -15.22222 0.74422) (xy -15.30096 0.57404) (xy -15.32128 0.32766) (xy -15.28826 0.08382) + (xy -15.20444 -0.07874) (xy -15.2019 -0.08128) (xy -15.01394 -0.1524) (xy -14.83614 -0.07874) + (xy -14.70914 0.11684) (xy -14.68628 0.20828) (xy -14.6812 0.49276) (xy -14.6812 0.49276)) (layer F.SilkS) (width 0.00254)) + (fp_poly (pts (xy -8.29818 0.57658) (xy -8.35152 0.76708) (xy -8.47852 0.89154) (xy -8.63092 0.92202) + (xy -8.75538 0.8382) (xy -8.78078 0.79248) (xy -8.76046 0.62738) (xy -8.67664 0.53848) + (xy -8.47344 0.43434) (xy -8.33882 0.4572) (xy -8.29818 0.57658) (xy -8.29818 0.57658)) (layer F.SilkS) (width 0.00254)) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1841) + (at 229 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF882) + (fp_text reference SW21 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value DEP (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 38 N-0000083) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1852) + (at 129 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB42) + (fp_text reference SW11 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR5 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 11 N-00000110) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1863) + (at 119 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB33) + (fp_text reference SW10 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR4 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 12 N-00000111) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1874) + (at 109 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB2D) + (fp_text reference SW9 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR3 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 13 N-00000112) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1885) + (at 99 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB27) + (fp_text reference SW8 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR2 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 14 N-00000113) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1896) + (at 89 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFAF8) + (fp_text reference SW7 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR1 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 15 N-00000114) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 56C3AA12) + (at 279 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF8A0) + (fp_text reference SW26 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SING_INST (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 16 N-00000119) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F18B8) + (at 269 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF89A) + (fp_text reference SW25 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SING_STEP (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 17 N-00000120) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F18C9) + (at 259 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF894) + (fp_text reference SW24 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value STOP (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 45 N-0000097) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F18DA) + (at 249 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF88E) + (fp_text reference SW23 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value CONT (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 36 N-0000081) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F18EB) + (at 239 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF888) + (fp_text reference SW22 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value EXAM (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 37 N-0000082) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F18FC) + (at 179 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB60) + (fp_text reference SW16 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR10 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 7 N-00000106) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F190D) + (at 219 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF87C) + (fp_text reference SW20 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value LOAD_ADD (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 39 N-0000084) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F191E) + (at 209 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EF86F) + (fp_text reference SW19 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value START (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 69 row3) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 40 N-0000085) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F192F) + (at 139 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB48) + (fp_text reference SW12 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR6 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 4 N-00000101) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1940) + (at 149 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB4E) + (fp_text reference SW13 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR7 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 10 N-00000109) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1951) + (at 159 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB54) + (fp_text reference SW14 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR8 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 9 N-00000108) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1962) + (at 169 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB5A) + (fp_text reference SW15 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR9 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 8 N-00000107) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1973) + (at 189 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB66) + (fp_text reference SW17 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value SR11 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 6 N-00000105) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F1984) + (at 199 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFB6C) + (fp_text reference SW18 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value "SR 12" (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 67 row1) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 5 N-00000104) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 5668A41C) + (at 29 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFBFD) + (fp_text reference SW1 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value DF1 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 68 row2) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 19 N-0000064) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F19A6) + (at 39 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFC03) + (fp_text reference SW2 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value DF2 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 68 row2) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 24 N-0000069) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F19B7) + (at 49 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFC09) + (fp_text reference SW3 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value DF3 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 68 row2) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 23 N-0000068) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F19C8) + (at 59 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFC0F) + (fp_text reference SW4 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value IF1 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 68 row2) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 22 N-0000067) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F19D9) + (at 69 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFC15) + (fp_text reference SW5 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value IF2 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 68 row2) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 21 N-0000066) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (module SW_PIDP2019 (layer F.Cu) (tedit 5CB38C3F) (tstamp 548F19EA) + (at 79 159.9) + (descr "Switch inverseur") + (tags "SWITCH DEV") + (path /548EFC1B) + (fp_text reference SW6 (at 3.429 -3.683 90) (layer F.SilkS) hide + (effects (font (size 0.3 0.3) (thickness 0.05))) + ) + (fp_text value IF3 (at 0 -13.3) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2032))) + ) + (fp_line (start -4.7 -10) (end 4.7 -10) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 5.75) (end 4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end -4.75 2) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 5.75) (end 4.75 5.75) (layer F.SilkS) (width 0.15)) + (fp_line (start -4.75 1.95) (end -4.75 -10.35) (layer F.SilkS) (width 0.15)) + (fp_line (start 4.75 -10.3) (end 4.75 1.95) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole oval (at 0 0) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 68 row2) + (clearance 0.8) + ) + (pad 2 thru_hole oval (at 0 -4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (net 20 N-0000065) + (clearance 0.65) + ) + (pad "" thru_hole circle (at 1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole oval (at 0 4.7) (size 3.9 2.1) (drill oval 2.9 1.1) + (layers *.Cu *.Mask F.SilkS) + (clearance 0.65) + ) + (pad "" thru_hole circle (at -1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at -1.6 -7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + (pad "" thru_hole circle (at 1.6 7.875) (size 2.5 2.5) (drill 1.6) + (layers *.Cu *.Mask F.SilkS) + ) + ) + + (gr_text "B T" (at 279.1 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 269.1 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W M" (at 259 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W M" (at 249 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W M" (at 238.9 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W M" (at 229 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W M" (at 219.1 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B M" (at 209.3 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 149.1 157.4) (layer F.SilkS) (tstamp 5CD9A8B1) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 159.3 157.4) (layer F.SilkS) (tstamp 5CD9A8B0) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 169.4 157.4) (layer F.SilkS) (tstamp 5CD9A8AF) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 178.9 157.4) (layer F.SilkS) (tstamp 5CD9A8AE) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 189 157.4) (layer F.SilkS) (tstamp 5CD9A8AD) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 199 157.4) (layer F.SilkS) (tstamp 5CD9A8AC) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 89 157.4) (layer F.SilkS) (tstamp 5CD9A873) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 99.2 157.4) (layer F.SilkS) (tstamp 5CD9A872) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 109.3 157.4) (layer F.SilkS) (tstamp 5CD9A871) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 118.8 157.4) (layer F.SilkS) (tstamp 5CD9A870) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 128.9 157.4) (layer F.SilkS) (tstamp 5CD9A86F) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 138.9 157.4) (layer F.SilkS) (tstamp 5CD9A86E) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 78.8 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 68.8 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "W T" (at 58.7 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 49.2 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 39.1 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_text "B T" (at 28.9 157.4) (layer F.SilkS) + (effects (font (size 1.7 1.5) (thickness 0.3))) + ) + (gr_line (start 10 173.75) (end 10 65.5) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 11.5 173.75) (end 10 173.75) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 291 173.75) (end 291 65.5) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 289.75 173.75) (end 291 173.75) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 289.75 173.75) (end 11.5 173.75) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 291 65.5) (end 10 65.5) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 212.9 112.8) (end 212.9 113.3) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 213.3 112.4) (end 212.9 112.8) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 214.3 112.4) (end 213.3 112.4) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 214.7 112.8) (end 214.3 112.4) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 214.7 113.2) (end 214.7 112.8) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_text "ALL\nLEDs" (at 213.8 112.9) (layer F.SilkS) + (effects (font (size 0.5 0.5) (thickness 0.125))) + ) + (gr_line (start 213.3 112.8) (end 213.4 112.7) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 212.9 114.1) (end 212.9 113.2) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 214.7 114.1) (end 214.7 113.2) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 212.9 114.1) (end 214.7 114.1) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 214.5 115.5) (end 214.5 114.1) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 213.2 116.6) (end 213.2 114.1) (angle 90) (layer F.SilkS) (width 0.1)) + (gr_line (start 290 65.8) (end 290.4 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 65.4) (end 290 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 174.5) (end 290.3 174.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 174.8) (end 290 174.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 174.5) (end 9.2 174.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 174.8) (end 9.5 174.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 65.8) (end 9.2 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 65.5) (end 9.5 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 166.5) (end 10.25 166.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 165.75) (end 9.5 167.2) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 166.5) (end 289.55 166.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 166.05) (end 290 166.9) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 24.25 166.15) (end 24.25 165.4) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 24.25 166.15) (end 25.55 166.15) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 24.25 165.25) (end 25.5 165.25) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 24.25 163.45) (end 24.25 165.25) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_text "Rev 3b 2019-05-13" (at 283.6 95.25 90) (layer B.SilkS) + (effects (font (size 1.1 1.1) (thickness 0.1875)) (justify left mirror)) + ) + (gr_text "2 optional LEDs for \nStraight Eight only" (at 262.5598 118.4148 90) (layer F.SilkS) + (effects (font (size 0.6 0.6) (thickness 0.1))) + ) + (gr_line (start 259.0038 121.7168) (end 258.953 121.7168) (angle 90) (layer B.SilkS) (width 0.2)) + (gr_line (start 261.5946 114.4524) (end 261.5946 121.793) (angle 90) (layer F.SilkS) (width 0.2)) + (gr_text "PiDP-8/I\nFront Panel" (at 275 95 90) (layer B.SilkS) + (effects (font (size 3 3) (thickness 0.6)) (justify left mirror)) + ) + + (segment (start 240.43 136.6333) (end 240.43 138.73) (width 0.508) (layer B.Cu) (net 1)) + (segment (start 240.436 136.6273) (end 240.43 136.6333) (width 0.508) (layer B.Cu) (net 1)) + (segment (start 240.436 135.23) (end 240.436 136.6273) (width 0.508) (layer B.Cu) (net 1)) + (segment (start 237.89 141.27) (end 240.43 141.27) (width 0.508) (layer F.Cu) (net 2)) + (segment (start 240.43 143.89) (end 240.44 143.9) (width 0.508) (layer F.Cu) (net 2)) + (segment (start 240.43 141.27) (end 240.43 143.89) (width 0.508) (layer F.Cu) (net 2)) + (via (at 250.3474 138.8443) (size 0.889) (layers F.Cu B.Cu) (net 3)) + (via (at 226.0723 142.6747) (size 0.889) (layers F.Cu B.Cu) (net 3)) + (segment (start 243.9552 145.2365) (end 250.3474 138.8443) (width 0.508) (layer B.Cu) (net 3)) + (segment (start 239.3165 145.2365) (end 243.9552 145.2365) (width 0.508) (layer B.Cu) (net 3)) + (segment (start 235.35 141.27) (end 239.3165 145.2365) (width 0.508) (layer B.Cu) (net 3)) + (segment (start 274.1057 138.8443) (end 250.3474 138.8443) (width 0.508) (layer F.Cu) (net 3)) + (segment (start 276.96 135.99) (end 274.1057 138.8443) (width 0.508) (layer F.Cu) (net 3)) + (segment (start 218.9747 142.6747) (end 226.0723 142.6747) (width 0.508) (layer B.Cu) (net 3)) + (segment (start 217.57 141.27) (end 218.9747 142.6747) (width 0.508) (layer B.Cu) (net 3)) + (segment (start 233.9453 142.6747) (end 226.0723 142.6747) (width 0.508) (layer F.Cu) (net 3)) + (segment (start 235.35 141.27) (end 233.9453 142.6747) (width 0.508) (layer F.Cu) (net 3)) + (segment (start 142.636 171.55) (end 142.636 158.836) (width 0.508) (layer B.Cu) (net 4)) + (segment (start 142.636 158.836) (end 139 155.2) (width 0.508) (layer B.Cu) (net 4)) + (segment (start 202.636 171.55) (end 202.636 158.836) (width 0.508) (layer B.Cu) (net 5)) + (segment (start 202.636 158.836) (end 199 155.2) (width 0.508) (layer B.Cu) (net 5)) + (segment (start 192.636 171.55) (end 192.636 158.836) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 192.636 158.836) (end 189 155.2) (width 0.508) (layer B.Cu) (net 6)) + (segment (start 182.636 171.55) (end 182.636 158.836) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 182.636 158.836) (end 179 155.2) (width 0.508) (layer B.Cu) (net 7)) + (segment (start 172.636 171.55) (end 172.636 158.836) (width 0.508) (layer B.Cu) (net 8)) + (segment (start 172.636 158.836) (end 169 155.2) (width 0.508) (layer B.Cu) (net 8)) + (segment (start 162.636 171.55) (end 162.636 158.836) (width 0.508) (layer B.Cu) (net 9)) + (segment (start 162.636 158.836) (end 159 155.2) (width 0.508) (layer B.Cu) (net 9)) + (segment (start 152.636 171.55) (end 152.636 158.836) (width 0.508) (layer B.Cu) (net 10)) + (segment (start 152.636 158.836) (end 149 155.2) (width 0.508) (layer B.Cu) (net 10)) + (segment (start 132.636 171.55) (end 132.636 158.836) (width 0.508) (layer B.Cu) (net 11)) + (segment (start 132.636 158.836) (end 129 155.2) (width 0.508) (layer B.Cu) (net 11)) + (segment (start 122.636 171.55) (end 122.636 158.836) (width 0.508) (layer B.Cu) (net 12)) + (segment (start 122.636 158.836) (end 119 155.2) (width 0.508) (layer B.Cu) (net 12)) + (segment (start 112.636 171.55) (end 112.636 158.836) (width 0.508) (layer B.Cu) (net 13)) + (segment (start 112.636 158.836) (end 109 155.2) (width 0.508) (layer B.Cu) (net 13)) + (segment (start 102.636 171.55) (end 102.636 158.836) (width 0.508) (layer B.Cu) (net 14)) + (segment (start 102.636 158.836) (end 99 155.2) (width 0.508) (layer B.Cu) (net 14)) + (segment (start 92.636 171.55) (end 92.636 158.636) (width 0.508) (layer B.Cu) (net 15)) + (segment (start 89.2 155.2) (end 89 155.2) (width 0.508) (layer B.Cu) (net 15)) + (segment (start 89.2 155.2) (end 92.636 158.636) (width 0.508) (layer B.Cu) (net 15)) + (segment (start 282.636 171.55) (end 282.636 158.836) (width 0.508) (layer B.Cu) (net 16)) + (segment (start 282.636 158.836) (end 279 155.2) (width 0.508) (layer B.Cu) (net 16)) + (segment (start 272.636 171.55) (end 272.636 158.836) (width 0.508) (layer B.Cu) (net 17)) + (segment (start 272.636 158.836) (end 269 155.2) (width 0.508) (layer B.Cu) (net 17)) + (segment (start 274.496 141.146) (end 276.96 143.61) (width 0.508) (layer F.Cu) (net 18)) + (segment (start 251.7668 141.146) (end 274.496 141.146) (width 0.508) (layer F.Cu) (net 18)) + (segment (start 249.0128 143.9) (end 251.7668 141.146) (width 0.508) (layer F.Cu) (net 18)) + (segment (start 247.806 143.9) (end 249.0128 143.9) (width 0.508) (layer F.Cu) (net 18)) + (segment (start 32.636 171.55) (end 32.636 158.836) (width 0.508) (layer B.Cu) (net 19)) + (segment (start 32.636 158.836) (end 29 155.2) (width 0.508) (layer B.Cu) (net 19)) + (segment (start 82.636 171.55) (end 82.636 158.836) (width 0.508) (layer B.Cu) (net 20)) + (segment (start 82.636 158.836) (end 79 155.2) (width 0.508) (layer B.Cu) (net 20)) + (segment (start 72.636 171.55) (end 72.636 158.836) (width 0.508) (layer B.Cu) (net 21)) + (segment (start 72.636 158.836) (end 69 155.2) (width 0.508) (layer B.Cu) (net 21)) + (segment (start 62.636 171.55) (end 62.636 158.836) (width 0.508) (layer B.Cu) (net 22)) + (segment (start 62.636 158.836) (end 59 155.2) (width 0.508) (layer B.Cu) (net 22)) + (segment (start 52.636 171.55) (end 52.636 158.836) (width 0.508) (layer B.Cu) (net 23)) + (segment (start 52.636 158.836) (end 49 155.2) (width 0.508) (layer B.Cu) (net 23)) + (segment (start 42.636 171.55) (end 42.636 158.836) (width 0.508) (layer B.Cu) (net 24)) + (segment (start 42.636 158.836) (end 39 155.2) (width 0.508) (layer B.Cu) (net 24)) + (via (at 119.6837 133.344) (size 0.889) (layers F.Cu B.Cu) (net 25)) + (segment (start 116.3827 123.5023) (end 117.91 121.975) (width 0.508) (layer B.Cu) (net 25)) + (segment (start 116.3827 130.043) (end 116.3827 123.5023) (width 0.508) (layer B.Cu) (net 25)) + (segment (start 119.6837 133.344) (end 116.3827 130.043) (width 0.508) (layer B.Cu) (net 25)) + (segment (start 229.744 135.664) (end 232.81 138.73) (width 0.508) (layer F.Cu) (net 25)) + (segment (start 201.824 135.664) (end 229.744 135.664) (width 0.508) (layer F.Cu) (net 25)) + (segment (start 199.504 133.344) (end 201.824 135.664) (width 0.508) (layer F.Cu) (net 25)) + (segment (start 119.6837 133.344) (end 199.504 133.344) (width 0.508) (layer F.Cu) (net 25)) + (segment (start 225.5533 136.5533) (end 227.73 138.73) (width 0.508) (layer F.Cu) (net 26)) + (segment (start 201.6353 136.5533) (end 225.5533 136.5533) (width 0.508) (layer F.Cu) (net 26)) + (segment (start 200.4132 135.3312) (end 201.6353 136.5533) (width 0.508) (layer F.Cu) (net 26)) + (segment (start 95.9788 135.3312) (end 200.4132 135.3312) (width 0.508) (layer F.Cu) (net 26)) + (segment (start 82.81 148.5) (end 95.9788 135.3312) (width 0.508) (layer F.Cu) (net 26)) + (via (at 215.6143 130.234) (size 0.889) (layers F.Cu B.Cu) (net 27)) + (segment (start 215.6143 136.7743) (end 215.6143 130.234) (width 0.508) (layer B.Cu) (net 27)) + (segment (start 217.57 138.73) (end 215.6143 136.7743) (width 0.508) (layer B.Cu) (net 27)) + (segment (start 215.6143 127.6307) (end 215.6143 130.234) (width 0.508) (layer F.Cu) (net 27)) + (segment (start 206.9826 118.999) (end 215.6143 127.6307) (width 0.508) (layer F.Cu) (net 27)) + (segment (start 185.3789 118.999) (end 206.9826 118.999) (width 0.508) (layer F.Cu) (net 27)) + (segment (start 181.4887 122.8892) (end 185.3789 118.999) (width 0.508) (layer F.Cu) (net 27)) + (segment (start 179.0742 122.8892) (end 181.4887 122.8892) (width 0.508) (layer F.Cu) (net 27)) + (segment (start 177.91 121.725) (end 179.0742 122.8892) (width 0.508) (layer F.Cu) (net 27)) + (via (at 206.4671 130.2172) (size 0.889) (layers F.Cu B.Cu) (net 28)) + (segment (start 214.9799 138.73) (end 206.4671 130.2172) (width 0.508) (layer B.Cu) (net 28)) + (segment (start 215.03 138.73) (end 214.9799 138.73) (width 0.508) (layer B.Cu) (net 28)) + (segment (start 169.7075 123.6725) (end 167.86 121.825) (width 0.508) (layer F.Cu) (net 28)) + (segment (start 184.1025 123.6725) (end 169.7075 123.6725) (width 0.508) (layer F.Cu) (net 28)) + (segment (start 187.76 120.015) (end 184.1025 123.6725) (width 0.508) (layer F.Cu) (net 28)) + (segment (start 200.4173 120.015) (end 187.76 120.015) (width 0.508) (layer F.Cu) (net 28)) + (segment (start 206.4671 126.0648) (end 200.4173 120.015) (width 0.508) (layer F.Cu) (net 28)) + (segment (start 206.4671 130.2172) (end 206.4671 126.0648) (width 0.508) (layer F.Cu) (net 28)) + (via (at 130.909 136.5692) (size 0.889) (layers F.Cu B.Cu) (net 29)) + (segment (start 126.3827 132.0429) (end 130.909 136.5692) (width 0.508) (layer B.Cu) (net 29)) + (segment (start 126.3827 123.4523) (end 126.3827 132.0429) (width 0.508) (layer B.Cu) (net 29)) + (segment (start 127.91 121.925) (end 126.3827 123.4523) (width 0.508) (layer B.Cu) (net 29)) + (segment (start 203.5679 137.4279) (end 204.87 138.73) (width 0.508) (layer F.Cu) (net 29)) + (segment (start 201.4319 137.4279) (end 203.5679 137.4279) (width 0.508) (layer F.Cu) (net 29)) + (segment (start 200.3541 136.3501) (end 201.4319 137.4279) (width 0.508) (layer F.Cu) (net 29)) + (segment (start 131.1281 136.3501) (end 200.3541 136.3501) (width 0.508) (layer F.Cu) (net 29)) + (segment (start 130.909 136.5692) (end 131.1281 136.3501) (width 0.508) (layer F.Cu) (net 29)) + (via (at 139.2972 137.3125) (size 0.889) (layers F.Cu B.Cu) (net 30)) + (segment (start 136.3522 134.3675) (end 139.2972 137.3125) (width 0.508) (layer B.Cu) (net 30)) + (segment (start 136.3522 123.4328) (end 136.3522 134.3675) (width 0.508) (layer B.Cu) (net 30)) + (segment (start 137.86 121.925) (end 136.3522 123.4328) (width 0.508) (layer B.Cu) (net 30)) + (segment (start 201.656 138.73) (end 202.33 138.73) (width 0.508) (layer F.Cu) (net 30)) + (segment (start 200.2385 137.3125) (end 201.656 138.73) (width 0.508) (layer F.Cu) (net 30)) + (segment (start 139.2972 137.3125) (end 200.2385 137.3125) (width 0.508) (layer F.Cu) (net 30)) + (via (at 205.0389 132.9169) (size 0.889) (layers F.Cu B.Cu) (net 31)) + (segment (start 205.0389 133.4811) (end 205.0389 132.9169) (width 0.508) (layer B.Cu) (net 31)) + (segment (start 199.79 138.73) (end 205.0389 133.4811) (width 0.508) (layer B.Cu) (net 31)) + (segment (start 207.86 130.1718) (end 207.86 121.625) (width 0.508) (layer F.Cu) (net 31)) + (segment (start 205.1149 132.9169) (end 207.86 130.1718) (width 0.508) (layer F.Cu) (net 31)) + (segment (start 205.0389 132.9169) (end 205.1149 132.9169) (width 0.508) (layer F.Cu) (net 31)) + (segment (start 227.73 145.91) (end 225.19 148.45) (width 0.508) (layer B.Cu) (net 32)) + (segment (start 227.73 141.27) (end 227.73 145.91) (width 0.508) (layer B.Cu) (net 32)) + (via (at 161.6319 139.2741) (size 0.889) (layers F.Cu B.Cu) (net 33)) + (segment (start 156.3689 123.4161) (end 157.91 121.875) (width 0.508) (layer B.Cu) (net 33)) + (segment (start 156.3689 134.0111) (end 156.3689 123.4161) (width 0.508) (layer B.Cu) (net 33)) + (segment (start 161.6319 139.2741) (end 156.3689 134.0111) (width 0.508) (layer B.Cu) (net 33)) + (segment (start 209.4375 144.3225) (end 212.49 141.27) (width 0.508) (layer F.Cu) (net 33)) + (segment (start 166.6803 144.3225) (end 209.4375 144.3225) (width 0.508) (layer F.Cu) (net 33)) + (segment (start 161.6319 139.2741) (end 166.6803 144.3225) (width 0.508) (layer F.Cu) (net 33)) + (via (at 185.6706 138.3838) (size 0.889) (layers F.Cu B.Cu) (net 34)) + (via (at 189.1604 124.08) (size 0.889) (layers F.Cu B.Cu) (net 34)) + (segment (start 184.6979 139.3565) (end 185.6706 138.3838) (width 0.508) (layer F.Cu) (net 34)) + (segment (start 184.6979 140.8829) (end 184.6979 139.3565) (width 0.508) (layer F.Cu) (net 34)) + (segment (start 186.4841 142.6691) (end 184.6979 140.8829) (width 0.508) (layer F.Cu) (net 34)) + (segment (start 200.9309 142.6691) (end 186.4841 142.6691) (width 0.508) (layer F.Cu) (net 34)) + (segment (start 202.33 141.27) (end 200.9309 142.6691) (width 0.508) (layer F.Cu) (net 34)) + (segment (start 185.6706 127.5698) (end 189.1604 124.08) (width 0.508) (layer B.Cu) (net 34)) + (segment (start 185.6706 138.3838) (end 185.6706 127.5698) (width 0.508) (layer B.Cu) (net 34)) + (segment (start 195.405 124.08) (end 197.86 121.625) (width 0.508) (layer F.Cu) (net 34)) + (segment (start 189.1604 124.08) (end 195.405 124.08) (width 0.508) (layer F.Cu) (net 34)) + (via (at 201.1696 146.9135) (size 0.889) (layers F.Cu B.Cu) (net 35)) + (segment (start 201.1696 145.1896) (end 201.1696 146.9135) (width 0.508) (layer B.Cu) (net 35)) + (segment (start 197.25 141.27) (end 201.1696 145.1896) (width 0.508) (layer B.Cu) (net 35)) + (segment (start 194.5965 146.9135) (end 193.06 148.45) (width 0.508) (layer F.Cu) (net 35)) + (segment (start 201.1696 146.9135) (end 194.5965 146.9135) (width 0.508) (layer F.Cu) (net 35)) + (segment (start 252.636 171.55) (end 252.636 158.836) (width 0.508) (layer B.Cu) (net 36)) + (segment (start 252.636 158.836) (end 249 155.2) (width 0.508) (layer B.Cu) (net 36)) + (segment (start 242.636 171.55) (end 242.636 158.836) (width 0.508) (layer B.Cu) (net 37)) + (segment (start 242.636 158.836) (end 239 155.2) (width 0.508) (layer B.Cu) (net 37)) + (segment (start 232.636 171.55) (end 232.636 158.836) (width 0.508) (layer B.Cu) (net 38)) + (segment (start 232.636 158.836) (end 229 155.2) (width 0.508) (layer B.Cu) (net 38)) + (segment (start 222.636 171.55) (end 222.636 158.836) (width 0.508) (layer B.Cu) (net 39)) + (segment (start 222.636 158.836) (end 219 155.2) (width 0.508) (layer B.Cu) (net 39)) + (segment (start 212.636 171.55) (end 212.636 158.836) (width 0.508) (layer B.Cu) (net 40)) + (segment (start 212.636 158.836) (end 209 155.2) (width 0.508) (layer B.Cu) (net 40)) + (via (at 230.3619 146.305) (size 0.889) (layers F.Cu B.Cu) (net 41)) + (via (at 98.568 137.7346) (size 0.889) (layers F.Cu B.Cu) (net 41)) + (segment (start 96.3522 123.4828) (end 97.86 121.975) (width 0.508) (layer B.Cu) (net 41)) + (segment (start 96.3522 135.5188) (end 96.3522 123.4828) (width 0.508) (layer B.Cu) (net 41)) + (segment (start 98.568 137.7346) (end 96.3522 135.5188) (width 0.508) (layer B.Cu) (net 41)) + (segment (start 206.4734 146.305) (end 230.3619 146.305) (width 0.508) (layer F.Cu) (net 41)) + (segment (start 205.3668 145.1984) (end 206.4734 146.305) (width 0.508) (layer F.Cu) (net 41)) + (segment (start 116.4148 145.1984) (end 205.3668 145.1984) (width 0.508) (layer F.Cu) (net 41)) + (segment (start 108.951 137.7346) (end 116.4148 145.1984) (width 0.508) (layer F.Cu) (net 41)) + (segment (start 98.568 137.7346) (end 108.951 137.7346) (width 0.508) (layer F.Cu) (net 41)) + (segment (start 232.81 143.8569) (end 230.3619 146.305) (width 0.508) (layer B.Cu) (net 41)) + (segment (start 232.81 141.27) (end 232.81 143.8569) (width 0.508) (layer B.Cu) (net 41)) + (via (at 227.45 147.5993) (size 0.889) (layers F.Cu B.Cu) (net 42)) + (via (at 109.2972 139.4931) (size 0.889) (layers F.Cu B.Cu) (net 42)) + (segment (start 106.3827 136.5786) (end 109.2972 139.4931) (width 0.508) (layer B.Cu) (net 42)) + (segment (start 106.3827 123.5023) (end 106.3827 136.5786) (width 0.508) (layer B.Cu) (net 42)) + (segment (start 107.91 121.975) (end 106.3827 123.5023) (width 0.508) (layer B.Cu) (net 42)) + (segment (start 230.27 144.7793) (end 227.45 147.5993) (width 0.508) (layer B.Cu) (net 42)) + (segment (start 230.27 141.27) (end 230.27 144.7793) (width 0.508) (layer B.Cu) (net 42)) + (segment (start 227.0938 147.2431) (end 227.45 147.5993) (width 0.508) (layer F.Cu) (net 42)) + (segment (start 202.8467 147.2431) (end 227.0938 147.2431) (width 0.508) (layer F.Cu) (net 42)) + (segment (start 201.5643 145.9607) (end 202.8467 147.2431) (width 0.508) (layer F.Cu) (net 42)) + (segment (start 115.7648 145.9607) (end 201.5643 145.9607) (width 0.508) (layer F.Cu) (net 42)) + (segment (start 109.2972 139.4931) (end 115.7648 145.9607) (width 0.508) (layer F.Cu) (net 42)) + (via (at 193.2987 123.077) (size 0.889) (layers F.Cu B.Cu) (net 43)) + (segment (start 193.2987 129.6987) (end 193.2987 123.077) (width 0.508) (layer B.Cu) (net 43)) + (segment (start 195.5269 131.9269) (end 193.2987 129.6987) (width 0.508) (layer B.Cu) (net 43)) + (segment (start 205.6869 131.9269) (end 195.5269 131.9269) (width 0.508) (layer B.Cu) (net 43)) + (segment (start 212.49 138.73) (end 205.6869 131.9269) (width 0.508) (layer B.Cu) (net 43)) + (segment (start 189.212 123.077) (end 187.81 121.675) (width 0.508) (layer F.Cu) (net 43)) + (segment (start 193.2987 123.077) (end 189.212 123.077) (width 0.508) (layer F.Cu) (net 43)) + (via (at 143.392 138.3213) (size 0.889) (layers F.Cu B.Cu) (net 44)) + (segment (start 143.392 126.443) (end 143.392 138.3213) (width 0.508) (layer B.Cu) (net 44)) + (segment (start 147.96 121.875) (end 143.392 126.443) (width 0.508) (layer B.Cu) (net 44)) + (segment (start 207.6598 143.5602) (end 209.95 141.27) (width 0.508) (layer F.Cu) (net 44)) + (segment (start 167.2655 143.5602) (end 207.6598 143.5602) (width 0.508) (layer F.Cu) (net 44)) + (segment (start 162.0266 138.3213) (end 167.2655 143.5602) (width 0.508) (layer F.Cu) (net 44)) + (segment (start 143.392 138.3213) (end 162.0266 138.3213) (width 0.508) (layer F.Cu) (net 44)) + (segment (start 262.636 171.55) (end 262.636 158.836) (width 0.508) (layer B.Cu) (net 45)) + (segment (start 262.636 158.836) (end 259 155.2) (width 0.508) (layer B.Cu) (net 45)) + (segment (start 27.1511 169.9514) (end 26.8686 169.9514) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 85.27 171.55) (end 83.6714 169.9514) (width 0.508) (layer F.Cu) (net 46) (tstamp 5CB4AA74)) + (segment (start 27.1511 169.9514) (end 83.5159 169.9514) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 83.5159 169.9514) (end 83.6714 169.9514) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 26.8686 169.9514) (end 25.27 171.55) (width 0.508) (layer F.Cu) (net 46) (tstamp 5CB4AA7E)) + (segment (start 205.27 171.55) (end 205.27 153.835) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 194.1059 120.9224) (end 194.1059 107.9259) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 194.1059 120.9224) (end 192.3459 122.6824) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 192.3459 122.6824) (end 192.3459 123.8756) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 192.3459 123.8756) (end 192.4423 123.972) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 192.4423 123.972) (end 192.4423 130.5703) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 192.4423 130.5703) (end 190.8989 132.1137) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 190.8989 132.1137) (end 190.8989 142.1309) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 190.8989 142.1309) (end 198.501 149.733) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 198.501 149.733) (end 201.168 149.733) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 201.168 149.733) (end 205.27 153.835) (width 0.508) (layer B.Cu) (net 46)) + (via (at 194.1059 107.9259) (size 0.889) (layers F.Cu B.Cu) (net 46)) + (segment (start 85.27 171.55) (end 85.27 148.73) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 143.73) (end 90.27 129) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 143.73) (end 85.27 148.73) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 25.27 171.55) (end 25.27 114.93) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 30.27 109.93) (end 30.27 70.6) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 25.27 114.93) (end 30.27 109.93) (width 0.508) (layer B.Cu) (net 46)) + (via (at 236.2584 98.6632) (size 0.889) (layers F.Cu B.Cu) (net 46)) + (segment (start 90.27 99.8) (end 90.27 114.4) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 85.2) (end 90.27 99.8) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 70.6) (end 90.27 85.2) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 114.4) (end 90.27 120.2426) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.24 128.97) (end 90.27 129) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.24 125.15) (end 90.24 128.97) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 125.12) (end 90.24 125.15) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 120.2426) (end 90.27 125.12) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.24 120.2726) (end 90.24 121.975) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 90.27 120.2426) (end 90.24 120.2726) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 236.2584 69.6641) (end 236.2584 98.6632) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 237.1041 68.8184) (end 236.2584 69.6641) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 238.4884 68.8184) (end 237.1041 68.8184) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 240.27 70.6) (end 238.4884 68.8184) (width 0.508) (layer B.Cu) (net 46)) + (segment (start 236.8014 98.1202) (end 236.2584 98.6632) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 253.7146 98.1202) (end 236.8014 98.1202) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 257.3117 101.7173) (end 253.7146 98.1202) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 258.3527 101.7173) (end 257.3117 101.7173) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 260.27 99.8) (end 258.3527 101.7173) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 96.7441 107.9259) (end 194.1059 107.9259) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 90.27 114.4) (end 96.7441 107.9259) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 226.9957 107.9259) (end 236.2584 98.6632) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 194.1059 107.9259) (end 226.9957 107.9259) (width 0.508) (layer F.Cu) (net 46)) + (segment (start 175.27 171.55) (end 175.27 133.92) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 175.27 133.92) (end 180.23 128.96) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.27 70.6) (end 180.27 85.2) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.19 114.48) (end 180.19 121.675) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.27 114.4) (end 180.19 114.48) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.27 85.2) (end 180.27 99.8) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.27 99.8) (end 180.27 114.4) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.19 128.92) (end 180.23 128.96) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.19 121.675) (end 180.19 128.92) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 180.23 128.96) (end 180.27 129) (width 0.508) (layer B.Cu) (net 47)) + (segment (start 257.8134 75.4434) (end 260.27 77.9) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 239.7177 75.4434) (end 257.8134 75.4434) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 232.8289 68.5546) (end 239.7177 75.4434) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 182.3154 68.5546) (end 232.8289 68.5546) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 180.27 70.6) (end 182.3154 68.5546) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 80.271 118.999) (end 70.27 129) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 177.514 118.999) (end 80.271 118.999) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 180.19 121.675) (end 177.514 118.999) (width 0.508) (layer F.Cu) (net 47)) + (segment (start 185.27 171.55) (end 185.27 150.7767) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 185.27 150.7767) (end 189.3516 146.6951) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 189.3516 146.6951) (end 189.3516 129.9184) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 189.3516 129.9184) (end 190.27 129) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 190.27 85.2) (end 190.27 70.6) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 190.27 114.4) (end 190.27 99.8) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 190.27 99.8) (end 190.27 85.2) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 190.27 121.7) (end 190.27 114.4) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 190.24 121.67) (end 190.24 121.625) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 190.27 121.7) (end 190.24 121.67) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 192.2088 83.2612) (end 190.27 85.2) (width 0.508) (layer F.Cu) (net 48)) + (segment (start 200.49 83.2612) (end 192.2088 83.2612) (width 0.508) (layer F.Cu) (net 48)) + (segment (start 202.9538 85.725) (end 200.49 83.2612) (width 0.508) (layer F.Cu) (net 48)) + (segment (start 208.4511 85.725) (end 202.9538 85.725) (width 0.508) (layer F.Cu) (net 48)) + (segment (start 210.9149 83.2612) (end 208.4511 85.725) (width 0.508) (layer F.Cu) (net 48)) + (segment (start 258.3312 83.2612) (end 210.9149 83.2612) (width 0.508) (layer F.Cu) (net 48)) + (segment (start 260.27 85.2) (end 258.3312 83.2612) (width 0.508) (layer F.Cu) (net 48)) + (segment (start 190.27 129) (end 190.27 121.7) (width 0.508) (layer B.Cu) (net 48)) + (segment (start 195.27 171.55) (end 195.27 153.184) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 191.9691 86.2009) (end 200.27 77.9) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 191.9691 86.2009) (end 191.9691 121.8) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 191.9691 121.8) (end 191.3 122.4691) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 191.3 122.4691) (end 191.3 124.3) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 191.3 124.3) (end 191.68 124.68) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 191.68 124.68) (end 191.68 129.8733) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 191.68 129.8733) (end 190.1141 131.4392) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 190.1141 131.4392) (end 190.1141 148.0281) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 190.1141 148.0281) (end 195.27 153.184) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 200.24 114.43) (end 200.24 121.625) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 200.27 114.4) (end 200.24 114.43) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 200.24 128.97) (end 200.27 129) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 200.24 121.625) (end 200.24 128.97) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 200.27 85.2) (end 200.27 99.8) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 200.27 99.8) (end 200.27 114.4) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 204.6657 95.4043) (end 200.27 99.8) (width 0.508) (layer F.Cu) (net 49)) + (segment (start 257.3657 95.4043) (end 204.6657 95.4043) (width 0.508) (layer F.Cu) (net 49)) + (segment (start 260.27 92.5) (end 257.3657 95.4043) (width 0.508) (layer F.Cu) (net 49)) + (segment (start 200.27 70.6) (end 200.27 77.9) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 200.27 77.9) (end 200.27 85.2) (width 0.508) (layer B.Cu) (net 49)) + (segment (start 97.1003 170.0022) (end 96.8178 170.0022) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 215.1145 171.55) (end 213.5667 170.0022) (width 0.508) (layer F.Cu) (net 50) (tstamp 5CB4AA0D)) + (segment (start 213.5667 170.0022) (end 97.1003 170.0022) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 215.27 171.55) (end 215.1145 171.55) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 96.8178 170.0022) (end 95.27 171.55) (width 0.508) (layer F.Cu) (net 50) (tstamp 5CB4AA70)) + (segment (start 95.27 171.55) (end 95.27 147.935) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.27 142.935) (end 100.27 129) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.27 142.935) (end 95.27 147.935) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 35.27 171.55) (end 35.27 115.43) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 35.27 115.43) (end 40.27 110.43) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 40.27 110.43) (end 40.27 70.6) (width 0.508) (layer B.Cu) (net 50)) + (via (at 254.051 99.8041) (size 0.889) (layers F.Cu B.Cu) (net 50)) + (segment (start 100.27 99.8) (end 100.27 114.4) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.27 70.6) (end 100.27 85.2) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.27 85.2) (end 100.27 99.8) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.29 114.42) (end 100.29 121.975) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.27 114.4) (end 100.29 114.42) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.29 128.98) (end 100.27 129) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 100.29 121.975) (end 100.29 128.98) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 42.417 68.453) (end 40.27 70.6) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 98.123 68.453) (end 42.417 68.453) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 100.27 70.6) (end 98.123 68.453) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 254.051 91.681) (end 254.051 99.8041) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 240.27 77.9) (end 254.051 91.681) (width 0.508) (layer B.Cu) (net 50)) + (segment (start 254.051 100.881) (end 260.27 107.1) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 254.051 99.8041) (end 254.051 100.881) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 238.482 79.688) (end 240.27 77.9) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 105.782 79.688) (end 238.482 79.688) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 100.27 85.2) (end 105.782 79.688) (width 0.508) (layer F.Cu) (net 50)) + (segment (start 45.27 171.55) (end 45.27 171.896) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 105.27 171.769) (end 103.9721 173.0669) (width 0.508) (layer F.Cu) (net 51) (tstamp 5CB4AA6B)) + (segment (start 103.9721 173.0669) (end 46.4409 173.0669) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 105.27 171.769) (end 105.27 171.55) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 45.27 171.896) (end 46.4409 173.0669) (width 0.508) (layer F.Cu) (net 51) (tstamp 5CB4AA79)) + (segment (start 105.27 171.55) (end 105.27 171.7055) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 105.27 171.7055) (end 106.5679 173.0034) (width 0.508) (layer F.Cu) (net 51) (tstamp 5CB4AA67)) + (segment (start 224.171037 173.0034) (end 225.27 172.15) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 106.5679 173.0034) (end 224.171037 173.0034) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 105.27 171.55) (end 105.27 148.095) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 105.27 148.095) (end 110.27 143.095) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.27 143.095) (end 110.27 129) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 45.27 171.55) (end 45.27 116.07) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 50.27 111.07) (end 50.27 70.6) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 50.27 111.07) (end 45.27 116.07) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.27 99.8) (end 110.27 114.4) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.27 70.6) (end 110.27 85.2) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.27 85.2) (end 110.27 99.8) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.29 114.42) (end 110.29 121.975) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.27 114.4) (end 110.29 114.42) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.29 128.98) (end 110.27 129) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 110.29 121.975) (end 110.29 128.98) (width 0.508) (layer B.Cu) (net 51)) + (segment (start 241.6213 86.5513) (end 240.27 85.2) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 264.3187 86.5513) (end 241.6213 86.5513) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 280.27 70.6) (end 264.3187 86.5513) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 232.0383 93.4317) (end 240.27 85.2) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 116.6383 93.4317) (end 232.0383 93.4317) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 110.27 99.8) (end 116.6383 93.4317) (width 0.508) (layer F.Cu) (net 51)) + (segment (start 115.27 171.55) (end 115.27 139.1052) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.6365 133.7387) (end 115.27 139.1052) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.6365 129.3665) (end 120.6365 133.7387) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.6365 129.3665) (end 120.27 129) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 115.27 171.55) (end 115.27 171.8325) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 114.0718 173.0307) (end 56.584699 173.0307) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 55.27 171.769) (end 56.584699 173.0307) (width 0.508) (layer B.Cu) (net 52) (tstamp 5CB4A9A9)) + (segment (start 55.27 171.769) (end 55.27 171.55) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 115.27 171.8325) (end 114.0718 173.0307) (width 0.508) (layer B.Cu) (net 52) (tstamp 5CB4AA60)) + (segment (start 237.4588 169.9612) (end 236.8267 169.9612) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 280.543 134.673) (end 280.543 148.463) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 260.27 114.4) (end 280.543 134.673) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 283.0322 150.9522) (end 283.0322 168.656) (width 0.508) (layer F.Cu) (net 52) (tstamp 5C1EC5C7)) + (segment (start 283.0322 168.656) (end 281.981 169.9612) (width 0.508) (layer F.Cu) (net 52) (tstamp 5C1EC01F)) + (segment (start 281.981 169.9612) (end 261.3731 169.9612) (width 0.508) (layer F.Cu) (net 52) (tstamp 5C1EC022)) + (segment (start 280.543 148.463) (end 283.0322 150.9522) (width 0.508) (layer F.Cu) (net 52) (tstamp 5C1EC5F4)) + (segment (start 261.3731 169.9612) (end 237.4588 169.9612) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 235.27 171.5179) (end 235.27 171.55) (width 0.508) (layer F.Cu) (net 52) (tstamp 5CB4AA1B)) + (segment (start 236.8267 169.9612) (end 235.27 171.5179) (width 0.508) (layer F.Cu) (net 52) (tstamp 5CB4AA1A)) + (segment (start 55.27 171.55) (end 55.27 117.33) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 60.27 112.33) (end 60.27 70.6) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 55.27 117.33) (end 60.27 112.33) (width 0.508) (layer B.Cu) (net 52) (tstamp 5CB4A9B3)) + (segment (start 260.27 114.4) (end 260.27 114.1768) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 266.7 107.7468) (end 266.7 89.0667) (width 0.508) (layer F.Cu) (net 52) (tstamp 5C1EC1B3)) + (segment (start 260.27 114.1768) (end 266.7 107.7468) (width 0.508) (layer F.Cu) (net 52) (tstamp 5C1EC1AD)) + (segment (start 120.27 85.2) (end 120.27 70.6) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 55.27 171.67) (end 55.1 171.5) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.27 99.8) (end 120.3 99.8) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.3 114.37) (end 120.3 99.8) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.27 114.4) (end 120.3 114.37) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.3 85.23) (end 120.27 85.2) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.3 99.8) (end 120.3 85.23) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.27 129) (end 120.27 121.7) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.27 121.7) (end 120.27 114.4) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.29 121.72) (end 120.29 121.925) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 120.27 121.7) (end 120.29 121.72) (width 0.508) (layer B.Cu) (net 52)) + (segment (start 243.7033 89.0667) (end 262.4168 89.0667) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 262.4168 89.0667) (end 266.7 89.0667) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 240.27 92.5) (end 243.7033 89.0667) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 269.1033 89.0667) (end 280.27 77.9) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 266.7 89.0667) (end 269.1033 89.0667) (width 0.508) (layer F.Cu) (net 52) (tstamp 5C1EC1BA)) + (segment (start 238.2807 94.4893) (end 240.27 92.5) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 125.5807 94.4893) (end 238.2807 94.4893) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 120.27 99.8) (end 125.5807 94.4893) (width 0.508) (layer F.Cu) (net 52)) + (segment (start 245.27 171.55) (end 245.27 150.9555) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 245.27 150.9555) (end 249.0011 147.2244) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 249.0011 147.2244) (end 272.8413 147.2244) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 272.8413 147.2244) (end 275.6343 144.4314) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 275.6343 144.4314) (end 275.6343 142.8373) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 275.6343 142.8373) (end 275.0521 142.2551) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 275.0521 142.2551) (end 261.5195 142.2551) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 261.5195 142.2551) (end 256.4613 137.1969) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 256.4613 137.1969) (end 255.7665 137.1969) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 255.7665 137.1969) (end 255.2083 136.6387) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 255.2083 136.6387) (end 255.2083 133.1974) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 260.27 128.1357) (end 260.27 121.7) (width 0.508) (layer F.Cu) (net 53)) + (segment (start 260.27 128.1357) (end 255.2083 133.1974) (width 0.508) (layer F.Cu) (net 53)) + (via (at 255.2083 133.1974) (size 0.889) (layers F.Cu B.Cu) (net 53)) + (segment (start 125.27 171.55) (end 125.27 148.37) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 131.8818 130.6118) (end 130.27 129) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 131.8818 130.6118) (end 131.8818 141.7582) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 131.8818 141.7582) (end 125.27 148.37) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 65.27 171.55) (end 65.27 117.63) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 65.27 117.63) (end 70.27 112.63) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 70.27 112.63) (end 70.27 70.6) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 130.27 99.8) (end 130.27 114.4) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 130.27 85.2) (end 130.27 99.8) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 130.24 114.43) (end 130.24 121.925) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 130.27 114.4) (end 130.24 114.43) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 231.1824 108.8876) (end 240.27 99.8) (width 0.508) (layer F.Cu) (net 53)) + (segment (start 135.7824 108.8876) (end 231.1824 108.8876) (width 0.508) (layer F.Cu) (net 53)) + (segment (start 130.27 114.4) (end 135.7824 108.8876) (width 0.508) (layer F.Cu) (net 53)) + (segment (start 130.27 70.6) (end 130.27 85.2) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 72.4863 68.3837) (end 70.27 70.6) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 128.0537 68.3837) (end 72.4863 68.3837) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 130.27 70.6) (end 128.0537 68.3837) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 244.4526 103.9826) (end 251.5996 103.9826) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 240.27 99.8) (end 244.4526 103.9826) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 251.5996 117.9598) (end 251.5996 103.9826) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 256.8954 123.2556) (end 251.5996 117.9598) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 258.7144 123.2556) (end 256.8954 123.2556) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 260.27 121.7) (end 258.7144 123.2556) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 278.5951 86.8749) (end 280.27 85.2) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 268.7073 86.8749) (end 278.5951 86.8749) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 251.5996 103.9826) (end 268.7073 86.8749) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 130.24 128.97) (end 130.27 129) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 130.24 121.925) (end 130.24 128.97) (width 0.508) (layer B.Cu) (net 53)) + (segment (start 253.6821 172.9799) (end 253.8401 172.9799) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 135.27 171.642) (end 136.6079 172.9799) (width 0.508) (layer B.Cu) (net 54) (tstamp 5CB4AA54)) + (segment (start 136.6079 172.9799) (end 253.6821 172.9799) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 135.27 171.55) (end 135.27 171.642) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 253.8401 172.9799) (end 255.27 171.55) (width 0.508) (layer B.Cu) (net 54) (tstamp 5CB4AAA8)) + (segment (start 135.27 171.55) (end 135.27 148.1217) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 140.27 143.1217) (end 135.27 148.1217) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 140.27 143.1217) (end 140.27 129) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 255.27 171.704) (end 255.27 171.55) (width 0.508) (layer B.Cu) (net 54) (tstamp 5CB4AA2A)) + (segment (start 75.27 171.55) (end 75.27 150.63) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 77.383 148.517) (end 77 148.9) (width 0.508) (layer B.Cu) (net 54) (tstamp 5C2B779E)) + (segment (start 75.27 150.63) (end 77 148.9) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 77.383 148.517) (end 77.383 138.3) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 77.383 133.218) (end 77.383 120.383) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 77 120) (end 74.2 117.2) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 74.2 117.2) (end 74.2 111.1) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 74.2 111.1) (end 80.27 105.03) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 80.27 105.03) (end 80.27 70.6) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 77.383 120.383) (end 77 120) (width 0.508) (layer B.Cu) (net 54) (tstamp 5C2B7797)) + (via (at 77.383 133.218) (size 0.889) (layers F.Cu B.Cu) (net 54)) + (segment (start 140.27 99.8) (end 140.27 114.4) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 140.27 70.6) (end 140.27 85.2) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 140.27 85.2) (end 140.27 99.8) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 140.34 114.47) (end 140.34 121.875) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 140.27 114.4) (end 140.34 114.47) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 77.383 138.3733) (end 77.383 138.3) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 77.383 138.3) (end 77.383 133.218) (width 0.508) (layer B.Cu) (net 54) (tstamp 5C2B779C)) + (segment (start 34.488 133.218) (end 77.383 133.218) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 30.27 129) (end 34.488 133.218) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 140.34 128.93) (end 140.27 129) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 140.34 121.875) (end 140.34 128.93) (width 0.508) (layer B.Cu) (net 54)) + (segment (start 237.3382 109.9318) (end 240.27 107) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 144.7382 109.9318) (end 237.3382 109.9318) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 140.27 114.4) (end 144.7382 109.9318) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 78.2098 132.3912) (end 77.383 133.218) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 136.8788 132.3912) (end 78.2098 132.3912) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 140.27 129) (end 136.8788 132.3912) (width 0.508) (layer F.Cu) (net 54)) + (segment (start 265.27 171.55) (end 265.27 150.7788) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 250.3843 124.3143) (end 240.27 114.2) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 250.3843 124.3143) (end 259.8143 124.3143) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 259.8143 124.3143) (end 270.61 135.11) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 270.61 135.11) (end 270.61 136.61) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 270.61 136.61) (end 275.6391 141.6391) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 275.6391 141.6391) (end 276.7798 141.6391) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 276.7798 141.6391) (end 278.4475 143.3068) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 278.4475 143.3068) (end 278.4475 144.4739) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 278.4475 144.4739) (end 272.9639 149.9575) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 272.9639 149.9575) (end 266.0913 149.9575) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 266.0913 149.9575) (end 265.27 150.7788) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 145.27 171.55) (end 145.27 134) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 145.27 134) (end 150.27 129) (width 0.508) (layer B.Cu) (net 55)) + (via (at 42.295 123.5845) (size 0.889) (layers F.Cu B.Cu) (net 55)) + (via (at 88.8716 123.0016) (size 0.889) (layers F.Cu B.Cu) (net 55)) + (segment (start 150.27 99.8) (end 150.27 114.4) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 150.27 70.6) (end 150.27 85.2) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 150.27 85.2) (end 150.27 99.8) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 150.29 114.42) (end 150.29 121.875) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 150.27 114.4) (end 150.29 114.42) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 42.295 126.975) (end 42.295 123.5845) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 40.27 129) (end 42.295 126.975) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 71.0855 123.5845) (end 80.27 114.4) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 42.295 123.5845) (end 71.0855 123.5845) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 150.29 128.98) (end 150.27 129) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 150.29 121.875) (end 150.29 128.98) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 237.1188 111.0488) (end 240.27 114.2) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 153.6212 111.0488) (end 237.1188 111.0488) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 150.27 114.4) (end 153.6212 111.0488) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 80.27 114.4) (end 88.8716 123.0016) (width 0.508) (layer B.Cu) (net 55)) + (segment (start 89.314 123.444) (end 88.8716 123.0016) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 148.721 123.444) (end 89.314 123.444) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 150.29 121.875) (end 148.721 123.444) (width 0.508) (layer F.Cu) (net 55)) + (segment (start 275.27 171.55) (end 275.27 149.6022) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 253.0202 134.1502) (end 240.27 121.4) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 253.0202 134.1502) (end 255.603 134.1502) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 255.603 134.1502) (end 255.8035 133.9497) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 255.8035 133.9497) (end 269.0299 133.9497) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 269.0299 133.9497) (end 270.61 135.5298) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 270.61 135.5298) (end 270.61 136.4676) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 270.61 136.4676) (end 271.6351 137.4927) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 271.6351 137.4927) (end 273.8276 137.4927) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 273.8276 137.4927) (end 279.6 143.2651) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 279.6 143.2651) (end 279.6 145.2722) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 279.6 145.2722) (end 275.27 149.6022) (width 0.508) (layer B.Cu) (net 56)) + (via (at 273.8276 137.4927) (size 0.889) (layers F.Cu B.Cu) (net 56)) + (segment (start 155.27 171.55) (end 155.27 146.9835) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 155.27 146.9835) (end 162.5847 139.6688) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 162.5847 139.6688) (end 162.5847 131.3147) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 162.5847 131.3147) (end 160.27 129) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 160.27 70.6) (end 160.27 85.2) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 160.27 85.2) (end 160.27 99.8) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 160.27 99.8) (end 160.27 114.4) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 160.24 114.43) (end 160.24 121.825) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 160.27 114.4) (end 160.24 114.43) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 157.605 124.46) (end 160.24 121.825) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 83.0834 124.46) (end 157.605 124.46) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 75.438 132.1054) (end 83.0834 124.46) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 53.3754 132.1054) (end 75.438 132.1054) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 50.27 129) (end 53.3754 132.1054) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 160.24 128.97) (end 160.27 129) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 160.24 121.825) (end 160.24 128.97) (width 0.508) (layer B.Cu) (net 56)) + (segment (start 231.1126 112.2426) (end 240.27 121.4) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 162.4274 112.2426) (end 231.1126 112.2426) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 160.27 114.4) (end 162.4274 112.2426) (width 0.508) (layer F.Cu) (net 56)) + (segment (start 165.27 171.55) (end 165.27 134) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 165.27 134) (end 170.27 129) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 170.27 99.8) (end 170.27 114.4) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 170.27 85.2) (end 170.27 99.8) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 170.27 70.6) (end 170.27 85.2) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 170.29 114.42) (end 170.29 121.725) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 170.27 114.4) (end 170.29 114.42) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 170.29 128.98) (end 170.27 129) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 170.29 121.725) (end 170.29 128.98) (width 0.508) (layer B.Cu) (net 57)) + (segment (start 257.107 67.437) (end 260.27 70.6) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 173.433 67.437) (end 257.107 67.437) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 170.27 70.6) (end 173.433 67.437) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 168.58 120.015) (end 170.29 121.725) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 85.5235 120.015) (end 168.58 120.015) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 74.7793 130.7592) (end 85.5235 120.015) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 62.0292 130.7592) (end 74.7793 130.7592) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 60.27 129) (end 62.0292 130.7592) (width 0.508) (layer F.Cu) (net 57)) + (segment (start 230.27 137.776) (end 230.27 138.73) (width 0.508) (layer B.Cu) (net 58)) + (segment (start 232.816 135.23) (end 230.27 137.776) (width 0.508) (layer B.Cu) (net 58)) + (segment (start 187.73 70.6) (end 187.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 187.73 74.93) (end 187.96 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 177.73 70.6) (end 177.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 177.73 74.93) (end 177.8 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 167.73 70.6) (end 167.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 167.73 74.93) (end 167.64 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 167.73 74.93) (end 177.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 167.64 74.93) (end 167.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 157.73 70.6) (end 157.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 157.73 74.93) (end 158.115 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 147.73 70.6) (end 147.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 147.73 74.93) (end 147.955 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 137.73 70.6) (end 137.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 137.73 74.93) (end 137.795 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 127.73 70.6) (end 127.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 127.73 74.93) (end 128.27 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 117.73 70.6) (end 117.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 117.73 74.93) (end 117.475 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 117.73 74.93) (end 127.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 117.475 74.93) (end 117.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 107.73 70.6) (end 107.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 107.73 74.93) (end 107.95 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 97.73 70.6) (end 97.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 97.73 74.93) (end 97.79 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 87.83 74.93) (end 97.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 87.73 74.83) (end 87.83 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 87.73 70.6) (end 87.73 74.83) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 97.73 74.93) (end 97.79 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 97.79 74.93) (end 107.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 107.73 74.93) (end 107.95 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 107.95 74.93) (end 117.475 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 127.73 74.93) (end 128.27 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 128.27 74.93) (end 137.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 137.73 74.93) (end 137.795 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 137.795 74.93) (end 147.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 147.73 74.93) (end 147.955 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 147.955 74.93) (end 157.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 157.73 74.93) (end 158.115 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 158.115 74.93) (end 167.64 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 177.73 74.93) (end 177.8 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 177.8 74.93) (end 187.73 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 187.73 74.93) (end 187.96 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 193.4 74.93) (end 197.73 70.6) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 187.96 74.93) (end 193.4 74.93) (width 0.508) (layer F.Cu) (net 59)) + (segment (start 258.15 137.5) (end 256.64 135.99) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 262.1833 137.5) (end 258.15 137.5) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 262.9311 136.7522) (end 262.1833 137.5) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 262.9311 135.1311) (end 262.9311 136.7522) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 255.4604 127.6604) (end 262.9311 135.1311) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 242.0246 127.6604) (end 255.4604 127.6604) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 229.8744 115.5102) (end 242.0246 127.6604) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 229.8744 98.2886) (end 229.8744 115.5102) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 200.8236 69.2378) (end 229.8744 98.2886) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 199.0922 69.2378) (end 200.8236 69.2378) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 197.73 70.6) (end 199.0922 69.2378) (width 0.508) (layer B.Cu) (net 59)) + (segment (start 87.73 88.8) (end 87.73 85.2) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 87.63 88.9) (end 87.73 88.8) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 97.73 88.9) (end 87.63 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 187.73 85.2) (end 187.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 187.73 88.9) (end 187.325 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 194.03 88.9) (end 197.73 85.2) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 187.73 88.9) (end 194.03 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 187.325 88.9) (end 187.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 177.73 85.2) (end 177.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 177.73 88.9) (end 177.165 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 177.73 88.9) (end 187.325 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 177.165 88.9) (end 177.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 167.73 85.2) (end 167.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 167.73 88.9) (end 167.64 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 167.73 88.9) (end 177.165 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 167.64 88.9) (end 167.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 157.73 85.2) (end 157.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 157.73 88.9) (end 158.115 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 147.73 85.2) (end 147.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 147.73 88.9) (end 147.32 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 147.73 88.9) (end 157.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 147.32 88.9) (end 147.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 137.73 85.2) (end 137.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 137.73 88.9) (end 137.795 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 127.73 85.2) (end 127.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 127.73 88.9) (end 127.635 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 127.73 88.9) (end 137.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 127.635 88.9) (end 127.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 117.73 85.2) (end 117.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 117.73 88.9) (end 117.475 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 117.73 88.9) (end 127.635 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 117.475 88.9) (end 117.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 107.73 85.2) (end 107.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 107.73 88.9) (end 107.95 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 97.79 88.9) (end 107.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 107.73 88.9) (end 107.95 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 107.95 88.9) (end 117.475 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 137.73 88.9) (end 137.795 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 137.795 88.9) (end 147.32 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 157.73 88.9) (end 158.115 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 158.115 88.9) (end 167.64 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 97.79 88.9) (end 97.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 97.73 85.2) (end 97.73 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 97.73 88.9) (end 97.79 88.9) (width 0.508) (layer F.Cu) (net 60)) + (segment (start 195.2871 87.6429) (end 197.73 85.2) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 195.2871 130.3871) (end 195.2871 87.6429) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 196.0095 131.1095) (end 195.2871 130.3871) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 202.4637 131.1095) (end 196.0095 131.1095) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 204.3088 129.2644) (end 202.4637 131.1095) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 252.6283 129.2644) (end 204.3088 129.2644) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 259.18 135.8161) (end 252.6283 129.2644) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 259.18 135.99) (end 259.18 135.8161) (width 0.508) (layer B.Cu) (net 60)) + (segment (start 187.73 99.8) (end 187.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 187.73 104.775) (end 187.96 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 177.73 99.8) (end 177.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 177.73 104.775) (end 177.8 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 167.73 99.8) (end 167.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 167.73 104.775) (end 167.64 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 167.73 104.775) (end 177.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 167.64 104.775) (end 167.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 157.73 99.8) (end 157.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 157.73 104.775) (end 157.48 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 157.73 104.775) (end 167.64 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 157.48 104.775) (end 157.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 147.73 99.8) (end 147.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 147.73 104.775) (end 147.32 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 147.73 104.775) (end 157.48 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 147.32 104.775) (end 147.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 137.73 99.8) (end 137.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 137.73 104.775) (end 137.795 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 127.73 99.8) (end 127.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 127.73 104.775) (end 127.635 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 127.73 104.775) (end 137.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 127.635 104.775) (end 127.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 117.73 99.8) (end 117.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 117.73 104.775) (end 117.475 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 117.73 104.775) (end 127.635 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 117.475 104.775) (end 117.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 107.73 99.8) (end 107.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 107.73 104.775) (end 107.95 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 97.73 99.8) (end 97.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 97.73 104.775) (end 97.79 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 87.83 104.775) (end 97.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 87.73 104.675) (end 87.83 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 87.73 99.8) (end 87.73 104.675) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 97.73 104.775) (end 97.79 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 97.79 104.775) (end 107.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 107.73 104.775) (end 107.95 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 107.95 104.775) (end 117.475 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 137.73 104.775) (end 137.795 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 137.795 104.775) (end 147.32 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 177.73 104.775) (end 177.8 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 177.8 104.775) (end 187.73 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 187.73 104.775) (end 187.96 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 192.755 104.775) (end 197.73 99.8) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 187.96 104.775) (end 192.755 104.775) (width 0.508) (layer F.Cu) (net 61)) + (segment (start 196.0825 101.4475) (end 197.73 99.8) (width 0.508) (layer B.Cu) (net 61)) + (segment (start 196.0825 129.6825) (end 196.0825 101.4475) (width 0.508) (layer B.Cu) (net 61)) + (segment (start 196.7471 130.3471) (end 196.0825 129.6825) (width 0.508) (layer B.Cu) (net 61)) + (segment (start 201.7672 130.3471) (end 196.7471 130.3471) (width 0.508) (layer B.Cu) (net 61)) + (segment (start 203.6122 128.5021) (end 201.7672 130.3471) (width 0.508) (layer B.Cu) (net 61)) + (segment (start 254.2321 128.5021) (end 203.6122 128.5021) (width 0.508) (layer B.Cu) (net 61)) + (segment (start 261.72 135.99) (end 254.2321 128.5021) (width 0.508) (layer B.Cu) (net 61)) + (segment (start 197.73 114.4) (end 197.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 197.73 117.983) (end 197.739 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC77E)) + (segment (start 187.73 114.4) (end 187.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 187.73 117.983) (end 187.706 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC777)) + (segment (start 177.73 114.4) (end 177.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 177.73 117.983) (end 177.673 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC770)) + (segment (start 167.73 114.4) (end 167.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 167.73 117.983) (end 167.767 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC768)) + (segment (start 157.73 114.4) (end 157.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 157.73 117.983) (end 157.607 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC75F)) + (segment (start 147.73 114.4) (end 147.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 137.73 114.4) (end 137.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 127.73 114.4) (end 127.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 117.73 114.4) (end 117.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 117.73 117.983) (end 117.729 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC743)) + (segment (start 107.73 114.4) (end 107.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 97.73 114.4) (end 97.73 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 97.73 117.983) (end 97.79 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC738)) + (segment (start 197.612 117.983) (end 197.739 117.983) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 197.739 117.983) (end 187.706 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC784)) + (segment (start 187.706 117.983) (end 177.673 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC77B)) + (segment (start 177.673 117.983) (end 167.767 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC775)) + (segment (start 167.767 117.983) (end 157.607 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC76D)) + (segment (start 157.607 117.983) (end 147.73 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC764)) + (segment (start 147.73 117.983) (end 137.73 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC75D)) + (segment (start 137.73 117.983) (end 127.73 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC756)) + (segment (start 127.73 117.983) (end 117.729 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC751)) + (segment (start 117.729 117.983) (end 107.73 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC749)) + (segment (start 107.73 117.983) (end 97.79 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC741)) + (segment (start 97.79 117.983) (end 89.027 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC73D)) + (segment (start 87.73 116.686) (end 87.73 114.4) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC734)) + (segment (start 89.027 117.983) (end 87.73 116.686) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC72E)) + (segment (start 263.029 134.759) (end 264.26 135.99) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 256.0722 134.759) (end 263.029 134.759) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 255.9187 134.9125) (end 256.0722 134.759) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 249.125 134.9125) (end 255.9187 134.9125) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 232.1955 117.983) (end 249.125 134.9125) (width 0.508) (layer F.Cu) (net 62)) + (segment (start 197.603 117.983) (end 197.612 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC6D7)) + (segment (start 197.612 117.983) (end 232.1955 117.983) (width 0.508) (layer F.Cu) (net 62) (tstamp 5C1EC72C)) + (segment (start 187.73 129) (end 187.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 177.73 129) (end 177.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 167.73 129) (end 167.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 157.73 129) (end 157.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 147.73 129) (end 147.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 137.73 129) (end 137.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 127.73 129) (end 127.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 117.73 129) (end 117.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 107.73 129) (end 107.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 97.73 129) (end 97.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 194.3215 125.5915) (end 187.73 125.5915) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 187.73 125.5915) (end 177.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC8A1)) + (segment (start 177.73 125.5915) (end 167.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC89A)) + (segment (start 167.73 125.5915) (end 157.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC895)) + (segment (start 157.73 125.5915) (end 147.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC88B)) + (segment (start 147.73 125.5915) (end 137.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC884)) + (segment (start 137.73 125.5915) (end 127.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC87E)) + (segment (start 127.73 125.5915) (end 117.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC878)) + (segment (start 117.73 125.5915) (end 107.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC871)) + (segment (start 107.73 125.5915) (end 97.73 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC86A)) + (segment (start 97.73 125.5915) (end 88.1495 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC862)) + (segment (start 197.73 129) (end 194.3215 125.5915) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC821)) + (segment (start 87.73 126.011) (end 87.73 129) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC851)) + (segment (start 88.1495 125.5915) (end 87.73 126.011) (width 0.508) (layer F.Cu) (net 63) (tstamp 5C1EC845)) + (segment (start 265.5464 137.2436) (end 266.8 135.99) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 245.5245 137.2436) (end 265.5464 137.2436) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 241.1348 132.8539) (end 245.5245 137.2436) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 217.2658 132.8539) (end 241.1348 132.8539) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 216.1863 133.9334) (end 217.2658 132.8539) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 202.7953 133.9334) (end 216.1863 133.9334) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 197.8619 129) (end 202.7953 133.9334) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 197.73 129) (end 197.8619 129) (width 0.508) (layer F.Cu) (net 63)) + (segment (start 257.73 92.5) (end 257.73 85.2) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 257.73 85.2) (end 257.73 77.9) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 85.2) (end 237.73 92.5) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 77.9) (end 237.73 85.2) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 92.5) (end 237.73 99.8) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 99.8) (end 237.73 107) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 107) (end 237.73 114.2) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 70.6) (end 237.73 74.25) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 74.25) (end 237.73 77.9) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 74.25) (end 257.73 74.25) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 257.73 77.9) (end 257.73 74.25) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 257.73 74.25) (end 257.73 70.6) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 114.2) (end 237.73 121.1586) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 121.1586) (end 237.73 121.4) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 258.5537 125.2037) (end 269.34 135.99) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 241.7751 125.2037) (end 258.5537 125.2037) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 237.73 121.1586) (end 241.7751 125.2037) (width 0.508) (layer B.Cu) (net 64)) + (segment (start 259.969 98.1486) (end 259.3814 98.1486) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 259.3814 98.1486) (end 257.73 99.8) (width 0.508) (layer B.Cu) (net 65) (tstamp 5C1EC39C)) + (segment (start 57.73 129) (end 57.73 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 57.73 125.095) (end 57.785 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 47.73 129) (end 47.73 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 47.73 125.095) (end 47.625 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 47.73 125.095) (end 57.73 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 47.625 125.095) (end 47.73 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 37.73 129) (end 37.73 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 37.73 125.095) (end 38.1 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 27.94 125.095) (end 37.73 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 27.73 125.305) (end 27.94 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 27.73 129) (end 27.73 125.305) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 37.73 125.095) (end 38.1 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 38.1 125.095) (end 47.625 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 57.73 125.095) (end 57.785 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 277.73 70.6) (end 277.73 77.9) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 257.73 107.1) (end 257.73 114.4) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 63.825 125.095) (end 67.73 129) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 57.785 125.095) (end 63.825 125.095) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 257.73 99.8) (end 257.73 100.3875) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 257.73 100.3875) (end 257.73 107.1) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 277.9538 83.8389) (end 277.73 84.0627) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 281.3404 83.8389) (end 277.9538 83.8389) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 281.9492 84.4477) (end 281.3404 83.8389) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 281.9492 86.1209) (end 281.9492 84.4477) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 269.9215 98.1486) (end 281.9492 86.1209) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 259.9689 98.1486) (end 259.969 98.1486) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 259.969 98.1486) (end 269.9215 98.1486) (width 0.508) (layer B.Cu) (net 65) (tstamp 5C1EC39A)) + (segment (start 277.73 77.9) (end 277.73 84.0627) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 277.73 84.0627) (end 277.73 85.2) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 89.8206 106.9094) (end 67.73 129) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 257.73 99.8) (end 255.1104 97.1804) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 255.1104 97.1804) (end 236.1653 97.1804) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 236.1653 97.1804) (end 226.4363 106.9094) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 226.4363 106.9094) (end 89.8206 106.9094) (width 0.508) (layer F.Cu) (net 65)) + (segment (start 257.73 114.4) (end 257.73 119.7474) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 257.73 119.7474) (end 257.73 121.7) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 271.88 131.3499) (end 271.88 135.99) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 260.2775 119.7474) (end 271.88 131.3499) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 257.73 119.7474) (end 260.2775 119.7474) (width 0.508) (layer B.Cu) (net 65)) + (segment (start 77.73 105.8418) (end 222.7095 105.8418) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 256.0574 114.6808) (end 274.42 133.0434) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 256.0574 113.7666) (end 256.0574 114.6808) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 262.3058 107.5182) (end 256.0574 113.7666) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 262.3058 98.9584) (end 262.3058 107.5182) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 259.6896 96.3422) (end 262.3058 98.9584) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 232.2091 96.3422) (end 259.6896 96.3422) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 223.0139 105.5374) (end 223.4692 105.0821) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 223.4692 105.0821) (end 232.2091 96.3422) (width 0.508) (layer F.Cu) (net 66) (tstamp 5C1EC12D)) + (segment (start 274.42 133.0434) (end 274.42 135.99) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 222.7095 105.8418) (end 223.0139 105.5374) (width 0.508) (layer F.Cu) (net 66) (tstamp 5C1EC17B)) + (segment (start 37.73 70.6) (end 37.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 37.73 74.93) (end 38.1 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 27.94 74.93) (end 37.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 27.73 74.72) (end 27.94 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 27.73 70.6) (end 27.73 74.72) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 37.73 74.93) (end 38.1 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 47.73 70.6) (end 47.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 47.73 74.93) (end 47.625 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 38.1 74.93) (end 47.625 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 47.625 74.93) (end 47.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 57.73 70.6) (end 57.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 57.73 74.93) (end 57.785 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 47.73 74.93) (end 57.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 57.73 74.93) (end 57.785 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 67.73 70.6) (end 67.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 67.73 74.93) (end 67.945 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 57.785 74.93) (end 67.73 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 67.73 74.93) (end 67.945 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 77.73 70.6) (end 75.0824 73.2476) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 73.4 74.93) (end 67.945 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 75.0824 73.2476) (end 73.4 74.93) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 77.73 75.8952) (end 77.73 105.5374) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 75.0824 73.2476) (end 77.73 75.8952) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 77.73 105.5374) (end 77.73 105.8418) (width 0.508) (layer F.Cu) (net 66)) + (segment (start 77.73 105.8418) (end 77.73 114.4) (width 0.508) (layer F.Cu) (net 66) (tstamp 5C1EC179)) + (segment (start 184.15 149.86) (end 184.15 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 185.44 148.57) (end 184.15 149.86) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 185.44 148.45) (end 185.44 148.57) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 184.15 159.9) (end 189 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 189 159.9) (end 199 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 179 159.9) (end 184.15 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 119 159.9) (end 129 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 109 159.9) (end 119 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 129 159.9) (end 139 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 139 159.9) (end 149 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 89 159.9) (end 99 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 99 159.9) (end 109 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 149 159.9) (end 159 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 159 159.9) (end 169 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 169 159.9) (end 179 159.9) (width 0.508) (layer F.Cu) (net 67)) + (segment (start 74 150) (end 74 159.9) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 75.19 148.81) (end 74 150) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 75.19 148.5) (end 75.19 148.81) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 74 159.9) (end 79 159.9) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 29 159.9) (end 39 159.9) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 39 159.9) (end 49 159.9) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 49 159.9) (end 59 159.9) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 59 159.9) (end 69 159.9) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 69 159.9) (end 74 159.9) (width 0.508) (layer F.Cu) (net 68)) + (segment (start 234.1 149.9) (end 234.1 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 232.81 148.61) (end 234.1 149.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 232.81 148.45) (end 232.81 148.61) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 229 159.9) (end 234.1 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 269 159.9) (end 279 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 259 159.9) (end 269 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 209 159.9) (end 219 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 219 159.9) (end 229 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 249 159.9) (end 259 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 234.1 159.9) (end 239 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 239 159.9) (end 249 159.9) (width 0.508) (layer F.Cu) (net 69)) + (segment (start 235.35 135.236) (end 235.35 138.73) (width 0.508) (layer B.Cu) (net 70)) + (segment (start 235.356 135.23) (end 235.35 135.236) (width 0.508) (layer B.Cu) (net 70)) + (segment (start 237.89 135.236) (end 237.89 138.73) (width 0.508) (layer B.Cu) (net 71)) + (segment (start 237.896 135.23) (end 237.89 135.236) (width 0.508) (layer B.Cu) (net 71)) + (segment (start 256.64 143.61) (end 255.4332 143.61) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 194.71 141.8013) (end 194.71 141.27) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 202.5815 149.6728) (end 194.71 141.8013) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 228.3418 149.6728) (end 202.5815 149.6728) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 231.8219 146.1927) (end 228.3418 149.6728) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 247.0768 146.1927) (end 231.8219 146.1927) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 247.8391 145.4304) (end 247.0768 146.1927) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 252.5348 145.4304) (end 247.8391 145.4304) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 254.3552 143.61) (end 252.5348 145.4304) (width 0.508) (layer B.Cu) (net 72)) + (segment (start 255.4332 143.61) (end 254.3552 143.61) (width 0.508) (layer B.Cu) (net 72)) + (via (at 254.3781 145.4496) (size 0.889) (layers F.Cu B.Cu) (net 73)) + (via (at 230.9695 149.7011) (size 0.889) (layers F.Cu B.Cu) (net 73)) + (via (at 199.7977 148.4318) (size 0.889) (layers F.Cu B.Cu) (net 73)) + (segment (start 257.3404 145.4496) (end 254.3781 145.4496) (width 0.508) (layer F.Cu) (net 73)) + (segment (start 259.18 143.61) (end 257.3404 145.4496) (width 0.508) (layer F.Cu) (net 73)) + (segment (start 192.6359 141.27) (end 199.7977 148.4318) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 192.17 141.27) (end 192.6359 141.27) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 230.9695 148.3925) (end 230.9695 149.7011) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 232.407 146.955) (end 230.9695 148.3925) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 247.7738 146.955) (end 232.407 146.955) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 248.5361 146.1927) (end 247.7738 146.955) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 253.635 146.1927) (end 248.5361 146.1927) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 254.3781 145.4496) (end 253.635 146.1927) (width 0.508) (layer B.Cu) (net 73)) + (segment (start 201.067 149.7011) (end 230.9695 149.7011) (width 0.508) (layer F.Cu) (net 73)) + (segment (start 199.7977 148.4318) (end 201.067 149.7011) (width 0.508) (layer F.Cu) (net 73)) + (segment (start 256.105 137.995) (end 261.72 143.61) (width 0.508) (layer B.Cu) (net 74)) + (segment (start 255.027 137.995) (end 256.105 137.995) (width 0.508) (layer B.Cu) (net 74)) + (segment (start 249.4926 132.4606) (end 255.027 137.995) (width 0.508) (layer B.Cu) (net 74)) + (segment (start 228.9194 132.4606) (end 249.4926 132.4606) (width 0.508) (layer B.Cu) (net 74)) + (segment (start 222.65 138.73) (end 228.9194 132.4606) (width 0.508) (layer B.Cu) (net 74)) + (segment (start 261.4651 146.4049) (end 264.26 143.61) (width 0.508) (layer F.Cu) (net 75)) + (segment (start 238.3931 146.4049) (end 261.4651 146.4049) (width 0.508) (layer F.Cu) (net 75)) + (segment (start 235.7427 143.7545) (end 238.3931 146.4049) (width 0.508) (layer F.Cu) (net 75)) + (segment (start 225.1345 143.7545) (end 235.7427 143.7545) (width 0.508) (layer F.Cu) (net 75)) + (segment (start 222.65 141.27) (end 225.1345 143.7545) (width 0.508) (layer F.Cu) (net 75)) + (segment (start 263.209 147.201) (end 266.8 143.61) (width 0.508) (layer F.Cu) (net 76)) + (segment (start 235.8623 147.201) (end 263.209 147.201) (width 0.508) (layer F.Cu) (net 76)) + (segment (start 233.2512 144.5899) (end 235.8623 147.201) (width 0.508) (layer F.Cu) (net 76)) + (segment (start 223.4299 144.5899) (end 233.2512 144.5899) (width 0.508) (layer F.Cu) (net 76)) + (segment (start 220.11 141.27) (end 223.4299 144.5899) (width 0.508) (layer F.Cu) (net 76)) + (segment (start 264.9623 147.9877) (end 269.34 143.61) (width 0.508) (layer F.Cu) (net 77)) + (segment (start 235.1898 147.9877) (end 264.9623 147.9877) (width 0.508) (layer F.Cu) (net 77)) + (segment (start 232.5543 145.3522) (end 235.1898 147.9877) (width 0.508) (layer F.Cu) (net 77)) + (segment (start 219.1122 145.3522) (end 232.5543 145.3522) (width 0.508) (layer F.Cu) (net 77)) + (segment (start 215.03 141.27) (end 219.1122 145.3522) (width 0.508) (layer F.Cu) (net 77)) + (via (at 202.2186 134.7112) (size 0.889) (layers F.Cu B.Cu) (net 78)) + (segment (start 198.7288 134.7112) (end 202.2186 134.7112) (width 0.508) (layer B.Cu) (net 78)) + (segment (start 194.71 138.73) (end 198.7288 134.7112) (width 0.508) (layer B.Cu) (net 78)) + (segment (start 270.3876 142.1176) (end 271.88 143.61) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 253.5264 142.1176) (end 270.3876 142.1176) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 250.3885 145.2555) (end 253.5264 142.1176) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 246.4094 145.2555) (end 250.3885 145.2555) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 242.783 141.6291) (end 246.4094 145.2555) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 242.783 137.763) (end 242.783 141.6291) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 242.0914 137.0714) (end 242.783 137.763) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 232.2296 137.0714) (end 242.0914 137.0714) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 229.8694 134.7112) (end 232.2296 137.0714) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 202.2186 134.7112) (end 229.8694 134.7112) (width 0.508) (layer F.Cu) (net 78)) + (segment (start 230.5954 133.3246) (end 225.19 138.73) (width 0.508) (layer B.Cu) (net 79)) + (segment (start 248.9927 133.3246) (end 230.5954 133.3246) (width 0.508) (layer B.Cu) (net 79)) + (segment (start 257.8469 142.1788) (end 248.9927 133.3246) (width 0.508) (layer B.Cu) (net 79)) + (segment (start 257.8469 144.5262) (end 257.8469 142.1788) (width 0.508) (layer B.Cu) (net 79)) + (segment (start 258.5273 145.2066) (end 257.8469 144.5262) (width 0.508) (layer B.Cu) (net 79)) + (segment (start 272.8234 145.2066) (end 258.5273 145.2066) (width 0.508) (layer B.Cu) (net 79)) + (segment (start 274.42 143.61) (end 272.8234 145.2066) (width 0.508) (layer B.Cu) (net 79)) + + (zone (net 0) (net_name "") (layer B.Cu) (tstamp 554E4CD1) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (keepout (tracks not_allowed) (vias not_allowed) (copperpour allowed)) + (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 288 140) (xy 284 140) (xy 284 156) (xy 288 156) + ) + ) + ) + (zone (net 0) (net_name "") (layer F.Cu) (tstamp 554E4CD1) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (keepout (tracks not_allowed) (vias not_allowed) (copperpour allowed)) + (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 288 140) (xy 284 140) (xy 284 156) (xy 288 156) + ) + ) + ) + (zone (net 0) (net_name "") (layer B.Cu) (tstamp 56C9DD58) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (keepout (tracks not_allowed) (vias not_allowed) (copperpour allowed)) + (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 24 162) (xy 16 162) (xy 16 156.2) (xy 9.8 156.2) (xy 9.8 141.4) + (xy 13 141.4) (xy 13 137.8) (xy 20.6 137.8) (xy 24 141.2) + ) + ) + ) + (zone (net 0) (net_name "") (layer F.Cu) (tstamp 56C9DD58) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) + (keepout (tracks not_allowed) (vias not_allowed) (copperpour allowed)) + (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 24 162) (xy 16 162) (xy 16 156.2) (xy 9.8 156.2) (xy 9.8 141.4) + (xy 13 141.4) (xy 13 137.8) (xy 20.6 137.8) (xy 24 141.2) + ) + ) + ) +) ADDED hardware/pidp8i/PDP8.pro Index: hardware/pidp8i/PDP8.pro ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8.pro @@ -0,0 +1,62 @@ +update=Thu 18 Jun 2020 23:48:03 CEST +version=1 +last_client=kicad +[cvpcb] +version=1 +NetIExt=net +[cvpcb/libraries] +EquName1=devcms +[general] +version=1 +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=1.700000000000 +PadDrillOvalY=1.700000000000 +PadSizeH=2.500000000000 +PadSizeV=2.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.100000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.010000000000 +[pcbnew/libraries] +LibDir=customlibraries +LibName1=sockets +LibName2=connect +LibName3=discret +LibName4=pin_array +LibName5=divers +LibName6=smd_capacitors +LibName7=smd_resistors +LibName8=smd_crystal&oscillator +LibName9=smd_dil +LibName10=smd_transistors +LibName11=libcms +LibName12=display +LibName13=pdp8footprintlib2 +LibName14=led +LibName15=dip_sockets +LibName16=pga_sockets +LibName17=valves +LibName18=pdp8logo3 +[eeschema] +version=1 +LibDir= +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName= +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName= +SpiceAjustPassiveValues=0 +LabSize=50 +ERC_TestSimilarLabels=1 ADDED hardware/pidp8i/PDP8.rules Index: hardware/pidp8i/PDP8.rules ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8.rules @@ -0,0 +1,111 @@ + +(rules PCB PDP8 + (snap_angle + fortyfive_degree + ) + (autoroute_settings + (fanout off) + (autoroute on) + (postroute on) + (vias on) + (via_costs 50) + (plane_via_costs 5) + (start_ripup_costs 100) + (start_pass_no 19938) + (layer_rule F.Cu + (active on) + (preferred_direction horizontal) + (preferred_direction_trace_costs 1.0) + (against_preferred_direction_trace_costs 3.9) + ) + (layer_rule B.Cu + (active on) + (preferred_direction vertical) + (preferred_direction_trace_costs 1.0) + (against_preferred_direction_trace_costs 1.3) + ) + ) + (rule + (width 254.0) + (clear 254.2) + (clear 127.0 (type smd_to_turn_gap)) + (clear 63.6 (type smd_smd)) + ) + (padstack "Via[0-1]_889:635_um" + (shape + (circle F.Cu 889.0 0.0 0.0) + ) + (shape + (circle B.Cu 889.0 0.0 0.0) + ) + (attach off) + ) + (padstack "Via[0-1]_889:0_um" + (shape + (circle F.Cu 889.0 0.0 0.0) + ) + (shape + (circle B.Cu 889.0 0.0 0.0) + ) + (attach off) + ) + (via + "Via[0-1]_889:635_um" "Via[0-1]_889:635_um" default + ) + (via + "Via[0-1]_889:0_um" "Via[0-1]_889:0_um" default + ) + (via + "Via[0-1]_889:635_um-kicad_default" "Via[0-1]_889:635_um" "kicad_default" + ) + (via + "Via[0-1]_889:0_um-kicad_default" "Via[0-1]_889:0_um" "kicad_default" + ) + (via_rule + default "Via[0-1]_889:635_um" + ) + (via_rule + "kicad_default" "Via[0-1]_889:635_um-kicad_default" + ) + (class default + (clearance_class default) + (via_rule default) + (rule + (width 254.0) + ) + (circuit + (use_layer F.Cu B.Cu) + ) + ) + (class "kicad_default" + "N-0000023" "N-0000028" "N-0000029" "N-0000035" "N-0000039" "N-0000040" "N-0000041" "N-0000042" + "N-0000043" "N-0000046" "N-0000048" "N-0000049" "N-0000050" "N-0000053" "N-0000054" "N-0000055" + "N-0000056" "N-0000057" "N-0000059" "N-0000060" "N-0000061" "N-0000062" "N-0000063" "N-0000065" + "N-0000066" "N-0000067" "N-0000068" "N-0000069" "N-0000070" "N-0000071" "N-0000072" "N-0000073" + "N-0000074" "N-0000079" "N-0000085" "N-0000086" "N-0000087" "N-0000088" "N-0000089" "N-0000090" + "N-0000091" "N-0000092" "N-0000093" RX "SPARE_IO" TX col1 col10 + col11 col12 col1a col2 col2a col3 col4 col5 + col6 col7 col8 col9 led1 led2 led3 led4 + led5 led6 led7 led8 xled1 xled2 xled3 xled4 + xled5 xled6 xled7 xled8 + (clearance_class "kicad_default") + (via_rule kicad_default) + (rule + (width 254.0) + ) + (circuit + (use_layer F.Cu B.Cu) + ) + ) + (class fat + +3.3V +5V GND row1 row2 row3 + (clearance_class default) + (via_rule default) + (rule + (width 381.0) + ) + (circuit + (use_layer F.Cu B.Cu) + ) + ) +) ADDED hardware/pidp8i/PDP8.sch Index: hardware/pidp8i/PDP8.sch ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8.sch @@ -0,0 +1,3035 @@ +EESchema Schematic File Version 2 +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:pdp8_library +LIBS:PDP8_2019-cache +EELAYER 27 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 1 +Title "" +Date "22 dec 2018" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L LED DPC1 +U 1 1 548EF34A +P 5500 900 +F 0 "DPC1" H 5500 1000 50 0000 C CNN +F 1 "LED" H 5500 800 50 0000 C CNN +F 2 "~" H 5500 900 60 0000 C CNN +F 3 "~" H 5500 900 60 0000 C CNN + 1 5500 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC2 +U 1 1 548EF399 +P 5800 900 +F 0 "DPC2" H 5800 1000 50 0000 C CNN +F 1 "LED" H 5800 800 50 0000 C CNN +F 2 "~" H 5800 900 60 0000 C CNN +F 3 "~" H 5800 900 60 0000 C CNN + 1 5800 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC3 +U 1 1 548EF3AC +P 6100 900 +F 0 "DPC3" H 6100 1000 50 0000 C CNN +F 1 "LED" H 6100 800 50 0000 C CNN +F 2 "~" H 6100 900 60 0000 C CNN +F 3 "~" H 6100 900 60 0000 C CNN + 1 6100 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC4 +U 1 1 548EF3B2 +P 6400 900 +F 0 "DPC4" H 6400 1000 50 0000 C CNN +F 1 "LED" H 6400 800 50 0000 C CNN +F 2 "~" H 6400 900 60 0000 C CNN +F 3 "~" H 6400 900 60 0000 C CNN + 1 6400 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC5 +U 1 1 548EF3B8 +P 6700 900 +F 0 "DPC5" H 6700 1000 50 0000 C CNN +F 1 "LED" H 6700 800 50 0000 C CNN +F 2 "~" H 6700 900 60 0000 C CNN +F 3 "~" H 6700 900 60 0000 C CNN + 1 6700 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC6 +U 1 1 548EF3BE +P 7000 900 +F 0 "DPC6" H 7000 1000 50 0000 C CNN +F 1 "LED" H 7000 800 50 0000 C CNN +F 2 "~" H 7000 900 60 0000 C CNN +F 3 "~" H 7000 900 60 0000 C CNN + 1 7000 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC7 +U 1 1 548EF3C4 +P 7300 900 +F 0 "DPC7" H 7300 1000 50 0000 C CNN +F 1 "LED" H 7300 800 50 0000 C CNN +F 2 "~" H 7300 900 60 0000 C CNN +F 3 "~" H 7300 900 60 0000 C CNN + 1 7300 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC8 +U 1 1 548EF3CA +P 7600 900 +F 0 "DPC8" H 7600 1000 50 0000 C CNN +F 1 "LED" H 7600 800 50 0000 C CNN +F 2 "~" H 7600 900 60 0000 C CNN +F 3 "~" H 7600 900 60 0000 C CNN + 1 7600 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC9 +U 1 1 548EF3D0 +P 7900 900 +F 0 "DPC9" H 7900 1000 50 0000 C CNN +F 1 "LED" H 7900 800 50 0000 C CNN +F 2 "~" H 7900 900 60 0000 C CNN +F 3 "~" H 7900 900 60 0000 C CNN + 1 7900 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC10 +U 1 1 548EF3D6 +P 8200 900 +F 0 "DPC10" H 8200 1000 50 0000 C CNN +F 1 "LED" H 8200 800 50 0000 C CNN +F 2 "~" H 8200 900 60 0000 C CNN +F 3 "~" H 8200 900 60 0000 C CNN + 1 8200 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC11 +U 1 1 548EF3DC +P 8500 900 +F 0 "DPC11" H 8500 1000 50 0000 C CNN +F 1 "LED" H 8500 800 50 0000 C CNN +F 2 "~" H 8500 900 60 0000 C CNN +F 3 "~" H 8500 900 60 0000 C CNN + 1 8500 900 + 0 1 1 0 +$EndComp +$Comp +L LED DPC12 +U 1 1 548EF3E2 +P 8800 900 +F 0 "DPC12" H 8800 1000 50 0000 C CNN +F 1 "LED" H 8800 800 50 0000 C CNN +F 2 "~" H 8800 900 60 0000 C CNN +F 3 "~" H 8800 900 60 0000 C CNN + 1 8800 900 + 0 1 1 0 +$EndComp +$Comp +L LED DMA1 +U 1 1 548EF463 +P 5500 1550 +F 0 "DMA1" H 5500 1650 50 0000 C CNN +F 1 "LED" H 5500 1450 50 0000 C CNN +F 2 "~" H 5500 1550 60 0000 C CNN +F 3 "~" H 5500 1550 60 0000 C CNN + 1 5500 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA2 +U 1 1 548EF47C +P 5800 1550 +F 0 "DMA2" H 5800 1650 50 0000 C CNN +F 1 "LED" H 5800 1450 50 0000 C CNN +F 2 "~" H 5800 1550 60 0000 C CNN +F 3 "~" H 5800 1550 60 0000 C CNN + 1 5800 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA3 +U 1 1 548EF482 +P 6100 1550 +F 0 "DMA3" H 6100 1650 50 0000 C CNN +F 1 "LED" H 6100 1450 50 0000 C CNN +F 2 "~" H 6100 1550 60 0000 C CNN +F 3 "~" H 6100 1550 60 0000 C CNN + 1 6100 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA4 +U 1 1 548EF488 +P 6400 1550 +F 0 "DMA4" H 6400 1650 50 0000 C CNN +F 1 "LED" H 6400 1450 50 0000 C CNN +F 2 "~" H 6400 1550 60 0000 C CNN +F 3 "~" H 6400 1550 60 0000 C CNN + 1 6400 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA5 +U 1 1 548EF48E +P 6700 1550 +F 0 "DMA5" H 6700 1650 50 0000 C CNN +F 1 "LED" H 6700 1450 50 0000 C CNN +F 2 "~" H 6700 1550 60 0000 C CNN +F 3 "~" H 6700 1550 60 0000 C CNN + 1 6700 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA6 +U 1 1 548EF494 +P 7000 1550 +F 0 "DMA6" H 7000 1650 50 0000 C CNN +F 1 "LED" H 7000 1450 50 0000 C CNN +F 2 "~" H 7000 1550 60 0000 C CNN +F 3 "~" H 7000 1550 60 0000 C CNN + 1 7000 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA7 +U 1 1 548EF49A +P 7300 1550 +F 0 "DMA7" H 7300 1650 50 0000 C CNN +F 1 "LED" H 7300 1450 50 0000 C CNN +F 2 "~" H 7300 1550 60 0000 C CNN +F 3 "~" H 7300 1550 60 0000 C CNN + 1 7300 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA8 +U 1 1 548EF4A0 +P 7600 1550 +F 0 "DMA8" H 7600 1650 50 0000 C CNN +F 1 "LED" H 7600 1450 50 0000 C CNN +F 2 "~" H 7600 1550 60 0000 C CNN +F 3 "~" H 7600 1550 60 0000 C CNN + 1 7600 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA9 +U 1 1 548EF4A6 +P 7900 1550 +F 0 "DMA9" H 7900 1650 50 0000 C CNN +F 1 "LED" H 7900 1450 50 0000 C CNN +F 2 "~" H 7900 1550 60 0000 C CNN +F 3 "~" H 7900 1550 60 0000 C CNN + 1 7900 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA10 +U 1 1 548EF4AC +P 8200 1550 +F 0 "DMA10" H 8200 1650 50 0000 C CNN +F 1 "LED" H 8200 1450 50 0000 C CNN +F 2 "~" H 8200 1550 60 0000 C CNN +F 3 "~" H 8200 1550 60 0000 C CNN + 1 8200 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA11 +U 1 1 548EF4B2 +P 8500 1550 +F 0 "DMA11" H 8500 1650 50 0000 C CNN +F 1 "LED" H 8500 1450 50 0000 C CNN +F 2 "~" H 8500 1550 60 0000 C CNN +F 3 "~" H 8500 1550 60 0000 C CNN + 1 8500 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMA12 +U 1 1 548EF4B8 +P 8800 1550 +F 0 "DMA12" H 8800 1650 50 0000 C CNN +F 1 "LED" H 8800 1450 50 0000 C CNN +F 2 "~" H 8800 1550 60 0000 C CNN +F 3 "~" H 8800 1550 60 0000 C CNN + 1 8800 1550 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMB1 +U 1 1 548EF56F +P 5500 2200 +F 0 "DMB1" H 5500 2300 50 0000 C CNN +F 1 "LED" H 5500 2100 50 0000 C CNN +F 2 "~" H 5500 2200 60 0000 C CNN +F 3 "~" H 5500 2200 60 0000 C CNN + 1 5500 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB2 +U 1 1 548EF588 +P 5800 2200 +F 0 "DMB2" H 5800 2300 50 0000 C CNN +F 1 "LED" H 5800 2100 50 0000 C CNN +F 2 "~" H 5800 2200 60 0000 C CNN +F 3 "~" H 5800 2200 60 0000 C CNN + 1 5800 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB3 +U 1 1 548EF58E +P 6100 2200 +F 0 "DMB3" H 6100 2300 50 0000 C CNN +F 1 "LED" H 6100 2100 50 0000 C CNN +F 2 "~" H 6100 2200 60 0000 C CNN +F 3 "~" H 6100 2200 60 0000 C CNN + 1 6100 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB4 +U 1 1 548EF594 +P 6400 2200 +F 0 "DMB4" H 6400 2300 50 0000 C CNN +F 1 "LED" H 6400 2100 50 0000 C CNN +F 2 "~" H 6400 2200 60 0000 C CNN +F 3 "~" H 6400 2200 60 0000 C CNN + 1 6400 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB5 +U 1 1 548EF59A +P 6700 2200 +F 0 "DMB5" H 6700 2300 50 0000 C CNN +F 1 "LED" H 6700 2100 50 0000 C CNN +F 2 "~" H 6700 2200 60 0000 C CNN +F 3 "~" H 6700 2200 60 0000 C CNN + 1 6700 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB6 +U 1 1 548EF5A0 +P 7000 2200 +F 0 "DMB6" H 7000 2300 50 0000 C CNN +F 1 "LED" H 7000 2100 50 0000 C CNN +F 2 "~" H 7000 2200 60 0000 C CNN +F 3 "~" H 7000 2200 60 0000 C CNN + 1 7000 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB7 +U 1 1 548EF5A6 +P 7300 2200 +F 0 "DMB7" H 7300 2300 50 0000 C CNN +F 1 "LED" H 7300 2100 50 0000 C CNN +F 2 "~" H 7300 2200 60 0000 C CNN +F 3 "~" H 7300 2200 60 0000 C CNN + 1 7300 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB8 +U 1 1 548EF5AC +P 7600 2200 +F 0 "DMB8" H 7600 2300 50 0000 C CNN +F 1 "LED" H 7600 2100 50 0000 C CNN +F 2 "~" H 7600 2200 60 0000 C CNN +F 3 "~" H 7600 2200 60 0000 C CNN + 1 7600 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB9 +U 1 1 548EF5B2 +P 7900 2200 +F 0 "DMB9" H 7900 2300 50 0000 C CNN +F 1 "LED" H 7900 2100 50 0000 C CNN +F 2 "~" H 7900 2200 60 0000 C CNN +F 3 "~" H 7900 2200 60 0000 C CNN + 1 7900 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB10 +U 1 1 548EF5B8 +P 8200 2200 +F 0 "DMB10" H 8200 2300 50 0000 C CNN +F 1 "LED" H 8200 2100 50 0000 C CNN +F 2 "~" H 8200 2200 60 0000 C CNN +F 3 "~" H 8200 2200 60 0000 C CNN + 1 8200 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB11 +U 1 1 548EF5BE +P 8500 2200 +F 0 "DMB11" H 8500 2300 50 0000 C CNN +F 1 "LED" H 8500 2100 50 0000 C CNN +F 2 "~" H 8500 2200 60 0000 C CNN +F 3 "~" H 8500 2200 60 0000 C CNN + 1 8500 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DMB12 +U 1 1 548EF5C4 +P 8800 2200 +F 0 "DMB12" H 8800 2300 50 0000 C CNN +F 1 "LED" H 8800 2100 50 0000 C CNN +F 2 "~" H 8800 2200 60 0000 C CNN +F 3 "~" H 8800 2200 60 0000 C CNN + 1 8800 2200 + 0 1 1 0 +$EndComp +$Comp +L LED DAC1 +U 1 1 548EF5CC +P 5500 2850 +F 0 "DAC1" H 5500 2950 50 0000 C CNN +F 1 "LED" H 5500 2750 50 0000 C CNN +F 2 "~" H 5500 2850 60 0000 C CNN +F 3 "~" H 5500 2850 60 0000 C CNN + 1 5500 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC2 +U 1 1 548EF5E5 +P 5800 2850 +F 0 "DAC2" H 5800 2950 50 0000 C CNN +F 1 "LED" H 5800 2750 50 0000 C CNN +F 2 "~" H 5800 2850 60 0000 C CNN +F 3 "~" H 5800 2850 60 0000 C CNN + 1 5800 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC3 +U 1 1 548EF5EB +P 6100 2850 +F 0 "DAC3" H 6100 2950 50 0000 C CNN +F 1 "LED" H 6100 2750 50 0000 C CNN +F 2 "~" H 6100 2850 60 0000 C CNN +F 3 "~" H 6100 2850 60 0000 C CNN + 1 6100 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC4 +U 1 1 548EF5F1 +P 6400 2850 +F 0 "DAC4" H 6400 2950 50 0000 C CNN +F 1 "LED" H 6400 2750 50 0000 C CNN +F 2 "~" H 6400 2850 60 0000 C CNN +F 3 "~" H 6400 2850 60 0000 C CNN + 1 6400 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC5 +U 1 1 548EF5F7 +P 6700 2850 +F 0 "DAC5" H 6700 2950 50 0000 C CNN +F 1 "LED" H 6700 2750 50 0000 C CNN +F 2 "~" H 6700 2850 60 0000 C CNN +F 3 "~" H 6700 2850 60 0000 C CNN + 1 6700 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC6 +U 1 1 548EF5FD +P 7000 2850 +F 0 "DAC6" H 7000 2950 50 0000 C CNN +F 1 "LED" H 7000 2750 50 0000 C CNN +F 2 "~" H 7000 2850 60 0000 C CNN +F 3 "~" H 7000 2850 60 0000 C CNN + 1 7000 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC7 +U 1 1 548EF603 +P 7300 2850 +F 0 "DAC7" H 7300 2950 50 0000 C CNN +F 1 "LED" H 7300 2750 50 0000 C CNN +F 2 "~" H 7300 2850 60 0000 C CNN +F 3 "~" H 7300 2850 60 0000 C CNN + 1 7300 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC8 +U 1 1 548EF609 +P 7600 2850 +F 0 "DAC8" H 7600 2950 50 0000 C CNN +F 1 "LED" H 7600 2750 50 0000 C CNN +F 2 "~" H 7600 2850 60 0000 C CNN +F 3 "~" H 7600 2850 60 0000 C CNN + 1 7600 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC9 +U 1 1 548EF60F +P 7900 2850 +F 0 "DAC9" H 7900 2950 50 0000 C CNN +F 1 "LED" H 7900 2750 50 0000 C CNN +F 2 "~" H 7900 2850 60 0000 C CNN +F 3 "~" H 7900 2850 60 0000 C CNN + 1 7900 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC10 +U 1 1 548EF615 +P 8200 2850 +F 0 "DAC10" H 8200 2950 50 0000 C CNN +F 1 "LED" H 8200 2750 50 0000 C CNN +F 2 "~" H 8200 2850 60 0000 C CNN +F 3 "~" H 8200 2850 60 0000 C CNN + 1 8200 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC11 +U 1 1 548EF61B +P 8500 2850 +F 0 "DAC11" H 8500 2950 50 0000 C CNN +F 1 "LED" H 8500 2750 50 0000 C CNN +F 2 "~" H 8500 2850 60 0000 C CNN +F 3 "~" H 8500 2850 60 0000 C CNN + 1 8500 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DAC12 +U 1 1 548EF621 +P 8800 2850 +F 0 "DAC12" H 8800 2950 50 0000 C CNN +F 1 "LED" H 8800 2750 50 0000 C CNN +F 2 "~" H 8800 2850 60 0000 C CNN +F 3 "~" H 8800 2850 60 0000 C CNN + 1 8800 2850 + 0 -1 -1 0 +$EndComp +$Comp +L LED DMQ1 +U 1 1 548EF629 +P 5500 3600 +F 0 "DMQ1" H 5500 3700 50 0000 C CNN +F 1 "LED" H 5500 3500 50 0000 C CNN +F 2 "~" H 5500 3600 60 0000 C CNN +F 3 "~" H 5500 3600 60 0000 C CNN + 1 5500 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ2 +U 1 1 548EF642 +P 5800 3600 +F 0 "DMQ2" H 5800 3700 50 0000 C CNN +F 1 "LED" H 5800 3500 50 0000 C CNN +F 2 "~" H 5800 3600 60 0000 C CNN +F 3 "~" H 5800 3600 60 0000 C CNN + 1 5800 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ3 +U 1 1 548EF648 +P 6100 3600 +F 0 "DMQ3" H 6100 3700 50 0000 C CNN +F 1 "LED" H 6100 3500 50 0000 C CNN +F 2 "~" H 6100 3600 60 0000 C CNN +F 3 "~" H 6100 3600 60 0000 C CNN + 1 6100 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ4 +U 1 1 548EF64E +P 6400 3600 +F 0 "DMQ4" H 6400 3700 50 0000 C CNN +F 1 "LED" H 6400 3500 50 0000 C CNN +F 2 "~" H 6400 3600 60 0000 C CNN +F 3 "~" H 6400 3600 60 0000 C CNN + 1 6400 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ5 +U 1 1 548EF654 +P 6700 3600 +F 0 "DMQ5" H 6700 3700 50 0000 C CNN +F 1 "LED" H 6700 3500 50 0000 C CNN +F 2 "~" H 6700 3600 60 0000 C CNN +F 3 "~" H 6700 3600 60 0000 C CNN + 1 6700 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ6 +U 1 1 548EF65A +P 7000 3600 +F 0 "DMQ6" H 7000 3700 50 0000 C CNN +F 1 "LED" H 7000 3500 50 0000 C CNN +F 2 "~" H 7000 3600 60 0000 C CNN +F 3 "~" H 7000 3600 60 0000 C CNN + 1 7000 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ7 +U 1 1 548EF660 +P 7300 3600 +F 0 "DMQ7" H 7300 3700 50 0000 C CNN +F 1 "LED" H 7300 3500 50 0000 C CNN +F 2 "~" H 7300 3600 60 0000 C CNN +F 3 "~" H 7300 3600 60 0000 C CNN + 1 7300 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ8 +U 1 1 548EF666 +P 7600 3600 +F 0 "DMQ8" H 7600 3700 50 0000 C CNN +F 1 "LED" H 7600 3500 50 0000 C CNN +F 2 "~" H 7600 3600 60 0000 C CNN +F 3 "~" H 7600 3600 60 0000 C CNN + 1 7600 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ9 +U 1 1 548EF66C +P 7900 3600 +F 0 "DMQ9" H 7900 3700 50 0000 C CNN +F 1 "LED" H 7900 3500 50 0000 C CNN +F 2 "~" H 7900 3600 60 0000 C CNN +F 3 "~" H 7900 3600 60 0000 C CNN + 1 7900 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ10 +U 1 1 548EF672 +P 8200 3600 +F 0 "DMQ10" H 8200 3700 50 0000 C CNN +F 1 "LED" H 8200 3500 50 0000 C CNN +F 2 "~" H 8200 3600 60 0000 C CNN +F 3 "~" H 8200 3600 60 0000 C CNN + 1 8200 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ11 +U 1 1 548EF678 +P 8500 3600 +F 0 "DMQ11" H 8500 3700 50 0000 C CNN +F 1 "LED" H 8500 3500 50 0000 C CNN +F 2 "~" H 8500 3600 60 0000 C CNN +F 3 "~" H 8500 3600 60 0000 C CNN + 1 8500 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DMQ12 +U 1 1 548EF67E +P 8800 3600 +F 0 "DMQ12" H 8800 3700 50 0000 C CNN +F 1 "LED" H 8800 3500 50 0000 C CNN +F 2 "~" H 8800 3600 60 0000 C CNN +F 3 "~" H 8800 3600 60 0000 C CNN + 1 8800 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DLINK1 +U 1 1 548EF686 +P 5200 2850 +F 0 "DLINK1" H 5200 2950 50 0000 C CNN +F 1 "LED" H 5200 2750 50 0000 C CNN +F 2 "~" H 5200 2850 60 0000 C CNN +F 3 "~" H 5200 2850 60 0000 C CNN + 1 5200 2850 + 0 1 1 0 +$EndComp +$Comp +L LED DSC1 +U 1 1 548EF6A1 +P 3350 3600 +F 0 "DSC1" H 3350 3700 50 0000 C CNN +F 1 "LED" H 3350 3500 50 0000 C CNN +F 2 "~" H 3350 3600 60 0000 C CNN +F 3 "~" H 3350 3600 60 0000 C CNN + 1 3350 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DSC2 +U 1 1 548EF6BA +P 3650 3600 +F 0 "DSC2" H 3650 3700 50 0000 C CNN +F 1 "LED" H 3650 3500 50 0000 C CNN +F 2 "~" H 3650 3600 60 0000 C CNN +F 3 "~" H 3650 3600 60 0000 C CNN + 1 3650 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DSC3 +U 1 1 548EF6C0 +P 3950 3600 +F 0 "DSC3" H 3950 3700 50 0000 C CNN +F 1 "LED" H 3950 3500 50 0000 C CNN +F 2 "~" H 3950 3600 60 0000 C CNN +F 3 "~" H 3950 3600 60 0000 C CNN + 1 3950 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DSC4 +U 1 1 548EF6C6 +P 4250 3600 +F 0 "DSC4" H 4250 3700 50 0000 C CNN +F 1 "LED" H 4250 3500 50 0000 C CNN +F 2 "~" H 4250 3600 60 0000 C CNN +F 3 "~" H 4250 3600 60 0000 C CNN + 1 4250 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DSC5 +U 1 1 548EF6CC +P 4550 3600 +F 0 "DSC5" H 4550 3700 50 0000 C CNN +F 1 "LED" H 4550 3500 50 0000 C CNN +F 2 "~" H 4550 3600 60 0000 C CNN +F 3 "~" H 4550 3600 60 0000 C CNN + 1 4550 3600 + 0 1 1 0 +$EndComp +$Comp +L LED DDF1 +U 1 1 548EF6DA +P 3350 900 +F 0 "DDF1" H 3350 1000 50 0000 C CNN +F 1 "LED" H 3350 800 50 0000 C CNN +F 2 "~" H 3350 900 60 0000 C CNN +F 3 "~" H 3350 900 60 0000 C CNN + 1 3350 900 + 0 1 1 0 +$EndComp +$Comp +L LED DDF2 +U 1 1 548EF6F3 +P 3650 900 +F 0 "DDF2" H 3650 1000 50 0000 C CNN +F 1 "LED" H 3650 800 50 0000 C CNN +F 2 "~" H 3650 900 60 0000 C CNN +F 3 "~" H 3650 900 60 0000 C CNN + 1 3650 900 + 0 1 1 0 +$EndComp +$Comp +L LED DDF3 +U 1 1 548EF6F9 +P 3950 900 +F 0 "DDF3" H 3950 1000 50 0000 C CNN +F 1 "LED" H 3950 800 50 0000 C CNN +F 2 "~" H 3950 900 60 0000 C CNN +F 3 "~" H 3950 900 60 0000 C CNN + 1 3950 900 + 0 1 1 0 +$EndComp +$Comp +L LED DIF1 +U 1 1 548EF701 +P 4250 900 +F 0 "DIF1" V 4250 1000 50 0000 C CNN +F 1 "LED" H 4250 800 50 0000 C CNN +F 2 "~" H 4250 900 60 0000 C CNN +F 3 "~" H 4250 900 60 0000 C CNN + 1 4250 900 + 0 1 1 0 +$EndComp +$Comp +L LED DIF2 +U 1 1 548EF71A +P 4550 900 +F 0 "DIF2" H 4550 1000 50 0000 C CNN +F 1 "LED" H 4550 800 50 0000 C CNN +F 2 "~" H 4550 900 60 0000 C CNN +F 3 "~" H 4550 900 60 0000 C CNN + 1 4550 900 + 0 1 1 0 +$EndComp +$Comp +L LED DIF3 +U 1 1 548EF720 +P 4850 900 +F 0 "DIF3" H 4850 1000 50 0000 C CNN +F 1 "LED" H 4850 800 50 0000 C CNN +F 2 "~" H 4850 900 60 0000 C CNN +F 3 "~" H 4850 900 60 0000 C CNN + 1 4850 900 + 0 1 1 0 +$EndComp +$Comp +L LED DAND1 +U 1 1 548EF728 +P 9500 1150 +F 0 "DAND1" H 9500 1250 50 0000 C CNN +F 1 "LED" H 9500 1050 50 0000 C CNN +F 2 "~" H 9500 1150 60 0000 C CNN +F 3 "~" H 9500 1150 60 0000 C CNN + 1 9500 1150 + 1 0 0 -1 +$EndComp +$Comp +L LED DTAD1 +U 1 1 548EF735 +P 9500 1500 +F 0 "DTAD1" H 9500 1600 50 0000 C CNN +F 1 "LED" H 9500 1400 50 0000 C CNN +F 2 "~" H 9500 1500 60 0000 C CNN +F 3 "~" H 9500 1500 60 0000 C CNN + 1 9500 1500 + 1 0 0 -1 +$EndComp +$Comp +L LED DISZ1 +U 1 1 548EF73B +P 9500 1850 +F 0 "DISZ1" H 9500 1950 50 0000 C CNN +F 1 "LED" H 9500 1750 50 0000 C CNN +F 2 "~" H 9500 1850 60 0000 C CNN +F 3 "~" H 9500 1850 60 0000 C CNN + 1 9500 1850 + 1 0 0 -1 +$EndComp +$Comp +L LED DDCA1 +U 1 1 548EF741 +P 9500 2200 +F 0 "DDCA1" H 9500 2300 50 0000 C CNN +F 1 "LED" H 9500 2100 50 0000 C CNN +F 2 "~" H 9500 2200 60 0000 C CNN +F 3 "~" H 9500 2200 60 0000 C CNN + 1 9500 2200 + 1 0 0 -1 +$EndComp +$Comp +L LED DJMS1 +U 1 1 548EF777 +P 9500 2550 +F 0 "DJMS1" H 9500 2650 50 0000 C CNN +F 1 "LED" H 9500 2450 50 0000 C CNN +F 2 "~" H 9500 2550 60 0000 C CNN +F 3 "~" H 9500 2550 60 0000 C CNN + 1 9500 2550 + 1 0 0 -1 +$EndComp +$Comp +L LED DJMP1 +U 1 1 548EF77D +P 9500 2900 +F 0 "DJMP1" H 9500 3000 50 0000 C CNN +F 1 "LED" H 9500 2800 50 0000 C CNN +F 2 "~" H 9500 2900 60 0000 C CNN +F 3 "~" H 9500 2900 60 0000 C CNN + 1 9500 2900 + 1 0 0 -1 +$EndComp +$Comp +L LED DIOT1 +U 1 1 548EF783 +P 9500 3250 +F 0 "DIOT1" H 9500 3350 50 0000 C CNN +F 1 "LED" H 9500 3150 50 0000 C CNN +F 2 "~" H 9500 3250 60 0000 C CNN +F 3 "~" H 9500 3250 60 0000 C CNN + 1 9500 3250 + 1 0 0 -1 +$EndComp +$Comp +L LED DOPR1 +U 1 1 548EF789 +P 9500 3600 +F 0 "DOPR1" H 9500 3700 50 0000 C CNN +F 1 "LED" H 9500 3500 50 0000 C CNN +F 2 "~" H 9500 3600 60 0000 C CNN +F 3 "~" H 9500 3600 60 0000 C CNN + 1 9500 3600 + 1 0 0 -1 +$EndComp +$Comp +L LED DFETCH1 +U 1 1 548EF7CB +P 10150 1150 +F 0 "DFETCH1" H 10150 1250 50 0000 C CNN +F 1 "LED" H 10150 1050 50 0000 C CNN +F 2 "~" H 10150 1150 60 0000 C CNN +F 3 "~" H 10150 1150 60 0000 C CNN + 1 10150 1150 + 1 0 0 -1 +$EndComp +$Comp +L LED DEXEC1 +U 1 1 548EF7D1 +P 10150 1500 +F 0 "DEXEC1" H 10150 1600 50 0000 C CNN +F 1 "LED" H 10150 1400 50 0000 C CNN +F 2 "~" H 10150 1500 60 0000 C CNN +F 3 "~" H 10150 1500 60 0000 C CNN + 1 10150 1500 + 1 0 0 -1 +$EndComp +$Comp +L LED DDEFER1 +U 1 1 548EF7D7 +P 10150 1850 +F 0 "DDEFER1" H 10150 1950 50 0000 C CNN +F 1 "LED" H 10150 1750 50 0000 C CNN +F 2 "~" H 10150 1850 60 0000 C CNN +F 3 "~" H 10150 1850 60 0000 C CNN + 1 10150 1850 + 1 0 0 -1 +$EndComp +$Comp +L LED DWRDCT1 +U 1 1 548EF7DD +P 10150 2200 +F 0 "DWRDCT1" H 10150 2300 50 0000 C CNN +F 1 "LED" H 10150 2100 50 0000 C CNN +F 2 "~" H 10150 2200 60 0000 C CNN +F 3 "~" H 10150 2200 60 0000 C CNN + 1 10150 2200 + 1 0 0 -1 +$EndComp +$Comp +L LED DCURAD1 +U 1 1 548EF7E3 +P 10150 2900 +F 0 "DCURAD1" H 10150 3000 50 0000 C CNN +F 1 "LED" H 10150 2800 50 0000 C CNN +F 2 "~" H 10150 2900 60 0000 C CNN +F 3 "~" H 10150 2900 60 0000 C CNN + 1 10150 2900 + 1 0 0 -1 +$EndComp +$Comp +L LED DBREAK1 +U 1 1 548EF7E9 +P 10150 3250 +F 0 "DBREAK1" H 10150 3350 50 0000 C CNN +F 1 "LED" H 10150 3150 50 0000 C CNN +F 2 "~" H 10150 3250 60 0000 C CNN +F 3 "~" H 10150 3250 60 0000 C CNN + 1 10150 3250 + 1 0 0 -1 +$EndComp +$Comp +L LED DION1 +U 1 1 548EF837 +P 10800 1150 +F 0 "DION1" H 10800 1250 50 0000 C CNN +F 1 "LED" H 10800 1050 50 0000 C CNN +F 2 "~" H 10800 1150 60 0000 C CNN +F 3 "~" H 10800 1150 60 0000 C CNN + 1 10800 1150 + 1 0 0 -1 +$EndComp +$Comp +L LED DPAUSE1 +U 1 1 548EF83D +P 10800 1500 +F 0 "DPAUSE1" H 10800 1600 50 0000 C CNN +F 1 "LED" H 10800 1400 50 0000 C CNN +F 2 "~" H 10800 1500 60 0000 C CNN +F 3 "~" H 10800 1500 60 0000 C CNN + 1 10800 1500 + 1 0 0 -1 +$EndComp +$Comp +L LED DRUN1 +U 1 1 548EF843 +P 10800 1850 +F 0 "DRUN1" H 10800 1950 50 0000 C CNN +F 1 "LED" H 10800 1750 50 0000 C CNN +F 2 "~" H 10800 1850 60 0000 C CNN +F 3 "~" H 10800 1850 60 0000 C CNN + 1 10800 1850 + 1 0 0 -1 +$EndComp +$Comp +L SWITCH_INV SW19 +U 1 1 548EF86F +P 7400 4800 +F 0 "SW19" H 7200 4950 50 0000 C CNN +F 1 "START" H 7250 4650 50 0000 C CNN +F 2 "~" H 7400 4800 60 0000 C CNN +F 3 "~" H 7400 4800 60 0000 C CNN + 1 7400 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW20 +U 1 1 548EF87C +P 7900 4800 +F 0 "SW20" H 7700 4950 50 0000 C CNN +F 1 "LOAD_ADD" H 7750 4650 50 0000 C CNN +F 2 "~" H 7900 4800 60 0000 C CNN +F 3 "~" H 7900 4800 60 0000 C CNN + 1 7900 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW21 +U 1 1 548EF882 +P 8400 4800 +F 0 "SW21" H 8200 4950 50 0000 C CNN +F 1 "DEP" H 8250 4650 50 0000 C CNN +F 2 "~" H 8400 4800 60 0000 C CNN +F 3 "~" H 8400 4800 60 0000 C CNN + 1 8400 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW22 +U 1 1 548EF888 +P 8900 4800 +F 0 "SW22" H 8700 4950 50 0000 C CNN +F 1 "EXAM" H 8750 4650 50 0000 C CNN +F 2 "~" H 8900 4800 60 0000 C CNN +F 3 "~" H 8900 4800 60 0000 C CNN + 1 8900 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW23 +U 1 1 548EF88E +P 9400 4800 +F 0 "SW23" H 9200 4950 50 0000 C CNN +F 1 "CONT" H 9250 4650 50 0000 C CNN +F 2 "~" H 9400 4800 60 0000 C CNN +F 3 "~" H 9400 4800 60 0000 C CNN + 1 9400 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW24 +U 1 1 548EF894 +P 9900 4800 +F 0 "SW24" H 9700 4950 50 0000 C CNN +F 1 "STOP" H 9750 4650 50 0000 C CNN +F 2 "~" H 9900 4800 60 0000 C CNN +F 3 "~" H 9900 4800 60 0000 C CNN + 1 9900 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW25 +U 1 1 548EF89A +P 10400 4800 +F 0 "SW25" H 10200 4950 50 0000 C CNN +F 1 "SING_STEP" H 10250 4650 50 0000 C CNN +F 2 "~" H 10400 4800 60 0000 C CNN +F 3 "~" H 10400 4800 60 0000 C CNN + 1 10400 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW26 +U 1 1 548EF8A0 +P 10900 4800 +F 0 "SW26" H 10700 4950 50 0000 C CNN +F 1 "SING_INST" H 10750 4650 50 0000 C CNN +F 2 "~" H 10900 4800 60 0000 C CNN +F 3 "~" H 10900 4800 60 0000 C CNN + 1 10900 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW7 +U 1 1 548EFAF8 +P 5050 6300 +F 0 "SW7" H 4850 6450 50 0000 C CNN +F 1 "SR1" H 4900 6150 50 0000 C CNN +F 2 "~" H 5050 6300 60 0000 C CNN +F 3 "~" H 5050 6300 60 0000 C CNN + 1 5050 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW8 +U 1 1 548EFB27 +P 5500 6300 +F 0 "SW8" H 5300 6450 50 0000 C CNN +F 1 "SR2" H 5350 6150 50 0000 C CNN +F 2 "~" H 5500 6300 60 0000 C CNN +F 3 "~" H 5500 6300 60 0000 C CNN + 1 5500 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW9 +U 1 1 548EFB2D +P 5950 6300 +F 0 "SW9" H 5750 6450 50 0000 C CNN +F 1 "SR3" H 5800 6150 50 0000 C CNN +F 2 "~" H 5950 6300 60 0000 C CNN +F 3 "~" H 5950 6300 60 0000 C CNN + 1 5950 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW10 +U 1 1 548EFB33 +P 6400 6300 +F 0 "SW10" H 6200 6450 50 0000 C CNN +F 1 "SR4" H 6250 6150 50 0000 C CNN +F 2 "~" H 6400 6300 60 0000 C CNN +F 3 "~" H 6400 6300 60 0000 C CNN + 1 6400 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW11 +U 1 1 548EFB42 +P 6900 6300 +F 0 "SW11" H 6700 6450 50 0000 C CNN +F 1 "SR5" H 6750 6150 50 0000 C CNN +F 2 "~" H 6900 6300 60 0000 C CNN +F 3 "~" H 6900 6300 60 0000 C CNN + 1 6900 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW12 +U 1 1 548EFB48 +P 7350 6300 +F 0 "SW12" H 7150 6450 50 0000 C CNN +F 1 "SR6" H 7200 6150 50 0000 C CNN +F 2 "~" H 7350 6300 60 0000 C CNN +F 3 "~" H 7350 6300 60 0000 C CNN + 1 7350 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW13 +U 1 1 548EFB4E +P 7800 6300 +F 0 "SW13" H 7600 6450 50 0000 C CNN +F 1 "SR7" H 7650 6150 50 0000 C CNN +F 2 "~" H 7800 6300 60 0000 C CNN +F 3 "~" H 7800 6300 60 0000 C CNN + 1 7800 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW14 +U 1 1 548EFB54 +P 8250 6300 +F 0 "SW14" H 8050 6450 50 0000 C CNN +F 1 "SR8" H 8100 6150 50 0000 C CNN +F 2 "~" H 8250 6300 60 0000 C CNN +F 3 "~" H 8250 6300 60 0000 C CNN + 1 8250 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW15 +U 1 1 548EFB5A +P 8750 6300 +F 0 "SW15" H 8550 6450 50 0000 C CNN +F 1 "SR9" H 8600 6150 50 0000 C CNN +F 2 "~" H 8750 6300 60 0000 C CNN +F 3 "~" H 8750 6300 60 0000 C CNN + 1 8750 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW16 +U 1 1 548EFB60 +P 9200 6300 +F 0 "SW16" H 9000 6450 50 0000 C CNN +F 1 "SR10" H 9050 6150 50 0000 C CNN +F 2 "~" H 9200 6300 60 0000 C CNN +F 3 "~" H 9200 6300 60 0000 C CNN + 1 9200 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW17 +U 1 1 548EFB66 +P 9650 6300 +F 0 "SW17" H 9450 6450 50 0000 C CNN +F 1 "SR11" H 9500 6150 50 0000 C CNN +F 2 "~" H 9650 6300 60 0000 C CNN +F 3 "~" H 9650 6300 60 0000 C CNN + 1 9650 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW18 +U 1 1 548EFB6C +P 10100 6300 +F 0 "SW18" H 9900 6450 50 0000 C CNN +F 1 "SR12" H 9950 6150 50 0000 C CNN +F 2 "~" H 10100 6300 60 0000 C CNN +F 3 "~" H 10100 6300 60 0000 C CNN + 1 10100 6300 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW1 +U 1 1 548EFBFD +P 3900 4800 +F 0 "SW1" H 3700 4950 50 0000 C CNN +F 1 "DF1" H 3750 4650 50 0000 C CNN +F 2 "~" H 3900 4800 60 0000 C CNN +F 3 "~" H 3900 4800 60 0000 C CNN + 1 3900 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW2 +U 1 1 548EFC03 +P 4350 4800 +F 0 "SW2" H 4150 4950 50 0000 C CNN +F 1 "DF2" H 4200 4650 50 0000 C CNN +F 2 "~" H 4350 4800 60 0000 C CNN +F 3 "~" H 4350 4800 60 0000 C CNN + 1 4350 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW3 +U 1 1 548EFC09 +P 4800 4800 +F 0 "SW3" H 4600 4950 50 0000 C CNN +F 1 "DF3" H 4650 4650 50 0000 C CNN +F 2 "~" H 4800 4800 60 0000 C CNN +F 3 "~" H 4800 4800 60 0000 C CNN + 1 4800 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW4 +U 1 1 548EFC0F +P 5250 4800 +F 0 "SW4" H 5050 4950 50 0000 C CNN +F 1 "IF1" H 5100 4650 50 0000 C CNN +F 2 "~" H 5250 4800 60 0000 C CNN +F 3 "~" H 5250 4800 60 0000 C CNN + 1 5250 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW5 +U 1 1 548EFC15 +P 5750 4800 +F 0 "SW5" H 5550 4950 50 0000 C CNN +F 1 "IF2" H 5600 4650 50 0000 C CNN +F 2 "~" H 5750 4800 60 0000 C CNN +F 3 "~" H 5750 4800 60 0000 C CNN + 1 5750 4800 + 0 -1 -1 0 +$EndComp +$Comp +L SWITCH_INV SW6 +U 1 1 548EFC1B +P 6200 4800 +F 0 "SW6" H 6000 4950 50 0000 C CNN +F 1 "IF3" H 6050 4650 50 0000 C CNN +F 2 "~" H 6200 4800 60 0000 C CNN +F 3 "~" H 6200 4800 60 0000 C CNN + 1 6200 4800 + 0 -1 -1 0 +$EndComp +$Comp +L RASPI_MODEL_B_PLUS_GPIO P1 +U 1 1 548F13F7 +P 1850 2150 +F 0 "P1" H 1850 3200 60 0000 C CNN +F 1 "RASPI_MODEL_B_PLUS_GPIO" V 1850 2150 20 0000 C CNN +F 2 "~" H 1850 2150 60 0000 C CNN +F 3 "~" H 1850 2150 60 0000 C CNN + 1 1850 2150 + 1 0 0 -1 +$EndComp +Text GLabel 4700 1600 2 60 Input ~ 0 +led1 +Text GLabel 4700 1700 2 60 Input ~ 0 +led2 +Text GLabel 4700 1800 2 60 Input ~ 0 +led3 +Text GLabel 4700 1900 2 60 Input ~ 0 +led4 +Text GLabel 4700 2000 2 60 Input ~ 0 +led5 +Text GLabel 4700 2100 2 60 Input ~ 0 +led6 +Text GLabel 4700 2200 2 60 Input ~ 0 +led7 +Text GLabel 4700 2300 2 60 Input ~ 0 +led8 +Text GLabel 800 1300 0 60 Input ~ 0 +sda +Text GLabel 800 1400 0 60 Input ~ 0 +scl +Text GLabel 800 1500 0 60 Input ~ 0 +col3 +Text GLabel 800 2600 0 60 Input ~ 0 +col4 +Text GLabel 800 2700 0 60 Input ~ 0 +col5 +Text GLabel 2900 2400 2 60 Input ~ 0 +col6 +Text GLabel 2900 2300 2 60 Input ~ 0 +col7 +Text GLabel 800 2200 0 60 Input ~ 0 +col8 +Text GLabel 800 2100 0 60 Input ~ 0 +col9 +Text GLabel 800 2300 0 60 Input ~ 0 +col10 +Text GLabel 2900 2700 2 60 Input ~ 0 +col11 +Text GLabel 800 2800 0 60 Input ~ 0 +col12 +Text GLabel 2900 2900 2 60 Input ~ 0 +row1 +Text GLabel 800 1700 0 60 Input ~ 0 +row2 +Text GLabel 2900 1700 2 60 Input ~ 0 +row3 +Text Notes 650 800 0 31 ~ 0 +Driving LEDs: a matrix of LED8 X COL12\nSensing switches: a matrix of ROW3 X COL12 +Text GLabel 8900 700 2 60 Input ~ 0 +led1 +Text GLabel 8900 1750 2 60 Input ~ 0 +led2 +Text GLabel 8900 2000 2 60 Input ~ 0 +led3 +Text GLabel 8900 3050 2 60 Input ~ 0 +led4 +Text GLabel 8900 3400 2 60 Input ~ 0 +led5 +Text GLabel 3300 1150 0 60 Input ~ 0 +col1 +Text GLabel 3600 1300 0 60 Input ~ 0 +col2 +Text GLabel 3900 1150 0 60 Input ~ 0 +col3 +Text GLabel 4200 1300 0 60 Input ~ 0 +col4 +Text GLabel 4500 1150 0 60 Input ~ 0 +col5 +Text GLabel 4800 1300 0 60 Input ~ 0 +col6 +Text GLabel 7250 1150 0 60 Input ~ 0 +col7 +Text GLabel 7550 1300 0 60 Input ~ 0 +col8 +Text GLabel 7850 1150 0 60 Input ~ 0 +col9 +Text GLabel 8150 1300 0 60 Input ~ 0 +col10 +Text GLabel 8450 1150 0 60 Input ~ 0 +col11 +Text GLabel 8750 1300 0 60 Input ~ 0 +col12 +Text GLabel 5450 3850 0 60 Input ~ 0 +col1 +Text GLabel 5750 4000 0 60 Input ~ 0 +col2 +Text GLabel 6050 3850 0 60 Input ~ 0 +col3 +Text GLabel 6350 4000 0 60 Input ~ 0 +col4 +Text GLabel 6650 3850 0 60 Input ~ 0 +col5 +Text GLabel 3300 4000 0 60 Input ~ 0 +col6 +Text GLabel 3600 3850 0 60 Input ~ 0 +col7 +Text GLabel 3900 4000 0 60 Input ~ 0 +col8 +Text GLabel 4200 3850 0 60 Input ~ 0 +col9 +Text GLabel 4500 4000 0 60 Input ~ 0 +col10 +Text GLabel 8450 3850 0 60 Input ~ 0 +col11 +Text GLabel 8750 4000 0 60 Input ~ 0 +col12 +Text GLabel 9300 1050 1 60 Input ~ 0 +led6 +Text GLabel 9750 1150 1 60 Input ~ 0 +col1 +Text GLabel 9750 1500 1 60 Input ~ 0 +col2 +Text GLabel 9750 1850 1 60 Input ~ 0 +col3 +Text GLabel 9750 2200 1 60 Input ~ 0 +col4 +Text GLabel 9750 2550 1 60 Input ~ 0 +col5 +Text GLabel 9750 2900 1 60 Input ~ 0 +col6 +Text GLabel 9750 3250 1 60 Input ~ 0 +col7 +Text GLabel 9750 3600 1 60 Input ~ 0 +col8 +Text GLabel 9950 1050 1 60 Input ~ 0 +led6 +Text GLabel 10400 1150 1 60 Input ~ 0 +col9 +Text GLabel 10400 1500 1 60 Input ~ 0 +col10 +Text GLabel 10400 1850 1 60 Input ~ 0 +col11 +Text GLabel 10400 2200 1 60 Input ~ 0 +col12 +Text GLabel 9950 2750 1 60 Input ~ 0 +led7 +Text GLabel 10400 2900 1 60 Input ~ 0 +col1 +Text GLabel 10400 3250 1 60 Input ~ 0 +col2 +Text GLabel 10600 1050 1 60 Input ~ 0 +led7 +Text GLabel 11050 1150 1 60 Input ~ 0 +col3 +Text GLabel 11050 1500 1 60 Input ~ 0 +col4 +Text GLabel 11050 1850 1 60 Input ~ 0 +col5 +Text GLabel 4600 3400 2 60 Input ~ 0 +led7 +Text GLabel 3300 700 0 60 Input ~ 0 +led8 +Text GLabel 5150 2650 0 60 Input ~ 0 +led8 +Text GLabel 5150 3050 0 60 Input ~ 0 +col7 +Text GLabel 5450 1150 0 60 Input ~ 0 +col1 +Text GLabel 5750 1300 0 60 Input ~ 0 +col2 +Text GLabel 6050 1150 0 60 Input ~ 0 +col3 +Text GLabel 6350 1300 0 60 Input ~ 0 +col4 +Text GLabel 6650 1150 0 60 Input ~ 0 +col5 +Text GLabel 6950 1300 0 60 Input ~ 0 +col6 +Text GLabel 7250 2450 0 60 Input ~ 0 +col7 +Text GLabel 7550 2600 0 60 Input ~ 0 +col8 +Text GLabel 7850 2450 0 60 Input ~ 0 +col9 +Text GLabel 8150 2600 0 60 Input ~ 0 +col10 +Text GLabel 8450 2450 0 60 Input ~ 0 +col11 +Text GLabel 8750 2600 0 60 Input ~ 0 +col12 +Text GLabel 6950 2600 0 60 Input ~ 0 +col6 +Text GLabel 5450 2450 0 60 Input ~ 0 +col1 +Text GLabel 5750 2600 0 60 Input ~ 0 +col2 +Text GLabel 6050 2450 0 60 Input ~ 0 +col3 +Text GLabel 6350 2600 0 60 Input ~ 0 +col4 +Text GLabel 6650 2450 0 60 Input ~ 0 +col5 +Text GLabel 7250 3850 0 60 Input ~ 0 +col7 +Text GLabel 7550 4000 0 60 Input ~ 0 +col8 +Text GLabel 7850 3850 0 60 Input ~ 0 +col9 +Text GLabel 8150 4000 0 60 Input ~ 0 +col10 +Text GLabel 6950 4000 0 60 Input ~ 0 +col6 +Text GLabel 4900 5750 0 60 Input ~ 0 +row1 +Text GLabel 4650 7050 2 60 Input ~ 0 +col1 +Text GLabel 5100 7050 2 60 Input ~ 0 +col2 +Text GLabel 5550 7050 2 60 Input ~ 0 +col3 +Text GLabel 6000 7050 2 60 Input ~ 0 +col4 +Text GLabel 6500 7050 2 60 Input ~ 0 +col5 +Text GLabel 9250 7050 2 60 Input ~ 0 +col11 +Text GLabel 9700 7050 2 60 Input ~ 0 +col12 +Text GLabel 7400 7050 2 60 Input ~ 0 +col7 +Text GLabel 7850 7050 2 60 Input ~ 0 +col8 +Text GLabel 8350 7050 2 60 Input ~ 0 +col9 +Text GLabel 8800 7050 2 60 Input ~ 0 +col10 +Text GLabel 6950 7050 2 60 Input ~ 0 +col6 +Text GLabel 3500 5550 2 60 Input ~ 0 +col1 +Text GLabel 3950 5550 2 60 Input ~ 0 +col2 +Text GLabel 4400 5550 2 60 Input ~ 0 +col3 +Text GLabel 4850 5550 2 60 Input ~ 0 +col4 +Text GLabel 5350 5550 2 60 Input ~ 0 +col5 +Text GLabel 5800 5550 2 60 Input ~ 0 +col6 +Text GLabel 3750 4250 0 60 Input ~ 0 +row2 +Text GLabel 7250 4250 0 60 Input ~ 0 +row3 +Text GLabel 7000 5550 2 60 Input ~ 0 +col1 +Text GLabel 7500 5550 2 60 Input ~ 0 +col2 +Text GLabel 8000 5550 2 60 Input ~ 0 +col3 +Text GLabel 8500 5550 2 60 Input ~ 0 +col4 +Text GLabel 9000 5550 2 60 Input ~ 0 +col5 +Text GLabel 9500 5550 2 60 Input ~ 0 +col6 +Text GLabel 10000 5550 2 60 Input ~ 0 +col7 +Text GLabel 10500 5550 2 60 Input ~ 0 +col8 +$Comp +L DIODE D1 +U 1 1 54904DF0 +P 3700 5350 +F 0 "D1" H 3700 5450 40 0000 C CNN +F 1 "1N4148" H 3700 5250 40 0000 C CNN +F 2 "~" H 3700 5350 60 0000 C CNN +F 3 "~" H 3700 5350 60 0000 C CNN + 1 3700 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D2 +U 1 1 5490504C +P 4150 5350 +F 0 "D2" H 4150 5450 40 0000 C CNN +F 1 "1N4148" H 4150 5250 40 0000 C CNN +F 2 "~" H 4150 5350 60 0000 C CNN +F 3 "~" H 4150 5350 60 0000 C CNN + 1 4150 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D3 +U 1 1 54905056 +P 4600 5350 +F 0 "D3" H 4600 5450 40 0000 C CNN +F 1 "1N4148" H 4600 5250 40 0000 C CNN +F 2 "~" H 4600 5350 60 0000 C CNN +F 3 "~" H 4600 5350 60 0000 C CNN + 1 4600 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D4 +U 1 1 5490505E +P 5050 5350 +F 0 "D4" H 5050 5450 40 0000 C CNN +F 1 "1N4148" H 5050 5250 40 0000 C CNN +F 2 "~" H 5050 5350 60 0000 C CNN +F 3 "~" H 5050 5350 60 0000 C CNN + 1 5050 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D5 +U 1 1 54905068 +P 5550 5350 +F 0 "D5" H 5550 5450 40 0000 C CNN +F 1 "1N4148" H 5550 5250 40 0000 C CNN +F 2 "~" H 5550 5350 60 0000 C CNN +F 3 "~" H 5550 5350 60 0000 C CNN + 1 5550 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D6 +U 1 1 5490506E +P 6000 5350 +F 0 "D6" H 6000 5450 40 0000 C CNN +F 1 "1N4148" H 6000 5250 40 0000 C CNN +F 2 "~" H 6000 5350 60 0000 C CNN +F 3 "~" H 6000 5350 60 0000 C CNN + 1 6000 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D7 +U 1 1 549055F9 +P 4850 6850 +F 0 "D7" H 4850 6950 40 0000 C CNN +F 1 "1N4148" H 4850 6750 40 0000 C CNN +F 2 "~" H 4850 6850 60 0000 C CNN +F 3 "~" H 4850 6850 60 0000 C CNN + 1 4850 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D8 +U 1 1 549055FF +P 5300 6850 +F 0 "D8" H 5300 6950 40 0000 C CNN +F 1 "1N4148" H 5300 6750 40 0000 C CNN +F 2 "~" H 5300 6850 60 0000 C CNN +F 3 "~" H 5300 6850 60 0000 C CNN + 1 5300 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D9 +U 1 1 54905605 +P 5750 6850 +F 0 "D9" H 5750 6950 40 0000 C CNN +F 1 "1N4148" H 5750 6750 40 0000 C CNN +F 2 "~" H 5750 6850 60 0000 C CNN +F 3 "~" H 5750 6850 60 0000 C CNN + 1 5750 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D10 +U 1 1 5490560B +P 6200 6850 +F 0 "D10" H 6200 6950 40 0000 C CNN +F 1 "1N4148" H 6200 6750 40 0000 C CNN +F 2 "~" H 6200 6850 60 0000 C CNN +F 3 "~" H 6200 6850 60 0000 C CNN + 1 6200 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D11 +U 1 1 54905611 +P 6700 6850 +F 0 "D11" H 6700 6950 40 0000 C CNN +F 1 "1N4148" H 6700 6750 40 0000 C CNN +F 2 "~" H 6700 6850 60 0000 C CNN +F 3 "~" H 6700 6850 60 0000 C CNN + 1 6700 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D12 +U 1 1 54905640 +P 7150 6850 +F 0 "D12" H 7150 6950 40 0000 C CNN +F 1 "1N4148" H 7150 6750 40 0000 C CNN +F 2 "~" H 7150 6850 60 0000 C CNN +F 3 "~" H 7150 6850 60 0000 C CNN + 1 7150 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D13 +U 1 1 54905646 +P 7600 6850 +F 0 "D13" H 7600 6950 40 0000 C CNN +F 1 "1N4148" H 7600 6750 40 0000 C CNN +F 2 "~" H 7600 6850 60 0000 C CNN +F 3 "~" H 7600 6850 60 0000 C CNN + 1 7600 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D14 +U 1 1 5490564C +P 8050 6850 +F 0 "D14" H 8050 6950 40 0000 C CNN +F 1 "1N4148" H 8050 6750 40 0000 C CNN +F 2 "~" H 8050 6850 60 0000 C CNN +F 3 "~" H 8050 6850 60 0000 C CNN + 1 8050 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D15 +U 1 1 54905652 +P 8550 6850 +F 0 "D15" H 8550 6950 40 0000 C CNN +F 1 "1N4148" H 8550 6750 40 0000 C CNN +F 2 "~" H 8550 6850 60 0000 C CNN +F 3 "~" H 8550 6850 60 0000 C CNN + 1 8550 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D16 +U 1 1 54905658 +P 9000 6850 +F 0 "D16" H 9000 6950 40 0000 C CNN +F 1 "1N4148" H 9000 6750 40 0000 C CNN +F 2 "~" H 9000 6850 60 0000 C CNN +F 3 "~" H 9000 6850 60 0000 C CNN + 1 9000 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D17 +U 1 1 5490565E +P 9450 6850 +F 0 "D17" H 9450 6950 40 0000 C CNN +F 1 "1N4148" H 9450 6750 40 0000 C CNN +F 2 "~" H 9450 6850 60 0000 C CNN +F 3 "~" H 9450 6850 60 0000 C CNN + 1 9450 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D18 +U 1 1 54905664 +P 9900 6850 +F 0 "D18" H 9900 6950 40 0000 C CNN +F 1 "1N4148" H 9900 6750 40 0000 C CNN +F 2 "~" H 9900 6850 60 0000 C CNN +F 3 "~" H 9900 6850 60 0000 C CNN + 1 9900 6850 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D19 +U 1 1 549070C3 +P 7200 5350 +F 0 "D19" H 7200 5450 40 0000 C CNN +F 1 "1N4148" H 7200 5250 40 0000 C CNN +F 2 "~" H 7200 5350 60 0000 C CNN +F 3 "~" H 7200 5350 60 0000 C CNN + 1 7200 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D20 +U 1 1 549070C9 +P 7700 5350 +F 0 "D20" H 7700 5450 40 0000 C CNN +F 1 "1N4148" H 7700 5250 40 0000 C CNN +F 2 "~" H 7700 5350 60 0000 C CNN +F 3 "~" H 7700 5350 60 0000 C CNN + 1 7700 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D21 +U 1 1 549070CF +P 8200 5350 +F 0 "D21" H 8200 5450 40 0000 C CNN +F 1 "1N4148" H 8200 5250 40 0000 C CNN +F 2 "~" H 8200 5350 60 0000 C CNN +F 3 "~" H 8200 5350 60 0000 C CNN + 1 8200 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D22 +U 1 1 549070D5 +P 8700 5350 +F 0 "D22" H 8700 5450 40 0000 C CNN +F 1 "1N4148" H 8700 5250 40 0000 C CNN +F 2 "~" H 8700 5350 60 0000 C CNN +F 3 "~" H 8700 5350 60 0000 C CNN + 1 8700 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D23 +U 1 1 549070DB +P 9200 5350 +F 0 "D23" H 9200 5450 40 0000 C CNN +F 1 "1N4148" H 9200 5250 40 0000 C CNN +F 2 "~" H 9200 5350 60 0000 C CNN +F 3 "~" H 9200 5350 60 0000 C CNN + 1 9200 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D24 +U 1 1 549070E1 +P 9700 5350 +F 0 "D24" H 9700 5450 40 0000 C CNN +F 1 "1N4148" H 9700 5250 40 0000 C CNN +F 2 "~" H 9700 5350 60 0000 C CNN +F 3 "~" H 9700 5350 60 0000 C CNN + 1 9700 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D25 +U 1 1 549070E7 +P 10200 5350 +F 0 "D25" H 10200 5450 40 0000 C CNN +F 1 "1N4148" H 10200 5250 40 0000 C CNN +F 2 "~" H 10200 5350 60 0000 C CNN +F 3 "~" H 10200 5350 60 0000 C CNN + 1 10200 5350 + 1 0 0 -1 +$EndComp +$Comp +L DIODE D26 +U 1 1 549070ED +P 10700 5350 +F 0 "D26" H 10700 5450 40 0000 C CNN +F 1 "1N4148" H 10700 5250 40 0000 C CNN +F 2 "~" H 10700 5350 60 0000 C CNN +F 3 "~" H 10700 5350 60 0000 C CNN + 1 10700 5350 + 1 0 0 -1 +$EndComp +$Comp +L R R1 +U 1 1 5490833D +P 2600 1500 +F 0 "R1" V 2680 1500 40 0000 C CNN +F 1 "390" V 2607 1501 40 0000 C CNN +F 2 "~" V 2530 1500 30 0000 C CNN +F 3 "~" H 2600 1500 30 0000 C CNN + 1 2600 1500 + 0 -1 -1 0 +$EndComp +$Comp +L R R2 +U 1 1 5490834A +P 2600 1600 +F 0 "R2" V 2680 1600 40 0000 C CNN +F 1 "390" V 2607 1601 40 0000 C CNN +F 2 "~" V 2530 1600 30 0000 C CNN +F 3 "~" H 2600 1600 30 0000 C CNN + 1 2600 1600 + 0 -1 -1 0 +$EndComp +$Comp +L R R3 +U 1 1 54908350 +P 1100 1500 +F 0 "R3" V 1180 1500 40 0000 C CNN +F 1 "390" V 1107 1501 40 0000 C CNN +F 2 "~" V 1030 1500 30 0000 C CNN +F 3 "~" H 1100 1500 30 0000 C CNN + 1 1100 1500 + 0 -1 -1 0 +$EndComp +$Comp +L R R4 +U 1 1 54908356 +P 1100 2600 +F 0 "R4" V 1180 2600 40 0000 C CNN +F 1 "390" V 1107 2601 40 0000 C CNN +F 2 "~" V 1030 2600 30 0000 C CNN +F 3 "~" H 1100 2600 30 0000 C CNN + 1 1100 2600 + 0 -1 -1 0 +$EndComp +$Comp +L R R5 +U 1 1 5490835C +P 1100 2700 +F 0 "R5" V 1180 2700 40 0000 C CNN +F 1 "390" V 1107 2701 40 0000 C CNN +F 2 "~" V 1030 2700 30 0000 C CNN +F 3 "~" H 1100 2700 30 0000 C CNN + 1 1100 2700 + 0 -1 -1 0 +$EndComp +$Comp +L R R6 +U 1 1 54908362 +P 2600 2400 +F 0 "R6" V 2680 2400 40 0000 C CNN +F 1 "390" V 2607 2401 40 0000 C CNN +F 2 "~" V 2530 2400 30 0000 C CNN +F 3 "~" H 2600 2400 30 0000 C CNN + 1 2600 2400 + 0 1 1 0 +$EndComp +$Comp +L R R7 +U 1 1 54908368 +P 2600 2300 +F 0 "R7" V 2680 2300 40 0000 C CNN +F 1 "390" V 2607 2301 40 0000 C CNN +F 2 "~" V 2530 2300 30 0000 C CNN +F 3 "~" H 2600 2300 30 0000 C CNN + 1 2600 2300 + 0 -1 -1 0 +$EndComp +$Comp +L R R8 +U 1 1 5490836E +P 1100 2200 +F 0 "R8" V 1180 2200 40 0000 C CNN +F 1 "390" V 1107 2201 40 0000 C CNN +F 2 "~" V 1030 2200 30 0000 C CNN +F 3 "~" H 1100 2200 30 0000 C CNN + 1 1100 2200 + 0 1 1 0 +$EndComp +$Comp +L R R9 +U 1 1 54908374 +P 1100 2100 +F 0 "R9" V 1180 2100 40 0000 C CNN +F 1 "390" V 1107 2101 40 0000 C CNN +F 2 "~" V 1030 2100 30 0000 C CNN +F 3 "~" H 1100 2100 30 0000 C CNN + 1 1100 2100 + 0 1 1 0 +$EndComp +$Comp +L R R10 +U 1 1 5490837A +P 1100 2300 +F 0 "R10" V 1180 2300 40 0000 C CNN +F 1 "390" V 1107 2301 40 0000 C CNN +F 2 "~" V 1030 2300 30 0000 C CNN +F 3 "~" H 1100 2300 30 0000 C CNN + 1 1100 2300 + 0 1 1 0 +$EndComp +$Comp +L R R11 +U 1 1 54908380 +P 2600 2700 +F 0 "R11" V 2680 2700 40 0000 C CNN +F 1 "390" V 2607 2701 40 0000 C CNN +F 2 "~" V 2530 2700 30 0000 C CNN +F 3 "~" H 2600 2700 30 0000 C CNN + 1 2600 2700 + 0 -1 -1 0 +$EndComp +$Comp +L R R12 +U 1 1 54908386 +P 1100 2800 +F 0 "R12" V 1180 2800 40 0000 C CNN +F 1 "390" V 1107 2801 40 0000 C CNN +F 2 "~" V 1030 2800 30 0000 C CNN +F 3 "~" H 1100 2800 30 0000 C CNN + 1 1100 2800 + 0 1 1 0 +$EndComp +$Comp +L R R_ROW1 +U 1 1 5490838C +P 2600 2900 +F 0 "R_ROW1" V 2680 2900 40 0000 C CNN +F 1 "1K" V 2607 2901 40 0000 C CNN +F 2 "~" V 2530 2900 30 0000 C CNN +F 3 "~" H 2600 2900 30 0000 C CNN + 1 2600 2900 + 0 -1 -1 0 +$EndComp +$Comp +L R R_ROW2 +U 1 1 5490839E +P 1100 1700 +F 0 "R_ROW2" V 1180 1700 40 0000 C CNN +F 1 "1K" V 1107 1701 40 0000 C CNN +F 2 "~" V 1030 1700 30 0000 C CNN +F 3 "~" H 1100 1700 30 0000 C CNN + 1 1100 1700 + 0 1 1 0 +$EndComp +$Comp +L R R_ROW3 +U 1 1 549083A4 +P 2600 1700 +F 0 "R_ROW3" V 2680 1700 40 0000 C CNN +F 1 "1K" V 2607 1701 40 0000 C CNN +F 2 "~" V 2530 1700 30 0000 C CNN +F 3 "~" H 2600 1700 30 0000 C CNN + 1 2600 1700 + 0 -1 -1 0 +$EndComp +$Comp +L UDN2981A P2 +U 1 1 54B17386 +P 4250 2000 +F 0 "P2" H 4250 2550 30 0000 C CNN +F 1 "UDN2981A" H 4250 1450 30 0000 C CNN +F 2 "~" H 4250 2000 60 0000 C CNN +F 3 "~" H 4250 2000 60 0000 C CNN + 1 4250 2000 + 1 0 0 -1 +$EndComp +Text GLabel 3800 1600 0 60 Input ~ 0 +xled1 +Text GLabel 3800 1700 0 60 Input ~ 0 +xled2 +Text GLabel 3800 1800 0 60 Input ~ 0 +xled3 +Text GLabel 3800 1900 0 60 Input ~ 0 +xled4 +Text GLabel 3800 2000 0 60 Input ~ 0 +xled5 +Text GLabel 3800 2100 0 60 Input ~ 0 +xled6 +Text GLabel 3800 2200 0 60 Input ~ 0 +xled7 +Text GLabel 3800 2300 0 60 Input ~ 0 +xled8 +Text GLabel 2900 3000 2 60 Input ~ 0 +xled1 +Text GLabel 2900 3100 2 60 Input ~ 0 +xled2 +Text GLabel 800 1900 0 60 Input ~ 0 +xled3 +Text GLabel 2900 1900 2 60 Input ~ 0 +xled4 +Text GLabel 2900 2000 2 60 Input ~ 0 +xled5 +Text GLabel 2900 2200 2 60 Input ~ 0 +xled6 +Text GLabel 800 3000 0 60 Input ~ 0 +xled7 +Text GLabel 800 1800 0 60 Input ~ 0 +xled8 +NoConn ~ 2250 2500 +NoConn ~ 1450 2500 +$Comp +L GND #PWR01 +U 1 1 54B1913E +P 2300 2100 +F 0 "#PWR01" H 2300 2100 30 0001 C CNN +F 1 "GND" H 2300 2030 30 0001 C CNN +F 2 "" H 2300 2100 60 0000 C CNN +F 3 "" H 2300 2100 60 0000 C CNN + 1 2300 2100 + 0 -1 -1 0 +$EndComp +$Comp +L GND #PWR02 +U 1 1 54B19156 +P 2300 1400 +F 0 "#PWR02" H 2300 1400 30 0001 C CNN +F 1 "GND" H 2300 1330 30 0001 C CNN +F 2 "" H 2300 1400 60 0000 C CNN +F 3 "" H 2300 1400 60 0000 C CNN + 1 2300 1400 + 0 -1 -1 0 +$EndComp +NoConn ~ 2250 2800 +$Comp +L +3.3V #PWR03 +U 1 1 54B1C371 +P 1350 1100 +F 0 "#PWR03" H 1350 1060 30 0001 C CNN +F 1 "+3.3V" H 1350 1210 30 0000 C CNN +F 2 "" H 1350 1100 60 0000 C CNN +F 3 "" H 1350 1100 60 0000 C CNN + 1 1350 1100 + 1 0 0 -1 +$EndComp +$Comp +L GND #PWR04 +U 1 1 54B1C4F8 +P 4750 2550 +F 0 "#PWR04" H 4750 2550 30 0001 C CNN +F 1 "GND" H 4750 2480 30 0001 C CNN +F 2 "" H 4750 2550 60 0000 C CNN +F 3 "" H 4750 2550 60 0000 C CNN + 1 4750 2550 + 0 -1 -1 0 +$EndComp +NoConn ~ 4000 4300 +NoConn ~ 4450 4300 +NoConn ~ 4900 4300 +NoConn ~ 5350 4300 +NoConn ~ 5850 4300 +NoConn ~ 6300 4300 +NoConn ~ 7500 4300 +NoConn ~ 8000 4300 +NoConn ~ 8500 4300 +NoConn ~ 9000 4300 +NoConn ~ 9500 4300 +NoConn ~ 10000 4300 +NoConn ~ 10500 4300 +NoConn ~ 11000 4300 +NoConn ~ 10200 5800 +NoConn ~ 9750 5800 +NoConn ~ 9300 5800 +NoConn ~ 8850 5800 +NoConn ~ 8350 5800 +NoConn ~ 7900 5800 +NoConn ~ 7450 5800 +NoConn ~ 7000 5800 +NoConn ~ 6500 5800 +NoConn ~ 5150 5800 +NoConn ~ 5600 5800 +NoConn ~ 6050 5800 +$Comp +L CONN_1 M1 +U 1 1 54B1CC4A +P 6150 7400 +F 0 "M1" H 6230 7400 40 0000 L CNN +F 1 "M" H 6150 7455 30 0001 C CNN +F 2 "" H 6150 7400 60 0000 C CNN +F 3 "" H 6150 7400 60 0000 C CNN + 1 6150 7400 + 0 -1 -1 0 +$EndComp +$Comp +L CONN_1 M2 +U 1 1 54B1CC76 +P 6250 7400 +F 0 "M2" H 6330 7400 40 0000 L CNN +F 1 "M" H 6250 7455 30 0001 C CNN +F 2 "" H 6250 7400 60 0000 C CNN +F 3 "" H 6250 7400 60 0000 C CNN + 1 6250 7400 + 0 -1 -1 0 +$EndComp +$Comp +L CONN_1 M3 +U 1 1 54B1CC7C +P 6350 7400 +F 0 "M3" H 6430 7400 40 0000 L CNN +F 1 "M" H 6350 7455 30 0001 C CNN +F 2 "" H 6350 7400 60 0000 C CNN +F 3 "" H 6350 7400 60 0000 C CNN + 1 6350 7400 + 0 -1 -1 0 +$EndComp +$Comp +L CONN_1 M4 +U 1 1 54B1CC82 +P 6450 7400 +F 0 "M4" H 6530 7400 40 0000 L CNN +F 1 "M" H 6450 7455 30 0001 C CNN +F 2 "" H 6450 7400 60 0000 C CNN +F 3 "" H 6450 7400 60 0000 C CNN + 1 6450 7400 + 0 -1 -1 0 +$EndComp +NoConn ~ 6150 7550 +NoConn ~ 6250 7550 +NoConn ~ 6350 7550 +NoConn ~ 6450 7550 +$Comp +L +5V #PWR05 +U 1 1 54BCFC39 +P 2400 1100 +F 0 "#PWR05" H 2400 1190 20 0001 C CNN +F 1 "+5V" H 2400 1190 30 0000 C CNN +F 2 "" H 2400 1100 60 0000 C CNN +F 3 "" H 2400 1100 60 0000 C CNN + 1 2400 1100 + 1 0 0 -1 +$EndComp +Text GLabel 2900 1500 2 60 Input ~ 0 +col1 +Text GLabel 2900 1600 2 60 Input ~ 0 +col2 +NoConn ~ 1450 2400 +NoConn ~ 2250 1800 +$Comp +L CONN_1 M5 +U 1 1 54BD36C6 +P 6550 7400 +F 0 "M5" H 6630 7400 40 0000 L CNN +F 1 "M" H 6550 7455 30 0001 C CNN +F 2 "" H 6550 7400 60 0000 C CNN +F 3 "" H 6550 7400 60 0000 C CNN + 1 6550 7400 + 0 -1 -1 0 +$EndComp +$Comp +L CONN_1 M6 +U 1 1 54BD36CC +P 6650 7400 +F 0 "M6" H 6730 7400 40 0000 L CNN +F 1 "M" H 6650 7455 30 0001 C CNN +F 2 "" H 6650 7400 60 0000 C CNN +F 3 "" H 6650 7400 60 0000 C CNN + 1 6650 7400 + 0 -1 -1 0 +$EndComp +NoConn ~ 6550 7550 +NoConn ~ 6650 7550 +$Comp +L CONN_1 M7 +U 1 1 54BD36D2 +P 6750 7400 +F 0 "M7" H 6830 7400 40 0000 L CNN +F 1 "M" H 6750 7455 30 0001 C CNN +F 2 "" H 6750 7400 60 0000 C CNN +F 3 "" H 6750 7400 60 0000 C CNN + 1 6750 7400 + 0 -1 -1 0 +$EndComp +NoConn ~ 6750 7550 +$Comp +L +5V #PWR06 +U 1 1 54BD75EA +P 3400 2500 +F 0 "#PWR06" H 3400 2590 20 0001 C CNN +F 1 "+5V" H 3400 2590 30 0000 C CNN +F 2 "" H 3400 2500 60 0000 C CNN +F 3 "" H 3400 2500 60 0000 C CNN + 1 3400 2500 + -1 0 0 1 +$EndComp +$Comp +L DIODE DZ1 +U 1 1 54BD85A3 +P 3600 2400 +F 0 "DZ1" H 3600 2500 40 0000 C CNN +F 1 "ZENER" H 3600 2300 40 0000 C CNN +F 2 "~" H 3600 2400 60 0000 C CNN +F 3 "~" H 3600 2400 60 0000 C CNN + 1 3600 2400 + 1 0 0 -1 +$EndComp +$Comp +L LED DPAUSE2 +U 1 1 554E5897 +P 10800 2750 +F 0 "DPAUSE2" H 10800 2850 50 0000 C CNN +F 1 "LED" H 10800 2650 50 0000 C CNN +F 2 "~" H 10800 2750 60 0000 C CNN +F 3 "~" H 10800 2750 60 0000 C CNN + 1 10800 2750 + 1 0 0 -1 +$EndComp +$Comp +L LED DRUN2 +U 1 1 554E589D +P 10800 3100 +F 0 "DRUN2" H 10800 3200 50 0000 C CNN +F 1 "LED" H 10800 3000 50 0000 C CNN +F 2 "~" H 10800 3100 60 0000 C CNN +F 3 "~" H 10800 3100 60 0000 C CNN + 1 10800 3100 + 1 0 0 -1 +$EndComp +Text GLabel 10600 2600 1 60 Input ~ 0 +led7 +Text GLabel 11050 2750 1 60 Input ~ 0 +col4 +Text GLabel 11050 3100 1 60 Input ~ 0 +col5 +Text Notes 10550 2250 0 60 ~ 0 +LEDs ONLY for\nStraight Eight: +Wire Wire Line + 9300 1050 9300 3600 +Connection ~ 9300 1150 +Connection ~ 9300 1500 +Connection ~ 9300 1850 +Connection ~ 9300 2200 +Connection ~ 9300 2550 +Connection ~ 9300 2900 +Connection ~ 9300 3250 +Wire Wire Line + 9950 1050 9950 2200 +Connection ~ 9950 1150 +Connection ~ 9950 1500 +Connection ~ 9950 1850 +Wire Wire Line + 9950 2750 9950 3250 +Connection ~ 9950 2900 +Wire Wire Line + 10600 1050 10600 1850 +Connection ~ 10600 1150 +Connection ~ 10600 1500 +Wire Wire Line + 11000 1150 11050 1150 +Wire Wire Line + 11000 1500 11050 1500 +Wire Wire Line + 11000 1850 11050 1850 +Wire Wire Line + 10350 1150 10400 1150 +Wire Wire Line + 10350 1500 10400 1500 +Wire Wire Line + 10350 1850 10400 1850 +Wire Wire Line + 10350 2200 10400 2200 +Wire Wire Line + 9700 1150 9750 1150 +Wire Wire Line + 9700 1500 9750 1500 +Wire Wire Line + 9700 1850 9750 1850 +Wire Wire Line + 9700 2200 9750 2200 +Wire Wire Line + 9700 2550 9750 2550 +Wire Wire Line + 9700 2900 9750 2900 +Wire Wire Line + 9700 3250 9750 3250 +Wire Wire Line + 9700 3600 9750 3600 +Wire Wire Line + 5500 3050 8900 3050 +Connection ~ 8800 3050 +Connection ~ 8500 3050 +Connection ~ 8200 3050 +Connection ~ 7900 3050 +Connection ~ 7600 3050 +Connection ~ 7300 3050 +Connection ~ 7000 3050 +Connection ~ 6700 3050 +Connection ~ 6400 3050 +Connection ~ 6100 3050 +Connection ~ 5800 3050 +Wire Wire Line + 5500 2000 8900 2000 +Connection ~ 5800 2000 +Connection ~ 6100 2000 +Connection ~ 6400 2000 +Connection ~ 6700 2000 +Connection ~ 7000 2000 +Connection ~ 7300 2000 +Connection ~ 7600 2000 +Connection ~ 7900 2000 +Connection ~ 8200 2000 +Connection ~ 8500 2000 +Connection ~ 8800 2000 +Wire Wire Line + 5500 1750 8900 1750 +Connection ~ 8800 1750 +Connection ~ 8500 1750 +Connection ~ 8200 1750 +Connection ~ 7900 1750 +Connection ~ 7600 1750 +Connection ~ 7300 1750 +Connection ~ 7000 1750 +Connection ~ 6700 1750 +Connection ~ 6400 1750 +Connection ~ 6100 1750 +Connection ~ 5800 1750 +Wire Wire Line + 5500 700 8900 700 +Connection ~ 5800 700 +Connection ~ 6100 700 +Connection ~ 6400 700 +Connection ~ 6700 700 +Connection ~ 7000 700 +Connection ~ 7300 700 +Connection ~ 7600 700 +Connection ~ 7900 700 +Connection ~ 8200 700 +Connection ~ 8500 700 +Connection ~ 8800 700 +Wire Wire Line + 5500 3400 8900 3400 +Connection ~ 8800 3400 +Connection ~ 8500 3400 +Connection ~ 8200 3400 +Connection ~ 7900 3400 +Connection ~ 7600 3400 +Connection ~ 7300 3400 +Connection ~ 7000 3400 +Connection ~ 6700 3400 +Connection ~ 6400 3400 +Connection ~ 6100 3400 +Connection ~ 5800 3400 +Wire Wire Line + 6950 1300 7000 1300 +Wire Wire Line + 7000 1100 7000 1350 +Wire Wire Line + 7250 1150 7300 1150 +Wire Wire Line + 7300 1100 7300 1350 +Wire Wire Line + 7550 1300 7600 1300 +Wire Wire Line + 7600 1100 7600 1350 +Wire Wire Line + 7850 1150 7900 1150 +Wire Wire Line + 7900 1100 7900 1350 +Wire Wire Line + 8150 1300 8200 1300 +Wire Wire Line + 8200 1100 8200 1350 +Wire Wire Line + 8450 1150 8500 1150 +Wire Wire Line + 8500 1100 8500 1350 +Wire Wire Line + 8750 1300 8800 1300 +Wire Wire Line + 8800 1100 8800 1350 +Wire Wire Line + 10350 2900 10400 2900 +Wire Wire Line + 10350 3250 10400 3250 +Wire Wire Line + 5450 3850 5500 3850 +Wire Wire Line + 5500 3850 5500 3800 +Wire Wire Line + 5750 4000 5800 4000 +Wire Wire Line + 5800 4000 5800 3800 +Wire Wire Line + 6050 3850 6100 3850 +Wire Wire Line + 6100 3850 6100 3800 +Wire Wire Line + 6350 4000 6400 4000 +Wire Wire Line + 6400 4000 6400 3800 +Wire Wire Line + 6650 3850 6700 3850 +Wire Wire Line + 6700 3850 6700 3800 +Wire Wire Line + 8150 4000 8200 4000 +Wire Wire Line + 8200 4000 8200 3800 +Wire Wire Line + 8450 3850 8500 3850 +Wire Wire Line + 8500 3850 8500 3800 +Wire Wire Line + 8750 4000 8800 4000 +Wire Wire Line + 8800 4000 8800 3800 +Wire Wire Line + 3300 4000 3350 4000 +Wire Wire Line + 3350 4000 3350 3800 +Wire Wire Line + 3600 3850 3650 3850 +Wire Wire Line + 3650 3850 3650 3800 +Wire Wire Line + 3900 4000 3950 4000 +Wire Wire Line + 3950 4000 3950 3800 +Wire Wire Line + 4200 3850 4250 3850 +Wire Wire Line + 4250 3850 4250 3800 +Wire Wire Line + 4500 4000 4550 4000 +Wire Wire Line + 4550 4000 4550 3800 +Wire Wire Line + 3350 3400 4600 3400 +Connection ~ 4550 3400 +Connection ~ 4250 3400 +Connection ~ 3950 3400 +Connection ~ 3650 3400 +Wire Wire Line + 3300 700 4850 700 +Connection ~ 3350 700 +Connection ~ 3650 700 +Connection ~ 3950 700 +Connection ~ 4250 700 +Connection ~ 4550 700 +Wire Wire Line + 3300 1150 3350 1150 +Wire Wire Line + 3350 1150 3350 1100 +Wire Wire Line + 3600 1300 3650 1300 +Wire Wire Line + 3650 1300 3650 1100 +Wire Wire Line + 3900 1150 3950 1150 +Wire Wire Line + 3950 1150 3950 1100 +Wire Wire Line + 4200 1300 4250 1300 +Wire Wire Line + 4250 1300 4250 1100 +Wire Wire Line + 4500 1150 4550 1150 +Wire Wire Line + 4550 1150 4550 1100 +Wire Wire Line + 4800 1300 4850 1300 +Wire Wire Line + 4850 1300 4850 1100 +Wire Wire Line + 5150 2650 5200 2650 +Wire Wire Line + 5150 3050 5200 3050 +Wire Wire Line + 5450 1150 5500 1150 +Wire Wire Line + 5500 1100 5500 1350 +Wire Wire Line + 5750 1300 5800 1300 +Wire Wire Line + 5800 1100 5800 1350 +Wire Wire Line + 6050 1150 6100 1150 +Wire Wire Line + 6100 1100 6100 1350 +Wire Wire Line + 6350 1300 6400 1300 +Wire Wire Line + 6400 1100 6400 1350 +Wire Wire Line + 6650 1150 6700 1150 +Wire Wire Line + 6700 1100 6700 1350 +Wire Wire Line + 5450 2450 5500 2450 +Wire Wire Line + 5500 2400 5500 2650 +Wire Wire Line + 5750 2600 5800 2600 +Wire Wire Line + 5800 2400 5800 2650 +Wire Wire Line + 6050 2450 6100 2450 +Wire Wire Line + 6100 2400 6100 2650 +Wire Wire Line + 6350 2600 6400 2600 +Wire Wire Line + 6400 2400 6400 2650 +Wire Wire Line + 6650 2450 6700 2450 +Wire Wire Line + 6700 2400 6700 2650 +Wire Wire Line + 6950 2600 7000 2600 +Wire Wire Line + 7000 2400 7000 2650 +Wire Wire Line + 7250 2450 7300 2450 +Wire Wire Line + 7300 2400 7300 2650 +Wire Wire Line + 7550 2600 7600 2600 +Wire Wire Line + 7600 2400 7600 2650 +Wire Wire Line + 7850 2450 7900 2450 +Wire Wire Line + 7900 2400 7900 2650 +Wire Wire Line + 8150 2600 8200 2600 +Wire Wire Line + 8200 2400 8200 2650 +Wire Wire Line + 8450 2450 8500 2450 +Wire Wire Line + 8500 2400 8500 2650 +Wire Wire Line + 8750 2600 8800 2600 +Wire Wire Line + 8800 2400 8800 2650 +Wire Wire Line + 6950 4000 7000 4000 +Wire Wire Line + 7000 4000 7000 3800 +Wire Wire Line + 7250 3850 7300 3850 +Wire Wire Line + 7300 3850 7300 3800 +Wire Wire Line + 7550 4000 7600 4000 +Wire Wire Line + 7600 4000 7600 3800 +Wire Wire Line + 7850 3850 7900 3850 +Wire Wire Line + 7900 3850 7900 3800 +Wire Wire Line + 3750 4250 6100 4250 +Wire Wire Line + 3800 4250 3800 4300 +Wire Wire Line + 4250 4250 4250 4300 +Connection ~ 3800 4250 +Wire Wire Line + 4700 4250 4700 4300 +Connection ~ 4250 4250 +Wire Wire Line + 5150 4250 5150 4300 +Connection ~ 4700 4250 +Wire Wire Line + 5650 4250 5650 4300 +Connection ~ 5150 4250 +Wire Wire Line + 6100 4250 6100 4300 +Connection ~ 5650 4250 +Wire Wire Line + 7250 4250 10800 4250 +Wire Wire Line + 7300 4250 7300 4300 +Wire Wire Line + 7800 4250 7800 4300 +Connection ~ 7300 4250 +Wire Wire Line + 8300 4250 8300 4300 +Connection ~ 7800 4250 +Wire Wire Line + 8800 4250 8800 4300 +Connection ~ 8300 4250 +Wire Wire Line + 9300 4250 9300 4300 +Connection ~ 8800 4250 +Wire Wire Line + 9800 4250 9800 4300 +Connection ~ 9300 4250 +Wire Wire Line + 10300 4250 10300 4300 +Connection ~ 9800 4250 +Wire Wire Line + 10800 4250 10800 4300 +Connection ~ 10300 4250 +Wire Wire Line + 4900 5750 10000 5750 +Wire Wire Line + 4950 5750 4950 5800 +Wire Wire Line + 5400 5750 5400 5800 +Connection ~ 4950 5750 +Wire Wire Line + 5850 5750 5850 5800 +Connection ~ 5400 5750 +Wire Wire Line + 6300 5750 6300 5800 +Connection ~ 5850 5750 +Wire Wire Line + 6800 5750 6800 5800 +Connection ~ 6300 5750 +Wire Wire Line + 7250 5750 7250 5800 +Connection ~ 6800 5750 +Wire Wire Line + 7700 5750 7700 5800 +Connection ~ 7250 5750 +Wire Wire Line + 8150 5750 8150 5800 +Connection ~ 7700 5750 +Wire Wire Line + 8650 5750 8650 5800 +Connection ~ 8150 5750 +Wire Wire Line + 9100 5750 9100 5800 +Connection ~ 8650 5750 +Wire Wire Line + 9550 5750 9550 5800 +Connection ~ 9100 5750 +Wire Wire Line + 10000 5750 10000 5800 +Connection ~ 9550 5750 +Wire Wire Line + 3500 5550 3500 5350 +Wire Wire Line + 3950 5350 3950 5550 +Wire Wire Line + 4400 5350 4400 5550 +Wire Wire Line + 4850 5350 4850 5550 +Wire Wire Line + 5350 5350 5350 5550 +Wire Wire Line + 5800 5350 5800 5550 +Wire Wire Line + 4650 7050 4650 6850 +Wire Wire Line + 5100 7050 5100 6850 +Wire Wire Line + 5550 7050 5550 6850 +Wire Wire Line + 6000 7050 6000 6850 +Wire Wire Line + 6500 7050 6500 6850 +Wire Wire Line + 6950 7050 6950 6850 +Wire Wire Line + 7400 7050 7400 6850 +Wire Wire Line + 7850 7050 7850 6850 +Wire Wire Line + 8350 7050 8350 6850 +Wire Wire Line + 8800 7050 8800 6850 +Wire Wire Line + 9250 7050 9250 6850 +Wire Wire Line + 9700 7050 9700 6850 +Wire Wire Line + 10100 6850 10100 6800 +Wire Wire Line + 9650 6850 9650 6800 +Wire Wire Line + 9200 6850 9200 6800 +Wire Wire Line + 8750 6850 8750 6800 +Wire Wire Line + 8250 6850 8250 6800 +Wire Wire Line + 7800 6850 7800 6800 +Wire Wire Line + 7350 6850 7350 6800 +Wire Wire Line + 6900 6850 6900 6800 +Wire Wire Line + 6400 6850 6400 6800 +Wire Wire Line + 5950 6850 5950 6800 +Wire Wire Line + 5500 6850 5500 6800 +Wire Wire Line + 5050 6850 5050 6800 +Wire Wire Line + 7000 5350 7000 5550 +Wire Wire Line + 7500 5350 7500 5550 +Wire Wire Line + 8000 5350 8000 5550 +Wire Wire Line + 8500 5350 8500 5550 +Wire Wire Line + 9000 5350 9000 5550 +Wire Wire Line + 9500 5350 9500 5550 +Wire Wire Line + 10000 5350 10000 5550 +Wire Wire Line + 10500 5350 10500 5550 +Wire Wire Line + 10900 5350 10900 5300 +Wire Wire Line + 10400 5350 10400 5300 +Wire Wire Line + 9900 5350 9900 5300 +Wire Wire Line + 9400 5350 9400 5300 +Wire Wire Line + 8900 5350 8900 5300 +Wire Wire Line + 8400 5350 8400 5300 +Wire Wire Line + 7900 5350 7900 5300 +Wire Wire Line + 7400 5350 7400 5300 +Wire Wire Line + 4600 1600 4700 1600 +Wire Wire Line + 4600 1700 4700 1700 +Wire Wire Line + 4600 1800 4700 1800 +Wire Wire Line + 4600 1900 4700 1900 +Wire Wire Line + 4600 2000 4700 2000 +Wire Wire Line + 4600 2100 4700 2100 +Wire Wire Line + 4600 2200 4700 2200 +Wire Wire Line + 4600 2300 4700 2300 +Wire Wire Line + 3800 1600 3900 1600 +Wire Wire Line + 3800 1700 3900 1700 +Wire Wire Line + 3800 1800 3900 1800 +Wire Wire Line + 3800 1900 3900 1900 +Wire Wire Line + 3800 2000 3900 2000 +Wire Wire Line + 3800 2100 3900 2100 +Wire Wire Line + 3800 2200 3900 2200 +Wire Wire Line + 3800 2300 3900 2300 +Wire Wire Line + 2250 1400 2300 1400 +Wire Wire Line + 2250 2100 2300 2100 +Wire Wire Line + 2850 2300 2900 2300 +Wire Wire Line + 850 2200 800 2200 +Wire Wire Line + 850 2100 800 2100 +Wire Wire Line + 850 2300 800 2300 +Wire Wire Line + 2850 2700 2900 2700 +Wire Wire Line + 850 2800 800 2800 +Wire Wire Line + 2850 2900 2900 2900 +Wire Wire Line + 850 1700 800 1700 +Wire Wire Line + 2850 1700 2900 1700 +Wire Wire Line + 800 1500 850 1500 +Wire Wire Line + 800 2600 850 2600 +Wire Wire Line + 800 2700 850 2700 +Wire Wire Line + 2900 2400 2850 2400 +Wire Wire Line + 1350 1100 1350 1200 +Wire Wire Line + 4750 2550 4600 2550 +Wire Wire Line + 4600 2550 4600 2400 +Wire Wire Line + 3900 5300 3900 5350 +Wire Wire Line + 4350 5300 4350 5350 +Wire Wire Line + 4800 5300 4800 5350 +Wire Wire Line + 5250 5300 5250 5350 +Wire Wire Line + 5750 5300 5750 5350 +Wire Wire Line + 6200 5300 6200 5350 +Wire Wire Line + 2250 1200 2400 1200 +Wire Wire Line + 2400 1200 2400 1100 +Wire Wire Line + 800 1900 1450 1900 +Wire Wire Line + 800 1800 1450 1800 +Wire Wire Line + 1350 1500 1450 1500 +Wire Wire Line + 1350 1700 1450 1700 +Wire Wire Line + 1350 2100 1450 2100 +Wire Wire Line + 1350 2200 1450 2200 +Wire Wire Line + 1350 2600 1450 2600 +Wire Wire Line + 1350 2700 1450 2700 +Wire Wire Line + 1350 2800 1450 2800 +Wire Wire Line + 800 3000 1450 3000 +Wire Wire Line + 2250 1700 2350 1700 +Wire Wire Line + 2250 2200 2900 2200 +Wire Wire Line + 2250 1900 2900 1900 +Wire Wire Line + 2250 2000 2900 2000 +Wire Wire Line + 2250 2300 2350 2300 +Wire Wire Line + 2250 2700 2350 2700 +Wire Wire Line + 2250 2900 2350 2900 +Wire Wire Line + 2250 3000 2900 3000 +Wire Wire Line + 2250 3100 2900 3100 +Wire Wire Line + 1350 2300 1450 2300 +Wire Wire Line + 2250 2400 2350 2400 +Connection ~ 1350 1200 +Connection ~ 2250 1200 +Wire Wire Line + 2250 1200 2250 1300 +Wire Wire Line + 3800 2400 3900 2400 +Wire Wire Line + 3400 2500 3400 2400 +Connection ~ 5500 1150 +Connection ~ 5800 1300 +Connection ~ 6100 1150 +Connection ~ 6400 1300 +Connection ~ 6700 1150 +Connection ~ 7000 1300 +Connection ~ 7300 1150 +Connection ~ 7600 1300 +Connection ~ 5500 2450 +Connection ~ 6100 2450 +Connection ~ 6700 2450 +Connection ~ 7300 2450 +Connection ~ 5800 2600 +Connection ~ 6400 2600 +Connection ~ 7000 2600 +Connection ~ 7600 2600 +Connection ~ 7900 2450 +Connection ~ 8200 2600 +Connection ~ 8500 2450 +Connection ~ 8800 2600 +Connection ~ 7900 1150 +Connection ~ 8200 1300 +Connection ~ 8500 1150 +Connection ~ 8800 1300 +Wire Wire Line + 800 1400 1450 1400 +Wire Wire Line + 11000 2750 11050 2750 +Wire Wire Line + 11000 3100 11050 3100 +Wire Wire Line + 10600 2600 10600 3100 +Connection ~ 10600 2750 +Wire Notes Line + 11200 2100 10500 2100 +Wire Notes Line + 10500 2100 10500 3300 +Wire Notes Line + 10500 3300 11200 3300 +Wire Notes Line + 11200 3300 11200 2100 +Wire Wire Line + 1450 1300 800 1300 +Wire Wire Line + 1350 1200 1450 1200 +NoConn ~ 1450 2000 +Wire Wire Line + 3400 2400 3500 2400 +Wire Wire Line + 2250 1500 2350 1500 +Wire Wire Line + 2250 1600 2350 1600 +Wire Wire Line + 2850 1500 2900 1500 +Wire Wire Line + 2850 1600 2900 1600 +$Comp +L CONN_4 P3 +U 1 1 5C1DA337 +P 1800 4450 +F 0 "P3" V 1750 4450 50 0000 C CNN +F 1 "CONN_4" V 1850 4450 50 0000 C CNN +F 2 "" H 1800 4450 60 0000 C CNN +F 3 "" H 1800 4450 60 0000 C CNN + 1 1800 4450 + 1 0 0 -1 +$EndComp +$Comp +L +3.3V #PWR07 +U 1 1 5C1DA3CA +P 1350 4300 +F 0 "#PWR07" H 1350 4260 30 0001 C CNN +F 1 "+3.3V" H 1350 4410 30 0000 C CNN +F 2 "" H 1350 4300 60 0000 C CNN +F 3 "" H 1350 4300 60 0000 C CNN + 1 1350 4300 + 0 -1 -1 0 +$EndComp +Text GLabel 1350 4400 0 60 Input ~ 0 +sda +Text GLabel 1350 4500 0 60 Input ~ 0 +scl +Wire Wire Line + 1350 4300 1450 4300 +Wire Wire Line + 1350 4400 1450 4400 +Wire Wire Line + 1350 4500 1450 4500 +NoConn ~ 1450 3100 +NoConn ~ 2250 2600 +Text GLabel 800 1600 0 60 Input ~ 0 +i2cgnd +Text GLabel 1350 4600 0 60 Input ~ 0 +i2cgnd +Wire Wire Line + 1450 4600 1350 4600 +Wire Wire Line + 800 1600 1450 1600 +NoConn ~ 1450 2900 +$EndSCHEMATC ADDED hardware/pidp8i/PDP8.ses Index: hardware/pidp8i/PDP8.ses ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8.ses @@ -0,0 +1,4358 @@ + +(session PDP8_2019.ses + (base_design PDP8_2019.dsn) + (placement + (resolution um 10) + (component R3 + (place R9 1741000 -1217250 back 0) + (place R1 940500 -1219750 back 0) + (place R2 1041000 -1219750 back 0) + (place R3 1141000 -1219750 back 180) + (place R4 1241000 -1219250 back 180) + (place R5 1340500 -1219250 back 180) + (place R6 1441500 -1218750 back 180) + (place R7 1541000 -1218750 back 0) + (place R8 1640500 -1218250 back 0) + (place R10 1840000 -1216750 back 0) + (place R11 1940500 -1216250 back 0) + (place R12 2040500 -1216250 back 0) + (place R_ROW1 1892500 -1484500 back 0) + (place R_ROW2 790000 -1485000 front 180) + (place R_ROW3 2290000 -1484500 back 180) + ) + (component "DIP-18__300" + (place P2 2668000 -1398000 front 0) + ) + (component 1pin + (place M1 135000 -700000 front 0) + (place M2 135000 -1590000 front 0) + (place M3 2860000 -700000 front 0) + (place M4 2860000 -1590000 front 0) + (place M5 2071000 -826000 front 0) + ) + (component D2 + (place D23 2490800 -1721500 front 0) + (place D24 2590800 -1721500 front 0) + (place D22 2390800 -1721500 front 0) + (place D25 2690800 -1721500 front 0) + (place D26 2790800 -1721500 front 0) + (place D12 1390800 -1721500 front 0) + (place D2 390800 -1721500 front 0) + (place D3 490800 -1721500 front 0) + (place D4 590800 -1721500 front 0) + (place D5 690800 -1721500 front 0) + (place D6 790800 -1721500 front 0) + (place D7 890800 -1721500 front 0) + (place D8 990800 -1721500 front 0) + (place D9 1090800 -1721500 front 0) + (place D10 1190800 -1721500 front 0) + (place D11 1290800 -1721500 front 0) + (place D1 290800 -1721500 front 0) + (place D13 1490800 -1721500 front 0) + (place D14 1590800 -1721500 front 0) + (place D15 1690800 -1721500 front 0) + (place D16 1790800 -1721500 front 0) + (place D17 1890800 -1721500 front 0) + (place D18 1990800 -1721500 front 0) + (place D19 2090800 -1721500 front 0) + (place D20 2190800 -1721500 front 0) + (place D21 2290800 -1721500 front 0) + (place DZ1 2442500 -1439000 back 180) + ) + (component "LED-3-PDP" + (place DMB9 1690000 -998000 front 0) + (place DMB10 1790000 -998000 front 0) + (place DMB11 1890000 -998000 front 0) + (place DMB12 1990000 -998000 front 0) + (place DAC1 890000 -1144000 front 0) + (place DAC2 990000 -1144000 front 0) + (place DAC3 1090000 -1144000 front 0) + (place DAC4 1190000 -1144000 front 0) + (place DAC5 1290000 -1144000 front 0) + (place DAC6 1390000 -1144000 front 0) + (place DAC7 1490000 -1144000 front 0) + (place DAC8 1590000 -1144000 front 0) + (place DAC9 1690000 -1144000 front 0) + (place DAC10 1790000 -1144000 front 0) + (place DPC1 890000 -706000 front 0) + (place DAC12 1990000 -1144000 front 0) + (place DMQ1 890000 -1290000 front 0) + (place DMQ2 990000 -1290000 front 0) + (place DMQ3 1090000 -1290000 front 0) + (place DMQ4 1190000 -1290000 front 0) + (place DMQ5 1290000 -1290000 front 0) + (place DMQ6 1390000 -1290000 front 0) + (place DMQ7 1490000 -1290000 front 0) + (place DMQ8 1590000 -1290000 front 0) + (place DMQ9 1690000 -1290000 front 0) + (place DMQ10 1790000 -1290000 front 0) + (place DMQ11 1890000 -1290000 front 0) + (place DMQ12 1990000 -1290000 front 0) + (place DLINK1 790000 -1144000 front 0) + (place DSC1 290000 -1290000 front 0) + (place DAC11 1890000 -1144000 front 0) + (place DPC2 990000 -706000 front 0) + (place DPC3 1090000 -706000 front 0) + (place DPC4 1190000 -706000 front 0) + (place DPC5 1290000 -706000 front 0) + (place DPC6 1390000 -706000 front 0) + (place DPC7 1490000 -706000 front 0) + (place DPC8 1590000 -706000 front 0) + (place DPC9 1690000 -706000 front 0) + (place DPC10 1790000 -706000 front 0) + (place DPC11 1890000 -706000 front 0) + (place DPC12 1990000 -706000 front 0) + (place DMA1 890000 -852000 front 0) + (place DMA2 990000 -852000 front 0) + (place DMA3 1090000 -852000 front 0) + (place DMB8 1590000 -998000 front 0) + (place DMA5 1290000 -852000 front 0) + (place DMA6 1390000 -852000 front 0) + (place DMA7 1490000 -852000 front 0) + (place DMA8 1590000 -852000 front 0) + (place DMA9 1690000 -852000 front 0) + (place DMA10 1790000 -852000 front 0) + (place DMA11 1890000 -852000 front 0) + (place DMA12 1990000 -852000 front 0) + (place DMB1 890000 -998000 front 0) + (place DMB2 990000 -998000 front 0) + (place DMB3 1090000 -998000 front 0) + (place DMB4 1190000 -998000 front 0) + (place DMB5 1290000 -998000 front 0) + (place DMB6 1390000 -998000 front 0) + (place DMB7 1490000 -998000 front 0) + (place DMA4 1190000 -852000 front 0) + (place DRUN1 2790000 -852000 front 0) + (place DPAUSE1 2790000 -779000 front 0) + (place DION1 2790000 -706000 front 0) + (place DBREAK1 2590000 -1071000 front 0) + (place DCURAD1 2590000 -998000 front 0) + (place DWRDCT1 2590000 -925000 front 0) + (place DDEFER1 2590000 -852000 front 0) + (place DEXEC1 2590000 -779000 front 0) + (place DFETCH1 2590000 -706000 front 0) + (place DOPR1 2390000 -1214000 front 0) + (place DIOT1 2390000 -1142000 front 0) + (place DJMP1 2390000 -1070000 front 0) + (place DJMS1 2390000 -998000 front 0) + (place DDCA1 2390000 -925000 front 0) + (place DSC2 390000 -1290000 front 0) + (place DSC4 590000 -1290000 front 0) + (place DSC5 690000 -1290000 front 0) + (place DDF1 290000 -706000 front 0) + (place DDF2 390000 -706000 front 0) + (place DDF3 490000 -706000 front 0) + (place DSC3 490000 -1290000 front 0) + (place DTAD1 2390000 -779000 front 0) + (place DAND1 2390000 -706000 front 0) + (place DISZ1 2390000 -852000 front 0) + (place DIF2 690000 -706000 front 0) + (place DIF3 790000 -706000 front 0) + (place DIF1 590000 -706000 front 0) + ) + (component "LED-3-StrEight" + (place DPAUSE2 2590000 -1144000 front 0) + (place DRUN2 2590000 -1217000 front 0) + ) + (component RASPI_BPLUS_MIRRORED + (place P1 2163000 -1400000 back 0) + ) + (component PIN_ARRAY_4x1 + (place P3 2366260 -1352300 back 0) + ) + (component SW_PIDP2019 + (place SW6 790000 -1599000 front 0) + (place SW5 690000 -1599000 front 0) + (place SW4 590000 -1599000 front 0) + (place SW3 490000 -1599000 front 0) + (place SW2 390000 -1599000 front 0) + (place SW1 290000 -1599000 front 0) + (place SW18 1990000 -1599000 front 0) + (place SW17 1890000 -1599000 front 0) + (place SW15 1690000 -1599000 front 0) + (place SW14 1590000 -1599000 front 0) + (place SW13 1490000 -1599000 front 0) + (place SW12 1390000 -1599000 front 0) + (place SW19 2090000 -1599000 front 0) + (place SW20 2190000 -1599000 front 0) + (place SW16 1790000 -1599000 front 0) + (place SW22 2390000 -1599000 front 0) + (place SW23 2490000 -1599000 front 0) + (place SW24 2590000 -1599000 front 0) + (place SW25 2690000 -1599000 front 0) + (place SW26 2790000 -1599000 front 0) + (place SW7 890000 -1599000 front 0) + (place SW8 990000 -1599000 front 0) + (place SW9 1090000 -1599000 front 0) + (place SW10 1190000 -1599000 front 0) + (place SW11 1290000 -1599000 front 0) + (place SW21 2290000 -1599000 front 0) + ) + ) + (was_is + ) + (routes + (resolution um 10) + (parser + (host_cad "KiCad's Pcbnew") + (host_version "(2013-07-07 BZR 4022)-stable") + ) + (library_out + (padstack "Via[0-1]_889:635_um" + (shape + (circle F.Cu 8890 0 0) + ) + (shape + (circle B.Cu 8890 0 0) + ) + (attach off) + ) + (padstack "Via[0-1]_889:0_um" + (shape + (circle F.Cu 8890 0 0) + ) + (shape + (circle B.Cu 8890 0 0) + ) + (attach off) + ) + ) + (network_out + (net +3.3V + (wire + (path B.Cu 5080 + 2404360 -1352300 + 2404360 -1366273 + ) + ) + (wire + (path B.Cu 5080 + 2404360 -1366273 + 2404300 -1366333 + 2404300 -1387300 + ) + ) + ) + (net +5V + (wire + (path F.Cu 5080 + 2404300 -1412700 + 2404300 -1438900 + 2404400 -1439000 + ) + ) + (wire + (path F.Cu 5080 + 2378900 -1412700 + 2404300 -1412700 + ) + ) + ) + (net GND + (wire + (path F.Cu 5080 + 2353500 -1412700 + 2339453 -1426747 + 2260723 -1426747 + ) + ) + (wire + (path B.Cu 5080 + 2175700 -1412700 + 2189747 -1426747 + 2260723 -1426747 + ) + ) + (via "Via[0-1]_889:635_um" 2260723 -1426747 + ) + (wire + (path F.Cu 5080 + 2769600 -1359900 + 2741057 -1388443 + 2503474 -1388443 + ) + ) + (wire + (path B.Cu 5080 + 2353500 -1412700 + 2393165 -1452365 + 2439552 -1452365 + 2503474 -1388443 + ) + ) + (via "Via[0-1]_889:635_um" 2503474 -1388443 + ) + ) + (net "N-00000101" + (wire + (path B.Cu 5080 + 1390000 -1552000 + 1426360 -1588360 + 1426360 -1721500 + ) + ) + ) + (net "N-00000104" + (wire + (path B.Cu 5080 + 1990000 -1552000 + 2026360 -1588360 + 2026360 -1721500 + ) + ) + ) + (net "N-00000105" + (wire + (path B.Cu 5080 + 1890000 -1552000 + 1926360 -1588360 + 1926360 -1721500 + ) + ) + ) + (net "N-00000106" + (wire + (path B.Cu 5080 + 1790000 -1552000 + 1826360 -1588360 + 1826360 -1721500 + ) + ) + ) + (net "N-00000107" + (wire + (path B.Cu 5080 + 1690000 -1552000 + 1726360 -1588360 + 1726360 -1721500 + ) + ) + ) + (net "N-00000108" + (wire + (path B.Cu 5080 + 1590000 -1552000 + 1626360 -1588360 + 1626360 -1721500 + ) + ) + ) + (net "N-00000109" + (wire + (path B.Cu 5080 + 1490000 -1552000 + 1526360 -1588360 + 1526360 -1721500 + ) + ) + ) + (net "N-00000110" + (wire + (path B.Cu 5080 + 1290000 -1552000 + 1326360 -1588360 + 1326360 -1721500 + ) + ) + ) + (net "N-00000111" + (wire + (path B.Cu 5080 + 1190000 -1552000 + 1226360 -1588360 + 1226360 -1721500 + ) + ) + ) + (net "N-00000112" + (wire + (path B.Cu 5080 + 1090000 -1552000 + 1126360 -1588360 + 1126360 -1721500 + ) + ) + ) + (net "N-00000113" + (wire + (path B.Cu 5080 + 990000 -1552000 + 1026360 -1588360 + 1026360 -1721500 + ) + ) + ) + (net "N-00000114" + (wire + (path B.Cu 5080 + 890000 -1552000 + 892000 -1552000 + 926360 -1586360 + 926360 -1721500 + ) + (type protect) + ) + ) + (net "N-00000119" + (wire + (path B.Cu 5080 + 2790000 -1552000 + 2826360 -1588360 + 2826360 -1721500 + ) + ) + ) + (net "N-00000120" + (wire + (path B.Cu 5080 + 2690000 -1552000 + 2726360 -1588360 + 2726360 -1721500 + ) + ) + ) + (net "N-0000060" + (wire + (path F.Cu 5080 + 2478060 -1439000 + 2490128 -1439000 + ) + ) + (wire + (path F.Cu 5080 + 2490128 -1439000 + 2512842 -1416286 + 2749786 -1416286 + 2769600 -1436100 + ) + ) + ) + (net "N-0000064" + (wire + (path B.Cu 5080 + 290000 -1552000 + 326360 -1588360 + 326360 -1721500 + ) + ) + ) + (net "N-0000065" + (wire + (path B.Cu 5080 + 790000 -1552000 + 826360 -1588360 + 826360 -1721500 + ) + ) + ) + (net "N-0000066" + (wire + (path B.Cu 5080 + 690000 -1552000 + 726360 -1588360 + 726360 -1721500 + ) + ) + ) + (net "N-0000067" + (wire + (path B.Cu 5080 + 590000 -1552000 + 626360 -1588360 + 626360 -1721500 + ) + ) + ) + (net "N-0000068" + (wire + (path B.Cu 5080 + 490000 -1552000 + 526360 -1588360 + 526360 -1721500 + ) + ) + ) + (net "N-0000069" + (wire + (path B.Cu 5080 + 390000 -1552000 + 426360 -1588360 + 426360 -1721500 + ) + ) + ) + (net "N-0000070" + (wire + (path F.Cu 5080 + 1196837 -1333440 + 1995040 -1333440 + 2018240 -1356640 + 2297440 -1356640 + 2328100 -1387300 + ) + ) + (wire + (path B.Cu 5080 + 1196837 -1333440 + 1163827 -1300430 + 1163827 -1235023 + 1179100 -1219750 + ) + ) + (via "Via[0-1]_889:635_um" 1196837 -1333440 + ) + ) + (net "N-0000071" + (wire + (path F.Cu 5080 + 828100 -1485000 + 957330 -1355770 + 2006590 -1355770 + 2015083 -1364263 + 2254263 -1364263 + 2277300 -1387300 + ) + ) + ) + (net "N-0000072" + (wire + (path F.Cu 5080 + 1779100 -1217250 + 1790742 -1228892 + 1814887 -1228892 + 1847657 -1196122 + 2075958 -1196122 + 2156143 -1276307 + 2156143 -1302340 + ) + ) + (wire + (path B.Cu 5080 + 2175700 -1387300 + 2156143 -1367743 + 2156143 -1302340 + ) + ) + (via "Via[0-1]_889:635_um" 2156143 -1302340 + ) + ) + (net "N-0000073" + (wire + (path F.Cu 5080 + 2064671 -1302172 + 2064671 -1260648 + 2007769 -1203746 + 1874004 -1203746 + 1841025 -1236725 + 1697075 -1236725 + 1678600 -1218250 + ) + ) + (via "Via[0-1]_889:635_um" 2064671 -1302172 + ) + (wire + (path B.Cu 5080 + 2150300 -1387300 + 2149799 -1387300 + 2064671 -1302172 + ) + ) + ) + (net "N-0000074" + (wire + (path F.Cu 5080 + 1309090 -1365692 + 1311281 -1363501 + 2003541 -1363501 + 2014319 -1374279 + 2035679 -1374279 + 2048700 -1387300 + ) + ) + (wire + (path B.Cu 5080 + 1279100 -1219250 + 1263827 -1234523 + 1263827 -1320429 + 1309090 -1365692 + ) + ) + (via "Via[0-1]_889:635_um" 1309090 -1365692 + ) + ) + (net "N-0000075" + (wire + (path F.Cu 5080 + 1392972 -1373125 + 2002385 -1373125 + 2016560 -1387300 + 2023300 -1387300 + ) + ) + (wire + (path B.Cu 5080 + 1378600 -1219250 + 1363522 -1234328 + 1363522 -1343675 + 1392972 -1373125 + ) + ) + (via "Via[0-1]_889:635_um" 1392972 -1373125 + ) + ) + (net "N-0000076" + (wire + (path F.Cu 5080 + 2050389 -1329169 + 2051149 -1329169 + 2078600 -1301718 + 2078600 -1216250 + ) + ) + (wire + (path B.Cu 5080 + 1997900 -1387300 + 2050389 -1334811 + 2050389 -1329169 + ) + ) + (via "Via[0-1]_889:635_um" 2050389 -1329169 + ) + ) + (net "N-0000077" + (wire + (path B.Cu 5080 + 2277300 -1412700 + 2277300 -1459100 + 2251900 -1484500 + ) + ) + ) + (net "N-0000078" + (wire + (path F.Cu 5080 + 1616319 -1392741 + 1664263 -1440685 + 2096915 -1440685 + 2124900 -1412700 + ) + ) + (wire + (path B.Cu 5080 + 1616319 -1392741 + 1563689 -1340111 + 1563689 -1234161 + 1579100 -1218750 + ) + ) + (via "Via[0-1]_889:635_um" 1616319 -1392741 + ) + ) + (net "N-0000079" + (wire + (path F.Cu 5080 + 1891604 -1240800 + 1954050 -1240800 + 1978600 -1216250 + ) + ) + (via "Via[0-1]_889:635_um" 1891604 -1240800 + ) + (wire + (path B.Cu 5080 + 1856706 -1383838 + 1856706 -1275698 + 1891604 -1240800 + ) + ) + (via "Via[0-1]_889:635_um" 1856706 -1383838 + ) + (wire + (path F.Cu 5080 + 2023300 -1412700 + 2010579 -1425421 + 1870719 -1425421 + 1853666 -1408368 + 1853666 -1386878 + 1856706 -1383838 + ) + ) + ) + (net "N-0000080" + (wire + (path F.Cu 5080 + 2011696 -1469135 + 1945965 -1469135 + 1930600 -1484500 + ) + ) + (via "Via[0-1]_889:635_um" 2011696 -1469135 + ) + (wire + (path B.Cu 5080 + 1972500 -1412700 + 2011696 -1451896 + 2011696 -1469135 + ) + ) + ) + (net "N-0000081" + (wire + (path B.Cu 5080 + 2490000 -1552000 + 2526360 -1588360 + 2526360 -1721500 + ) + ) + ) + (net "N-0000082" + (wire + (path B.Cu 5080 + 2390000 -1552000 + 2426360 -1588360 + 2426360 -1721500 + ) + ) + ) + (net "N-0000083" + (wire + (path B.Cu 5080 + 2290000 -1552000 + 2326360 -1588360 + 2326360 -1721500 + ) + ) + ) + (net "N-0000084" + (wire + (path B.Cu 5080 + 2190000 -1552000 + 2226360 -1588360 + 2226360 -1721500 + ) + ) + ) + (net "N-0000085" + (wire + (path B.Cu 5080 + 2090000 -1552000 + 2126360 -1588360 + 2126360 -1721500 + ) + ) + ) + (net "N-0000087" + (wire + (path B.Cu 5080 + 2328100 -1412700 + 2328100 -1438569 + 2303619 -1463050 + ) + ) + (wire + (path F.Cu 5080 + 985680 -1377346 + 1089510 -1377346 + 1164148 -1451984 + 2053668 -1451984 + 2064734 -1463050 + 2303619 -1463050 + ) + ) + (wire + (path B.Cu 5080 + 985680 -1377346 + 963522 -1355188 + 963522 -1234828 + 978600 -1219750 + ) + ) + (via "Via[0-1]_889:635_um" 985680 -1377346 + ) + (via "Via[0-1]_889:635_um" 2303619 -1463050 + ) + ) + (net "N-0000088" + (wire + (path F.Cu 5080 + 1092972 -1394931 + 1157648 -1459607 + 2015643 -1459607 + 2028467 -1472431 + 2270938 -1472431 + 2274500 -1475993 + ) + ) + (wire + (path B.Cu 5080 + 2302700 -1412700 + 2302700 -1447793 + 2274500 -1475993 + ) + ) + (wire + (path B.Cu 5080 + 1079100 -1219750 + 1063827 -1235023 + 1063827 -1365786 + 1092972 -1394931 + ) + ) + (via "Via[0-1]_889:635_um" 1092972 -1394931 + ) + (via "Via[0-1]_889:635_um" 2274500 -1475993 + ) + ) + (net "N-0000095" + (wire + (path F.Cu 5080 + 1932987 -1230770 + 1892120 -1230770 + 1878100 -1216750 + ) + ) + (via "Via[0-1]_889:635_um" 1932987 -1230770 + ) + (wire + (path B.Cu 5080 + 2124900 -1387300 + 2056869 -1319269 + 1964152 -1319269 + 1932987 -1288104 + 1932987 -1230770 + ) + ) + ) + (net "N-0000096" + (wire + (path F.Cu 5080 + 1433920 -1383213 + 1620266 -1383213 + 1670115 -1433062 + 2079138 -1433062 + 2099500 -1412700 + ) + ) + (wire + (path B.Cu 5080 + 1479600 -1218750 + 1433920 -1264430 + 1433920 -1383213 + ) + ) + (via "Via[0-1]_889:635_um" 1433920 -1383213 + ) + ) + (net "N-0000097" + (wire + (path B.Cu 5080 + 2626360 -1721500 + 2626360 -1709432 + ) + ) + (wire + (path B.Cu 5080 + 2590000 -1552000 + 2626360 -1588360 + 2626360 -1709432 + ) + ) + ) + (net col1 + (wire + (path B.Cu 5080 + 1941059 -1079259 + 1941059 -1209224 + 1923459 -1226824 + 1923459 -1234716 + 1924423 -1235680 + 1924423 -1305703 + 1908989 -1321137 + 1908989 -1418377 + 1984658 -1494046 + 2004889 -1494046 + 2052700 -1541857 + 2052700 -1721500 + ) + ) + (wire + (path F.Cu 5080 + 1941059 -1079259 + 2269957 -1079259 + 2362584 -986632 + ) + ) + (wire + (path F.Cu 5080 + 902700 -1144000 + 967441 -1079259 + 1941059 -1079259 + ) + ) + (wire + (path F.Cu 5080 + 2602700 -998000 + 2589093 -1011607 + 2567551 -1011607 + 2540479 -984535 + 2364681 -984535 + 2362584 -986632 + ) + ) + (wire + (path B.Cu 5080 + 2402700 -706000 + 2388694 -691994 + 2371803 -691994 + 2362584 -701213 + 2362584 -986632 + ) + ) + (via "Via[0-1]_889:635_um" 2362584 -986632 + ) + (via "Via[0-1]_889:635_um" 1941059 -1079259 + ) + (wire + (path F.Cu 5080 + 252700 -1721500 + 264769 -1709431 + 840631 -1709431 + 852700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 252700 -1721500 + 252700 -1149300 + 302700 -1099300 + 302700 -706000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 902700 -1202426 + 902400 -1202726 + 902400 -1219750 + ) + ) + (wire + (path B.Cu 5080 + 902700 -1202426 + 902700 -1251200 + 902400 -1251500 + 902400 -1289700 + 902700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 902700 -1144000 + 902700 -1202426 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 902700 -706000 + 902700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 902700 -852000 + 902700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 902700 -998000 + 902700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 902700 -1290000 + 902700 -1437300 + 852700 -1487300 + 852700 -1721500 + ) + (type protect) + ) + ) + (net col10 + (wire + (path F.Cu 5080 + 1801900 -1216750 + 1783599 -1198449 + 794251 -1198449 + 702700 -1290000 + ) + ) + (wire + (path F.Cu 5080 + 1802700 -706000 + 1816306 -692394 + 2335137 -692394 + 2397177 -754434 + 2578134 -754434 + 2602700 -779000 + ) + ) + (wire + (path B.Cu 5080 + 1802300 -1289600 + 1752700 -1339200 + 1752700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1802300 -1289600 + 1802700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1801900 -1216750 + 1801900 -1289200 + 1802300 -1289600 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1802700 -998000 + 1802700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1802700 -852000 + 1802700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1802700 -1144000 + 1801900 -1144800 + 1801900 -1216750 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1802700 -706000 + 1802700 -852000 + ) + (type protect) + ) + ) + (net col11 + (wire + (path B.Cu 5080 + 1852700 -1721500 + 1852700 -1507767 + 1893516 -1466951 + 1893516 -1299184 + 1902700 -1290000 + ) + ) + (wire + (path B.Cu 5080 + 1902700 -1290000 + 1902700 -1217000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2602700 -852000 + 2589142 -838442 + 2103319 -838442 + 2090178 -851583 + 2023871 -851583 + 2010334 -838046 + 1916654 -838046 + 1902700 -852000 + ) + ) + (wire + (path B.Cu 5080 + 1902700 -1217000 + 1902400 -1216700 + 1902400 -1216250 + ) + ) + (wire + (path B.Cu 5080 + 1902700 -1217000 + 1902700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1902700 -998000 + 1902700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1902700 -1144000 + 1902700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1902700 -852000 + 1902700 -706000 + ) + (type protect) + ) + ) + (net col12 + (wire + (path B.Cu 5080 + 2002700 -779000 + 1919691 -862009 + 1919691 -1219812 + 1915836 -1223667 + 1915836 -1237873 + 1916800 -1238837 + 1916800 -1298733 + 1901141 -1314392 + 1901141 -1480281 + 1952700 -1531840 + 1952700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 2002700 -779000 + 2002700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2002700 -706000 + 2002700 -779000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2602700 -925000 + 2573657 -954043 + 2046657 -954043 + 2002700 -998000 + ) + ) + (wire + (path B.Cu 5080 + 2002700 -998000 + 2002700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2002700 -852000 + 2002700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2002400 -1216250 + 2002400 -1289700 + 2002700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2002700 -1144000 + 2002400 -1144300 + 2002400 -1216250 + ) + (type protect) + ) + ) + (net col2 + (wire + (path F.Cu 5080 + 1002700 -852000 + 1057820 -796880 + 2384820 -796880 + 2402700 -779000 + ) + ) + (wire + (path F.Cu 5080 + 2540510 -998041 + 2540510 -1008810 + 2602700 -1071000 + ) + ) + (via "Via[0-1]_889:635_um" 2540510 -998041 + ) + (wire + (path B.Cu 5080 + 2402700 -779000 + 2540510 -916810 + 2540510 -998041 + ) + ) + (wire + (path F.Cu 5080 + 1002700 -706000 + 988461 -691761 + 416939 -691761 + 402700 -706000 + ) + ) + (wire + (path F.Cu 5080 + 2152700 -1721500 + 2140632 -1709432 + 964768 -1709432 + 952700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1002900 -1219750 + 1002900 -1289800 + 1002700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1002700 -1144000 + 1002900 -1144200 + 1002900 -1219750 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1002700 -852000 + 1002700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1002700 -706000 + 1002700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1002700 -998000 + 1002700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1002700 -1290000 + 1002700 -1429350 + 952700 -1479350 + 952700 -1721500 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 352700 -1721500 + 352700 -1154300 + 402700 -1104300 + 402700 -706000 + ) + (type protect) + ) + ) + (net col3 + (wire + (path F.Cu 5080 + 1102700 -998000 + 1166383 -934317 + 2320383 -934317 + 2402700 -852000 + ) + ) + (wire + (path F.Cu 5080 + 2802700 -706000 + 2643187 -865513 + 2416213 -865513 + 2402700 -852000 + ) + ) + (wire + (path F.Cu 5080 + 1052700 -1721500 + 1064769 -1733569 + 2240631 -1733569 + 2252700 -1721500 + ) + ) + (wire + (path F.Cu 5080 + 1052700 -1721500 + 1040631 -1733569 + 464769 -1733569 + 452700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1102900 -1219750 + 1102900 -1289800 + 1102700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1102700 -1144000 + 1102900 -1144200 + 1102900 -1219750 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1102700 -852000 + 1102700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1102700 -706000 + 1102700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1102700 -998000 + 1102700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1052700 -1721500 + 1052700 -1480950 + 1102700 -1430950 + 1102700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 502700 -706000 + 502700 -1110700 + 452700 -1160700 + 452700 -1721500 + ) + (type protect) + ) + ) + (net col4 + (wire + (path F.Cu 5080 + 1202700 -998000 + 1255807 -944893 + 2382807 -944893 + 2402700 -925000 + ) + ) + (wire + (path B.Cu 5080 + 1152700 -1721500 + 1140631 -1733569 + 564769 -1733569 + 552700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1202700 -1290000 + 1206365 -1293665 + 1206365 -1337387 + 1152700 -1391052 + 1152700 -1721500 + ) + ) + (wire + (path F.Cu 5080 + 2602700 -1144000 + 2824025 -1365325 + 2824025 -1591663 + 2797834 -1617854 + 2692949 -1617854 + 2609221 -1701582 + 2372618 -1701582 + 2352700 -1721500 + ) + ) + (wire + (path F.Cu 5080 + 2602700 -1144000 + 2624168 -1122532 + 2624168 -890667 + ) + ) + (wire + (path F.Cu 5080 + 2624168 -890667 + 2691033 -890667 + 2802700 -779000 + ) + ) + (wire + (path F.Cu 5080 + 2402700 -925000 + 2437033 -890667 + 2624168 -890667 + ) + ) + (wire + (path B.Cu 5080 + 1202700 -1217000 + 1202900 -1217200 + 1202900 -1219250 + ) + ) + (wire + (path B.Cu 5080 + 1202700 -1217000 + 1202700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1202700 -1290000 + 1202700 -1217000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1203000 -998000 + 1203000 -852300 + 1202700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1202700 -1144000 + 1203000 -1143700 + 1203000 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1202700 -998000 + 1203000 -998000 + ) + ) + (wire + (path B.Cu 5080 + 552700 -1721500 + 552700 -1716700 + 551000 -1715000 + 551000 -1175000 + 602700 -1123300 + 602700 -706000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1202700 -852000 + 1202700 -706000 + ) + (type protect) + ) + ) + (net col5 + (wire + (path B.Cu 5080 + 1302700 -1290000 + 1318818 -1306118 + 1318818 -1417582 + 1252700 -1483700 + 1252700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1302400 -1219250 + 1302400 -1289700 + 1302700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2452700 -1721500 + 2452700 -1515905 + 2496361 -1472244 + 2725873 -1472244 + 2756343 -1441774 + 2756343 -1430913 + 2747981 -1422551 + 2614433 -1422551 + 2563851 -1371969 + 2561221 -1371969 + 2552083 -1362831 + 2552083 -1331974 + ) + ) + (wire + (path B.Cu 5080 + 2515996 -1039826 + 2687073 -868749 + 2785951 -868749 + 2802700 -852000 + ) + ) + (wire + (path B.Cu 5080 + 2602700 -1217000 + 2589176 -1230524 + 2571494 -1230524 + 2515996 -1175026 + 2515996 -1039826 + ) + ) + (wire + (path B.Cu 5080 + 2402700 -998000 + 2444526 -1039826 + 2515996 -1039826 + ) + ) + (wire + (path F.Cu 5080 + 2602700 -1217000 + 2602700 -1281357 + 2552083 -1331974 + ) + ) + (via "Via[0-1]_889:635_um" 2552083 -1331974 + ) + (wire + (path B.Cu 5080 + 1302700 -706000 + 1288919 -692219 + 716481 -692219 + 702700 -706000 + ) + ) + (wire + (path B.Cu 5080 + 1302700 -706000 + 1302700 -852000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1302700 -1144000 + 1357824 -1088876 + 2311824 -1088876 + 2402700 -998000 + ) + ) + (wire + (path B.Cu 5080 + 1302700 -1144000 + 1302400 -1144300 + 1302400 -1219250 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1302700 -852000 + 1302700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1302700 -998000 + 1302700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 652700 -1721500 + 652700 -1176300 + 702700 -1126300 + 702700 -706000 + ) + (type protect) + ) + ) + (net col6 + (wire + (path F.Cu 5080 + 1402700 -1290000 + 1368788 -1323912 + 782098 -1323912 + 773830 -1332180 + ) + ) + (wire + (path B.Cu 5080 + 1352700 -1721500 + 1364769 -1733569 + 2540631 -1733569 + 2552700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1402700 -1290000 + 1402700 -1431217 + 1352700 -1481217 + 1352700 -1721500 + ) + ) + (wire + (path F.Cu 5080 + 1402700 -1144000 + 1447382 -1099318 + 2373382 -1099318 + 2402700 -1070000 + ) + ) + (wire + (path B.Cu 5080 + 1403400 -1218750 + 1403400 -1289300 + 1402700 -1290000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 302700 -1290000 + 344880 -1332180 + 773830 -1332180 + ) + ) + (via "Via[0-1]_889:635_um" 773830 -1332180 + ) + (wire + (path B.Cu 5080 + 770000 -1387563 + 773830 -1383733 + 773830 -1332180 + ) + ) + (wire + (path B.Cu 5080 + 770000 -1387563 + 770000 -1200000 + 742000 -1172000 + 742000 -1111000 + 802700 -1050300 + 802700 -706000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 752700 -1721500 + 752700 -1506300 + 770000 -1489000 + 770000 -1387563 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1402700 -1144000 + 1403400 -1144700 + 1403400 -1218750 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1402700 -852000 + 1402700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1402700 -706000 + 1402700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1402700 -998000 + 1402700 -1144000 + ) + (type protect) + ) + ) + (net col7 + (wire + (path F.Cu 5080 + 1502900 -1218750 + 1489662 -1231988 + 890688 -1231988 + 888716 -1230016 + ) + ) + (wire + (path B.Cu 5080 + 802700 -1144000 + 888716 -1230016 + ) + ) + (via "Via[0-1]_889:635_um" 888716 -1230016 + ) + (wire + (path F.Cu 5080 + 1502700 -1144000 + 1524113 -1122587 + 2383287 -1122587 + 2402700 -1142000 + ) + ) + (wire + (path B.Cu 5080 + 2402700 -1142000 + 2501303 -1240603 + 2591504 -1240603 + 2706100 -1355199 + 2706100 -1364574 + 2757917 -1416391 + 2767798 -1416391 + 2781935 -1430528 + 2781935 -1440929 + 2723289 -1499575 + 2669803 -1499575 + 2652700 -1516678 + 2652700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1502700 -1290000 + 1452700 -1340000 + 1452700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1502900 -1218750 + 1502900 -1289800 + 1502700 -1290000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 422950 -1235845 + 710855 -1235845 + 802700 -1144000 + ) + ) + (via "Via[0-1]_889:635_um" 422950 -1235845 + ) + (wire + (path B.Cu 5080 + 402700 -1290000 + 422950 -1269750 + 422950 -1235845 + ) + ) + (wire + (path B.Cu 5080 + 1502700 -1144000 + 1502900 -1144200 + 1502900 -1218750 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1502700 -852000 + 1502700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1502700 -706000 + 1502700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1502700 -998000 + 1502700 -1144000 + ) + (type protect) + ) + ) + (net col8 + (wire + (path F.Cu 5080 + 2402700 -1214000 + 2530202 -1341502 + 2556030 -1341502 + 2558035 -1339497 + 2690299 -1339497 + 2706100 -1355298 + 2706100 -1364676 + 2716351 -1374927 + 2738276 -1374927 + ) + ) + (wire + (path F.Cu 5080 + 1602700 -1144000 + 1616346 -1130354 + 2319054 -1130354 + 2402700 -1214000 + ) + ) + (wire + (path B.Cu 5080 + 2738276 -1374927 + 2789614 -1426265 + 2789614 -1459108 + 2752700 -1496022 + 2752700 -1721500 + ) + ) + (via "Via[0-1]_889:635_um" 2738276 -1374927 + ) + (wire + (path B.Cu 5080 + 1552700 -1721500 + 1552700 -1469835 + 1625847 -1396688 + 1625847 -1313147 + 1602700 -1290000 + ) + ) + (wire + (path B.Cu 5080 + 1602400 -1218250 + 1602400 -1289700 + 1602700 -1290000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 502700 -1290000 + 524330 -1311630 + 799625 -1311630 + 871473 -1239782 + 1580868 -1239782 + 1602400 -1218250 + ) + ) + (wire + (path B.Cu 5080 + 1602700 -1144000 + 1602400 -1144300 + 1602400 -1218250 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1602700 -998000 + 1602700 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1602700 -852000 + 1602700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1602700 -706000 + 1602700 -852000 + ) + (type protect) + ) + ) + (net col9 + (wire + (path F.Cu 5080 + 602700 -1290000 + 616706 -1304006 + 751379 -1304006 + 849312 -1206073 + 1691723 -1206073 + 1702900 -1217250 + ) + ) + (wire + (path F.Cu 5080 + 1702700 -706000 + 1724285 -684415 + 2581115 -684415 + 2602700 -706000 + ) + ) + (wire + (path B.Cu 5080 + 1702700 -1290000 + 1652700 -1340000 + 1652700 -1721500 + ) + ) + (wire + (path B.Cu 5080 + 1702900 -1217250 + 1702900 -1289800 + 1702700 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1702700 -1144000 + 1702900 -1144200 + 1702900 -1217250 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1702700 -706000 + 1702700 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1702700 -852000 + 1702700 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 1702700 -998000 + 1702700 -1144000 + ) + (type protect) + ) + ) + (net i2cgnd + (wire + (path B.Cu 5080 + 2328160 -1352300 + 2302700 -1377760 + 2302700 -1387300 + ) + ) + ) + (net led1 + (wire + (path B.Cu 5080 + 1977300 -706000 + 1990922 -692378 + 2008236 -692378 + 2298744 -982886 + 2298744 -1155102 + 2420246 -1276604 + 2551369 -1276604 + 2629311 -1354546 + 2629311 -1364982 + 2621903 -1372390 + 2578890 -1372390 + 2566400 -1359900 + ) + ) + (wire + (path F.Cu 5080 + 1879600 -749300 + 1934000 -749300 + 1977300 -706000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -749300 + 1879600 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1778000 -749300 + 1877300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -749300 + 1778000 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1581150 -749300 + 1676400 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -749300 + 1581150 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1479550 -749300 + 1577300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -749300 + 1479550 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377950 -749300 + 1477300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -749300 + 1377950 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1282700 -749300 + 1377300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -749300 + 1282700 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1079500 -749300 + 1174750 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -749300 + 1079500 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977900 -749300 + 1077300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -749300 + 977900 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 877300 -706000 + 877300 -748300 + 878300 -749300 + 977300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -749300 + 977900 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -706000 + 977300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -749300 + 1079500 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -706000 + 1077300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1174750 -749300 + 1177300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -749300 + 1277300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -749300 + 1174750 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -706000 + 1177300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -749300 + 1282700 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -706000 + 1277300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -749300 + 1377950 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -706000 + 1377300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -749300 + 1479550 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -706000 + 1477300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -749300 + 1581150 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -706000 + 1577300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1676400 -749300 + 1677300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -749300 + 1777300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -749300 + 1676400 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -706000 + 1677300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -749300 + 1778000 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -706000 + 1777300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -749300 + 1879600 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -706000 + 1877300 -749300 + ) + (type protect) + ) + ) + (net led2 + (wire + (path B.Cu 5080 + 2591800 -1359900 + 2591800 -1358161 + 2526283 -1292644 + 2043088 -1292644 + 2024637 -1311095 + 1967529 -1311095 + 1955411 -1298977 + 1955411 -873889 + 1977300 -852000 + ) + ) + (wire + (path F.Cu 5080 + 977300 -889000 + 977900 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -852000 + 977300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977900 -889000 + 977300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1581150 -889000 + 1676400 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -889000 + 1581150 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377950 -889000 + 1473200 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -889000 + 1377950 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1079500 -889000 + 1174750 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -889000 + 1079500 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977900 -889000 + 1077300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -889000 + 1079500 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -852000 + 1077300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1174750 -889000 + 1177300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -889000 + 1276350 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -889000 + 1174750 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -852000 + 1177300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1276350 -889000 + 1277300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -889000 + 1377300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -889000 + 1276350 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -852000 + 1277300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -889000 + 1377950 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -852000 + 1377300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1473200 -889000 + 1477300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -889000 + 1577300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -889000 + 1473200 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -852000 + 1477300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -889000 + 1581150 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -852000 + 1577300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1676400 -889000 + 1677300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -889000 + 1771650 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -889000 + 1676400 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -852000 + 1677300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1771650 -889000 + 1777300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -889000 + 1873250 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -889000 + 1771650 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -852000 + 1777300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1873250 -889000 + 1877300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -889000 + 1940300 -889000 + 1977300 -852000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -889000 + 1873250 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -852000 + 1877300 -889000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -889000 + 876300 -889000 + 877300 -888000 + 877300 -852000 + ) + (type protect) + ) + ) + (net led3 + (wire + (path B.Cu 5080 + 2617200 -1359900 + 2542321 -1285021 + 2036122 -1285021 + 2017672 -1303471 + 1971192 -1303471 + 1963365 -1295644 + 1963365 -1011935 + 1977300 -998000 + ) + ) + (wire + (path F.Cu 5080 + 1879600 -1047750 + 1927550 -1047750 + 1977300 -998000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1047750 + 1879600 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1778000 -1047750 + 1877300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1047750 + 1778000 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377950 -1047750 + 1473200 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1047750 + 1377950 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1079500 -1047750 + 1174750 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1047750 + 1079500 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977900 -1047750 + 1077300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1047750 + 977900 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 877300 -998000 + 877300 -1046750 + 878300 -1047750 + 977300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1047750 + 977900 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -998000 + 977300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1047750 + 1079500 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -998000 + 1077300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1174750 -1047750 + 1177300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1047750 + 1276350 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1047750 + 1174750 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -998000 + 1177300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1276350 -1047750 + 1277300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1047750 + 1377300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1047750 + 1276350 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -998000 + 1277300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1047750 + 1377950 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -998000 + 1377300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1473200 -1047750 + 1477300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1047750 + 1574800 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1047750 + 1473200 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -998000 + 1477300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1574800 -1047750 + 1577300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1047750 + 1676400 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1047750 + 1574800 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -998000 + 1577300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1676400 -1047750 + 1677300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1047750 + 1777300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1047750 + 1676400 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -998000 + 1677300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1047750 + 1778000 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -998000 + 1777300 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1047750 + 1879600 -1047750 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -998000 + 1877300 -1047750 + ) + (type protect) + ) + ) + (net led4 + (wire + (path F.Cu 5080 + 1956084 -1165216 + 2307341 -1165216 + 2491250 -1349125 + 2559187 -1349125 + 2560722 -1347590 + 2630290 -1347590 + 2642600 -1359900 + ) + ) + (wire + (path F.Cu 5080 + 1956084 -1165216 + 1977300 -1144000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1187450 + 1933850 -1187450 + 1956084 -1165216 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1778000 -1187450 + 1873250 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1187450 + 1778000 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1581150 -1187450 + 1676400 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1187450 + 1581150 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1479550 -1187450 + 1577300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1187450 + 1479550 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377950 -1187450 + 1477300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1187450 + 1377950 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977900 -1187450 + 1073150 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1187450 + 977900 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 877300 -1144000 + 877300 -1186450 + 878300 -1187450 + 977300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1187450 + 977900 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1144000 + 977300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1073150 -1187450 + 1077300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1187450 + 1174750 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1187450 + 1073150 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1144000 + 1077300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1174750 -1187450 + 1177300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1187450 + 1276350 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1187450 + 1174750 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1144000 + 1177300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1276350 -1187450 + 1277300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1187450 + 1377300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1187450 + 1276350 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1144000 + 1277300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1187450 + 1377950 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1144000 + 1377300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1187450 + 1479550 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1144000 + 1477300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1187450 + 1581150 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1144000 + 1577300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1676400 -1187450 + 1677300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1187450 + 1777300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1187450 + 1676400 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1144000 + 1677300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1187450 + 1778000 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1144000 + 1777300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1873250 -1187450 + 1877300 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1187450 + 1873250 -1187450 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1144000 + 1877300 -1187450 + ) + (type protect) + ) + ) + (net led5 + (wire + (path F.Cu 5080 + 1977300 -1290000 + 1978619 -1290000 + 2027953 -1339334 + 2161863 -1339334 + 2163768 -1337429 + 2420238 -1337429 + 2455245 -1372436 + 2655464 -1372436 + 2668000 -1359900 + ) + ) + (wire + (path F.Cu 5080 + 1879600 -1250950 + 1938250 -1250950 + 1977300 -1290000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1250950 + 1879600 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1778000 -1250950 + 1877300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1250950 + 1778000 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1479550 -1250950 + 1574800 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1250950 + 1479550 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377950 -1250950 + 1477300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1250950 + 1377950 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1079500 -1250950 + 1174750 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1250950 + 1079500 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977900 -1250950 + 1077300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1250950 + 977900 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 877300 -1290000 + 877300 -1251950 + 878300 -1250950 + 977300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1250950 + 977900 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 977300 -1290000 + 977300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1250950 + 1079500 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1077300 -1290000 + 1077300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1174750 -1250950 + 1177300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1250950 + 1276350 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1250950 + 1174750 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1177300 -1290000 + 1177300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1276350 -1250950 + 1277300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1250950 + 1377300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1250950 + 1276350 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1277300 -1290000 + 1277300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1250950 + 1377950 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1377300 -1290000 + 1377300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1250950 + 1479550 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1477300 -1290000 + 1477300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1574800 -1250950 + 1577300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1250950 + 1676400 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1250950 + 1574800 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1577300 -1290000 + 1577300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1676400 -1250950 + 1677300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1250950 + 1777300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1250950 + 1676400 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1677300 -1290000 + 1677300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1250950 + 1778000 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1777300 -1290000 + 1777300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1250950 + 1879600 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1877300 -1290000 + 1877300 -1250950 + ) + (type protect) + ) + ) + (net led6 + (wire + (path B.Cu 5080 + 2377300 -1211586 + 2413941 -1248227 + 2581727 -1248227 + 2693400 -1359900 + ) + ) + (wire + (path B.Cu 5080 + 2377300 -1211586 + 2377300 -1214000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -1142000 + 2377300 -1211586 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -742500 + 2577300 -706000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -779000 + 2577300 -742500 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -742500 + 2577300 -742500 + ) + ) + (wire + (path B.Cu 5080 + 2377300 -742500 + 2377300 -779000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -706000 + 2377300 -742500 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -1070000 + 2377300 -1142000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -998000 + 2377300 -1070000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -925000 + 2377300 -998000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -779000 + 2377300 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2377300 -852000 + 2377300 -925000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -852000 + 2577300 -779000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -925000 + 2577300 -852000 + ) + (type protect) + ) + ) + (net led7 + (wire + (path B.Cu 5080 + 2577300 -1197474 + 2602775 -1197474 + 2718800 -1313499 + 2718800 -1359900 + ) + ) + (wire + (path B.Cu 5080 + 2577300 -1197474 + 2577300 -1217000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -1144000 + 2577300 -1197474 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2577300 -998000 + 2556212 -976912 + 2356545 -976912 + 2270459 -1062998 + 904302 -1062998 + 677300 -1290000 + ) + ) + (wire + (path B.Cu 5080 + 2777300 -840627 + 2777300 -852000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2777300 -779000 + 2777300 -840627 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -1003875 + 2596641 -984534 + 2689309 -984534 + 2816190 -857653 + 2816190 -845747 + 2808832 -838389 + 2779538 -838389 + 2777300 -840627 + ) + ) + (wire + (path B.Cu 5080 + 2577300 -1003875 + 2577300 -1071000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -998000 + 2577300 -1003875 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577850 -1250950 + 638250 -1250950 + 677300 -1290000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2577300 -1071000 + 2577300 -1144000 + ) + (type protect) + ) + (wire + (path B.Cu 5080 + 2777300 -706000 + 2777300 -779000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577300 -1250950 + 577850 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 381000 -1250950 + 476250 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 377300 -1250950 + 381000 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 277300 -1290000 + 277300 -1253050 + 279400 -1250950 + 377300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 377300 -1250950 + 381000 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 377300 -1290000 + 377300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 476250 -1250950 + 477300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 477300 -1250950 + 577300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 477300 -1250950 + 476250 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 477300 -1290000 + 477300 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577300 -1250950 + 577850 -1250950 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577300 -1290000 + 577300 -1250950 + ) + (type protect) + ) + ) + (net led8 + (wire + (path F.Cu 5080 + 777300 -1055374 + 2230139 -1055374 + 2316734 -968779 + 2592605 -968779 + 2616544 -992718 + 2616544 -1077113 + 2563834 -1129823 + 2563834 -1150068 + 2744200 -1330434 + 2744200 -1359900 + ) + ) + (wire + (path F.Cu 5080 + 777300 -1055374 + 777300 -1144000 + ) + ) + (wire + (path F.Cu 5080 + 750824 -732476 + 777300 -758952 + 777300 -1055374 + ) + ) + (wire + (path F.Cu 5080 + 750824 -732476 + 734000 -749300 + 679450 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 777300 -706000 + 750824 -732476 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 677300 -749300 + 679450 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577850 -749300 + 677300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 677300 -749300 + 679450 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 677300 -706000 + 677300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577300 -749300 + 577850 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 477300 -749300 + 577300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577300 -749300 + 577850 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 577300 -706000 + 577300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 476250 -749300 + 477300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 381000 -749300 + 476250 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 477300 -749300 + 476250 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 477300 -706000 + 477300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 377300 -749300 + 381000 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 277300 -706000 + 277300 -747200 + 279400 -749300 + 377300 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 377300 -749300 + 381000 -749300 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 377300 -706000 + 377300 -749300 + ) + (type protect) + ) + ) + (net row1 + (wire + (path F.Cu 5080 + 1690000 -1599000 + 1790000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1590000 -1599000 + 1690000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1490000 -1599000 + 1590000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 990000 -1599000 + 1090000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 890000 -1599000 + 990000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1390000 -1599000 + 1490000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1290000 -1599000 + 1390000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1090000 -1599000 + 1190000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1190000 -1599000 + 1290000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1790000 -1599000 + 1841500 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1890000 -1599000 + 1990000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1841500 -1599000 + 1890000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 1854400 -1484500 + 1854400 -1485700 + 1841500 -1498600 + 1841500 -1599000 + ) + (type protect) + ) + ) + (net row2 + (wire + (path F.Cu 5080 + 690000 -1599000 + 740000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 590000 -1599000 + 690000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 490000 -1599000 + 590000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 390000 -1599000 + 490000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 290000 -1599000 + 390000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 740000 -1599000 + 790000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 751900 -1485000 + 751900 -1488100 + 740000 -1500000 + 740000 -1599000 + ) + (type protect) + ) + ) + (net row3 + (wire + (path F.Cu 5080 + 2390000 -1599000 + 2490000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2341000 -1599000 + 2390000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2490000 -1599000 + 2590000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2190000 -1599000 + 2290000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2090000 -1599000 + 2190000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2590000 -1599000 + 2690000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2690000 -1599000 + 2790000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2290000 -1599000 + 2341000 -1599000 + ) + (type protect) + ) + (wire + (path F.Cu 5080 + 2328100 -1484500 + 2328100 -1486100 + 2341000 -1499000 + 2341000 -1599000 + ) + (type protect) + ) + ) + (net scl + (wire + (path B.Cu 5080 + 2353560 -1352300 + 2353500 -1352360 + 2353500 -1387300 + ) + ) + ) + (net sda + (wire + (path B.Cu 5080 + 2378960 -1352300 + 2378900 -1352360 + 2378900 -1387300 + ) + ) + ) + (net xled1 + (wire + (path B.Cu 5080 + 2554332 -1436100 + 2543552 -1436100 + 2525348 -1454304 + 2478391 -1454304 + 2470768 -1461927 + 2318219 -1461927 + 2283418 -1496728 + 2025815 -1496728 + 1947100 -1418013 + 1947100 -1412700 + ) + ) + (wire + (path B.Cu 5080 + 2566400 -1436100 + 2554332 -1436100 + ) + ) + ) + (net xled2 + (wire + (path F.Cu 5080 + 1997977 -1484318 + 2010670 -1497011 + 2309695 -1497011 + ) + ) + (wire + (path B.Cu 5080 + 2543781 -1454496 + 2536350 -1461927 + 2485361 -1461927 + 2477738 -1469550 + 2324070 -1469550 + 2309695 -1483925 + 2309695 -1497011 + ) + ) + (wire + (path B.Cu 5080 + 1921700 -1412700 + 1926359 -1412700 + 1997977 -1484318 + ) + ) + (via "Via[0-1]_889:635_um" 1997977 -1484318 + ) + (via "Via[0-1]_889:635_um" 2309695 -1497011 + ) + (via "Via[0-1]_889:635_um" 2543781 -1454496 + ) + (wire + (path F.Cu 5080 + 2591800 -1436100 + 2573404 -1454496 + 2543781 -1454496 + ) + ) + ) + (net xled3 + (wire + (path B.Cu 5080 + 2226500 -1387300 + 2283098 -1330702 + 2501022 -1330702 + 2550270 -1379950 + 2561050 -1379950 + 2617200 -1436100 + ) + ) + ) + (net xled4 + (wire + (path F.Cu 5080 + 2226500 -1412700 + 2251345 -1437545 + 2357427 -1437545 + 2383931 -1464049 + 2614651 -1464049 + 2642600 -1436100 + ) + ) + ) + (net xled5 + (wire + (path F.Cu 5080 + 2201100 -1412700 + 2234299 -1445899 + 2328702 -1445899 + 2354813 -1472010 + 2632090 -1472010 + 2668000 -1436100 + ) + ) + ) + (net xled6 + (wire + (path F.Cu 5080 + 2150300 -1412700 + 2191122 -1453522 + 2325543 -1453522 + 2351898 -1479877 + 2649623 -1479877 + 2693400 -1436100 + ) + ) + ) + (net xled7 + (wire + (path F.Cu 5080 + 2022186 -1347112 + 2298694 -1347112 + 2322296 -1370714 + 2412024 -1370714 + 2431640 -1390330 + 2431640 -1413751 + 2469174 -1451285 + 2505155 -1451285 + 2532470 -1423970 + 2706670 -1423970 + 2718800 -1436100 + ) + ) + (via "Via[0-1]_889:635_um" 2022186 -1347112 + ) + (wire + (path B.Cu 5080 + 1947100 -1387300 + 1987288 -1347112 + 2022186 -1347112 + ) + ) + ) + (net xled8 + (wire + (path B.Cu 5080 + 2744200 -1436100 + 2732044 -1448256 + 2586543 -1448256 + 2578469 -1440182 + 2578469 -1426868 + 2489927 -1338326 + 2300874 -1338326 + 2251900 -1387300 + ) + ) + ) + ) + ) +) ADDED hardware/pidp8i/PDP8_cover.kicad_pcb Index: hardware/pidp8i/PDP8_cover.kicad_pcb ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8_cover.kicad_pcb @@ -0,0 +1,2035 @@ +(kicad_pcb (version 3) (host pcbnew "(2013-07-07 BZR 4022)-stable") + + (general + (links 0) + (no_connects 0) + (area 8.849999 64.049999 290.550001 175.050001) + (thickness 1.6) + (drawings 21) + (tracks 0) + (zones 0) + (modules 91) + (nets 1) + ) + + (page A4) + (layers + (15 F.Cu signal) + (0 B.Cu signal) + (16 B.Adhes user) + (17 F.Adhes user) + (18 B.Paste user) + (19 F.Paste user) + (20 B.SilkS user) + (21 F.SilkS user) + (22 B.Mask user) + (23 F.Mask user) + (24 Dwgs.User user) + (25 Cmts.User user) + (26 Eco1.User user) + (27 Eco2.User user) + (28 Edge.Cuts user) + ) + + (setup + (last_trace_width 0.508) + (trace_clearance 0.254) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.254) + (segment_width 0.1) + (edge_width 0.1) + (via_size 0.889) + (via_drill 0.635) + (via_min_size 0.889) + (via_min_drill 0.508) + (uvia_size 0.508) + (uvia_drill 0.127) + (uvias_allowed no) + (uvia_min_size 0.508) + (uvia_min_drill 0.127) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.01) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 2.032 1.032) + (pad_drill 0) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements 7FFFFB3F) + (pcbplotparams + (layerselection 278953984) + (usegerberextensions true) + (excludeedgelayer false) + (linewidth 0.150000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotothertext true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk true) + (outputformat 1) + (mirror false) + (drillshape 0) + (scaleselection 1) + (outputdirectory gerber20190414/cover8/)) + ) + + (net 0 "") + + (net_class Default "This is the default net class." + (clearance 0.254) + (trace_width 0.508) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net "") + ) + + (net_class Strong "" + (clearance 0.381) + (trace_width 0.508) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + ) + + (module 1PIN_SMD (layer F.Cu) (tedit 5CD9B0D5) (tstamp 5CDA6C90) + (at 286.5 128.5) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path 1pin) + (fp_text reference 1PIN_SMD (at 0 -3.50012) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value P*** (at 0.24892 3.74904) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (pad 1 smd rect (at 0 0) (size 2.032 1.032) + (layers F.Cu F.Paste F.SilkS F.Mask) + ) + ) + + (module 1PIN_SMD (layer F.Cu) (tedit 5CD9B061) (tstamp 5CDA6C02) + (at 283.5 128.5) + (descr "module 1 pin (ou trou mecanique de percage)") + (tags DEV) + (path 1pin) + (fp_text reference 1PIN_SMD (at 0 -3.50012) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (fp_text value P*** (at 0.24892 3.74904) (layer F.SilkS) hide + (effects (font (size 1.016 1.016) (thickness 0.254))) + ) + (pad 1 smd rect (at 0 0) (size 2.032 1.032) + (layers F.Cu F.Paste F.SilkS F.Mask) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F22E4) + (at 169 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5B2) + (fp_text reference DMB9 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F22CB) + (at 179 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5B8) + (fp_text reference DMB10 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F22B2) + (at 189 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5BE) + (fp_text reference DMB11 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2299) + (at 199 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5C4) + (fp_text reference DMB12 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2280) + (at 89 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5CC) + (fp_text reference DAC1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2267) + (at 99 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5E5) + (fp_text reference DAC2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F224E) + (at 109 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5EB) + (fp_text reference DAC3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2235) + (at 119 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5F1) + (fp_text reference DAC4 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F221C) + (at 129 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5F7) + (fp_text reference DAC5 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2203) + (at 139 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5FD) + (fp_text reference DAC6 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F21EA) + (at 149 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF603) + (fp_text reference DAC7 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F21D1) + (at 159 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF609) + (fp_text reference DAC8 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F21B8) + (at 169 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF60F) + (fp_text reference DAC9 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F219F) + (at 179 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF615) + (fp_text reference DAC10 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2186) + (at 89 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF34A) + (fp_text reference DPC1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F216D) + (at 199 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF621) + (fp_text reference DAC12 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2154) + (at 89 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF629) + (fp_text reference DMQ1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F213B) + (at 99 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF642) + (fp_text reference DMQ2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2122) + (at 109 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF648) + (fp_text reference DMQ3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2109) + (at 119 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF64E) + (fp_text reference DMQ4 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F20F0) + (at 129 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF654) + (fp_text reference DMQ5 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F20D7) + (at 139 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF65A) + (fp_text reference DMQ6 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F20BE) + (at 149 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF660) + (fp_text reference DMQ7 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F20A5) + (at 159 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF666) + (fp_text reference DMQ8 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F208C) + (at 169 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF66C) + (fp_text reference DMQ9 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2073) + (at 179 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF672) + (fp_text reference DMQ10 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F205A) + (at 189 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF678) + (fp_text reference DMQ11 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2041) + (at 199 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF67E) + (fp_text reference DMQ12 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F2028) + (at 79 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF686) + (fp_text reference DLINK1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F200F) + (at 29 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6A1) + (fp_text reference DSC1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1FF6) + (at 189 114.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF61B) + (fp_text reference DAC11 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1FDD) + (at 99 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF399) + (fp_text reference DPC2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1FC4) + (at 109 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3AC) + (fp_text reference DPC3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1FAB) + (at 119 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3B2) + (fp_text reference DPC4 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1F92) + (at 129 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3B8) + (fp_text reference DPC5 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1F79) + (at 139 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3BE) + (fp_text reference DPC6 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1F60) + (at 149 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3C4) + (fp_text reference DPC7 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1F47) + (at 159 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3CA) + (fp_text reference DPC8 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1F2E) + (at 169 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3D0) + (fp_text reference DPC9 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1F15) + (at 179 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3D6) + (fp_text reference DPC10 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1EFC) + (at 189 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3DC) + (fp_text reference DPC11 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1EE3) + (at 199 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF3E2) + (fp_text reference DPC12 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1ECA) + (at 89 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF463) + (fp_text reference DMA1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1EB1) + (at 99 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF47C) + (fp_text reference DMA2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1E98) + (at 109 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF482) + (fp_text reference DMA3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1E7F) + (at 159 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5AC) + (fp_text reference DMB8 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1E66) + (at 129 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF48E) + (fp_text reference DMA5 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1E4D) + (at 139 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF494) + (fp_text reference DMA6 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1E34) + (at 149 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF49A) + (fp_text reference DMA7 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1E1B) + (at 159 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4A0) + (fp_text reference DMA8 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1E02) + (at 169 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4A6) + (fp_text reference DMA9 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1DE9) + (at 179 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4AC) + (fp_text reference DMA10 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1DD0) + (at 189 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4B2) + (fp_text reference DMA11 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1DB7) + (at 199 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF4B8) + (fp_text reference DMA12 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1D9E) + (at 89 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF56F) + (fp_text reference DMB1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1D85) + (at 99 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF588) + (fp_text reference DMB2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1D6C) + (at 109 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF58E) + (fp_text reference DMB3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1D53) + (at 119 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF594) + (fp_text reference DMB4 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1D3A) + (at 129 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF59A) + (fp_text reference DMB5 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1D21) + (at 139 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5A0) + (fp_text reference DMB6 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1D08) + (at 149 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF5A6) + (fp_text reference DMB7 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1CEF) + (at 119 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF488) + (fp_text reference DMA4 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1CD6) + (at 279 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF843) + (fp_text reference DRUN1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1CBD) + (at 279 77.9) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF83D) + (fp_text reference DPAUSE1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1CA4) + (at 279 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF837) + (fp_text reference DION1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1C8B) + (at 259 107.1) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7E9) + (fp_text reference DBREAK1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1C72) + (at 259 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7E3) + (fp_text reference DCURAD1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1C59) + (at 259 92.5) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7DD) + (fp_text reference DWRDCT1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1C40) + (at 259 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7D7) + (fp_text reference DDEFER1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1C27) + (at 259 77.9) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7D1) + (fp_text reference DEXEC1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1C0E) + (at 259 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF7CB) + (fp_text reference DFETCH1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1BF5) + (at 239 121.4) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF789) + (fp_text reference DOPR1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1BDC) + (at 239 114.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF783) + (fp_text reference DIOT1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1BC3) + (at 239 107) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF77D) + (fp_text reference DJMP1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1BAA) + (at 239 99.8) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF777) + (fp_text reference DJMS1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1B91) + (at 239 92.5) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF741) + (fp_text reference DDCA1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1B78) + (at 39 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6BA) + (fp_text reference DSC2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1B5F) + (at 59 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6C6) + (fp_text reference DSC4 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1B46) + (at 69 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6CC) + (fp_text reference DSC5 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1B14) + (at 29 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6DA) + (fp_text reference DDF1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1AFB) + (at 39 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6F3) + (fp_text reference DDF2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1AE2) + (at 49 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6F9) + (fp_text reference DDF3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1AC9) + (at 49 129) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF6C0) + (fp_text reference DSC3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1AB0) + (at 239 77.9) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF735) + (fp_text reference DTAD1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1A97) + (at 239 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF728) + (fp_text reference DAND1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1A7E) + (at 239 85.2) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF73B) + (fp_text reference DISZ1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1A65) + (at 69 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF71A) + (fp_text reference DIF2 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1A4C) + (at 79 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF720) + (fp_text reference DIF3 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module PIDP8-LED-COVER (layer F.Cu) (tedit 5C1F8BDD) (tstamp 548F1A33) + (at 59 70.6) + (descr "LED 3mm - Lead pitch 100mil (2,54mm)") + (tags "LED led 3mm 3MM 100mil 2,54mm") + (path /548EF701) + (fp_text reference DIF1 (at 0 -5.5372) (layer F.SilkS) hide + (effects (font (size 0.7 0.7) (thickness 0.025))) + ) + (fp_text value LED (at 0 2.54) (layer F.SilkS) hide + (effects (font (size 0.762 0.762) (thickness 0.0889))) + ) + (pad "" np_thru_hole circle (at 0 0) (size 5.03 5.03) (drill 4.85) + (layers *.Cu F.Mask) + ) + (model discret/leds/led3_vertical_verde.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_text PiDP-8 (at 285 127) (layer F.SilkS) + (effects (font (size 0.8 0.9) (thickness 0.2))) + ) + (gr_line (start 290 64.1) (end 290 65.3) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 64.1) (end 290 64.1) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 65.3) (end 19.6 64.1) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 121.5) (end 71.5 121.5) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 290 135.8) (end 290 65.8) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 135.8) (end 290 135.8) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 121.5) (end 19.6 135.8) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 78) (end 71.5 78) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 290 65.3) (end 290 65.8) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 65.8) (end 19.6 65.3) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 19.6 78) (end 19.6 65.8) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 71.5 78) (end 71.5 121.5) (angle 90) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 9.5 65.8) (end 8.9 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 65.2) (end 9.5 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.5 174.5) (end 9.5 174.9) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 9.1 174.5) (end 9.5 174.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 174.5) (end 290 175) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290.5 174.5) (end 290 174.5) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 65.8) (end 290.4 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + (gr_line (start 290 65.4) (end 290 65.8) (angle 90) (layer Dwgs.User) (width 0.1)) + +) ADDED hardware/pidp8i/PDP8_cover.pro Index: hardware/pidp8i/PDP8_cover.pro ================================================================== --- /dev/null +++ hardware/pidp8i/PDP8_cover.pro @@ -0,0 +1,40 @@ +update=12/23/2018 2:18:31 PM +last_client=pcbnew +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=1.700000000000 +PadDrillOvalY=1.700000000000 +PadSizeH=2.500000000000 +PadSizeV=2.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.100000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.010000000000 +[pcbnew/libraries] +LibDir= +LibName1=sockets +LibName2=connect +LibName3=discret +LibName4=pin_array +LibName5=divers +LibName6=smd_capacitors +LibName7=smd_resistors +LibName8=smd_crystal&oscillator +LibName9=smd_dil +LibName10=smd_transistors +LibName11=libcms +LibName12=display +LibName13=led +LibName14=dip_sockets +LibName15=pga_sockets +LibName16=valves +LibName17=customlibraries/pdp8footprintlib2 ADDED hardware/pidp8i/customlibraries/pdp8_library.dcm Index: hardware/pidp8i/customlibraries/pdp8_library.dcm ================================================================== --- /dev/null +++ hardware/pidp8i/customlibraries/pdp8_library.dcm @@ -0,0 +1,7 @@ +EESchema-DOCLIB Version 2.0 Date: 19/01/2015 21:56:03 +# +$CMP UDN2981A +D UDN2981A +$ENDCMP +# +#End Doc Library ADDED hardware/pidp8i/customlibraries/pdp8_library.lib Index: hardware/pidp8i/customlibraries/pdp8_library.lib ================================================================== --- /dev/null +++ hardware/pidp8i/customlibraries/pdp8_library.lib @@ -0,0 +1,138 @@ +EESchema-LIBRARY Version 2.3 Date: 19/01/2015 21:56:03 +#encoding utf-8 +# +# CONN_20X2 +# +DEF CONN_20X2 P 0 10 Y N 1 F N +F0 "P" 0 1050 60 H V C CNN +F1 "CONN_20X2" 0 0 50 V V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +S -100 1000 100 -1000 0 1 0 N +X P1 1 -400 950 300 R 60 30 1 1 P I +X P2 2 400 950 300 L 60 30 1 1 P I +X P3 3 -400 850 300 R 60 30 1 1 P I +X P4 4 400 850 300 L 60 30 1 1 P I +X P5 5 -400 750 300 R 60 30 1 1 P I +X P6 6 400 750 300 L 60 30 1 1 P I +X P7 7 -400 650 300 R 60 30 1 1 P I +X P8 8 400 650 300 L 60 30 1 1 P I +X P9 9 -400 550 300 R 60 30 1 1 P I +X P10 10 400 550 300 L 60 30 1 1 P I +X P20 20 400 50 300 L 60 30 1 1 P I +X P30 30 400 -450 300 L 60 30 1 1 P I +X P40 40 400 -950 300 L 60 30 1 1 P I +X P11 11 -400 450 300 R 60 30 1 1 P I +X P21 21 -400 -50 300 R 60 30 1 1 P I +X P31 31 -400 -550 300 R 60 30 1 1 P I +X P12 12 400 450 300 L 60 30 1 1 P I +X P22 22 400 -50 300 L 60 30 1 1 P I +X P32 32 400 -550 300 L 60 30 1 1 P I +X P13 13 -400 350 300 R 60 30 1 1 P I +X P23 23 -400 -150 300 R 60 30 1 1 P I +X P33 33 -400 -650 300 R 60 30 1 1 P I +X P14 14 400 350 300 L 60 30 1 1 P I +X P24 24 400 -150 300 L 60 30 1 1 P I +X P34 34 400 -650 300 L 60 30 1 1 P I +X P15 15 -400 250 300 R 60 30 1 1 P I +X ~ 25 -400 -250 300 R 60 30 1 1 P I +X P35 35 -400 -750 300 R 60 30 1 1 P I +X P16 16 400 250 300 L 60 30 1 1 P I +X P26 26 400 -250 300 L 60 30 1 1 P I +X P36 36 400 -750 300 L 60 30 1 1 P I +X P17 17 -400 150 300 R 60 30 1 1 P I +X P27 27 -400 -350 300 R 60 30 1 1 P I +X P37 37 -400 -850 300 R 60 30 1 1 P I +X P18 18 400 150 300 L 60 30 1 1 P I +X P28 28 400 -350 300 L 60 30 1 1 P I +X P38 38 400 -850 300 L 60 30 1 1 P I +X P19 19 -400 50 300 R 60 30 1 1 P I +X P29 29 -400 -450 300 R 60 30 1 1 P I +X P39 39 -400 -950 300 R 60 30 1 1 P I +ENDDRAW +ENDDEF +# +# RASPI_MODEL_B_PLUS_GPIO +# +DEF RASPI_MODEL_B_PLUS_GPIO P 0 10 Y Y 1 F N +F0 "P" 0 1050 60 H V C CNN +F1 "RASPI_MODEL_B_PLUS_GPIO" 0 0 20 V V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +S -100 1000 100 -1000 0 1 0 N +X 3.3v 1 -400 950 300 R 60 30 1 1 w I +X 5v 2 400 950 300 L 60 30 1 1 w I +X g2 3 -400 850 300 R 60 30 1 1 P I +X 5v 4 400 850 300 L 60 30 1 1 P I +X g3 5 -400 750 300 R 60 30 1 1 P I +X GND 6 400 750 300 L 60 30 1 1 w I +X g4 7 -400 650 300 R 60 30 1 1 P I +X g14 8 400 650 300 L 60 30 1 1 P I +X GND 9 -400 550 300 R 60 30 1 1 P I +X g15 10 400 550 300 L 60 30 1 1 P I +X GND 20 400 50 300 L 60 30 1 1 P I +X GND 30 400 -450 300 L 60 30 1 1 P I +X g21 40 400 -950 300 L 60 30 1 1 P I +X g17 11 -400 450 300 R 60 30 1 1 P I +X g9 21 -400 -50 300 R 60 30 1 1 P I +X g6 31 -400 -550 300 R 60 30 1 1 P I +X g18 12 400 450 300 L 60 30 1 1 P I +X g25 22 400 -50 300 L 60 30 1 1 P I +X g12 32 400 -550 300 L 60 30 1 1 P I +X g27 13 -400 350 300 R 60 30 1 1 P I +X g11 23 -400 -150 300 R 60 30 1 1 P I +X g13 33 -400 -650 300 R 60 30 1 1 P I +X GND 14 400 350 300 L 60 30 1 1 P I +X g8 24 400 -150 300 L 60 30 1 1 P I +X GND 34 400 -650 300 L 60 30 1 1 P I +X g22 15 -400 250 300 R 60 30 1 1 P I +X GND 25 -400 -250 300 R 60 30 1 1 P I +X g19 35 -400 -750 300 R 60 30 1 1 P I +X g23 16 400 250 300 L 60 30 1 1 P I +X g7 26 400 -250 300 L 60 30 1 1 P I +X g16 36 400 -750 300 L 60 30 1 1 P I +X 3.3v 17 -400 150 300 R 60 30 1 1 P I +X n/c 27 -400 -350 300 R 60 30 1 1 P I +X g26 37 -400 -850 300 R 60 30 1 1 P I +X g24 18 400 150 300 L 60 30 1 1 P I +X n/c 28 400 -350 300 L 60 30 1 1 P I +X g20 38 400 -850 300 L 60 30 1 1 P I +X g10 19 -400 50 300 R 60 30 1 1 P I +X g5 29 -400 -450 300 R 60 30 1 1 P I +X GND 39 -400 -950 300 R 60 30 1 1 P I +ENDDRAW +ENDDEF +# +# UDN2981A +# +DEF UDN2981A P 0 40 Y Y 1 F N +F0 "P" 0 550 30 H V C CNN +F1 "UDN2981A" 0 -550 30 H V C CNN +F2 "~" 0 0 60 H V C CNN +F3 "~" 0 0 60 H V C CNN +DRAW +S -150 500 150 -500 0 1 0 N +X IN1 1 -350 400 200 R 40 20 1 1 I I +X IN2 2 -350 300 200 R 40 20 1 1 I I +X IN3 3 -350 200 200 R 40 20 1 1 I I +X IN4 4 -350 100 200 R 40 20 1 1 I I +X IN5 5 -350 0 200 R 40 20 1 1 I I +X IN6 6 -350 -100 200 R 40 20 1 1 I I +X IN7 7 -350 -200 200 R 40 20 1 1 I I +X IN8 8 -350 -300 200 R 40 20 1 1 I I +X Vs 9 -350 -400 200 R 40 20 1 1 P I +X GND 10 350 -400 200 L 40 20 1 1 P I +X OUT8 11 350 -300 200 L 40 20 1 1 O I +X OUT7 12 350 -200 200 L 40 20 1 1 O I +X OUT6 13 350 -100 200 L 40 20 1 1 O I +X OUT5 14 350 0 200 L 40 20 1 1 O I +X OUT4 15 350 100 200 L 40 20 1 1 O I +X OUT3 16 350 200 200 L 40 20 1 1 O I +X OUT2 17 350 300 200 L 40 20 1 1 O I +X OUT1 18 350 400 200 L 40 20 1 1 O I +ENDDRAW +ENDDEF +# +#End Library ADDED hardware/pidp8i/customlibraries/pdp8footprintlib.mod Index: hardware/pidp8i/customlibraries/pdp8footprintlib.mod ================================================================== --- /dev/null +++ hardware/pidp8i/customlibraries/pdp8footprintlib.mod @@ -0,0 +1,61 @@ +PCBNEW-LibModule-V1 15/12/2014 18:10:47 +# encoding utf-8 +Units mm +$INDEX +SW_SPDT +$EndINDEX +$MODULE SW_SPDT +Po 0 0 0 15 548F15A7 00000000 ~~ +Li SW_SPDT +Cd Switch inverseur +Kw SWITCH DEV +Sc 0 +AR +Op 0 0 0 +T0 3.5 7.9 1.016 1.016 900 0.2032 N V 21 N "SW_KND2_1x2" +T1 -0.05 -20.3 1.016 1.016 0 0.2032 N V 21 N "SW*" +DS -4.75 -18.9 -4.75 18.9 0.15 21 +DS -4.75 18.9 4.75 18.9 0.15 21 +DS 4.75 18.9 4.75 -18.9 0.15 21 +DS 4.75 -18.9 -4.75 -18.9 0.15 21 +DS -4.75 -10.3 -4.75 10.3 0.15 21 +DS -4.75 10.3 4.75 10.3 0.15 21 +DS 4.75 10.3 4.75 -10.3 0.15 21 +DS 4.75 -10.3 -4.75 -10.3 0.15 21 +$PAD +Sh "2" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 0 +$EndPAD +$PAD +Sh "1" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -5.58 +$EndPAD +$PAD +Sh "3" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 5.58 +$EndPAD +$PAD +Sh "H1" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -15 +$EndPAD +$PAD +Sh "H2" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 15 +$EndPAD +$EndMODULE SW_SPDT +$EndLIBRARY ADDED hardware/pidp8i/customlibraries/pdp8footprintlib2.mod Index: hardware/pidp8i/customlibraries/pdp8footprintlib2.mod ================================================================== --- /dev/null +++ hardware/pidp8i/customlibraries/pdp8footprintlib2.mod @@ -0,0 +1,1284 @@ +PCBNEW-LibModule-V1 4/14/2019 9:38:47 PM +# encoding utf-8 +Units mm +$INDEX +D2 +LED-3-PDP +LED-3-StrEight +M3_WIDE +PIDP8-LED-COVER +RASPI_BPLUS +RASPI_BPLUS_MIRRORED +SIL-3PDP +SIL-5PDP +SW_KND2 +SW_KND2_PDP +SW_KND2_PDP2 +SW_PIDP2019 +SW_RLS_MOUNT +SW_RLS_PIDP +$EndINDEX +$MODULE D2 +Po 0 0 0 15 54B29F05 00000000 ~~ +Li D2 +Cd Diode 3 pas +Kw DIODE DEV +Sc 0 +AR +Op 0 0 0 +T0 0 -0.508 0.25 0.25 0 0.05 N V 21 N "D2" +T1 -0.508 0.508 0.381 0.381 0 0.0762 N I 21 N "D***" +DS -2.032 1.016 2.032 1.016 0.3048 21 +DS -2.032 -1.016 2.032 -1.016 0.3048 21 +DS 2.794 0 2.032 0 0.3048 21 +DS 2.032 0 2.032 -1.016 0.3048 21 +DS -2.032 -1.016 -2.032 0 0.3048 21 +DS -2.032 0 -2.794 0 0.3048 21 +DS -2.032 0 -2.032 1.016 0.3048 21 +DS 2.032 1.016 2.032 0 0.3048 21 +DS 1.524 -1.016 1.524 1.016 0.3048 21 +DS 1.27 1.016 1.27 -1.016 0.3048 21 +$PAD +Sh "2" R 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 3.556 0 +$EndPAD +$PAD +Sh "1" C 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -3.81 0 +$EndPAD +$SHAPE3D +Na "discret/diode.wrl" +Sc 0.3 0.3 0.3 +Of 0 0 0 +Ro 0 0 0 +$EndSHAPE3D +$EndMODULE D2 +$MODULE LED-3-PDP +Po 0 0 0 15 54BD7621 00000000 ~~ +Li LED-3-PDP +Cd LED 3mm - Lead pitch 100mil (2,54mm) +Kw LED led 3mm 3MM 100mil 2,54mm +Sc 0 +AR /548EF4B8 +Op 0 0 0 +T0 0 -5.5372 0.7 0.7 0 0.025 N V 21 N "DMA12" +T1 0 2.54 0.762 0.762 0 0.0889 N I 21 N "LED" +DS -2.4 1.5 -2.4 -1.5 0.15 21 +DS 1.5 2.4 -1.5 2.4 0.15 21 +DS 2.4 -1.5 2.4 1.5 0.15 21 +DS -1.5 -2.4 1.5 -2.4 0.15 21 +DA -1.5 1.5 -1.5 2.4 900 0.15 21 +DA 1.5 1.5 2.4 1.5 900 0.15 21 +DA -1.5 -1.5 -2.4 -1.5 900 0.15 21 +DA 1.5 -1.5 1.5 -2.4 900 0.15 21 +$PAD +Sh "1" C 1.6764 1.6764 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 2 "led2" +Po -1.27 0 +$EndPAD +$PAD +Sh "2" C 1.6764 1.6764 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 1 "N-000004" +Po 1.27 0 +$EndPAD +$SHAPE3D +Na "discret/leds/led3_vertical_verde.wrl" +Sc 1 1 1 +Of 0 0 0 +Ro 0 0 0 +$EndSHAPE3D +$EndMODULE LED-3-PDP +$MODULE LED-3-StrEight +Po 0 0 0 15 554E561D 00000000 ~~ +Li LED-3-StrEight +Cd LED +Kw LED +Sc 0 +AR /548EF4B8 +Op 0 0 0 +T0 0 -5.5372 0.7 0.7 0 0.025 N I 21 N "Str8" +T1 0 2.54 0.762 0.762 0 0.0889 N I 21 N "LED" +$PAD +Sh "1" C 1.6764 1.6764 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 2 "led2" +Po -1.27 0 +$EndPAD +$PAD +Sh "2" C 1.6764 1.6764 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 1 "N-000004" +Po 1.27 0 +$EndPAD +$SHAPE3D +Na "discret/leds/led3_vertical_verde.wrl" +Sc 1 1 1 +Of 0 0 0 +Ro 0 0 0 +$EndSHAPE3D +$EndMODULE LED-3-StrEight +$MODULE M3_WIDE +Po 0 0 0 15 568BEC97 00000000 ~~ +Li M3_WIDE +Cd Wide M3 +Kw DEV +Sc 0 +AR 1pin +Op 0 0 0 +T0 0 -3.048 1.016 1.016 0 0.254 N I 21 N "1PIN" +T1 0 2.794 1.016 1.016 0 0.254 N I 21 N "P***" +$PAD +Sh "" C 4.064 4.064 0 0 0 +Dr 3.15 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 0 +$EndPAD +$EndMODULE M3_WIDE +$MODULE PIDP8-LED-COVER +Po 0 0 0 15 5C1F8BDD 00000000 ~~ +Li PIDP8-LED-COVER +Cd LED 3mm - Lead pitch 100mil (2,54mm) +Kw LED led 3mm 3MM 100mil 2,54mm +Sc 0 +AR /548EF4B8 +Op 0 0 0 +T0 0 -5.5372 0.7 0.7 0 0.025 N I 21 N "DMA12" +T1 0 2.54 0.762 0.762 0 0.0889 N I 21 N "LED" +$PAD +Sh "" C 5.03 5.03 0 0 0 +Dr 4.85 0 0 +At HOLE N 0080FFFF +Ne 0 "" +Po 0 0 +$EndPAD +$SHAPE3D +Na "discret/leds/led3_vertical_verde.wrl" +Sc 1 1 1 +Of 0 0 0 +Ro 0 0 0 +$EndSHAPE3D +$EndMODULE PIDP8-LED-COVER +$MODULE RASPI_BPLUS +Po 0 0 0 15 54B191EE 00000000 ~~ +Li RASPI_BPLUS +Cd Double rangee de contacts 2 x 12 pins +Kw CONN +Sc 0 +AR +Op 0 0 0 +T0 0 -3.81 1.016 1.016 0 0.27432 N V 21 N "REF*" +T1 0 3.81 1.016 1.016 0 0.2032 N V 21 N "PIN_ARRAY_20X2" +T2 8 26.5 1 1 0 0.15 N V 21 N "GPIO and mount holes exact, port placement approx." +T2 6 20.5 1 1 0 0.15 N V 21 N "COMPONENT SIDE (TOP)" +T2 -19 48 1 1 0 0.15 N V 21 N "microUSB" +DS -22 52.5 -22 49 0.15 21 +DS -22 49 -16 52.5 0.15 21 +DS -16 52.5 -16 49 0.15 21 +DS -16 49 -22 52.5 0.15 21 +T2 0 49 1 1 0 0.15 N V 21 N "HDMI" +DS -7 52.5 -7 48.5 0.15 21 +DS -7 48.5 6 52.5 0.15 21 +DS 6 52.5 6 48.5 0.15 21 +DS 6 48.5 -7 52.5 0.15 21 +T2 50.5 24 1 1 900 0.15 N V 21 N "USB" +T2 50.5 7 1 1 900 0.15 N V 21 N "USB" +DS 50.5 18.5 55 18.5 0.15 21 +DS 55 18.5 55 29.5 0.15 21 +DS 55 29.5 51 29.5 0.15 21 +DS 50.5 1.5 55 1.5 0.15 21 +DS 55 1.5 55 13 0.15 21 +DS 55 13 50.5 13 0.15 21 +DS -32.5 -3.5 52.5 -3.5 0.15 21 +DS 52.5 -3.5 52.5 52.5 0.15 21 +DS 52.5 52.5 32 52.5 0.15 21 +DS -32.5 -3.5 -32.5 52.5 0.15 21 +DS -32.5 52.5 32.5 52.5 0.15 21 +DS 25.4 2.54 -25.4 2.54 0.3048 21 +DS 25.4 -2.54 -25.4 -2.54 0.3048 21 +DS 25.4 -2.54 25.4 2.54 0.3048 21 +DS -25.4 -2.54 -25.4 2.54 0.3048 21 +$PAD +Sh "1" R 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -24.13 1.27 +$EndPAD +$PAD +Sh "2" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 1 "GND" +Po -24.13 -1.27 +$EndPAD +$PAD +Sh "11" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 18 "PA8_1" +Po -11.43 1.27 +$EndPAD +$PAD +Sh "4" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 11 "PA1_1" +Po -21.59 -1.27 +$EndPAD +$PAD +Sh "13" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 5 "PA10_1" +Po -8.89 1.27 +$EndPAD +$PAD +Sh "6" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 13 "PA3_1" +Po -19.05 -1.27 +$EndPAD +$PAD +Sh "15" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 7 "PA12_1" +Po -6.35 1.27 +$EndPAD +$PAD +Sh "8" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 15 "PA5_1" +Po -16.51 -1.27 +$EndPAD +$PAD +Sh "17" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 9 "PA14_1" +Po -3.81 1.27 +$EndPAD +$PAD +Sh "10" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 17 "PA7_1" +Po -13.97 -1.27 +$EndPAD +$PAD +Sh "19" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -1.27 1.27 +$EndPAD +$PAD +Sh "12" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 19 "PA9_1" +Po -11.43 -1.27 +$EndPAD +$PAD +Sh "21" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 1.27 1.27 +$EndPAD +$PAD +Sh "14" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 6 "PA11_1" +Po -8.89 -1.27 +$EndPAD +$PAD +Sh "23" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "INT1_1" +Po 3.81 1.27 +$EndPAD +$PAD +Sh "16" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 8 "PA13_1" +Po -6.35 -1.27 +$EndPAD +$PAD +Sh "25" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 6.35 1.27 +$EndPAD +$PAD +Sh "18" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 10 "PA15_1" +Po -3.81 -1.27 +$EndPAD +$PAD +Sh "27" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 8.89 1.27 +$EndPAD +$PAD +Sh "20" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -1.27 -1.27 +$EndPAD +$PAD +Sh "29" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 22 "VCC" +Po 11.43 1.27 +$EndPAD +$PAD +Sh "22" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 1.27 -1.27 +$EndPAD +$PAD +Sh "31" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 22 "VCC" +Po 13.97 1.27 +$EndPAD +$PAD +Sh "24" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 3 "INT2_1" +Po 3.81 -1.27 +$EndPAD +$PAD +Sh "26" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 6.35 -1.27 +$EndPAD +$PAD +Sh "33" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 21 "Tin1_cold_1" +Po 16.51 1.27 +$EndPAD +$PAD +Sh "28" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 10 "PA15_1" +Po 8.89 -1.27 +$EndPAD +$PAD +Sh "32" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 1 "GND" +Po 13.97 -1.27 +$EndPAD +$PAD +Sh "34" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 16.51 -1.27 +$EndPAD +$PAD +Sh "36" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 19.05 -1.27 +$EndPAD +$PAD +Sh "38" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 21.59 -1.27 +$EndPAD +$PAD +Sh "35" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 19.05 1.27 +$EndPAD +$PAD +Sh "37" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 20 "PB4_1" +Po 21.59 1.27 +$EndPAD +$PAD +Sh "3" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 4 "PA0_1" +Po -21.59 1.27 +$EndPAD +$PAD +Sh "5" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 12 "PA2_1" +Po -19.05 1.27 +$EndPAD +$PAD +Sh "7" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 14 "PA4_1" +Po -16.51 1.27 +$EndPAD +$PAD +Sh "9" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 16 "PA6_1" +Po -13.97 1.27 +$EndPAD +$PAD +Sh "39" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 24.13 1.27 +$EndPAD +$PAD +Sh "40" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 24.13 -1.27 +$EndPAD +$PAD +Sh "30" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 1 "GND" +Po 11.43 -1.27 +$EndPAD +$PAD +Sh "2" C 6.2 6.2 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -29 0 +$EndPAD +$PAD +Sh "3" C 6.2 6.2 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 29 0 +$EndPAD +$PAD +Sh "4" C 6.2 6.2 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -29 49 +$EndPAD +$PAD +Sh "5" C 6.2 6.2 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 29 49 +$EndPAD +$SHAPE3D +Na "pin_array/pins_array_20x2.wrl" +Sc 1 1 1 +Of 0 0 0 +Ro 0 0 0 +$EndSHAPE3D +$EndMODULE RASPI_BPLUS +$MODULE RASPI_BPLUS_MIRRORED +Po 0 0 0 15 5C1E43CC 00000000 ~~ +Li RASPI_BPLUS_MIRRORED +Cd Double rangee de contacts 2 x 12 pins +Kw CONN +Sc 0 +AR /548F13F7 +Op 0 0 0 +T0 0 -3.81 1.016 1.016 0 0.27432 N V 21 N "P1" +T1 0 3.81 1.016 1.016 0 0.2032 N V 21 N "RASPI_MODEL_B_PLUS_GPIO" +T2 49.53 -43.18 1 1 900 0.15 N V 21 N "ETH" +DS 48.768 -49.022 53.594 -49.022 0.15 21 +DS 53.594 -49.022 53.594 -38.354 0.15 21 +DS 53.594 -38.354 49.784 -38.354 0.15 21 +T2 7.5 -18 1 1 0 0.15 N V 21 N "GPIO and mount holes exact, port placement approx." +T2 0 -24.5 1 1 0 0.15 N V 21 N "RASPI B PLUS (MIRROR IMAGE)" +T2 -19 -47 1 1 0 0.15 N V 21 N "microUSB" +DS -22 -49.008 -22 -52.508 0.15 21 +DS -16 -49.008 -16 -52.508 0.15 21 +T2 0 -47 1 1 0 0.15 N V 21 N "HDMI" +DS -7 -48.5 -7 -52.5 0.15 21 +DS 6 -48.5 6 -52.5 0.15 21 +T2 49.5 -3.5 1 1 900 0.15 N V 21 N "USB" +T2 49.5 -20.5 1 1 900 0.15 N V 21 N "USB" +DS 49.5 -11.032 54 -11.032 0.15 21 +DS 54 -11.032 54 -0.032 0.15 21 +DS 54 -0.032 50 -0.032 0.15 21 +DS 49.5 -28.032 54 -28.032 0.15 21 +DS 54 -28.032 54 -16.532 0.15 21 +DS 54 -16.532 49.5 -16.532 0.15 21 +DS -32.5 3.5 52.5 3.5 0.15 21 +DS 52.5 -52.5 52.5 3.5 0.15 21 +DS 52.5 -52.5 32 -52.5 0.15 21 +DS -32.5 -52.5 -32.5 3.5 0.15 21 +DS -32.5 -52.5 32.5 -52.5 0.15 21 +DS 25.4 2.54 -25.4 2.54 0.3048 21 +DS 25.4 -2.54 -25.4 -2.54 0.3048 21 +DS 25.4 -2.54 25.4 2.54 0.3048 21 +DS -25.4 -2.54 -25.4 2.54 0.3048 21 +$PAD +Sh "1" R 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 1 "+3.3V" +Po -24.13 -1.27 +$EndPAD +$PAD +Sh "2" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -24.13 1.27 +$EndPAD +$PAD +Sh "11" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 21 "xled4" +Po -11.43 -1.27 +$EndPAD +$PAD +Sh "4" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -21.59 1.27 +$EndPAD +$PAD +Sh "13" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 22 "xled5" +Po -8.89 -1.27 +$EndPAD +$PAD +Sh "6" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "GND" +Po -19.05 1.27 +$EndPAD +$PAD +Sh "15" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 23 "xled6" +Po -6.35 -1.27 +$EndPAD +$PAD +Sh "8" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 7 "N-0000031" +Po -16.51 1.27 +$EndPAD +$PAD +Sh "17" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -3.81 -1.27 +$EndPAD +$PAD +Sh "10" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 8 "N-0000032" +Po -13.97 1.27 +$EndPAD +$PAD +Sh "19" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 24 "xled7" +Po -1.27 -1.27 +$EndPAD +$PAD +Sh "12" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 9 "N-0000033" +Po -11.43 1.27 +$EndPAD +$PAD +Sh "21" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 25 "xled8" +Po 1.27 -1.27 +$EndPAD +$PAD +Sh "14" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "GND" +Po -8.89 1.27 +$EndPAD +$PAD +Sh "23" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 17 "N-0000092" +Po 3.81 -1.27 +$EndPAD +$PAD +Sh "16" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 10 "N-0000034" +Po -6.35 1.27 +$EndPAD +$PAD +Sh "25" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "GND" +Po 6.35 -1.27 +$EndPAD +$PAD +Sh "18" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 3 "N-0000027" +Po -3.81 1.27 +$EndPAD +$PAD +Sh "27" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 8.89 -1.27 +$EndPAD +$PAD +Sh "20" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "GND" +Po -1.27 1.27 +$EndPAD +$PAD +Sh "29" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 15 "N-0000090" +Po 11.43 -1.27 +$EndPAD +$PAD +Sh "22" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 11 "N-0000035" +Po 1.27 1.27 +$EndPAD +$PAD +Sh "31" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 16 "N-0000091" +Po 13.97 -1.27 +$EndPAD +$PAD +Sh "24" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 12 "N-0000036" +Po 3.81 1.27 +$EndPAD +$PAD +Sh "26" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 13 "N-0000037" +Po 6.35 1.27 +$EndPAD +$PAD +Sh "33" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 4 "N-0000028" +Po 16.51 -1.27 +$EndPAD +$PAD +Sh "28" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 8.89 1.27 +$EndPAD +$PAD +Sh "32" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 14 "N-0000038" +Po 13.97 1.27 +$EndPAD +$PAD +Sh "34" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 16.51 1.27 +$EndPAD +$PAD +Sh "36" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 19.05 1.27 +$EndPAD +$PAD +Sh "38" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 21.59 1.27 +$EndPAD +$PAD +Sh "35" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 5 "N-0000029" +Po 19.05 -1.27 +$EndPAD +$PAD +Sh "37" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 6 "N-0000030" +Po 21.59 -1.27 +$EndPAD +$PAD +Sh "3" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 18 "xled1" +Po -21.59 -1.27 +$EndPAD +$PAD +Sh "5" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 19 "xled2" +Po -19.05 -1.27 +$EndPAD +$PAD +Sh "7" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 20 "xled3" +Po -16.51 -1.27 +$EndPAD +$PAD +Sh "9" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "GND" +Po -13.97 -1.27 +$EndPAD +$PAD +Sh "39" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "GND" +Po 24.13 -1.27 +$EndPAD +$PAD +Sh "40" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 24.13 1.27 +$EndPAD +$PAD +Sh "30" C 1.524 1.524 0 0 0 +Dr 1.016 0 0 +At STD N 00E0FFFF +Ne 2 "GND" +Po 11.43 1.27 +$EndPAD +$PAD +Sh "H2" C 2.85 2.85 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -29 0 +$EndPAD +$PAD +Sh "H3" C 2.85 2.85 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 29 0 +$EndPAD +$PAD +Sh "H4" C 2.85 2.85 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 29 -49 +$EndPAD +$PAD +Sh "H1" C 2.85 2.85 0 0 0 +Dr 2.75 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -29 -49 +$EndPAD +$SHAPE3D +Na "pin_array/pins_array_20x2.wrl" +Sc 1 1 1 +Of 0 0 0 +Ro 0 0 0 +$EndSHAPE3D +$EndMODULE RASPI_BPLUS_MIRRORED +$MODULE SIL-3PDP +Po 0 0 0 15 54BD2D6F 00000000 ~~ +Li SIL-3PDP +Cd Connecteur 3 pins +Kw CONN DEV +Sc 0 +AR /54BD28E4 +Op 0 0 0 +T0 3.175 -2.54 0.5 0.5 0 0.125 N V 21 N "P3" +T1 -2.286 -2.54 0.5 0.5 0 0.125 N I 21 N "SERIAL3V" +T2 2.54 -1.778 0.5 0.5 0 0.1 N V 21 N "TX" +T2 0 -1.778 0.5 0.5 0 0.1 N V 21 N "RX" +T2 -2.54 -1.778 0.5 0.5 0 0.1 N V 21 N "GND" +DS -3.81 1.27 -3.81 -1.27 0.3048 21 +DS -3.81 -1.27 3.81 -1.27 0.3048 21 +DS 3.81 -1.27 3.81 1.27 0.3048 21 +DS 3.81 1.27 -3.81 1.27 0.3048 21 +DS -1.27 -1.27 -1.27 1.27 0.3048 21 +$PAD +Sh "1" R 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 1 "GND" +Po -2.54 0 +$EndPAD +$PAD +Sh "2" C 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 2 "RX" +Po 0 0 +$EndPAD +$PAD +Sh "3" C 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 3 "TX" +Po 2.54 0 +$EndPAD +$EndMODULE SIL-3PDP +$MODULE SIL-5PDP +Po 0 0 0 15 54BD2E53 00000000 ~~ +Li SIL-5PDP +Cd Connecteur 5 pins +Kw CONN DEV +Sc 0 +AR /54BD2904 +Op 0 0 0 +T0 4.699 -2.54 0.5 0.5 0 0.125 N V 21 N "P4" +T1 -5.715 -2.54 0.5 0.5 0 0.125 N I 21 N "EXPANSION" +T2 3.81 -1.778 0.5 0.5 0 0.1 N V 21 N "GPIO" +T2 1.27 -1.778 0.5 0.5 0 0.1 N V 21 N "GND" +T2 -1.27 -1.778 0.5 0.5 0 0.1 N V 21 N "5V" +T2 -3.81 -1.778 0.5 0.5 0 0.1 N V 21 N "N/C" +T2 -6.223 -1.778 0.5 0.5 0 0.1 N V 21 N "3.3V" +DS -7.62 1.27 -7.62 -1.27 0.3048 21 +DS -7.62 -1.27 5.08 -1.27 0.3048 21 +DS 5.08 -1.27 5.08 1.27 0.3048 21 +DS 5.08 1.27 -7.62 1.27 0.3048 21 +DS -5.08 1.27 -5.08 -1.27 0.3048 21 +$PAD +Sh "1" R 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 1 "+3.3V" +Po -6.35 0 +$EndPAD +$PAD +Sh "2" C 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -3.81 0 +$EndPAD +$PAD +Sh "3" C 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 2 "+5V" +Po -1.27 0 +$EndPAD +$PAD +Sh "4" C 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 3 "GND" +Po 1.27 0 +$EndPAD +$PAD +Sh "5" C 1.397 1.397 0 0 0 +Dr 0.8128 0 0 +At STD N 00E0FFFF +Ne 4 "SPARE_IO" +Po 3.81 0 +$EndPAD +$EndMODULE SIL-5PDP +$MODULE SW_KND2 +Po 0 0 0 15 548F15A7 00000000 ~~ +Li SW_KND2 +Cd Switch inverseur +Kw SWITCH DEV +Sc 0 +AR +Op 0 0 0 +T0 3.5 7.9 1.016 1.016 900 0.2032 N V 21 N "SW_KND2_1x2" +T1 -0.05 -20.3 1.016 1.016 0 0.2032 N V 21 N "SW*" +DS -4.75 -18.9 -4.75 18.9 0.15 21 +DS -4.75 18.9 4.75 18.9 0.15 21 +DS 4.75 18.9 4.75 -18.9 0.15 21 +DS 4.75 -18.9 -4.75 -18.9 0.15 21 +DS -4.75 -10.3 -4.75 10.3 0.15 21 +DS -4.75 10.3 4.75 10.3 0.15 21 +DS 4.75 10.3 4.75 -10.3 0.15 21 +DS 4.75 -10.3 -4.75 -10.3 0.15 21 +$PAD +Sh "2" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 0 +$EndPAD +$PAD +Sh "1" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -5.58 +$EndPAD +$PAD +Sh "3" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 5.58 +$EndPAD +$PAD +Sh "H1" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -15 +$EndPAD +$PAD +Sh "H2" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 15 +$EndPAD +$EndMODULE SW_KND2 +$MODULE SW_KND2_PDP +Po 0 0 0 15 54B2AA91 00000000 ~~ +Li SW_KND2_PDP +Cd Switch inverseur +Kw SWITCH DEV +Sc 0 +AR +Op 0 0 0 +T0 4 0 0.3 0.3 900 0.05 N I 21 N "SW_KND2_1x2_PDP" +T1 -0.05 -20.3 1.2 1.2 0 0.2032 N V 21 N "SW*" +DS -4.75 7.8 -4.75 -10.3 0.15 21 +DS -4.75 7.8 4.75 7.8 0.15 21 +DS 4.75 7.8 4.75 -10.3 0.15 21 +DS -4.75 -10.3 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 4.75 -18.9 0.15 21 +DS 4.75 -18.9 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 -4.75 -10.3 0.15 21 +$PAD +Sh "1" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 0 +$EndPAD +$PAD +Sh "2" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -5.58 +$EndPAD +$PAD +Sh "3" O 3.81 2.54 0 0 0 +Dr 2.5 0 0 O 2.5 0.8 +At STD N 00E0FFFF +Ne 0 "" +Po 0 5.58 +$EndPAD +$PAD +Sh "H1" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -15 +$EndPAD +$EndMODULE SW_KND2_PDP +$MODULE SW_KND2_PDP2 +Po 0 0 0 15 554E2AD7 00000000 ~~ +Li SW_KND2_PDP2 +Cd Switch inverseur +Kw SWITCH DEV +Sc 0 +AR +Op 0 0 0 +T0 3.429 -3.683 0.3 0.3 900 0.05 N I 21 N "SW_KND2_1x2_PDP" +T1 -0.05 -20.3 1.2 1.2 0 0.2032 N V 21 N "SW*" +DS -4.75 1.95 -4.75 -10.35 0.15 21 +DS 4.75 -10.3 4.75 1.95 0.15 21 +DS -4.75 1.958 4.75 1.958 0.15 21 +DS -4.75 -10.3 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 4.75 -18.9 0.15 21 +DS 4.75 -18.9 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 -4.75 -10.3 0.15 21 +$PAD +Sh "1" O 5.08 2.54 0 0 0 +Dr 3.45 0 0 O 3.45 1.18 +At STD N 00E0FFFF +Ne 0 "" +Po 0 0 +$EndPAD +$PAD +Sh "2" O 5.08 2.54 0 0 0 +Dr 3.45 0 0 O 3.45 1.15 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -5.58 +$EndPAD +$PAD +Sh "3" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -15 +$EndPAD +$EndMODULE SW_KND2_PDP2 +$MODULE SW_PIDP2019 +Po 0 0 0 15 5CB38C3F 00000000 ~~ +Li SW_PIDP2019 +Cd Switch inverseur +Kw SWITCH DEV +Sc 0 +AR /548EF8A0 +Op 0 0 0 +T0 3.429 -3.683 0.3 0.3 900 0.05 N I 21 N "RLS" +T1 0 -13.3 1.2 1.2 0 0.2032 N V 21 N "SW*" +DS -4.7 -10 4.7 -10 0.15 21 +DS 4.75 5.75 4.75 2 0.15 21 +DS -4.75 5.75 -4.75 2 0.15 21 +DS -4.75 5.75 4.75 5.75 0.15 21 +DS -4.75 1.95 -4.75 -10.35 0.15 21 +DS 4.75 -10.3 4.75 1.95 0.15 21 +$PAD +Sh "1" O 3.9 2.1 0 0 0 +Dr 2.9 0 0 O 2.9 1.1 +At STD N 00E0FFFF +Ne 2 "row3" +Po 0 0 +.LocalClearance 0.8 +$EndPAD +$PAD +Sh "2" O 3.9 2.1 0 0 0 +Dr 2.9 0 0 O 2.9 1.1 +At STD N 00E0FFFF +Ne 1 "N-0000068" +Po 0 -4.7 +.LocalClearance 0.65 +$EndPAD +$PAD +Sh "" C 2.5 2.5 0 0 0 +Dr 1.6 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 1.6 -7.875 +$EndPAD +$PAD +Sh "" O 3.9 2.1 0 0 0 +Dr 2.9 0 0 O 2.9 1.1 +At STD N 00E0FFFF +Ne 0 "" +Po 0 4.7 +.LocalClearance 0.65 +$EndPAD +$PAD +Sh "" C 2.5 2.5 0 0 0 +Dr 1.6 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -1.6 7.875 +$EndPAD +$PAD +Sh "" C 2.5 2.5 0 0 0 +Dr 1.6 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po -1.6 -7.875 +$EndPAD +$PAD +Sh "" C 2.5 2.5 0 0 0 +Dr 1.6 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 1.6 7.875 +$EndPAD +$EndMODULE SW_PIDP2019 +$MODULE SW_RLS_MOUNT +Po 0 0 0 15 5668A1A7 00000000 ~~ +Li SW_RLS_MOUNT +Cd Switch inverseur +Kw SWITCH DEV +Sc 0 +AR /548EF8A0 +Op 0 0 0 +T0 3.429 -3.683 0.3 0.3 900 0.05 N I 21 N "RLS" +T1 -0.05 -20.3 1.2 1.2 0 0.2032 N V 21 N "SW*" +DS 4.75 5.75 4.75 2 0.15 21 +DS -4.75 5.75 -4.75 2 0.15 21 +DS -4.75 5.75 4.75 5.75 0.15 21 +DS -4.75 1.95 -4.75 -10.35 0.15 21 +DS 4.75 -10.3 4.75 1.95 0.15 21 +DS -4.75 1.958 4.75 1.958 0.15 21 +DS -4.75 -10.3 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 4.75 -18.9 0.15 21 +DS 4.75 -18.9 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 -4.75 -10.3 0.15 21 +$PAD +Sh "1" O 5.08 2.54 0 0 0 +Dr 2.85 0 0 O 2.85 1 +At STD N 00E0FFFF +Ne 2 "row3" +Po 0 0 +$EndPAD +$PAD +Sh "2" O 5.08 2.54 0 0 0 +Dr 2.85 0 0 O 2.85 1 +At STD N 00E0FFFF +Ne 1 "N-0000068" +Po 0 -4.5 +$EndPAD +$PAD +Sh "" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -15 +$EndPAD +$PAD +Sh "" O 5.08 1.6 0 0 0 +Dr 2.85 0 0 O 2.85 1 +At STD N 00E0FFFF +Ne 0 "" +Po 0 4.5 +$EndPAD +$EndMODULE SW_RLS_MOUNT +$MODULE SW_RLS_PIDP +Po 0 0 0 15 5668A1A7 00000000 ~~ +Li SW_RLS_PIDP +Cd Switch inverseur +Kw SWITCH DEV +Sc 0 +AR /548EF8A0 +Op 0 0 0 +T0 3.429 -3.683 0.3 0.3 900 0.05 N I 21 N "RLS" +T1 -0.05 -20.3 1.2 1.2 0 0.2032 N V 21 N "SW*" +DS 4.75 5.75 4.75 2 0.15 21 +DS -4.75 5.75 -4.75 2 0.15 21 +DS -4.75 5.75 4.75 5.75 0.15 21 +DS -4.75 1.95 -4.75 -10.35 0.15 21 +DS 4.75 -10.3 4.75 1.95 0.15 21 +DS -4.75 1.958 4.75 1.958 0.15 21 +DS -4.75 -10.3 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 4.75 -18.9 0.15 21 +DS 4.75 -18.9 -4.75 -18.9 0.15 21 +DS 4.75 -10.3 -4.75 -10.3 0.15 21 +$PAD +Sh "1" O 5.08 2.54 0 0 0 +Dr 2.85 0 0 O 2.85 1 +At STD N 00E0FFFF +Ne 2 "row3" +Po 0 0 +$EndPAD +$PAD +Sh "2" O 5.08 2.54 0 0 0 +Dr 2.85 0 0 O 2.85 1 +At STD N 00E0FFFF +Ne 1 "N-0000068" +Po 0 -4.5 +$EndPAD +$PAD +Sh "" C 4 4 0 0 0 +Dr 3 0 0 +At STD N 00E0FFFF +Ne 0 "" +Po 0 -15 +$EndPAD +$PAD +Sh "" O 5.08 1.6 0 0 0 +Dr 2.85 0 0 O 2.85 1 +At STD N 00E0FFFF +Ne 0 "" +Po 0 4.5 +$EndPAD +$EndMODULE SW_RLS_PIDP +$EndLIBRARY ADDED hardware/pidp8i/customlibraries/pdp8logo2.lib Index: hardware/pidp8i/customlibraries/pdp8logo2.lib ================================================================== --- /dev/null +++ hardware/pidp8i/customlibraries/pdp8logo2.lib @@ -0,0 +1,29 @@ +EESchema-LIBRARY Version 2.3 +# +# LOGO +# pixmap size w = 650, h = 97 +# +DEF LOGO G 0 40 Y Y 1 F N +F0 "#G" 0 -130 60 H I C CNN +F1 "LOGO" 0 130 60 H I C CNN +DRAW +P 21 0 0 1 1083 160 1067 160 1067 144 1067 -1 1067 -146 0 -146 -1067 -146 -1067 -1 -1067 144 0 144 1067 144 1067 160 0 160 -1083 160 -1083 -1 -1083 -163 0 -163 1083 -163 1083 -1 1083 160 1083 160 F +P 40 0 0 1 -940 110 -950 110 -950 57 -950 -3 -950 -63 -960 -63 -967 -62 -970 -59 -972 -58 -978 -61 -979 -62 -990 -65 -1001 -65 -1010 -62 -1019 -53 -1025 -40 -1027 -22 -1027 -14 -1025 -3 -1024 5 -1022 9 -1013 20 -1002 26 -990 27 -978 22 -970 17 -970 37 -970 57 -960 57 -950 57 -950 110 -987 110 -1033 110 -1033 -1 -1033 -113 -987 -113 -940 -113 -940 -1 -940 110 -940 110 F +P 35 0 0 1 -830 110 -867 110 -867 53 -867 45 -867 38 -867 27 -867 -18 -867 -63 -877 -63 -887 -63 -887 -18 -887 27 -877 27 -867 27 -867 38 -870 34 -877 34 -883 34 -886 38 -887 45 -886 53 -884 57 -877 57 -870 57 -867 53 -867 110 -877 110 -923 110 -923 -1 -923 -113 -877 -113 -830 -113 -830 -1 -830 110 -830 110 F +P 63 0 0 1 -720 110 -730 110 -730 27 -731 -28 -731 -40 -731 -57 -732 -69 -733 -78 -734 -83 -736 -87 -739 -90 -744 -93 -756 -98 -770 -99 -783 -98 -794 -93 -801 -86 -804 -80 -804 -79 -805 -75 -802 -73 -793 -73 -790 -73 -783 -74 -780 -76 -776 -80 -769 -81 -761 -79 -756 -75 -752 -68 -751 -59 -753 -56 -758 -59 -762 -61 -771 -63 -781 -62 -790 -59 -792 -59 -800 -50 -805 -36 -807 -19 -805 -4 -800 10 -792 20 -781 26 -770 27 -758 22 -754 19 -751 19 -750 22 -748 26 -740 27 -730 27 -730 110 -767 110 -813 110 -813 -1 -813 -113 -767 -113 -720 -113 -720 -1 -720 110 -720 110 F +P 35 0 0 1 -610 110 -647 110 -647 53 -647 45 -647 38 -647 27 -647 -18 -647 -63 -657 -63 -667 -63 -667 -18 -667 27 -657 27 -647 27 -647 38 -650 34 -657 34 -663 34 -666 38 -667 45 -666 53 -664 57 -657 57 -650 57 -647 53 -647 110 -657 110 -703 110 -703 -1 -703 -113 -657 -113 -610 -113 -610 -1 -610 110 -610 110 F +P 61 0 0 1 -497 -113 -498 -2 -498 109 -523 109 -523 15 -525 9 -530 7 -532 7 -535 6 -536 2 -537 -6 -537 -20 -537 -27 -536 -37 -535 -43 -533 -46 -530 -46 -526 -48 -523 -54 -524 -60 -529 -64 -539 -66 -551 -63 -552 -61 -555 -58 -556 -52 -557 -42 -557 -26 -557 -24 -557 -10 -557 -1 -559 5 -560 7 -563 7 -568 9 -570 15 -569 20 -563 25 -561 26 -558 30 -557 39 -556 47 -553 50 -547 50 -545 50 -539 50 -537 46 -537 37 -536 29 -535 25 -530 24 -525 22 -523 15 -523 109 -545 109 -592 109 -593 -2 -594 -113 -545 -113 -497 -113 -497 -113 F +P 60 0 0 1 -390 110 -398 110 -398 -61 -401 -62 -408 -63 -409 -63 -417 -62 -422 -59 -425 -58 -431 -61 -442 -66 -454 -65 -465 -58 -466 -57 -472 -47 -473 -35 -469 -24 -460 -16 -448 -11 -437 -9 -429 -7 -425 -4 -423 -1 -424 1 -428 6 -435 8 -442 7 -448 2 -449 1 -454 -2 -461 -3 -467 -2 -470 0 -468 8 -462 17 -455 23 -452 24 -439 27 -426 26 -414 22 -406 16 -405 14 -405 7 -404 -5 -404 -19 -403 -26 -403 -39 -402 -50 -400 -56 -398 -61 -398 110 -437 110 -483 110 -483 -1 -483 -113 -437 -113 -390 -113 -390 -1 -390 110 -390 110 F +P 21 0 0 1 -277 -113 -278 -2 -278 109 -313 109 -313 -63 -325 -63 -337 -63 -337 -3 -337 58 -326 57 -315 55 -314 -4 -313 -63 -313 109 -325 109 -372 109 -373 -2 -374 -113 -325 -113 -277 -113 -277 -113 F +P 58 0 0 1 19 36 17 54 12 66 2 75 1 75 -4 77 -4 46 -4 38 -4 27 -5 17 -6 9 -9 5 -13 1 -15 1 -24 -1 -37 -2 -57 -3 -83 -3 -143 -3 -143 29 -143 60 -81 60 -72 60 -49 60 -32 60 -20 58 -12 56 -7 52 -4 46 -4 77 -6 77 -17 78 -34 79 -57 79 -86 80 -167 81 -167 -1 -167 -83 -155 -83 -143 -83 -143 -53 -143 -23 -99 -23 -81 -22 -61 -22 -42 -21 -28 -20 -25 -20 -12 -18 -3 -16 3 -13 9 -9 14 -3 17 3 18 12 19 25 19 36 19 36 F +P 63 0 0 1 251 14 250 33 248 47 243 57 236 65 228 71 228 21 228 1 228 -17 226 -33 223 -45 217 -53 210 -59 206 -60 196 -61 181 -62 161 -63 134 -63 67 -63 67 -1 67 60 133 60 135 60 156 60 175 60 191 59 202 58 208 57 216 53 222 46 226 36 228 21 228 71 226 72 223 74 218 76 212 77 204 78 193 79 177 79 157 80 131 80 47 81 47 -1 47 -83 131 -82 136 -82 164 -82 186 -81 203 -80 215 -78 225 -76 231 -72 236 -67 240 -61 244 -53 247 -48 249 -39 250 -29 251 -16 251 2 251 14 251 14 F +P 57 0 0 1 470 34 467 50 462 64 454 73 452 74 448 75 446 76 446 39 446 29 446 18 444 10 440 5 432 1 429 0 418 -1 404 -2 385 -3 365 -3 307 -3 307 29 307 61 372 60 378 60 401 59 418 59 430 57 438 55 443 51 445 46 446 39 446 76 443 77 435 78 425 79 410 79 390 80 364 80 283 81 283 -1 283 -83 295 -83 307 -83 307 -53 307 -24 375 -22 400 -21 420 -20 435 -19 445 -17 453 -14 458 -10 462 -5 465 2 465 3 469 18 470 34 470 34 F +P 125 0 0 1 819 -33 817 -20 812 -9 805 -2 797 1 797 -39 795 -50 791 -57 787 -58 779 -60 767 -61 750 -62 726 -62 707 -63 691 -63 679 -63 671 -62 666 -61 663 -59 660 -56 656 -49 653 -38 654 -26 659 -17 660 -16 668 -12 681 -10 698 -8 716 -7 736 -7 754 -8 770 -9 783 -12 791 -15 793 -19 796 -28 797 -39 797 1 806 9 812 19 816 32 815 47 811 60 810 62 805 69 800 73 793 77 793 44 793 35 793 29 791 21 786 16 785 15 780 13 773 12 762 11 746 11 725 10 718 11 697 11 681 12 670 13 663 16 659 21 657 27 657 35 657 40 657 47 660 53 665 56 673 59 685 60 703 60 726 61 739 60 758 60 773 59 782 58 788 55 792 50 793 44 793 77 791 77 780 79 765 80 744 80 718 80 709 80 687 79 671 78 659 76 651 74 645 70 641 65 638 59 636 54 633 38 635 23 643 11 652 1 644 -3 643 -4 636 -12 632 -25 631 -40 633 -57 634 -59 639 -69 649 -75 663 -80 669 -81 682 -82 699 -82 719 -82 739 -82 757 -82 773 -81 784 -79 786 -79 800 -74 809 -68 815 -60 819 -47 819 -33 819 -33 F +P 24 0 0 1 935 79 933 80 930 81 926 80 915 80 890 15 889 11 881 -10 874 -29 867 -46 862 -59 859 -67 853 -83 865 -82 877 -81 905 -8 914 14 922 35 928 51 932 63 934 71 935 76 935 79 935 79 F +P 10 0 0 1 1020 80 1010 80 1000 80 1000 -1 1000 -83 1010 -83 1020 -83 1020 -1 1020 80 1020 80 F +P 10 0 0 1 597 -3 552 -3 507 -3 507 -13 507 -23 552 -23 597 -23 597 -13 597 -3 597 -3 F +P 19 0 0 1 -971 -20 -973 -8 -978 1 -986 6 -990 7 -998 4 -1003 -5 -1005 -19 -1005 -24 -1003 -34 -1001 -41 -1000 -41 -993 -45 -984 -46 -978 -42 -977 -42 -972 -32 -971 -20 -971 -20 F +P 17 0 0 1 -752 -12 -755 0 -762 6 -771 6 -778 1 -783 -7 -785 -19 -783 -30 -778 -40 -773 -44 -767 -46 -758 -41 -755 -38 -753 -31 -752 -20 -752 -12 -752 -12 F +P 17 0 0 1 -423 -30 -424 -25 -427 -24 -434 -25 -435 -25 -443 -27 -448 -28 -449 -29 -450 -35 -450 -42 -448 -47 -446 -49 -439 -49 -432 -45 -426 -39 -423 -30 -423 -30 F +ENDDRAW +ENDDEF ADDED hardware/pidp8i/customlibraries/pdp8logo2b.mod Index: hardware/pidp8i/customlibraries/pdp8logo2b.mod ================================================================== --- /dev/null +++ hardware/pidp8i/customlibraries/pdp8logo2b.mod @@ -0,0 +1,775 @@ +PCBNEW-LibModule-V1 +$INDEX +LOGO +$EndINDEX +# +# LOGO +# pixmap w = 650, h = 97 +# +$MODULE LOGO +Po 0 0 0 15 00000000 00000000 ~~ +Li LOGO +T0 0 1900 600 600 0 120 N I 21 "G***" +T1 0 -1900 600 600 0 120 N I 21 "LOGO" +DP 0 0 0 0 21 1 21 +Dl 10833 1633 +Dl 10667 1633 +Dl 10667 1466 +Dl 10667 16 +Dl 10667 -1434 +Dl 0 -1434 +Dl -10667 -1434 +Dl -10667 16 +Dl -10667 1466 +Dl 0 1466 +Dl 10667 1466 +Dl 10667 1633 +Dl 0 1633 +Dl -10833 1633 +Dl -10833 16 +Dl -10833 -1600 +Dl 0 -1600 +Dl 10833 -1600 +Dl 10833 16 +Dl 10833 1633 +Dl 10833 1633 +DP 0 0 0 0 41 1 21 +Dl -9400 1133 +Dl -9500 1133 +Dl -9500 633 +Dl -9500 33 +Dl -9500 -567 +Dl -9600 -567 +Dl -9700 -567 +Dl -9700 -365 +Dl -9700 -163 +Dl -9774 -215 +Dl -9894 -263 +Dl -10019 -254 +Dl -10132 -192 +Dl -10218 -85 +Dl -10236 -45 +Dl -10253 34 +Dl -10264 149 +Dl -10267 228 +Dl -10248 403 +Dl -10187 536 +Dl -10102 623 +Dl -10011 659 +Dl -9897 659 +Dl -9791 625 +Dl -9774 614 +Dl -9721 587 +Dl -9700 598 +Dl -9671 622 +Dl -9601 633 +Dl -9600 633 +Dl -9500 633 +Dl -9500 1133 +Dl -9867 1133 +Dl -10333 1133 +Dl -10333 16 +Dl -10333 -1100 +Dl -9867 -1100 +Dl -9400 -1100 +Dl -9400 16 +Dl -9400 1133 +Dl -9400 1133 +DP 0 0 0 0 35 1 21 +Dl -8300 1133 +Dl -8667 1133 +Dl -8667 633 +Dl -8667 183 +Dl -8667 -267 +Dl -8667 -450 +Dl -8672 -529 +Dl -8701 -561 +Dl -8767 -567 +Dl -8834 -561 +Dl -8862 -528 +Dl -8867 -450 +Dl -8861 -372 +Dl -8833 -340 +Dl -8767 -334 +Dl -8700 -340 +Dl -8672 -373 +Dl -8667 -450 +Dl -8667 -267 +Dl -8767 -267 +Dl -8867 -267 +Dl -8867 183 +Dl -8867 633 +Dl -8767 633 +Dl -8667 633 +Dl -8667 1133 +Dl -8767 1133 +Dl -9233 1133 +Dl -9233 16 +Dl -9233 -1100 +Dl -8767 -1100 +Dl -8300 -1100 +Dl -8300 16 +Dl -8300 1133 +Dl -8300 1133 +DP 0 0 0 0 66 1 21 +Dl -7200 1133 +Dl -7296 1133 +Dl -7296 -267 +Dl -7398 -267 +Dl -7477 -254 +Dl -7500 -215 +Dl -7506 -182 +Dl -7536 -190 +Dl -7574 -215 +Dl -7695 -267 +Dl -7812 -260 +Dl -7915 -200 +Dl -7998 -95 +Dl -8051 49 +Dl -8067 199 +Dl -8048 366 +Dl -7996 501 +Dl -7917 590 +Dl -7902 599 +Dl -7813 625 +Dl -7707 631 +Dl -7615 616 +Dl -7574 593 +Dl -7529 568 +Dl -7510 599 +Dl -7519 680 +Dl -7519 682 +Dl -7560 758 +Dl -7612 797 +Dl -7691 811 +Dl -7762 800 +Dl -7799 769 +Dl -7800 762 +Dl -7830 744 +Dl -7903 733 +Dl -7930 733 +Dl -8014 737 +Dl -8046 756 +Dl -8043 799 +Dl -8043 800 +Dl -8005 868 +Dl -7938 936 +Dl -7938 937 +Dl -7833 984 +Dl -7697 999 +Dl -7556 983 +Dl -7436 939 +Dl -7391 905 +Dl -7363 873 +Dl -7343 836 +Dl -7329 780 +Dl -7320 696 +Dl -7313 574 +Dl -7309 401 +Dl -7306 282 +Dl -7296 -267 +Dl -7296 1133 +Dl -7667 1133 +Dl -8133 1133 +Dl -8133 16 +Dl -8133 -1100 +Dl -7667 -1100 +Dl -7200 -1100 +Dl -7200 16 +Dl -7200 1133 +Dl -7200 1133 +DP 0 0 0 0 35 1 21 +Dl -6100 1133 +Dl -6467 1133 +Dl -6467 633 +Dl -6467 183 +Dl -6467 -267 +Dl -6467 -450 +Dl -6472 -529 +Dl -6501 -561 +Dl -6567 -567 +Dl -6634 -561 +Dl -6662 -528 +Dl -6667 -450 +Dl -6661 -372 +Dl -6633 -340 +Dl -6567 -334 +Dl -6500 -340 +Dl -6472 -373 +Dl -6467 -450 +Dl -6467 -267 +Dl -6567 -267 +Dl -6667 -267 +Dl -6667 183 +Dl -6667 633 +Dl -6567 633 +Dl -6467 633 +Dl -6467 1133 +Dl -6567 1133 +Dl -7033 1133 +Dl -7033 16 +Dl -7033 -1100 +Dl -6567 -1100 +Dl -6100 -1100 +Dl -6100 16 +Dl -6100 1133 +Dl -6100 1133 +DP 0 0 0 0 62 1 21 +Dl -4966 1133 +Dl -5233 1133 +Dl -5233 540 +Dl -5256 485 +Dl -5300 466 +Dl -5333 461 +Dl -5353 435 +Dl -5363 376 +Dl -5367 270 +Dl -5367 200 +Dl -5365 67 +Dl -5359 -13 +Dl -5344 -53 +Dl -5318 -66 +Dl -5300 -67 +Dl -5248 -87 +Dl -5233 -150 +Dl -5249 -216 +Dl -5300 -234 +Dl -5344 -245 +Dl -5363 -290 +Dl -5367 -367 +Dl -5371 -453 +Dl -5392 -491 +Dl -5445 -500 +Dl -5467 -500 +Dl -5533 -494 +Dl -5561 -462 +Dl -5567 -384 +Dl -5567 -381 +Dl -5577 -293 +Dl -5613 -251 +Dl -5633 -243 +Dl -5690 -199 +Dl -5700 -147 +Dl -5683 -83 +Dl -5633 -67 +Dl -5603 -63 +Dl -5584 -41 +Dl -5573 10 +Dl -5568 103 +Dl -5567 249 +Dl -5567 265 +Dl -5565 421 +Dl -5559 523 +Dl -5546 585 +Dl -5523 619 +Dl -5508 630 +Dl -5387 664 +Dl -5286 646 +Dl -5242 603 +Dl -5233 540 +Dl -5233 1133 +Dl -5450 1133 +Dl -5934 1133 +Dl -5926 25 +Dl -5917 -1084 +Dl -5450 -1084 +Dl -4983 -1084 +Dl -4975 25 +Dl -4966 1133 +Dl -4966 1133 +DP 0 0 0 0 60 1 21 +Dl -3900 1133 +Dl -3983 1133 +Dl -3983 610 +Dl -3999 568 +Dl -4014 507 +Dl -4026 399 +Dl -4033 262 +Dl -4034 193 +Dl -4037 53 +Dl -4044 -63 +Dl -4053 -137 +Dl -4059 -154 +Dl -4138 -219 +Dl -4257 -257 +Dl -4392 -265 +Dl -4522 -240 +Dl -4545 -230 +Dl -4621 -169 +Dl -4680 -77 +Dl -4700 1 +Dl -4673 26 +Dl -4610 32 +Dl -4538 22 +Dl -4484 -3 +Dl -4477 -12 +Dl -4419 -62 +Dl -4344 -76 +Dl -4275 -55 +Dl -4236 -4 +Dl -4233 15 +Dl -4244 48 +Dl -4284 73 +Dl -4366 95 +Dl -4474 114 +Dl -4599 163 +Dl -4685 248 +Dl -4727 357 +Dl -4720 472 +Dl -4657 579 +Dl -4652 584 +Dl -4542 652 +Dl -4418 661 +Dl -4310 616 +Dl -4245 587 +Dl -4217 599 +Dl -4173 622 +Dl -4092 633 +Dl -4080 633 +Dl -4005 629 +Dl -3983 610 +Dl -3983 1133 +Dl -4367 1133 +Dl -4833 1133 +Dl -4833 16 +Dl -4833 -1100 +Dl -4367 -1100 +Dl -3900 -1100 +Dl -3900 16 +Dl -3900 1133 +Dl -3900 1133 +DP 0 0 0 0 21 1 21 +Dl -2766 1133 +Dl -3132 1133 +Dl -3132 633 +Dl -3141 41 +Dl -3150 -550 +Dl -3258 -561 +Dl -3367 -571 +Dl -3367 31 +Dl -3367 633 +Dl -3249 633 +Dl -3132 633 +Dl -3132 1133 +Dl -3250 1133 +Dl -3734 1133 +Dl -3726 25 +Dl -3717 -1084 +Dl -3250 -1084 +Dl -2783 -1084 +Dl -2775 25 +Dl -2766 1133 +Dl -2766 1133 +DP 0 0 0 0 58 1 21 +Dl 196 -358 +Dl 194 -246 +Dl 184 -112 +Dl 167 -25 +Dl 137 38 +Dl 91 91 +Dl 36 138 +Dl -27 168 +Dl -37 170 +Dl -37 -373 +Dl -43 -454 +Dl -67 -513 +Dl -116 -553 +Dl -197 -579 +Dl -320 -593 +Dl -492 -599 +Dl -720 -600 +Dl -804 -600 +Dl -1433 -600 +Dl -1433 -284 +Dl -1433 33 +Dl -825 32 +Dl -567 30 +Dl -371 24 +Dl -234 12 +Dl -151 -3 +Dl -133 -10 +Dl -87 -41 +Dl -61 -86 +Dl -47 -164 +Dl -40 -268 +Dl -37 -373 +Dl -37 170 +Dl -116 188 +Dl -251 203 +Dl -275 205 +Dl -420 214 +Dl -607 222 +Dl -810 228 +Dl -992 230 +Dl -1433 233 +Dl -1433 533 +Dl -1433 833 +Dl -1550 833 +Dl -1667 833 +Dl -1667 13 +Dl -1667 -807 +Dl -858 -795 +Dl -569 -789 +Dl -342 -782 +Dl -173 -773 +Dl -56 -761 +Dl 12 -747 +Dl 24 -741 +Dl 118 -658 +Dl 174 -533 +Dl 196 -358 +Dl 196 -358 +DP 0 0 0 0 63 1 21 +Dl 2516 -17 +Dl 2514 166 +Dl 2506 298 +Dl 2492 397 +Dl 2468 480 +Dl 2444 539 +Dl 2406 617 +Dl 2366 678 +Dl 2316 726 +Dl 2283 742 +Dl 2283 -2 +Dl 2277 -206 +Dl 2257 -354 +Dl 2219 -457 +Dl 2159 -526 +Dl 2079 -569 +Dl 2021 -578 +Dl 1908 -587 +Dl 1751 -594 +Dl 1563 -599 +Dl 1356 -600 +Dl 1331 -600 +Dl 667 -600 +Dl 667 16 +Dl 667 633 +Dl 1342 632 +Dl 1608 630 +Dl 1812 625 +Dl 1960 616 +Dl 2057 603 +Dl 2100 590 +Dl 2176 535 +Dl 2229 455 +Dl 2262 339 +Dl 2279 175 +Dl 2283 -2 +Dl 2283 742 +Dl 2248 761 +Dl 2155 786 +Dl 2028 804 +Dl 1859 815 +Dl 1641 821 +Dl 1366 826 +Dl 1308 827 +Dl 467 839 +Dl 467 16 +Dl 467 -806 +Dl 1308 -795 +Dl 1569 -791 +Dl 1773 -787 +Dl 1927 -782 +Dl 2041 -775 +Dl 2123 -765 +Dl 2183 -752 +Dl 2228 -736 +Dl 2265 -716 +Dl 2363 -648 +Dl 2432 -567 +Dl 2478 -463 +Dl 2504 -323 +Dl 2515 -136 +Dl 2516 -17 +Dl 2516 -17 +DP 0 0 0 0 57 1 21 +Dl 4699 -340 +Dl 4693 -175 +Dl 4654 -22 +Dl 4653 -19 +Dl 4621 50 +Dl 4583 102 +Dl 4531 142 +Dl 4466 166 +Dl 4466 -286 +Dl 4465 -382 +Dl 4456 -454 +Dl 4431 -507 +Dl 4382 -544 +Dl 4300 -567 +Dl 4178 -581 +Dl 4007 -589 +Dl 3780 -593 +Dl 3719 -594 +Dl 3067 -604 +Dl 3067 -286 +Dl 3067 33 +Dl 3648 33 +Dl 3854 31 +Dl 4037 25 +Dl 4185 16 +Dl 4287 5 +Dl 4322 -3 +Dl 4400 -41 +Dl 4443 -93 +Dl 4462 -178 +Dl 4466 -286 +Dl 4466 166 +Dl 4456 170 +Dl 4350 191 +Dl 4202 204 +Dl 4006 214 +Dl 3753 223 +Dl 3067 243 +Dl 3067 538 +Dl 3067 833 +Dl 2950 833 +Dl 2833 833 +Dl 2833 13 +Dl 2833 -807 +Dl 3642 -795 +Dl 3898 -791 +Dl 4097 -787 +Dl 4247 -781 +Dl 4355 -773 +Dl 4432 -763 +Dl 4486 -750 +Dl 4525 -732 +Dl 4541 -722 +Dl 4620 -632 +Dl 4673 -499 +Dl 4699 -340 +Dl 4699 -340 +DP 0 0 0 0 126 1 21 +Dl 8194 339 +Dl 8187 479 +Dl 8150 605 +Dl 8095 686 +Dl 7999 748 +Dl 7968 758 +Dl 7968 397 +Dl 7962 284 +Dl 7933 191 +Dl 7933 -350 +Dl 7931 -435 +Dl 7917 -498 +Dl 7885 -542 +Dl 7824 -572 +Dl 7727 -589 +Dl 7585 -598 +Dl 7390 -600 +Dl 7258 -601 +Dl 7027 -599 +Dl 6854 -594 +Dl 6730 -581 +Dl 6649 -558 +Dl 6600 -521 +Dl 6575 -467 +Dl 6567 -394 +Dl 6567 -347 +Dl 6571 -264 +Dl 6589 -202 +Dl 6630 -158 +Dl 6701 -129 +Dl 6812 -111 +Dl 6970 -103 +Dl 7185 -101 +Dl 7250 -100 +Dl 7462 -102 +Dl 7618 -106 +Dl 7728 -114 +Dl 7801 -127 +Dl 7849 -146 +Dl 7859 -152 +Dl 7910 -206 +Dl 7931 -289 +Dl 7933 -350 +Dl 7933 191 +Dl 7908 158 +Dl 7833 123 +Dl 7706 97 +Dl 7544 80 +Dl 7359 73 +Dl 7166 74 +Dl 6980 83 +Dl 6814 102 +Dl 6684 128 +Dl 6603 164 +Dl 6596 170 +Dl 6545 262 +Dl 6532 381 +Dl 6557 497 +Dl 6602 569 +Dl 6631 594 +Dl 6665 611 +Dl 6716 623 +Dl 6793 630 +Dl 6907 632 +Dl 7068 630 +Dl 7264 627 +Dl 7498 621 +Dl 7673 613 +Dl 7795 602 +Dl 7872 588 +Dl 7911 570 +Dl 7951 501 +Dl 7968 397 +Dl 7968 758 +Dl 7861 794 +Dl 7837 799 +Dl 7729 812 +Dl 7573 821 +Dl 7387 827 +Dl 7188 828 +Dl 6993 826 +Dl 6821 820 +Dl 6687 810 +Dl 6633 802 +Dl 6489 759 +Dl 6396 695 +Dl 6342 598 +Dl 6335 574 +Dl 6307 406 +Dl 6317 251 +Dl 6360 125 +Dl 6434 42 +Dl 6445 36 +Dl 6522 -6 +Dl 6428 -101 +Dl 6353 -221 +Dl 6332 -371 +Dl 6364 -540 +Dl 6380 -582 +Dl 6412 -647 +Dl 6452 -697 +Dl 6509 -733 +Dl 6592 -758 +Dl 6711 -774 +Dl 6874 -785 +Dl 7092 -792 +Dl 7183 -794 +Dl 7444 -797 +Dl 7647 -794 +Dl 7802 -783 +Dl 7915 -761 +Dl 7997 -728 +Dl 8056 -681 +Dl 8100 -619 +Dl 8110 -600 +Dl 8154 -463 +Dl 8159 -315 +Dl 8126 -181 +Dl 8058 -82 +Dl 8057 -82 +Dl 7972 -9 +Dl 8049 27 +Dl 8124 94 +Dl 8172 204 +Dl 8194 339 +Dl 8194 339 +DP 0 0 0 0 24 1 21 +Dl 9352 -759 +Dl 9344 -707 +Dl 9320 -625 +Dl 9278 -507 +Dl 9218 -345 +Dl 9137 -133 +Dl 9055 83 +Dl 8776 816 +Dl 8654 827 +Dl 8533 837 +Dl 8595 677 +Dl 8626 596 +Dl 8675 466 +Dl 8739 298 +Dl 8811 104 +Dl 8889 -103 +Dl 8903 -142 +Dl 9149 -800 +Dl 9261 -800 +Dl 9300 -801 +Dl 9329 -799 +Dl 9347 -787 +Dl 9352 -759 +Dl 9352 -759 +DP 0 0 0 0 10 1 21 +Dl 10200 833 +Dl 10100 833 +Dl 10000 833 +Dl 10000 16 +Dl 10000 -800 +Dl 10100 -800 +Dl 10200 -800 +Dl 10200 16 +Dl 10200 833 +Dl 10200 833 +DP 0 0 0 0 10 1 21 +Dl 5967 233 +Dl 5517 233 +Dl 5067 233 +Dl 5067 133 +Dl 5067 33 +Dl 5517 33 +Dl 5967 33 +Dl 5967 133 +Dl 5967 233 +Dl 5967 233 +DP 0 0 0 0 19 1 21 +Dl -9711 203 +Dl -9723 320 +Dl -9770 420 +Dl -9774 424 +Dl -9842 461 +Dl -9929 457 +Dl -10002 414 +Dl -10004 411 +Dl -10032 346 +Dl -10048 245 +Dl -10050 196 +Dl -10033 55 +Dl -9983 -32 +Dl -9903 -61 +Dl -9856 -55 +Dl -9781 -5 +Dl -9732 87 +Dl -9711 203 +Dl -9711 203 +DP 0 0 0 0 17 1 21 +Dl -7517 203 +Dl -7524 319 +Dl -7551 389 +Dl -7582 419 +Dl -7665 462 +Dl -7732 446 +Dl -7774 408 +Dl -7829 307 +Dl -7848 191 +Dl -7831 78 +Dl -7783 -10 +Dl -7713 -55 +Dl -7617 -53 +Dl -7553 7 +Dl -7521 125 +Dl -7517 203 +Dl -7517 203 +DP 0 0 0 0 17 1 21 +Dl -4233 308 +Dl -4257 392 +Dl -4314 459 +Dl -4387 497 +Dl -4456 493 +Dl -4478 477 +Dl -4496 427 +Dl -4498 355 +Dl -4484 298 +Dl -4475 289 +Dl -4428 272 +Dl -4347 252 +Dl -4342 251 +Dl -4268 240 +Dl -4239 258 +Dl -4233 308 +Dl -4233 308 +$EndMODULE LOGO +$EndLIBRARY ADDED hardware/pidp8i/customlibraries/pdp8logo3.mod Index: hardware/pidp8i/customlibraries/pdp8logo3.mod ================================================================== --- /dev/null +++ hardware/pidp8i/customlibraries/pdp8logo3.mod @@ -0,0 +1,787 @@ +PCBNEW-LibModule-V1 +$INDEX +LOGO +$EndINDEX +# +# LOGO +# pixmap w = 500, h = 74 +# +$MODULE LOGO +Po 0 0 0 15 00000000 00000000 ~~ +Li LOGO +T0 0 1533 600 600 0 120 N I 21 "G***" +T1 0 -1533 600 600 0 120 N I 21 "LOGO" +DP 0 0 0 0 48 1 21 +Dl 8333 1233 +Dl 8217 1233 +Dl 8217 1117 +Dl 8217 0 +Dl 8217 -1117 +Dl 0 -1117 +Dl -8217 -1117 +Dl -8226 -34 +Dl -8227 230 +Dl -8228 473 +Dl -8227 687 +Dl -8226 864 +Dl -8224 995 +Dl -8221 1074 +Dl -8218 1091 +Dl -8205 1096 +Dl -8168 1100 +Dl -8105 1104 +Dl -8013 1108 +Dl -7892 1111 +Dl -7737 1114 +Dl -7548 1116 +Dl -7323 1119 +Dl -7058 1121 +Dl -6753 1122 +Dl -6404 1124 +Dl -6010 1125 +Dl -5569 1126 +Dl -5078 1127 +Dl -4536 1127 +Dl -3940 1127 +Dl -3288 1127 +Dl -2578 1127 +Dl -1808 1126 +Dl -976 1126 +Dl -80 1125 +Dl 7 1125 +Dl 8217 1117 +Dl 8217 1233 +Dl 0 1233 +Dl -8333 1233 +Dl -8333 0 +Dl -8333 -1233 +Dl 0 -1233 +Dl 8333 -1233 +Dl 8333 0 +Dl 8333 1233 +Dl 8333 1233 +DP 0 0 0 0 44 1 21 +Dl -7233 867 +Dl -7300 867 +Dl -7300 469 +Dl -7300 18 +Dl -7300 -433 +Dl -7383 -433 +Dl -7435 -427 +Dl -7459 -397 +Dl -7466 -324 +Dl -7467 -283 +Dl -7467 -132 +Dl -7549 -185 +Dl -7647 -220 +Dl -7737 -198 +Dl -7813 -132 +Dl -7869 -33 +Dl -7900 88 +Dl -7897 221 +Dl -7857 353 +Dl -7851 365 +Dl -7792 452 +Dl -7720 486 +Dl -7617 481 +Dl -7506 470 +Dl -7408 467 +Dl -7300 469 +Dl -7300 867 +Dl -7578 867 +Dl -7723 864 +Dl -7843 859 +Dl -7922 851 +Dl -7945 844 +Dl -7951 806 +Dl -7956 711 +Dl -7961 567 +Dl -7964 385 +Dl -7966 173 +Dl -7967 -6 +Dl -7967 -833 +Dl -7600 -833 +Dl -7233 -833 +Dl -7233 17 +Dl -7233 867 +Dl -7233 867 +DP 0 0 0 0 51 1 21 +Dl -6366 -833 +Dl -6375 8 +Dl -6383 850 +Dl -6667 857 +Dl -6667 213 +Dl -6667 133 +Dl -6667 -18 +Dl -6667 -335 +Dl -6667 -350 +Dl -6681 -414 +Dl -6735 -433 +Dl -6750 -433 +Dl -6814 -420 +Dl -6833 -366 +Dl -6833 -350 +Dl -6820 -287 +Dl -6766 -267 +Dl -6750 -267 +Dl -6687 -281 +Dl -6667 -335 +Dl -6667 -18 +Dl -6671 -115 +Dl -6681 -169 +Dl -6699 -194 +Dl -6730 -200 +Dl -6750 -200 +Dl -6788 -198 +Dl -6812 -184 +Dl -6826 -145 +Dl -6832 -70 +Dl -6833 53 +Dl -6833 133 +Dl -6833 284 +Dl -6829 381 +Dl -6820 436 +Dl -6801 460 +Dl -6770 466 +Dl -6750 467 +Dl -6712 464 +Dl -6688 450 +Dl -6675 412 +Dl -6668 337 +Dl -6667 213 +Dl -6667 857 +Dl -6742 859 +Dl -7100 869 +Dl -7100 18 +Dl -7100 -833 +Dl -6733 -833 +Dl -6366 -833 +Dl -6366 -833 +DP 0 0 0 0 57 1 21 +Dl -5533 867 +Dl -5595 867 +Dl -5595 -200 +Dl -5681 -200 +Dl -5745 -189 +Dl -5767 -166 +Dl -5790 -158 +Dl -5846 -184 +Dl -5849 -185 +Dl -5945 -219 +Dl -6035 -197 +Dl -6111 -132 +Dl -6169 -36 +Dl -6201 79 +Dl -6203 202 +Dl -6168 320 +Dl -6131 379 +Dl -6049 442 +Dl -5946 468 +Dl -5850 455 +Dl -5807 427 +Dl -5774 409 +Dl -5767 440 +Dl -5786 503 +Dl -5801 535 +Dl -5854 582 +Dl -5930 600 +Dl -5997 586 +Dl -6017 567 +Dl -6056 544 +Dl -6120 534 +Dl -6178 536 +Dl -6200 552 +Dl -6175 620 +Dl -6117 692 +Dl -6056 734 +Dl -5940 755 +Dl -5812 735 +Dl -5704 683 +Dl -5685 667 +Dl -5656 630 +Dl -5635 580 +Dl -5621 505 +Dl -5613 391 +Dl -5606 225 +Dl -5606 199 +Dl -5595 -200 +Dl -5595 867 +Dl -5900 867 +Dl -6267 867 +Dl -6267 17 +Dl -6267 -833 +Dl -5900 -833 +Dl -5533 -833 +Dl -5533 17 +Dl -5533 867 +Dl -5533 867 +DP 0 0 0 0 51 1 21 +Dl -4666 -833 +Dl -4675 8 +Dl -4683 850 +Dl -4967 857 +Dl -4967 213 +Dl -4967 133 +Dl -4967 -18 +Dl -4967 -335 +Dl -4967 -350 +Dl -4981 -414 +Dl -5035 -433 +Dl -5050 -433 +Dl -5114 -420 +Dl -5133 -366 +Dl -5133 -350 +Dl -5120 -287 +Dl -5066 -267 +Dl -5050 -267 +Dl -4987 -281 +Dl -4967 -335 +Dl -4967 -18 +Dl -4971 -115 +Dl -4981 -169 +Dl -4999 -194 +Dl -5030 -200 +Dl -5050 -200 +Dl -5088 -198 +Dl -5112 -184 +Dl -5126 -145 +Dl -5132 -70 +Dl -5133 53 +Dl -5133 133 +Dl -5133 284 +Dl -5129 381 +Dl -5120 436 +Dl -5101 460 +Dl -5070 466 +Dl -5050 467 +Dl -5012 464 +Dl -4988 450 +Dl -4975 412 +Dl -4968 337 +Dl -4967 213 +Dl -4967 857 +Dl -5042 859 +Dl -5400 869 +Dl -5400 18 +Dl -5400 -833 +Dl -5033 -833 +Dl -4666 -833 +Dl -4666 -833 +DP 0 0 0 0 50 1 21 +Dl -3833 867 +Dl -4033 867 +Dl -4033 -133 +Dl -4054 -188 +Dl -4083 -200 +Dl -4123 -229 +Dl -4133 -302 +Dl -4141 -374 +Dl -4173 -396 +Dl -4208 -394 +Dl -4271 -362 +Dl -4294 -292 +Dl -4311 -225 +Dl -4336 -200 +Dl -4361 -172 +Dl -4367 -133 +Dl -4353 -79 +Dl -4333 -67 +Dl -4316 -36 +Dl -4305 46 +Dl -4300 164 +Dl -4295 308 +Dl -4276 400 +Dl -4246 449 +Dl -4171 491 +Dl -4097 485 +Dl -4047 436 +Dl -4040 408 +Dl -4048 346 +Dl -4081 333 +Dl -4111 320 +Dl -4127 270 +Dl -4133 171 +Dl -4133 133 +Dl -4130 17 +Dl -4116 -45 +Dl -4090 -66 +Dl -4083 -67 +Dl -4043 -95 +Dl -4033 -133 +Dl -4033 867 +Dl -4200 867 +Dl -4567 867 +Dl -4567 17 +Dl -4567 -833 +Dl -4200 -833 +Dl -3833 -833 +Dl -3833 17 +Dl -3833 867 +Dl -3833 867 +DP 0 0 0 0 45 1 21 +Dl -3000 867 +Dl -3083 867 +Dl -3083 467 +Dl -3095 175 +Dl -3103 39 +Dl -3117 -74 +Dl -3133 -145 +Dl -3140 -157 +Dl -3219 -210 +Dl -3322 -225 +Dl -3431 -207 +Dl -3526 -162 +Dl -3587 -94 +Dl -3600 -42 +Dl -3574 -10 +Dl -3518 -1 +Dl -3464 -19 +Dl -3450 -33 +Dl -3404 -59 +Dl -3346 -67 +Dl -3280 -53 +Dl -3265 -18 +Dl -3296 23 +Dl -3365 58 +Dl -3414 70 +Dl -3541 115 +Dl -3614 198 +Dl -3633 295 +Dl -3607 402 +Dl -3537 470 +Dl -3437 487 +Dl -3418 484 +Dl -3310 469 +Dl -3200 465 +Dl -3083 467 +Dl -3083 867 +Dl -3350 867 +Dl -3700 867 +Dl -3700 17 +Dl -3700 -833 +Dl -3350 -833 +Dl -3000 -833 +Dl -3000 17 +Dl -3000 867 +Dl -3000 867 +DP 0 0 0 0 21 1 21 +Dl -2133 867 +Dl -2433 867 +Dl -2433 467 +Dl -2433 17 +Dl -2433 -433 +Dl -2517 -433 +Dl -2600 -433 +Dl -2600 17 +Dl -2600 467 +Dl -2517 467 +Dl -2433 467 +Dl -2433 867 +Dl -2500 867 +Dl -2867 867 +Dl -2867 17 +Dl -2867 -833 +Dl -2500 -833 +Dl -2133 -833 +Dl -2133 17 +Dl -2133 867 +Dl -2133 867 +DP 0 0 0 0 53 1 21 +Dl 161 -245 +Dl 149 -107 +Dl 107 14 +Dl 37 98 +Dl 21 107 +Dl -24 118 +Dl -24 -233 +Dl -27 -318 +Dl -42 -379 +Dl -77 -420 +Dl -143 -446 +Dl -248 -460 +Dl -402 -466 +Dl -604 -467 +Dl -1100 -467 +Dl -1100 -233 +Dl -1100 0 +Dl -604 0 +Dl -404 -1 +Dl -261 -6 +Dl -164 -14 +Dl -104 -27 +Dl -71 -46 +Dl -66 -51 +Dl -39 -116 +Dl -25 -212 +Dl -24 -233 +Dl -24 118 +Dl -41 123 +Dl -159 138 +Dl -324 150 +Dl -525 159 +Dl -575 160 +Dl -1100 174 +Dl -1100 404 +Dl -1101 524 +Dl -1109 593 +Dl -1128 624 +Dl -1163 633 +Dl -1183 633 +Dl -1267 633 +Dl -1267 -5 +Dl -1267 -643 +Dl -655 -625 +Dl -453 -618 +Dl -273 -607 +Dl -124 -595 +Dl -21 -582 +Dl 25 -571 +Dl 100 -497 +Dl 145 -382 +Dl 161 -245 +Dl 161 -245 +DP 0 0 0 0 69 1 21 +Dl 1928 -76 +Dl 1927 144 +Dl 1907 310 +Dl 1863 431 +Dl 1794 519 +Dl 1761 543 +Dl 1761 -77 +Dl 1757 -127 +Dl 1746 -242 +Dl 1727 -328 +Dl 1690 -389 +Dl 1628 -429 +Dl 1531 -452 +Dl 1391 -463 +Dl 1198 -467 +Dl 1063 -467 +Dl 533 -467 +Dl 533 0 +Dl 533 467 +Dl 1067 467 +Dl 1269 466 +Dl 1415 463 +Dl 1517 457 +Dl 1584 447 +Dl 1627 430 +Dl 1659 407 +Dl 1665 402 +Dl 1728 297 +Dl 1760 138 +Dl 1761 -77 +Dl 1761 543 +Dl 1749 553 +Dl 1708 575 +Dl 1650 591 +Dl 1567 603 +Dl 1449 612 +Dl 1285 620 +Dl 1067 626 +Dl 1014 627 +Dl 785 631 +Dl 615 633 +Dl 494 630 +Dl 416 624 +Dl 371 613 +Dl 351 598 +Dl 350 595 +Dl 344 547 +Dl 341 445 +Dl 339 300 +Dl 339 123 +Dl 341 -35 +Dl 350 -617 +Dl 683 -628 +Dl 876 -630 +Dl 1095 -627 +Dl 1304 -619 +Dl 1361 -616 +Dl 1520 -604 +Dl 1629 -591 +Dl 1703 -571 +Dl 1759 -542 +Dl 1811 -500 +Dl 1860 -454 +Dl 1891 -410 +Dl 1909 -351 +Dl 1920 -262 +Dl 1926 -128 +Dl 1928 -76 +Dl 1928 -76 +DP 0 0 0 0 54 1 21 +Dl 3600 -235 +Dl 3593 -110 +Dl 3567 -14 +Dl 3515 57 +Dl 3433 104 +Dl 3433 -233 +Dl 3427 -342 +Dl 3403 -404 +Dl 3369 -432 +Dl 3313 -445 +Dl 3203 -455 +Dl 3054 -463 +Dl 2878 -467 +Dl 2819 -467 +Dl 2333 -467 +Dl 2333 -233 +Dl 2333 0 +Dl 2819 0 +Dl 3000 -2 +Dl 3159 -9 +Dl 3283 -18 +Dl 3357 -30 +Dl 3369 -35 +Dl 3410 -73 +Dl 3429 -144 +Dl 3433 -233 +Dl 3433 104 +Dl 3429 107 +Dl 3302 140 +Dl 3126 158 +Dl 2895 165 +Dl 2775 166 +Dl 2333 167 +Dl 2333 400 +Dl 2331 522 +Dl 2323 593 +Dl 2305 625 +Dl 2272 633 +Dl 2265 633 +Dl 2203 615 +Dl 2181 590 +Dl 2176 544 +Dl 2173 443 +Dl 2172 299 +Dl 2172 124 +Dl 2174 -35 +Dl 2183 -617 +Dl 2816 -612 +Dl 3448 -606 +Dl 3524 -518 +Dl 3571 -447 +Dl 3594 -359 +Dl 3600 -235 +Dl 3600 -235 +DP 0 0 0 0 105 1 21 +Dl 6300 278 +Dl 6286 409 +Dl 6238 500 +Dl 6146 558 +Dl 6131 561 +Dl 6131 239 +Dl 6115 147 +Dl 6098 121 +Dl 6098 -303 +Dl 6080 -391 +Dl 6054 -430 +Dl 5997 -448 +Dl 5879 -458 +Dl 5698 -461 +Dl 5548 -459 +Dl 5089 -450 +Dl 5057 -355 +Dl 5046 -231 +Dl 5062 -180 +Dl 5079 -148 +Dl 5102 -126 +Dl 5144 -112 +Dl 5215 -104 +Dl 5326 -101 +Dl 5489 -100 +Dl 5559 -100 +Dl 5779 -103 +Dl 5934 -111 +Dl 6028 -126 +Dl 6060 -140 +Dl 6091 -209 +Dl 6098 -303 +Dl 6098 121 +Dl 6084 101 +Dl 6027 81 +Dl 5920 67 +Dl 5778 58 +Dl 5617 53 +Dl 5454 54 +Dl 5303 60 +Dl 5180 72 +Dl 5102 88 +Dl 5088 96 +Dl 5050 163 +Dl 5034 262 +Dl 5042 361 +Dl 5073 427 +Dl 5124 445 +Dl 5235 458 +Dl 5408 465 +Dl 5571 467 +Dl 5763 465 +Dl 5899 460 +Dl 5991 451 +Dl 6048 436 +Dl 6081 414 +Dl 6120 339 +Dl 6131 239 +Dl 6131 561 +Dl 6000 595 +Dl 5967 601 +Dl 5804 617 +Dl 5616 626 +Dl 5429 627 +Dl 5267 619 +Dl 5200 611 +Dl 5047 580 +Dl 4948 539 +Dl 4893 475 +Dl 4870 378 +Dl 4867 283 +Dl 4882 138 +Dl 4927 41 +Dl 4998 0 +Dl 5011 -1 +Dl 5015 -18 +Dl 4975 -59 +Dl 4967 -66 +Dl 4914 -118 +Dl 4890 -186 +Dl 4883 -294 +Dl 4883 -297 +Dl 4897 -438 +Dl 4939 -521 +Dl 5028 -570 +Dl 5179 -605 +Dl 5390 -625 +Dl 5600 -630 +Dl 5849 -622 +Dl 6039 -598 +Dl 6166 -558 +Dl 6223 -514 +Dl 6257 -428 +Dl 6268 -315 +Dl 6257 -199 +Dl 6226 -107 +Dl 6205 -80 +Dl 6166 -41 +Dl 6169 -7 +Dl 6217 47 +Dl 6221 52 +Dl 6278 133 +Dl 6299 240 +Dl 6300 278 +Dl 6300 278 +DP 0 0 0 0 32 1 21 +Dl 7198 -592 +Dl 7186 -549 +Dl 7154 -454 +Dl 7105 -318 +Dl 7043 -152 +Dl 6973 33 +Dl 6894 237 +Dl 6834 388 +Dl 6789 493 +Dl 6753 561 +Dl 6722 600 +Dl 6692 619 +Dl 6658 627 +Dl 6653 627 +Dl 6588 629 +Dl 6573 605 +Dl 6581 577 +Dl 6601 528 +Dl 6639 427 +Dl 6693 286 +Dl 6758 116 +Dl 6824 -58 +Dl 6902 -262 +Dl 6962 -412 +Dl 7007 -515 +Dl 7043 -581 +Dl 7073 -617 +Dl 7101 -631 +Dl 7121 -633 +Dl 7181 -619 +Dl 7198 -592 +Dl 7198 -592 +DP 0 0 0 0 21 1 21 +Dl 7850 216 +Dl 7848 375 +Dl 7845 486 +Dl 7838 557 +Dl 7827 598 +Dl 7810 618 +Dl 7787 625 +Dl 7775 627 +Dl 7709 618 +Dl 7682 593 +Dl 7677 546 +Dl 7674 444 +Dl 7672 299 +Dl 7672 123 +Dl 7674 -35 +Dl 7683 -617 +Dl 7767 -617 +Dl 7850 -617 +Dl 7850 0 +Dl 7850 216 +Dl 7850 216 +DP 0 0 0 0 10 1 21 +Dl 4600 167 +Dl 4250 167 +Dl 3900 167 +Dl 3900 83 +Dl 3900 0 +Dl 4250 0 +Dl 4600 0 +Dl 4600 83 +Dl 4600 167 +Dl 4600 167 +DP 0 0 0 0 15 1 21 +Dl -7473 83 +Dl -7474 178 +Dl -7508 264 +Dl -7573 319 +Dl -7605 327 +Dl -7685 315 +Dl -7713 282 +Dl -7736 169 +Dl -7724 65 +Dl -7684 -15 +Dl -7623 -55 +Dl -7573 -52 +Dl -7505 -1 +Dl -7473 83 +Dl -7473 83 +DP 0 0 0 0 16 1 21 +Dl -5780 194 +Dl -5813 279 +Dl -5870 328 +Dl -5940 329 +Dl -5993 293 +Dl -6024 226 +Dl -6032 129 +Dl -6019 33 +Dl -5986 -31 +Dl -5985 -32 +Dl -5911 -60 +Dl -5841 -31 +Dl -5791 46 +Dl -5782 82 +Dl -5780 194 +Dl -5780 194 +DP 0 0 0 0 12 1 21 +Dl -3267 227 +Dl -3288 302 +Dl -3338 351 +Dl -3398 363 +Dl -3447 330 +Dl -3457 312 +Dl -3449 247 +Dl -3416 212 +Dl -3336 171 +Dl -3283 180 +Dl -3267 227 +Dl -3267 227 +$EndMODULE LOGO +$EndLIBRARY ADDED hardware/pidp8i/logo/logo.svg Index: hardware/pidp8i/logo/logo.svg ================================================================== --- /dev/null +++ hardware/pidp8i/logo/logo.svg @@ -0,0 +1,1514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ADDED hardware/pidp8i/schematic.pdf Index: hardware/pidp8i/schematic.pdf ================================================================== --- /dev/null +++ hardware/pidp8i/schematic.pdf cannot compute difference between binary files DELETED lib/os8script.py Index: lib/os8script.py ================================================================== --- lib/os8script.py +++ /dev/null @@ -1,1887 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -######################################################################## -# simh-os8-script.py Library for scripting OS/8 under SIMH -# Contains validators and callers for os8 and simh commands to make -# it easier to create scripts. -# -# Copyright © 2017 by Jonathan Trites, William Cattey, and Warren Young. -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, -# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the names of the authors above -# shall not be used in advertising or otherwise to promote the sale, -# use or other dealings in this Software without prior written -# authorization from those authors. -######################################################################## - -# Bring in just the basics so we can bring in our local modules -import os -import sys -import tempfile -sys.path.insert (0, os.path.dirname (__file__) + '/../lib') -sys.path.insert (0, os.getcwd () + '/lib') - -# Python core modules we use -import re -from string import Template -import shutil -import subprocess - -# Our local modules -from pidp8i import * -from simh import * - -# Script Language Version -# Update this version number as the language evolves. -# Version 1.0 is the first public version. -LANG_VERSION = "1.0" - -# Error Class Definitions ############################################## -# Enables us to use exceptions from within this module. - -class Error(Exception): - """Base Class for exceptions in this module.""" - pass - -class InputError(Error): - """Exception raised for errors in the input. - - Attributes: - expr -- input expression in which the error occurred - msg -- explanation of the error - """ - - def __init__(self, msg): - self.msg = msg - - def __str__(self): - return self.msg - - -# Private globals ###################################################### -# Visible within this file, but not to the outside. - -# Identify a begin enabled/not_disabled command. group(1) contains either the enabled or -# disabled flag. Put the rest of the line in group(2) -_begin_en_dis_comm_re = re.compile ("^begin\s+(enabled|default|version)\s+(.+)$") - -# Identify an end enabled/not_disabled command. group(1) contains either the enabled or -# disabled flag. Put the rest of the line in group(2) -_end_en_dis_comm_re = re.compile ("^end\s+(enabled|default|version)\s+(.+)$") - -# Identify an end comm and put the rest of the line in group(1) -_end_comm_re = re.compile ("^end\s+(.+)?$") - -# Identify an end option command and put the rest of the line in group(1) -_end_option_comm_re = re.compile ("^end\s+option\s+(.+)$") - -# A valid version spec -_version_parse_re = re.compile ("^((\d+\.)*)?(\d+)?$") - -# Name of the DECtape image file we create -_new_sys_tape_prefix = "system" - -# Parser regexps used in patcher -_com_os8_parse_str = "^\.([a-zA-Z]+)\s*(.*)$" -_com_os8_parse = re.compile(_com_os8_parse_str) -_com_split_str = "^([a-zA-Z]+)\s*(.*)$" -_com_split_parse = re.compile(_com_split_str) -_odt_parse_str = "^([0-7]+)\s*/\s*(\S+)\s+([0-7;]+)" -_odt_parse = re.compile(_odt_parse_str) - -# Put command keyword in group(1) and the rest is in group(3) -_comm_re_str = "^(\S+)(\s+(.+))?$" -_comm_re = re.compile(_comm_re_str) - -# Identify an end comm and put the rest of the line in group(1) -_end_comm_re = re.compile ("^end\s+(.+)?$") - -# Identify an end option command and put the rest of the line in group(1) -_end_option_comm_re = re.compile ("^end\s+option\s+(.+)$") - -# Identify a begin command and put the rest of the line in group(1) -_begin_option_comm_re = re.compile ("^begin\s+option\s+(.+)$") - -# Parse an argument string into a sys device with -# device name in group(1), unit number in group(2) -# We put all bootable devices into this string so that when -# we add more devices, for example rl for RL01, we change one -# string not many. -_simh_boot_dev_str = "(rk|td|dt|rx)(\d*)" -_simh_boot_re = re.compile("^" + _simh_boot_dev_str + "$") - -# Parse an argument string for mount into SIMH device -# device name in group(1), unit number in group(2) -# And the rest in group (3) -_mount_regex_str = "^" + _simh_boot_dev_str + "\s+(.+)$" -_mount_re = re.compile(_mount_regex_str) - -# Map of SIMH device names to OS/8 device name prefixes. -_os8_from_simh_dev = {"rk" : "RK", "td" : "DTA", "dt" : "DTA", "rx" : "RX"} - -_os8_partitions = {"RK": ["A", "B"]} - -# OS/8 file name matching regex -_os8_file_re = re.compile("(\S+):(\S+)?") - -# Regular expression for syntax checking inside FOTP -# Destination is in group(1), Source is in group(3) -_fotp_re = re.compile ("^((\S+:)?\S+)<((\S+:)?\S+)$") - -# Regular expression for detecting the 2 arg and 3 arg forms -# of the "pal8" script command. - -# OS/8 name regex template: -# Optional device spec, i.e. DTA0: -# File spec with a specific extension or no extension. - -_os8_fspec = Template ("((\S+:)?([A-Z0-9]{1,6}|[A-Z0-9]{1,6}\.$ext))") -_os8_BN_fspec = _os8_fspec.substitute(ext="BN") -_os8_PA_fspec = _os8_fspec.substitute(ext="PA") -_os8_LS_fspec = _os8_fspec.substitute(ext="LS") - -# For the two arg form: -# The full destination spec is in group(1), The full source spec is in group(4). -# The device components, if any, are in group(2) for destination, and -# group(5) for source. -# The file components are in group(3) for destination, and group (6) for source. -# The destination file must either end in ".BN" or have no extension. -# The source must file either end in ".PA" or have no extension. -_two_arg_pal_re = re.compile ("^" + _os8_BN_fspec + "\s*<\s*" + _os8_PA_fspec + "$") - -# For the 3 arg form: -# The full destination spec is in group(1), The full source spec is in group(7). -# The full listing spec is in group(4) -# The device components, if any, are in group(2) for destination, group(5) -# for listing, and group(8) for source. -# The file components are in group(3) for destination, and group(9) for source, -# and group(6) for listing. -# The destination file must either end in ".BN" or have no extension. -# The source must file either end in ".PA" or have no extension. -# The listing must either end in "LS" or have no extension. - -_three_arg_pal_re = re.compile ("^" + _os8_BN_fspec + "\s*,\s*" + _os8_LS_fspec + "\s*<\s*" + _os8_PA_fspec + "$") - -# Regular expression for syntax checking inside ABSLDR -# One or more OS/8 binary files and optional args beginning with a slash. - -_absldr_re = re.compile ("^" + _os8_BN_fspec + "(," + _os8_BN_fspec + ")*(/\S)*$") - -# Regular expressions for syntax checking for cpto and cpfrom. -# May be where destination and default option /A is implied. -# Or