Added default SD card
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
#!/bin/bash
|
||||
#########################################################################################################
|
||||
## Copyright (c) 2019-2026 Philip Smart <info@eaw.app>
|
||||
## Licensed under the GNU General Public License v3. See LICENSE-SOFTWARE.txt.
|
||||
#########################################################################################################
|
||||
|
||||
export PICO_PATH=/dvlp/Projects/pico/
|
||||
export PICO_SDK_PATH=${PICO_PATH}/pico-sdk/
|
||||
|
||||
5
projects/tzpuPico/CMakeLists.txt
vendored
5
projects/tzpuPico/CMakeLists.txt
vendored
@@ -1,3 +1,8 @@
|
||||
#########################################################################################################
|
||||
## Copyright (c) 2019-2026 Philip Smart <info@eaw.app>
|
||||
## Licensed under the GNU General Public License v3. See LICENSE-SOFTWARE.txt.
|
||||
#########################################################################################################
|
||||
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
|
||||
# Pico SDC on Raspberry Pi 4
|
||||
|
||||
89
projects/tzpuPico/LICENSE
vendored
Normal file
89
projects/tzpuPico/LICENSE
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
picoZ80 / pico6502 — Licence Overview
|
||||
======================================
|
||||
|
||||
Copyright (c) 2019-2026 Philip Smart <info@eaw.app>
|
||||
Project URL: https://eaw.app
|
||||
|
||||
This project is dual-licensed. Different licence terms apply to different
|
||||
parts of the project as described below.
|
||||
|
||||
|
||||
Hardware Designs (CC BY-NC-SA 4.0)
|
||||
-----------------------------------
|
||||
All hardware designs — including KiCad schematics, PCB layouts, Gerber
|
||||
fabrication files, bills of materials, and mechanical drawings — are
|
||||
licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
|
||||
4.0 International License.
|
||||
|
||||
You are free to:
|
||||
- Share — copy and redistribute the material in any medium or format
|
||||
- Adapt — remix, transform, and build upon the material
|
||||
|
||||
Under the following terms:
|
||||
- Attribution — You must give appropriate credit, provide a link to
|
||||
the licence, and indicate if changes were made.
|
||||
- NonCommercial — You may not use the material for commercial purposes
|
||||
without the prior written permission of the copyright holder.
|
||||
- ShareAlike — If you remix, transform, or build upon the material,
|
||||
you must distribute your contributions under the same licence.
|
||||
|
||||
Full text: LICENSE-HARDWARE.txt
|
||||
Online: https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
|
||||
|
||||
|
||||
Firmware and Software (GNU GPL v3)
|
||||
------------------------------------
|
||||
All firmware and software source code — including C sources, PIO
|
||||
programs, header files, and build scripts — are licensed under the
|
||||
GNU General Public License, version 3 (or, at your option, any later
|
||||
version).
|
||||
|
||||
Full text: LICENSE-SOFTWARE.txt
|
||||
Online: https://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
|
||||
Documentation (CC BY-NC-SA 4.0)
|
||||
---------------------------------
|
||||
All documentation, user guides, and technical manuals authored by the
|
||||
copyright holder are licensed under CC BY-NC-SA 4.0 (same terms as the
|
||||
hardware designs above).
|
||||
|
||||
|
||||
Third-Party Components
|
||||
----------------------
|
||||
The following third-party libraries are included and retain their own
|
||||
licences:
|
||||
|
||||
Component Licence
|
||||
--------- -------
|
||||
Z80 CPU emulator library GNU GPL v3 (Manuel Sainz de
|
||||
(redcode/Z80) Baranda y Goñi)
|
||||
Raspberry Pi Pico SDK BSD 3-Clause
|
||||
TinyUSB MIT
|
||||
cJSON MIT
|
||||
ESP-IDF framework Apache 2.0
|
||||
Bootstrap 4 (web interface) MIT
|
||||
|
||||
|
||||
Trademark and Name Protection
|
||||
-----------------------------
|
||||
The names "picoZ80", "pico6502", and "engineers@work" and associated
|
||||
logos are trademarks of Philip Smart. You may not use these names or
|
||||
logos to promote or endorse derivative products without prior written
|
||||
permission. See the NOTICE file for full details.
|
||||
|
||||
|
||||
Commercial Licensing
|
||||
--------------------
|
||||
Commercial use of the hardware designs (manufacturing for sale,
|
||||
inclusion in commercial products, etc.) requires a separate commercial
|
||||
licence from the copyright holder.
|
||||
|
||||
If you are a manufacturer or distributor interested in producing picoZ80
|
||||
or pico6502 boards, or derivative hardware, for commercial sale, please
|
||||
contact:
|
||||
|
||||
Philip Smart <info@eaw.app>
|
||||
|
||||
Personal, educational, and hobbyist/club use is always permitted under
|
||||
the terms of the applicable open-source licences above.
|
||||
438
projects/tzpuPico/LICENSE-HARDWARE.txt
vendored
Normal file
438
projects/tzpuPico/LICENSE-HARDWARE.txt
vendored
Normal file
@@ -0,0 +1,438 @@
|
||||
Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||
("Public License"). To the extent this Public License may be
|
||||
interpreted as a contract, You are granted the Licensed Rights in
|
||||
consideration of Your acceptance of these terms and conditions, and the
|
||||
Licensor grants You such rights in consideration of benefits the
|
||||
Licensor receives from making the Licensed Material available under
|
||||
these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-NC-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution, NonCommercial, and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. NonCommercial means not primarily intended for or directed towards
|
||||
commercial advantage or monetary compensation. For purposes of
|
||||
this Public License, the exchange of the Licensed Material for
|
||||
other material subject to Copyright and Similar Rights by digital
|
||||
file-sharing or similar means is NonCommercial provided there is
|
||||
no payment of monetary compensation in connection with the
|
||||
exchange.
|
||||
|
||||
l. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
m. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
n. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part, for NonCommercial purposes only; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material for
|
||||
NonCommercial purposes only.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties, including when
|
||||
the Licensed Material is used other than for NonCommercial
|
||||
purposes.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-NC-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database for NonCommercial purposes
|
||||
only;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
147
projects/tzpuPico/NOTICE
vendored
Normal file
147
projects/tzpuPico/NOTICE
vendored
Normal file
@@ -0,0 +1,147 @@
|
||||
picoZ80 / pico6502 — NOTICE
|
||||
============================
|
||||
|
||||
Copyright (c) 2019-2026 Philip Smart <info@eaw.app>
|
||||
https://eaw.app
|
||||
|
||||
|
||||
1. Attribution Requirements
|
||||
---------------------------
|
||||
If you redistribute, display, or build upon any part of this project
|
||||
you MUST:
|
||||
|
||||
a) Retain this NOTICE file and all copyright headers in their
|
||||
entirety in every copy or substantial portion of the work.
|
||||
|
||||
b) Clearly and prominently credit "Philip Smart" and "engineers@work
|
||||
(eaw.app)" as the original author and project, with a link to
|
||||
https://eaw.app in any accompanying documentation, README, web
|
||||
page, or "About" screen.
|
||||
|
||||
c) If you have modified the work, clearly state what changes you made
|
||||
and that your version is a modified derivative — not the original
|
||||
picoZ80 or pico6502 project.
|
||||
|
||||
d) You may NOT imply that the original author endorses you, your
|
||||
organisation, or your derivative work without explicit written
|
||||
permission.
|
||||
|
||||
|
||||
2. Trademark and Name Protection
|
||||
---------------------------------
|
||||
The following names and marks are trademarks of Philip Smart and may
|
||||
NOT be used without prior written permission:
|
||||
|
||||
- picoZ80
|
||||
- pico6502
|
||||
- engineers@work
|
||||
- eaw.app
|
||||
- The picoZ80 and pico6502 logos and board silkscreen artwork
|
||||
|
||||
You may use these names solely to accurately describe the origin of
|
||||
the work (e.g., "based on the picoZ80 project by Philip Smart") but
|
||||
you may NOT:
|
||||
|
||||
a) Use "picoZ80", "pico6502", or any confusingly similar name as
|
||||
the name of a derivative product, fork, or commercial offering.
|
||||
|
||||
b) Remove, obscure, or alter the project name, author attribution,
|
||||
or copyright notices on the PCB silkscreen, in the firmware
|
||||
boot/splash screen, or in the web interface.
|
||||
|
||||
c) Present a copy, fork, or derivative as if it were the original
|
||||
project or your own original creation.
|
||||
|
||||
|
||||
3. Anti-Passing-Off
|
||||
--------------------
|
||||
You may NOT:
|
||||
|
||||
a) Claim authorship of this work or represent it as your own original
|
||||
creation.
|
||||
|
||||
b) Re-brand this project or any substantial portion of it under a
|
||||
different name and present it as a new or independent project.
|
||||
|
||||
c) Remove or alter authorship information, version strings, copyright
|
||||
notices, licence headers, or boot/splash screen credits.
|
||||
|
||||
d) Publish this work or derivatives on any repository, marketplace,
|
||||
or platform in a way that misrepresents the origin, authorship,
|
||||
or licensing of the project.
|
||||
|
||||
Any of the above constitutes passing off and is a violation of both
|
||||
the applicable licence terms and the moral rights of the author.
|
||||
|
||||
|
||||
4. Non-Commercial Use
|
||||
---------------------
|
||||
The hardware designs in this project are licensed under CC BY-NC-SA 4.0.
|
||||
"NonCommercial" means you may NOT use the hardware designs for
|
||||
commercial advantage or monetary compensation without the prior written
|
||||
permission of the copyright holder. Specifically:
|
||||
|
||||
- You MAY build boards for your own personal use.
|
||||
- You MAY build boards for use within your club, hackerspace,
|
||||
or educational institution (provided no profit is made).
|
||||
- You MAY share your modifications under the same licence terms.
|
||||
- You may NOT manufacture boards for sale.
|
||||
- You may NOT sell kits, assembled boards, or products derived from
|
||||
these designs.
|
||||
- You may NOT include these designs in a commercial product.
|
||||
|
||||
If you wish to manufacture or sell picoZ80 or pico6502 hardware, or
|
||||
incorporate the designs into a commercial product, please contact the
|
||||
author to arrange a commercial licence:
|
||||
|
||||
Philip Smart <info@eaw.app>
|
||||
|
||||
|
||||
5. Firmware Copyleft (GPL v3)
|
||||
-----------------------------
|
||||
The firmware source code is licensed under the GNU General Public
|
||||
License v3. This means:
|
||||
|
||||
- You must make your source code available if you distribute binaries.
|
||||
- Any modifications you distribute must also be licensed under GPL v3.
|
||||
- You must preserve all copyright notices and licence headers.
|
||||
- The GPL v3 does permit commercial use of the software, but note
|
||||
that the hardware required to run it is under the non-commercial
|
||||
CC BY-NC-SA 4.0 licence.
|
||||
|
||||
|
||||
6. Third-Party Components
|
||||
-------------------------
|
||||
This project includes the following third-party components which are
|
||||
copyright their respective authors:
|
||||
|
||||
Z80 CPU emulator library
|
||||
Copyright (c) 1999-2024 Manuel Sainz de Baranda y Goñi
|
||||
Licensed under GNU GPL v3
|
||||
https://github.com/redcode/Z80
|
||||
|
||||
Raspberry Pi Pico SDK
|
||||
Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
Licensed under BSD 3-Clause
|
||||
|
||||
TinyUSB
|
||||
Copyright (c) 2018 hathach (tinyusb.org)
|
||||
Licensed under MIT
|
||||
|
||||
cJSON
|
||||
Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
|
||||
Licensed under MIT
|
||||
|
||||
ESP-IDF
|
||||
Copyright (c) 2016-2024 Espressif Systems (Shanghai) Co. Ltd.
|
||||
Licensed under Apache License 2.0
|
||||
|
||||
|
||||
7. Contact
|
||||
----------
|
||||
For commercial licensing, permissions, or any questions:
|
||||
|
||||
Philip Smart
|
||||
Email: info@eaw.app
|
||||
Web: https://eaw.app
|
||||
Git: https://git.eaw.app/eaw/pico
|
||||
256
projects/tzpuPico/SD/default/config.json
vendored
Executable file
256
projects/tzpuPico/SD/default/config.json
vendored
Executable file
@@ -0,0 +1,256 @@
|
||||
/* picoZ80 JSON Configuration
|
||||
Target: Vanilla Z80
|
||||
|
||||
Initialisation Order:
|
||||
1. Default: All Physical
|
||||
2. Apply Core Configuration.
|
||||
3. Apply Driver Configuration.
|
||||
3a. Apply default Driver Configuration.
|
||||
3b. Apply Interface Configuration.
|
||||
4. Apply Memory Configuration.
|
||||
5. Apply IO Configuration.
|
||||
*/
|
||||
|
||||
{
|
||||
/* -------------------------------------------
|
||||
RP2350 Configuration Block
|
||||
------------------------------------------- */
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"cpufreq": 240000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"z80": [
|
||||
/* -------------------------------------
|
||||
Bootloader Configuration
|
||||
------------------------------------- */
|
||||
/* Currently not used. */
|
||||
{
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 1 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 2 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
ESP32 Configuration Block
|
||||
------------------------------------- */
|
||||
"esp32": {
|
||||
"core": {
|
||||
"device": "Z80",
|
||||
"mode": 0
|
||||
},
|
||||
"wifi": {
|
||||
"ssid": "<your SSID>",
|
||||
"password": "<your PWD",
|
||||
"ip": "192.168.4.4",
|
||||
"netmask": "255.255.255.0",
|
||||
"gateway": "192.168.4.1",
|
||||
"wifimode": "ap",
|
||||
"dhcp": 1,
|
||||
"override": 1,
|
||||
"webfs": "webfs",
|
||||
"persist": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
44
projects/tzpuPico/SD/default/config/config.json.rc2014.mini.json
vendored
Executable file
44
projects/tzpuPico/SD/default/config/config.json.rc2014.mini.json
vendored
Executable file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"frequency": 280000
|
||||
},
|
||||
"z80": {
|
||||
"memory": [{
|
||||
"addr": 0x0000,
|
||||
"size": 0x8000,
|
||||
"type": "ROM",
|
||||
"func": "DRAMREFRESH",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x8000,
|
||||
"size": 0x8000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}],
|
||||
"io": [{
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}],
|
||||
"virtual": [{
|
||||
"name": "MZ700"
|
||||
}]
|
||||
}
|
||||
},
|
||||
"esp32": {
|
||||
"wifi": {
|
||||
"ssid": "my_network",
|
||||
"password": "my_pass",
|
||||
"override": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
155
projects/tzpuPico/SD/default/config/config.json.rc2014.ram
vendored
Executable file
155
projects/tzpuPico/SD/default/config/config.json.rc2014.ram
vendored
Executable file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"frequency": 240000
|
||||
},
|
||||
"z80": {
|
||||
"memory": [{
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x1000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x2000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x3000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x4000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x5000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x6000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x7000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x8000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x9000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xA000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xB000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xC000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xE000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}],
|
||||
"io": [{
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}],
|
||||
"virtual": [{
|
||||
"name": "MZ700"
|
||||
}]
|
||||
}
|
||||
},
|
||||
"esp32": {
|
||||
"wifi": {
|
||||
"ssid": "my_network",
|
||||
"password": "my_pass",
|
||||
"override": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
155
projects/tzpuPico/SD/default/config/config.json.rc2014.ram2
vendored
Executable file
155
projects/tzpuPico/SD/default/config/config.json.rc2014.ram2
vendored
Executable file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"frequency": 280000
|
||||
},
|
||||
"z80": {
|
||||
"memory": [{
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x1000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x2000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x3000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x4000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x5000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x6000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x7000,
|
||||
"size": 0x1000,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "CPYTORAM",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x8000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0x9000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xA000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xB000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xC000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xE000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}, {
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": ""
|
||||
}],
|
||||
"io": [{
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}],
|
||||
"virtual": [{
|
||||
"name": "MZ700"
|
||||
}]
|
||||
}
|
||||
},
|
||||
"esp32": {
|
||||
"wifi": {
|
||||
"ssid": "my_network",
|
||||
"password": "my_pass",
|
||||
"override": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
256
projects/tzpuPico/SD/default/config/config_Basic_Basic.json
vendored
Executable file
256
projects/tzpuPico/SD/default/config/config_Basic_Basic.json
vendored
Executable file
@@ -0,0 +1,256 @@
|
||||
/* picoZ80 JSON Configuration
|
||||
Target: Vanilla Z80
|
||||
|
||||
Initialisation Order:
|
||||
1. Default: All Physical
|
||||
2. Apply Core Configuration.
|
||||
3. Apply Driver Configuration.
|
||||
3a. Apply default Driver Configuration.
|
||||
3b. Apply Interface Configuration.
|
||||
4. Apply Memory Configuration.
|
||||
5. Apply IO Configuration.
|
||||
*/
|
||||
|
||||
{
|
||||
/* -------------------------------------------
|
||||
RP2350 Configuration Block
|
||||
------------------------------------------- */
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"cpufreq": 240000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"z80": [
|
||||
/* -------------------------------------
|
||||
Bootloader Configuration
|
||||
------------------------------------- */
|
||||
/* Currently not used. */
|
||||
{
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 1 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 2 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
ESP32 Configuration Block
|
||||
------------------------------------- */
|
||||
"esp32": {
|
||||
"core": {
|
||||
"device": "Z80",
|
||||
"mode": 0
|
||||
},
|
||||
"wifi": {
|
||||
"ssid": "<your SSID>",
|
||||
"password": "<your PWD",
|
||||
"ip": "192.168.4.4",
|
||||
"netmask": "255.255.255.0",
|
||||
"gateway": "192.168.4.1",
|
||||
"wifimode": "ap",
|
||||
"dhcp": 1,
|
||||
"override": 1,
|
||||
"webfs": "webfs",
|
||||
"persist": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
549
projects/tzpuPico/SD/default/config/config_Basic_MZ-700.json
vendored
Executable file
549
projects/tzpuPico/SD/default/config/config_Basic_MZ-700.json
vendored
Executable file
@@ -0,0 +1,549 @@
|
||||
/* picoZ80 JSON Configuration
|
||||
Target: Vanilla Z80
|
||||
|
||||
Initialisation Order:
|
||||
1. Default: All Physical
|
||||
2. Apply Core Configuration.
|
||||
3. Apply Driver Configuration.
|
||||
3a. Apply default Driver Configuration.
|
||||
3b. Apply Interface Configuration.
|
||||
4. Apply Memory Configuration.
|
||||
5. Apply IO Configuration.
|
||||
*/
|
||||
|
||||
{
|
||||
/* -------------------------------------------
|
||||
RP2350 Configuration Block
|
||||
------------------------------------------- */
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"cpufreq": 240000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"z80": [
|
||||
/* -------------------------------------
|
||||
Bootloader Configuration
|
||||
------------------------------------- */
|
||||
/* Currently not used. */
|
||||
{
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 1 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 2 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[ {
|
||||
"name": "MZ700",
|
||||
"enable": 1,
|
||||
"type": "VIRTUAL",
|
||||
"if": [
|
||||
/* RFS - ROM Filing System.
|
||||
An enhanced monitor, originally developed on the MZ-80A ROM Disk board.
|
||||
*/
|
||||
{
|
||||
"name": "RFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Monitor ROM. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 32,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 1. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 40,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_II_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 2. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 48,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_III_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 3. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 56,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* TZFS - Tranzputer Filing System.
|
||||
An enhanced monitor, using a virtual I/O processor in the RP2350B to fulfill requests such as SD access.
|
||||
*/
|
||||
{
|
||||
"name": "TZFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/tzfs.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Base TZFS. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x1800,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* Bank 0 is used for MZ700 virtual Core RAM */
|
||||
/* TZFS Bank 2 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x1800,
|
||||
"addr": 0xF000,
|
||||
"bank": 2,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 3 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x2800,
|
||||
"addr": 0xF000,
|
||||
"bank": 4,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 4 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x3800,
|
||||
"addr": 0x1200,
|
||||
"bank": 5,
|
||||
"size": 0xBE00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* MZ-1E05 Floppy Disk Interface.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E05",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E05.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xF000,
|
||||
"bank": 0,
|
||||
"size": 0xD00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "dsk/MZ-2Z009-RFS.dsk",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E14 QD Interface Card MZ-700.
|
||||
* Interface is same as MZ-1E19, just specify a ROM containing the drivers.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E14",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E19 QD Interface Card.
|
||||
* A ROM-less QD interface card for the MZ-800/1500/2000/2200.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E19",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 2,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"addrmap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"dstaddr": 0xF000
|
||||
}
|
||||
],
|
||||
"iomap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF6,
|
||||
"16bit": 0,
|
||||
"size": 0x1,
|
||||
"dstaddr": 0xE6
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1R12 S-RAM Board.
|
||||
First board defaults to 0xF8-0xFA with system rom enabled.
|
||||
Further boards should map 0xF8-0xFA to an unused address and have no rom.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1R12.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD1.ram",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"iomap": [ {
|
||||
"enable": 1,
|
||||
"srcaddr": 0xF8,
|
||||
"16bit": 0,
|
||||
"size": 0x3,
|
||||
"dstaddr": 0x00
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD2.ram",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1R18 Ram File Board.
|
||||
One board allowed, creates a 64K RAM board accessed at 0xEA/0xEB.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R18",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
ESP32 Configuration Block
|
||||
------------------------------------- */
|
||||
"esp32": {
|
||||
"core": {
|
||||
"device": "Z80",
|
||||
"mode": 0
|
||||
},
|
||||
"wifi": {
|
||||
"ssid": "<your SSID>",
|
||||
"password": "<your PWD",
|
||||
"ip": "192.168.4.4",
|
||||
"netmask": "255.255.255.0",
|
||||
"gateway": "192.168.4.1",
|
||||
"wifimode": "ap",
|
||||
"dhcp": 1,
|
||||
"override": 1,
|
||||
"webfs": "webfs",
|
||||
"persist": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
547
projects/tzpuPico/SD/default/config/config_MZ-700_Basic.json
vendored
Executable file
547
projects/tzpuPico/SD/default/config/config_MZ-700_Basic.json
vendored
Executable file
@@ -0,0 +1,547 @@
|
||||
/* picoZ80 JSON Configuration
|
||||
Target: Vanilla Z80
|
||||
|
||||
Initialisation Order:
|
||||
1. Default: All Physical
|
||||
2. Apply Core Configuration.
|
||||
3. Apply Driver Configuration.
|
||||
3a. Apply default Driver Configuration.
|
||||
3b. Apply Interface Configuration.
|
||||
4. Apply Memory Configuration.
|
||||
5. Apply IO Configuration.
|
||||
*/
|
||||
|
||||
{
|
||||
/* -------------------------------------------
|
||||
RP2350 Configuration Block
|
||||
------------------------------------------- */
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"cpufreq": 240000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"z80": [
|
||||
/* -------------------------------------
|
||||
Bootloader Configuration
|
||||
------------------------------------- */
|
||||
/* Currently not used. */
|
||||
{
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 1 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 320000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[ {
|
||||
"name": "MZ700",
|
||||
"enable": 1,
|
||||
"type": "VIRTUAL",
|
||||
"if": [
|
||||
/* RFS - ROM Filing System.
|
||||
An enhanced monitor, originally developed on the MZ-80A ROM Disk board.
|
||||
*/
|
||||
{
|
||||
"name": "RFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Monitor ROM. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 32,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 1. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 40,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_II_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 2. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 48,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_III_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 3. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 56,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* TZFS - Tranzputer Filing System.
|
||||
An enhanced monitor, using a virtual I/O processor in the RP2350B to fulfill requests such as SD access.
|
||||
*/
|
||||
{
|
||||
"name": "TZFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/tzfs.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Base TZFS. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x1800,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* Bank 0 is used for MZ700 virtual Core RAM */
|
||||
/* TZFS Bank 2 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x1800,
|
||||
"addr": 0xF000,
|
||||
"bank": 2,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 3 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x2800,
|
||||
"addr": 0xF000,
|
||||
"bank": 4,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 4 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x3800,
|
||||
"addr": 0x1200,
|
||||
"bank": 5,
|
||||
"size": 0xBE00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* MZ-1E05 Floppy Disk Interface.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E05",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E05.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xF000,
|
||||
"bank": 0,
|
||||
"size": 0xD00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "dsk/MZ-2Z009-RFS.dsk",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E14 QD Interface Card MZ-700.
|
||||
* Interface is same as MZ-1E19, just specify a ROM containing the drivers.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E14",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E19 QD Interface Card.
|
||||
* A ROM-less QD interface card for the MZ-800/1500/2000/2200.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E19",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 2,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"addrmap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"dstaddr": 0xF000
|
||||
}
|
||||
],
|
||||
"iomap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF6,
|
||||
"16bit": 0,
|
||||
"size": 0x1,
|
||||
"dstaddr": 0xE6
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1R12 S-RAM Board.
|
||||
First board defaults to 0xF8-0xFA with system rom enabled.
|
||||
Further boards should map 0xF8-0xFA to an unused address and have no rom.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1R12.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD1.ram",
|
||||
"enable": 1
|
||||
}
|
||||
] },
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"iomap": [ {
|
||||
"enable": 1,
|
||||
"srcaddr": 0xF8,
|
||||
"16bit": 0,
|
||||
"size": 0x3,
|
||||
"dstaddr": 0x00
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD2.ram",
|
||||
"enable": 1
|
||||
}
|
||||
] },
|
||||
/* MZ-1R18 Ram File Board.
|
||||
One board allowed, creates a 64K RAM board accessed at 0xEA/0xEB.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R18",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 2 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
ESP32 Configuration Block
|
||||
------------------------------------- */
|
||||
"esp32": {
|
||||
"core": {
|
||||
"device": "Z80",
|
||||
"mode": 0
|
||||
},
|
||||
"wifi": {
|
||||
"ssid": "<your SSID>",
|
||||
"password": "<your PWD",
|
||||
"ip": "192.168.4.4",
|
||||
"netmask": "255.255.255.0",
|
||||
"gateway": "192.168.4.1",
|
||||
"wifimode": "ap",
|
||||
"dhcp": 1,
|
||||
"override": 1,
|
||||
"webfs": "webfs",
|
||||
"persist": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
838
projects/tzpuPico/SD/default/config/config_MZ-700_MZ-700.json
vendored
Executable file
838
projects/tzpuPico/SD/default/config/config_MZ-700_MZ-700.json
vendored
Executable file
@@ -0,0 +1,838 @@
|
||||
/* picoZ80 JSON Configuration
|
||||
Target: Sharp MZ-700
|
||||
|
||||
Initialisation Order:
|
||||
1. Default: All Physical
|
||||
2. Apply Core Configuration.
|
||||
3. Apply Driver Configuration.
|
||||
3a. Apply default Driver Configuration.
|
||||
3b. Apply Interface Configuration.
|
||||
4. Apply Memory Configuration.
|
||||
5. Apply IO Configuration.
|
||||
*/
|
||||
|
||||
{
|
||||
/* -------------------------------------------
|
||||
RP2350 Configuration Block
|
||||
------------------------------------------- */
|
||||
"rp2350": {
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"cpufreq": 240000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"z80": [
|
||||
/* -------------------------------------
|
||||
Bootloader Configuration
|
||||
------------------------------------- */
|
||||
/* Currently not used. */
|
||||
{
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 1 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.20,
|
||||
"cpufreq": 320000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[ {
|
||||
"name": "MZ700",
|
||||
"enable": 1,
|
||||
"type": "VIRTUAL",
|
||||
"if": [
|
||||
/* RFS - ROM Filing System.
|
||||
An enhanced monitor, originally developed on the MZ-80A ROM Disk board.
|
||||
*/
|
||||
{
|
||||
"name": "RFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Monitor ROM. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 32,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 1. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 40,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_II_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 2. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 48,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_III_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 3. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 56,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* TZFS - Tranzputer Filing System.
|
||||
An enhanced monitor, using a virtual I/O processor in the RP2350B to fulfill requests such as SD access.
|
||||
*/
|
||||
{
|
||||
"name": "TZFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/tzfs.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Base TZFS. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x1800,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* Bank 0 is used for MZ700 virtual Core RAM */
|
||||
/* TZFS Bank 2 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x1800,
|
||||
"addr": 0xF000,
|
||||
"bank": 2,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 3 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x2800,
|
||||
"addr": 0xF000,
|
||||
"bank": 4,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 4 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x3800,
|
||||
"addr": 0x1200,
|
||||
"bank": 5,
|
||||
"size": 0xBE00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* MZ-1E05 Floppy Disk Interface.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E05",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E05.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xF000,
|
||||
"bank": 0,
|
||||
"size": 0xD00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "dsk/MZ-2Z009-RFS.dsk",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E14 QD Interface Card MZ-700.
|
||||
* Interface is same as MZ-1E19, just specify a ROM containing the drivers.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E14",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E19 QD Interface Card.
|
||||
* A ROM-less QD interface card for the MZ-800/1500/2000/2200.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E19",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 2,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"addrmap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"dstaddr": 0xF000
|
||||
}
|
||||
],
|
||||
"iomap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF6,
|
||||
"16bit": 0,
|
||||
"size": 0x1,
|
||||
"dstaddr": 0xE6
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1R12 S-RAM Board.
|
||||
First board defaults to 0xF8-0xFA with system rom enabled.
|
||||
Further boards should map 0xF8-0xFA to an unused address and have no rom.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1R12.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD1.ram",
|
||||
"enable": 1
|
||||
}
|
||||
] },
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"iomap": [ {
|
||||
"enable": 1,
|
||||
"srcaddr": 0xF8,
|
||||
"16bit": 0,
|
||||
"size": 0x3,
|
||||
"dstaddr": 0x00
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD2.ram",
|
||||
"enable": 1
|
||||
}
|
||||
] },
|
||||
/* MZ-1R18 Ram File Board.
|
||||
One board allowed, creates a 64K RAM board accessed at 0xEA/0xEB.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R18",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
RP2350 Partition 2 Configuration
|
||||
------------------------------------- */
|
||||
{
|
||||
"core": {
|
||||
"voltage": 1.15,
|
||||
"cpufreq": 300000000,
|
||||
"psramfreq": 133000000
|
||||
},
|
||||
"memory": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0x1000,
|
||||
"size": 0xC000,
|
||||
"type": "RAM",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xD000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE000,
|
||||
"size": 0x0800,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xE800,
|
||||
"size": 0x0800,
|
||||
"type": "ROM",
|
||||
"func": "",
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "MZ-1E14.bin",
|
||||
"fileofs": 0
|
||||
},
|
||||
{
|
||||
"enable": 0,
|
||||
"addr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"type": "PHYSICAL",
|
||||
"func": "",
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0,
|
||||
"bank": 0,
|
||||
"task": "",
|
||||
"file": "",
|
||||
"fileofs": 0
|
||||
}
|
||||
],
|
||||
"io": [ {
|
||||
"enable": 0,
|
||||
"addr": 0x0000,
|
||||
"size": 0x10000,
|
||||
"type": "PHYSICAL",
|
||||
"func": ""
|
||||
}
|
||||
],
|
||||
"drivers":[ {
|
||||
"name": "MZ700",
|
||||
"enable": 1,
|
||||
"type": "VIRTUAL",
|
||||
"if": [
|
||||
/* RFS - ROM Filing System.
|
||||
An enhanced monitor, originally developed on the MZ-80A ROM Disk board.
|
||||
*/
|
||||
{
|
||||
"name": "RFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Monitor ROM. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 32,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 1. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 40,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_II_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 2. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 48,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "roms/USER_ROM_III_PICOZ80_256.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* User ROM 3. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0x0,
|
||||
"bank": 56,
|
||||
"size": 0x80000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* TZFS - Tranzputer Filing System.
|
||||
An enhanced monitor, using a virtual I/O processor in the RP2350B to fulfill requests such as SD access.
|
||||
*/
|
||||
{
|
||||
"name": "TZFS",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/tzfs.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ /* Base TZFS. */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x1800,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* Bank 0 is used for MZ700 virtual Core RAM */
|
||||
/* TZFS Bank 2 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x1800,
|
||||
"addr": 0xF000,
|
||||
"bank": 2,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 3 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x2800,
|
||||
"addr": 0xF000,
|
||||
"bank": 4,
|
||||
"size": 0x1000,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
},
|
||||
/* TZFS Bank 4 */
|
||||
{
|
||||
"enable": 1,
|
||||
"position": 0x3800,
|
||||
"addr": 0x1200,
|
||||
"bank": 5,
|
||||
"size": 0xBE00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* MZ-1E05 Floppy Disk Interface.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E05",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E05.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xF000,
|
||||
"bank": 0,
|
||||
"size": 0xD00,
|
||||
"tcycwait": 0,
|
||||
"tcycsync": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "dsk/MZ-2Z009-RFS.dsk",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E14 QD Interface Card MZ-700.
|
||||
* Interface is same as MZ-1E19, just specify a ROM containing the drivers.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E14",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 1,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1E19 QD Interface Card.
|
||||
* A ROM-less QD interface card for the MZ-800/1500/2000/2200.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1E19",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 1,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1E14.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 2,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"addrmap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF000,
|
||||
"size": 0x1000,
|
||||
"dstaddr": 0xF000
|
||||
}
|
||||
],
|
||||
"iomap": [ {
|
||||
"enable": 0,
|
||||
"srcaddr": 0xF6,
|
||||
"16bit": 0,
|
||||
"size": 0x1,
|
||||
"dstaddr": 0xE6
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "qd/BASIC_5Z008A_RFS.qd",
|
||||
"enable": 1
|
||||
},
|
||||
{
|
||||
"file": "qd/BASIC_5Z008B.qd",
|
||||
"enable": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
/* MZ-1R12 S-RAM Board.
|
||||
First board defaults to 0xF8-0xFA with system rom enabled.
|
||||
Further boards should map 0xF8-0xFA to an unused address and have no rom.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"rom": [ {
|
||||
"file": "roms/MZ-1R12.bin",
|
||||
"enable": 0,
|
||||
"loadaddr": [ {
|
||||
"enable": 1,
|
||||
"position": 0x0,
|
||||
"addr": 0xE800,
|
||||
"bank": 0,
|
||||
"size": 0x800,
|
||||
"tcycwait": 1,
|
||||
"tcycsync": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD1.ram",
|
||||
"enable": 1
|
||||
}
|
||||
] },
|
||||
{
|
||||
"name": "MZ-1R12",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0,
|
||||
"iomap": [ {
|
||||
"enable": 1,
|
||||
"srcaddr": 0xF8,
|
||||
"16bit": 0,
|
||||
"size": 0x3,
|
||||
"dstaddr": 0x00
|
||||
}
|
||||
],
|
||||
"param": [ {
|
||||
"file": "ram/RAMBOARD2.ram",
|
||||
"enable": 1
|
||||
}
|
||||
] },
|
||||
/* MZ-1R18 Ram File Board.
|
||||
One board allowed, creates a 64K RAM board accessed at 0xEA/0xEB.
|
||||
*/
|
||||
{
|
||||
"name": "MZ-1R18",
|
||||
"type": "VIRTUAL",
|
||||
"enable": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
/* -------------------------------------
|
||||
ESP32 Configuration Block
|
||||
------------------------------------- */
|
||||
"esp32": {
|
||||
"core": {
|
||||
"device": "Z80",
|
||||
"mode": 0
|
||||
},
|
||||
"wifi": {
|
||||
"ssid": "<your SSID>",
|
||||
"password": "<your PWD>",
|
||||
"ip": "192.168.4.4",
|
||||
"netmask": "255.255.255.0",
|
||||
"gateway": "192.168.4.1",
|
||||
"wifimode": "ap",
|
||||
"dhcp": 1,
|
||||
"override": 1,
|
||||
"webfs": "webfs",
|
||||
"persist": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BIN
projects/tzpuPico/SD/default/dsk/BASIC_2Z009.dsk
vendored
Executable file
BIN
projects/tzpuPico/SD/default/dsk/BASIC_2Z009.dsk
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/dsk/MZ-2Z009-RFS.dsk
vendored
Executable file
BIN
projects/tzpuPico/SD/default/dsk/MZ-2Z009-RFS.dsk
vendored
Executable file
Binary file not shown.
1
projects/tzpuPico/SD/default/filepack_version.txt
vendored
Executable file
1
projects/tzpuPico/SD/default/filepack_version.txt
vendored
Executable file
@@ -0,0 +1 @@
|
||||
2.03
|
||||
1
projects/tzpuPico/SD/default/pZ80_version.txt
vendored
Executable file
1
projects/tzpuPico/SD/default/pZ80_version.txt
vendored
Executable file
@@ -0,0 +1 @@
|
||||
1.00
|
||||
BIN
projects/tzpuPico/SD/default/qd/BASIC_5Z008A.qd
vendored
Executable file
BIN
projects/tzpuPico/SD/default/qd/BASIC_5Z008A.qd
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/qd/BASIC_5Z008A_RFS.qd
vendored
Executable file
BIN
projects/tzpuPico/SD/default/qd/BASIC_5Z008A_RFS.qd
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/ram/RAMBOARD1.ram
vendored
Executable file
BIN
projects/tzpuPico/SD/default/ram/RAMBOARD1.ram
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/ram/RAMBOARD2.ram
vendored
Executable file
BIN
projects/tzpuPico/SD/default/ram/RAMBOARD2.ram
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/recovery/tzpuPico_Install.tar.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/recovery/tzpuPico_Install.tar.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/roms/BASIC_5Z008A_RFS.qd
vendored
Executable file
BIN
projects/tzpuPico/SD/default/roms/BASIC_5Z008A_RFS.qd
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/roms/MZ700_2732_1Z_013A.BIN
vendored
Executable file
BIN
projects/tzpuPico/SD/default/roms/MZ700_2732_1Z_013A.BIN
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/roms/MZ700_2732_CGROM.BIN
vendored
Executable file
BIN
projects/tzpuPico/SD/default/roms/MZ700_2732_CGROM.BIN
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/roms/RC_1.512k.rom
vendored
Executable file
BIN
projects/tzpuPico/SD/default/roms/RC_1.512k.rom
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/tmp/ESP-Bridge.uf2
vendored
Executable file
BIN
projects/tzpuPico/SD/default/tmp/ESP-Bridge.uf2
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/tmp/filepack.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/tmp/filepack.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/tmp/filepack.tar
vendored
Executable file
BIN
projects/tzpuPico/SD/default/tmp/filepack.tar
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/tzpuPico_Install.tar
vendored
Executable file
BIN
projects/tzpuPico/SD/default/tzpuPico_Install.tar
vendored
Executable file
Binary file not shown.
1
projects/tzpuPico/SD/default/tzpuPico_version.txt
vendored
Executable file
1
projects/tzpuPico/SD/default/tzpuPico_version.txt
vendored
Executable file
@@ -0,0 +1 @@
|
||||
2.0
|
||||
159
projects/tzpuPico/SD/default/webfs/config.htm
vendored
Executable file
159
projects/tzpuPico/SD/default/webfs/config.htm
vendored
Executable file
@@ -0,0 +1,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Add custom CSS here -->
|
||||
<link href="css/sb-admin.css" rel="stylesheet">
|
||||
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="font-awesome/css/font-awesome.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
|
||||
<li><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i> Status</a></li>
|
||||
<li class="active"><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Config Editor</a></li>
|
||||
<li><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i> File Manager</a></li>
|
||||
|
||||
<li>
|
||||
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-gear"></i> Settings
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="settings" class="nav collapse">
|
||||
<li>
|
||||
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="ota" class="nav collapse">
|
||||
<li><a href="ota-esp32.htm">ESP32</a></li>
|
||||
<li><a href="ota-rp2350.htm">RP2350</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wifimanager.htm">
|
||||
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="personality.htm">
|
||||
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
|
||||
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
|
||||
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Action Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (%SK_FLOPPY1%)</a></li>
|
||||
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (%SK_FLOPPY2%)</a></li>
|
||||
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (%SK_QDDISK%)</a></li>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px;">
|
||||
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1>Configuration Editor </h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><i class="fa fa-dashboard"></i> Configuration Editor</li>
|
||||
</ol>
|
||||
<div class="alert alert-success alert-dismissable justify">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<p>This is the JSON configuration editor to define the %SK_PROCESSOR% and ESP32 configuration. Please read the documentation if you need help.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> Configuration file</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive">
|
||||
%SK_FILEDIR%
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
</div><!-- /#page-wrapper -->
|
||||
|
||||
</div><!-- /#wrapper -->
|
||||
|
||||
<!-- JavaScript -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script>
|
||||
// Store the name of the active and secondary interfaces.
|
||||
const activeInterface = "%SK_CURRENTIF%";
|
||||
const secondaryInterface = "%SK_SECONDIF%"
|
||||
</script>
|
||||
<script src="js/filemanager.js"></script>
|
||||
<script src="js/actions.js"></script>
|
||||
<script src="js/common.js"></script>
|
||||
|
||||
<!-- Editor -->
|
||||
<script src="js/editor.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
305
projects/tzpuPico/SD/default/webfs/css/Undef.css
vendored
Executable file
305
projects/tzpuPico/SD/default/webfs/css/Undef.css
vendored
Executable file
@@ -0,0 +1,305 @@
|
||||
.wm-button {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
margin-left: 25px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.wm-button:disabled {
|
||||
background: #999;
|
||||
color: #555;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.wm-button:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.wm-button-small {
|
||||
width: 70;
|
||||
height: 20px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.wm-button-small:disabled {
|
||||
background: #999;
|
||||
color: #555;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.wm-button-small:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.text-content {
|
||||
font-family: monospace; /* Ensures consistent character spacing */
|
||||
background-color: #f8f9fa; /* Light background for contrast */
|
||||
padding: 1rem; /* Comfortable padding */
|
||||
border: 1px solid #dee2e6; /* Subtle border */
|
||||
border-radius: 0.25rem; /* Rounded corners */
|
||||
white-space: pre-wrap; /* Wraps long lines while preserving whitespace */
|
||||
max-height: 500px; /* Optional: Limit height with vertical scrolling */
|
||||
overflow-y: auto; /* Vertical scrollbar if content is tall */
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.firmware-file-upload {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
margin-left: 35px;
|
||||
margin-bottom: 0px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.firmware-file-upload:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
|
||||
.keymap-file-upload {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
margin-left: 35px;
|
||||
margin-bottom: 0px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.keymap-file-upload:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
input[type=file]::file-selector-button {
|
||||
border: 2px solid #6c5ce7;
|
||||
padding: .2em .4em;
|
||||
border-radius: .2em;
|
||||
background-color: #a29bfe;
|
||||
transition: 1s;
|
||||
}
|
||||
|
||||
input[type=file]::file-selector-button:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.sk-modules-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.sk-modules-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-modules-table th, .sk-modules-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
}
|
||||
.sk-modules-table td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.sk-modules-table th {
|
||||
font-weight: normal;
|
||||
}
|
||||
.sk-modules-table td {
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
.sk-modules-table th {
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sk-modules-table tbody td:first-child::after {
|
||||
content: leader(". ");
|
||||
}
|
||||
|
||||
.sk-client-wifi-config-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
width: 1px !important;
|
||||
table-layout: auto !important;
|
||||
}
|
||||
.sk-client-wifi-config-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-client-wifi-config-table th, .sk-client-wifi-config-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
padding-left: 0;
|
||||
padding-right: 4rem;
|
||||
}
|
||||
.sk-client-wifi-config-table td {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
width: auto !important;
|
||||
}
|
||||
.sk-client-wifi-config-table th {
|
||||
font-weight: normal;
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
#client-wifi-config-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
#firmware-revision-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
#esp32-partitions-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
#rp2350-partitions-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
.sk-partitions-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.sk-partitions-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-partitions-table th, .sk-partitions-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
}
|
||||
.sk-partitions-table td {
|
||||
white-space: nowrap;
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
.sk-partitions-table th {
|
||||
font-weight: normal;
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sk-partitions-table tbody td:first-child::after {
|
||||
content: leader(". ");
|
||||
}
|
||||
|
||||
.sk-partitions-table tbody td:nth-child(4) {
|
||||
text-align: right;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(5) {
|
||||
text-align: right;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(6) {
|
||||
text-align: center;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(8) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.table-condensed .progress {
|
||||
margin-bottom: 0 !important;
|
||||
width: 400px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table-borderless > tbody > tr > td,
|
||||
.table-borderless > thead > tr > td,
|
||||
.table-borderless {
|
||||
border-bottom: 0;
|
||||
border-top: 0;
|
||||
padding: 4px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.table-responsive {
|
||||
border-bottom: 0;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
padding: 4px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 0;
|
||||
white-space: nowrap;
|
||||
table-layout: auto;
|
||||
}
|
||||
|
||||
.table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.justify {
|
||||
text-align: justify;
|
||||
text-justify: inter-word;
|
||||
}
|
||||
|
||||
.keymap {
|
||||
max-height: 36.2em;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.hr_no_margin {
|
||||
margin-top: 0.2em;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
overflow: hidden;
|
||||
}
|
||||
.radio-mouse {
|
||||
padding-right: 1em;
|
||||
}
|
||||
.radio-mouse label {
|
||||
float: left;
|
||||
clear: none;
|
||||
display: block;
|
||||
padding: 0px 1em 0px 8px;
|
||||
}
|
||||
input[type=radio] .radio-mouse,
|
||||
input.radio .radio-mouse {
|
||||
float: left;
|
||||
clear: none;
|
||||
margin: 2px 0 0 2px;
|
||||
}
|
||||
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.css.map.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.css.map.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.min.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.min.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.min.css.map.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap-theme.min.css.map.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.css.map.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.css.map.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.min.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.min.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.min.css.map.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/bootstrap.min.css.map.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/jasny-bootstrap.min.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/jasny-bootstrap.min.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/css/jquery.edittable.min.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/jquery.edittable.min.css.gz
vendored
Executable file
Binary file not shown.
305
projects/tzpuPico/SD/default/webfs/css/p6502.css
vendored
Executable file
305
projects/tzpuPico/SD/default/webfs/css/p6502.css
vendored
Executable file
@@ -0,0 +1,305 @@
|
||||
.wm-button {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
margin-left: 25px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.wm-button:disabled {
|
||||
background: #999;
|
||||
color: #555;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.wm-button:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.wm-button-small {
|
||||
width: 70;
|
||||
height: 20px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.wm-button-small:disabled {
|
||||
background: #999;
|
||||
color: #555;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.wm-button-small:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.text-content {
|
||||
font-family: monospace; /* Ensures consistent character spacing */
|
||||
background-color: #f8f9fa; /* Light background for contrast */
|
||||
padding: 1rem; /* Comfortable padding */
|
||||
border: 1px solid #dee2e6; /* Subtle border */
|
||||
border-radius: 0.25rem; /* Rounded corners */
|
||||
white-space: pre-wrap; /* Wraps long lines while preserving whitespace */
|
||||
max-height: 500px; /* Optional: Limit height with vertical scrolling */
|
||||
overflow-y: auto; /* Vertical scrollbar if content is tall */
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.firmware-file-upload {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
margin-left: 35px;
|
||||
margin-bottom: 0px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.firmware-file-upload:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
|
||||
.keymap-file-upload {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
margin-left: 35px;
|
||||
margin-bottom: 0px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.keymap-file-upload:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
input[type=file]::file-selector-button {
|
||||
border: 2px solid #6c5ce7;
|
||||
padding: .2em .4em;
|
||||
border-radius: .2em;
|
||||
background-color: #a29bfe;
|
||||
transition: 1s;
|
||||
}
|
||||
|
||||
input[type=file]::file-selector-button:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.sk-modules-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.sk-modules-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-modules-table th, .sk-modules-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
}
|
||||
.sk-modules-table td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.sk-modules-table th {
|
||||
font-weight: normal;
|
||||
}
|
||||
.sk-modules-table td {
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
.sk-modules-table th {
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sk-modules-table tbody td:first-child::after {
|
||||
content: leader(". ");
|
||||
}
|
||||
|
||||
.sk-client-wifi-config-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
width: 1px !important;
|
||||
table-layout: auto !important;
|
||||
}
|
||||
.sk-client-wifi-config-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-client-wifi-config-table th, .sk-client-wifi-config-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
padding-left: 0;
|
||||
padding-right: 4rem;
|
||||
}
|
||||
.sk-client-wifi-config-table td {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
width: auto !important;
|
||||
}
|
||||
.sk-client-wifi-config-table th {
|
||||
font-weight: normal;
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
#client-wifi-config-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
#firmware-revision-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
#esp32-partitions-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
#rp2350-partitions-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
.sk-partitions-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.sk-partitions-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-partitions-table th, .sk-partitions-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
}
|
||||
.sk-partitions-table td {
|
||||
white-space: nowrap;
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
.sk-partitions-table th {
|
||||
font-weight: normal;
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sk-partitions-table tbody td:first-child::after {
|
||||
content: leader(". ");
|
||||
}
|
||||
|
||||
.sk-partitions-table tbody td:nth-child(4) {
|
||||
text-align: right;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(5) {
|
||||
text-align: right;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(6) {
|
||||
text-align: center;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(8) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.table-condensed .progress {
|
||||
margin-bottom: 0 !important;
|
||||
width: 400px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table-borderless > tbody > tr > td,
|
||||
.table-borderless > thead > tr > td,
|
||||
.table-borderless {
|
||||
border-bottom: 0;
|
||||
border-top: 0;
|
||||
padding: 4px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.table-responsive {
|
||||
border-bottom: 0;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
padding: 4px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 0;
|
||||
white-space: nowrap;
|
||||
table-layout: auto;
|
||||
}
|
||||
|
||||
.table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.justify {
|
||||
text-align: justify;
|
||||
text-justify: inter-word;
|
||||
}
|
||||
|
||||
.keymap {
|
||||
max-height: 36.2em;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.hr_no_margin {
|
||||
margin-top: 0.2em;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
overflow: hidden;
|
||||
}
|
||||
.radio-mouse {
|
||||
padding-right: 1em;
|
||||
}
|
||||
.radio-mouse label {
|
||||
float: left;
|
||||
clear: none;
|
||||
display: block;
|
||||
padding: 0px 1em 0px 8px;
|
||||
}
|
||||
input[type=radio] .radio-mouse,
|
||||
input.radio .radio-mouse {
|
||||
float: left;
|
||||
clear: none;
|
||||
margin: 2px 0 0 2px;
|
||||
}
|
||||
464
projects/tzpuPico/SD/default/webfs/css/pZ80.css
vendored
Executable file
464
projects/tzpuPico/SD/default/webfs/css/pZ80.css
vendored
Executable file
@@ -0,0 +1,464 @@
|
||||
.wm-button {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
margin-left: 25px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.wm-button:disabled {
|
||||
background: #999;
|
||||
color: #555;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.wm-button:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.wm-button-red {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: red;
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
margin-left: 25px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.wm-button-red:disabled {
|
||||
background: #999;
|
||||
color: #555;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.wm-button-red:hover {
|
||||
background-color: #e28181;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.wm-button-small {
|
||||
width: 70;
|
||||
height: 20px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: top;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.wm-button-small:disabled {
|
||||
background: #999;
|
||||
color: #555;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.wm-button-small:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.text-content {
|
||||
font-family: monospace; /* Ensures consistent character spacing */
|
||||
background-color: #f8f9fa; /* Light background for contrast */
|
||||
padding: 1rem; /* Comfortable padding */
|
||||
border: 1px solid #dee2e6; /* Subtle border */
|
||||
border-radius: 0.25rem; /* Rounded corners */
|
||||
white-space: pre-wrap; /* Wraps long lines while preserving whitespace */
|
||||
max-height: 500px; /* Optional: Limit height with vertical scrolling */
|
||||
overflow-y: auto; /* Vertical scrollbar if content is tall */
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.firmware-file-upload {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
margin-left: 35px;
|
||||
margin-bottom: 0px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.firmware-file-upload:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
|
||||
.keymap-file-upload {
|
||||
width: 95px;
|
||||
height: 25px;
|
||||
background: blue;
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 25px;
|
||||
margin-left: 35px;
|
||||
margin-bottom: 0px;
|
||||
cursor: pointer;
|
||||
color: white;
|
||||
transition: 2s;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.keymap-file-upload:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
input[type=file]::file-selector-button {
|
||||
border: 2px solid #6c5ce7;
|
||||
padding: .2em .4em;
|
||||
border-radius: .2em;
|
||||
background-color: #a29bfe;
|
||||
transition: 1s;
|
||||
}
|
||||
|
||||
input[type=file]::file-selector-button:hover {
|
||||
background-color: #81ecec;
|
||||
border: 2px solid #00cec9;
|
||||
}
|
||||
|
||||
.sk-modules-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.sk-modules-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-modules-table th, .sk-modules-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
}
|
||||
.sk-modules-table td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.sk-modules-table th {
|
||||
font-weight: normal;
|
||||
}
|
||||
.sk-modules-table td {
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
.sk-modules-table th {
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sk-modules-table tbody td:first-child::after {
|
||||
content: leader(". ");
|
||||
}
|
||||
|
||||
.sk-client-wifi-config-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
width: 1px !important;
|
||||
table-layout: auto !important;
|
||||
}
|
||||
.sk-client-wifi-config-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-client-wifi-config-table th, .sk-client-wifi-config-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
padding-left: 0;
|
||||
padding-right: 4rem;
|
||||
}
|
||||
.sk-client-wifi-config-table td {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
width: auto !important;
|
||||
}
|
||||
.sk-client-wifi-config-table th {
|
||||
font-weight: normal;
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
#client-wifi-config-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
#firmware-revision-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
#esp32-partitions-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
#rp2350-partitions-area {
|
||||
overflow-x: scroll;
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
.sk-partitions-table {
|
||||
border: none;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.sk-partitions-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.sk-partitions-table th, .sk-partitions-table td {
|
||||
border: none;
|
||||
padding: 0.2rem 2rem;
|
||||
}
|
||||
.sk-partitions-table td {
|
||||
white-space: nowrap;
|
||||
border-style: none;
|
||||
vertical-align: top;
|
||||
}
|
||||
.sk-partitions-table th {
|
||||
font-weight: normal;
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sk-partitions-table tbody td:first-child::after {
|
||||
content: leader(". ");
|
||||
}
|
||||
|
||||
.sk-partitions-table tbody td:nth-child(4) {
|
||||
text-align: right;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(5) {
|
||||
text-align: right;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(6) {
|
||||
text-align: center;
|
||||
}
|
||||
.sk-partitions-table tbody td:nth-child(8) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.table-condensed .progress {
|
||||
margin-bottom: 0 !important;
|
||||
width: 400px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.table-borderless > tbody > tr > td,
|
||||
.table-borderless > thead > tr > td,
|
||||
.table-borderless {
|
||||
border-bottom: 0;
|
||||
border-top: 0;
|
||||
padding: 4px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.table-responsive {
|
||||
border-bottom: 0;
|
||||
border-top: 0;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
padding: 4px;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 0;
|
||||
white-space: nowrap;
|
||||
table-layout: auto;
|
||||
}
|
||||
|
||||
.table {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.justify {
|
||||
text-align: justify;
|
||||
text-justify: inter-word;
|
||||
}
|
||||
|
||||
.keymap {
|
||||
max-height: 36.2em;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.hr_no_margin {
|
||||
margin-top: 0.2em;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
overflow: hidden;
|
||||
}
|
||||
.radio-mouse {
|
||||
padding-right: 1em;
|
||||
}
|
||||
.radio-mouse label {
|
||||
float: left;
|
||||
clear: none;
|
||||
display: block;
|
||||
padding: 0px 1em 0px 8px;
|
||||
}
|
||||
input[type=radio] .radio-mouse,
|
||||
input.radio .radio-mouse {
|
||||
float: left;
|
||||
clear: none;
|
||||
margin: 2px 0 0 2px;
|
||||
}
|
||||
|
||||
.edit-buttons {
|
||||
margin-right: 15px;
|
||||
margin-left: 15px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.edit-container {
|
||||
margin-right: 15px;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
.edit-frame {
|
||||
height: 50vh;
|
||||
width: 100%;
|
||||
/* border: 1px solid lightgrey; */
|
||||
}
|
||||
.edit-inner {
|
||||
height: 50vh;
|
||||
width: 100%;
|
||||
/* background-color: rgb(190, 190, 190); */
|
||||
}
|
||||
.edit-inner > .form-group {
|
||||
height: inherit;
|
||||
max-height: 88%;
|
||||
}
|
||||
.edit-inner #editFrameText {
|
||||
height: 94%;
|
||||
min-height: 94%;
|
||||
}
|
||||
|
||||
.rightlower {
|
||||
height: 50vh;
|
||||
width: 100%;
|
||||
background-color: rgb(190, 190, 190);
|
||||
border-top: 5px solid blue;
|
||||
}
|
||||
|
||||
.radio-partition {
|
||||
padding-left: 15px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
.dropdown-btn::after {
|
||||
content: "\25BC"; /* ▼ */
|
||||
font-size: 0.8em;
|
||||
float: right;
|
||||
margin-top: 4px;
|
||||
transition: transform 0.25s;
|
||||
}
|
||||
.dropdown-btn.open::after {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
/* Base sidebar link styling (adjust as needed) */
|
||||
.side-nav > li > a {
|
||||
margin-left: 20px;
|
||||
padding-left: 15px; /* keep some inner padding */
|
||||
/* other styles like color, font-size... */
|
||||
}
|
||||
|
||||
/* All submenu items (any level) get some base indent */
|
||||
.side-nav .collapse li > a {
|
||||
margin-left: 40px;
|
||||
font-size: 0.95em; /* slightly smaller is common */
|
||||
}
|
||||
|
||||
/* Second-level submenu (deeper nesting) */
|
||||
.side-nav .collapse .collapse li > a {
|
||||
padding-left: 55px; /* more indent for level 2 */
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
/* Third level (if you ever add more nesting) */
|
||||
.side-nav .collapse .collapse .collapse li > a {
|
||||
padding-left: 75px;
|
||||
}
|
||||
|
||||
/* Optional: make icons align nicely when indented */
|
||||
.side-nav .collapse a > i {
|
||||
margin-right: 8px;
|
||||
width: 18px; /* fixed width so text aligns */
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Optional: subtle visual hierarchy for parents */
|
||||
.side-nav li > a.dropdown-toggle {
|
||||
font-weight: 500; /* slightly bolder for parents */
|
||||
}
|
||||
|
||||
/* Sidebar hover/focus/active: semi-transparent yellow that doesn't obscure text */
|
||||
.side-nav > li > a:hover,
|
||||
.side-nav > li > a:focus,
|
||||
.side-nav .collapse li > a:hover,
|
||||
.side-nav .collapse li > a:focus {
|
||||
background-color: rgba(255, 200, 50, 0.15) !important; /* translucent yellow */
|
||||
color: #ffd700 !important; /* gold text */
|
||||
}
|
||||
|
||||
/* When a submenu item is active, highlight the whole path (if using previous JS) */
|
||||
.side-nav li.active > a {
|
||||
background-color: #262c32; /* darker shade for parent */
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.side-nav a.active {
|
||||
background-color: #322f11; /* or your brand color */
|
||||
color: white !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.side-nav .dropdown-toggle {
|
||||
padding-right: 25px; /* reserve space on the right */
|
||||
position: relative; /* anchor for absolute child */
|
||||
}
|
||||
|
||||
.side-nav .dropdown-toggle .caret {
|
||||
position: absolute;
|
||||
right: 40px; /* distance from right edge — adjust 8–15px */
|
||||
top: 50%;
|
||||
margin-top: -2px; /* vertical center — tweak if font-size changes */
|
||||
float: none; /* cancel the float from .pull-right */
|
||||
}
|
||||
/* Remove ugly focus for mouse users, keep for keyboard */
|
||||
.side-nav a:focus:not(:focus-visible),
|
||||
.side-nav .dropdown-toggle:focus:not(:focus-visible) {
|
||||
outline: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
/* Optional: style keyboard focus nicely (instead of default blue) */
|
||||
.side-nav a:focus-visible,
|
||||
.side-nav .dropdown-toggle:focus-visible {
|
||||
outline: 2px solid #1abc9c; /* your brand color, or yellow to match icons */
|
||||
outline-offset: 1px;
|
||||
}
|
||||
159
projects/tzpuPico/SD/default/webfs/css/sb-admin.css
vendored
Executable file
159
projects/tzpuPico/SD/default/webfs/css/sb-admin.css
vendored
Executable file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
Author: Start Bootstrap - http://startbootstrap.com
|
||||
'SB Admin' HTML Template by Start Bootstrap
|
||||
|
||||
All Start Bootstrap themes are licensed under Apache 2.0.
|
||||
For more info and more free Bootstrap 3 HTML themes, visit http://startbootstrap.com!
|
||||
*/
|
||||
|
||||
/* ATTN: This is mobile first CSS - to update 786px and up screen width use the media query near the bottom of the document! */
|
||||
|
||||
/* Global Styles */
|
||||
|
||||
body {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
#wrapper {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
#page-wrapper {
|
||||
width: 100%;
|
||||
padding: 5px 15px;
|
||||
}
|
||||
|
||||
/* Nav Messages */
|
||||
|
||||
.messages-dropdown .dropdown-menu .message-preview .avatar,
|
||||
.messages-dropdown .dropdown-menu .message-preview .name,
|
||||
.messages-dropdown .dropdown-menu .message-preview .message,
|
||||
.messages-dropdown .dropdown-menu .message-preview .time {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.messages-dropdown .dropdown-menu .message-preview .avatar {
|
||||
float: left;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.messages-dropdown .dropdown-menu .message-preview .name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.messages-dropdown .dropdown-menu .message-preview .message {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.messages-dropdown .dropdown-menu .message-preview .time {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
|
||||
/* Nav Announcements */
|
||||
|
||||
.announcement-heading {
|
||||
font-size: 50px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.announcement-text {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Table Headers */
|
||||
|
||||
table.tablesorter thead {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
table.tablesorter thead tr th:hover {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
/* Flot Chart Containers */
|
||||
|
||||
.flot-chart {
|
||||
display: block;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
.flot-chart-content {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* Edit Below to Customize Widths > 768px */
|
||||
@media (min-width:768px) {
|
||||
|
||||
/* Wrappers */
|
||||
|
||||
#wrapper {
|
||||
padding-left: 225px;
|
||||
}
|
||||
|
||||
#page-wrapper {
|
||||
padding: 15px 25px;
|
||||
}
|
||||
|
||||
/* Side Nav */
|
||||
|
||||
.side-nav {
|
||||
margin-left: -225px;
|
||||
left: 225px;
|
||||
width: 225px;
|
||||
position: fixed;
|
||||
top: 50px;
|
||||
height: 100%;
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
background-color: #222222;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/* Bootstrap Default Overrides - Customized Dropdowns for the Side Nav */
|
||||
|
||||
.side-nav>li.dropdown>ul.dropdown-menu {
|
||||
position: relative;
|
||||
min-width: 225px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
}
|
||||
|
||||
.side-nav>li.dropdown>ul.dropdown-menu>li>a {
|
||||
color: #999999;
|
||||
padding: 15px 15px 15px 25px;
|
||||
}
|
||||
|
||||
.side-nav>li.dropdown>ul.dropdown-menu>li>a:hover,
|
||||
.side-nav>li.dropdown>ul.dropdown-menu>li>a.active,
|
||||
.side-nav>li.dropdown>ul.dropdown-menu>li>a:focus {
|
||||
color: #fff;
|
||||
background-color: #080808;
|
||||
}
|
||||
|
||||
.side-nav>li>a {
|
||||
width: 225px;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav>li>a:hover,
|
||||
.navbar-inverse .navbar-nav>li>a:focus {
|
||||
background-color: #080808;
|
||||
}
|
||||
|
||||
/* Nav Messages */
|
||||
|
||||
.messages-dropdown .dropdown-menu {
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.messages-dropdown .dropdown-menu li a {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
}
|
||||
253
projects/tzpuPico/SD/default/webfs/css/style.css
vendored
Executable file
253
projects/tzpuPico/SD/default/webfs/css/style.css
vendored
Executable file
@@ -0,0 +1,253 @@
|
||||
/*
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-family: Tahoma, Arial, sans-serif;
|
||||
color: #06D85F;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
*/
|
||||
.box {
|
||||
width: 40%;
|
||||
margin: 0 auto;
|
||||
background: rgba(255,255,255,0.2);
|
||||
padding: 35px;
|
||||
border: 2px solid #fff;
|
||||
border-radius: 20px/50px;
|
||||
background-clip: padding-box;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
//transition: opacity 500ms;
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
.overlay:target {
|
||||
visibility: visible;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.popup {
|
||||
margin: 70px auto;
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
width: 30%;
|
||||
position: relative;
|
||||
transition: all 5s ease-in-out;
|
||||
}
|
||||
|
||||
.popup h2 {
|
||||
margin-top: 0;
|
||||
color: #333;
|
||||
font-family: Tahoma, Arial, sans-serif;
|
||||
}
|
||||
.popup .close {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
right: 30px;
|
||||
transition: all 200ms;
|
||||
font-size: 30px;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
color: #333;
|
||||
}
|
||||
.popup .close:hover {
|
||||
color: #06D85F;
|
||||
}
|
||||
.popup .content {
|
||||
max-height: 30%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 700px){
|
||||
.box{
|
||||
width: 90%;
|
||||
}
|
||||
.popup{
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
html {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.8rem;
|
||||
color: white;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
*/
|
||||
|
||||
.topnav {
|
||||
overflow: hidden;
|
||||
background-color: #0A1128;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 5%;
|
||||
}
|
||||
|
||||
.card-grid {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
display: grid;
|
||||
grid-gap: 2rem;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
}
|
||||
|
||||
.card {
|
||||
background-color: lightyellow;
|
||||
box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5);
|
||||
}
|
||||
|
||||
.card-title {
|
||||
font-size: 1.1rem;
|
||||
font-weight: bold;
|
||||
color: #034078
|
||||
}
|
||||
/*
|
||||
input[type=submit] {
|
||||
border: none;
|
||||
color: #FEFCFB;
|
||||
background-color: #034078;
|
||||
padding: 15px 15px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
font-size: 18px;
|
||||
width: 30%;
|
||||
margin-right: 10px;
|
||||
border-radius: 4px;
|
||||
transition-duration: 0.4s;
|
||||
}
|
||||
|
||||
input[type=submit]:hover {
|
||||
background-color: #1282A2;
|
||||
}
|
||||
|
||||
input[type=text], input[type=number], select {
|
||||
width: 40%;
|
||||
padding: 8px 10px;
|
||||
margin: 12px;
|
||||
display: inline-block;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
input[type=url], input[type=number], select {
|
||||
width: 50%;
|
||||
padding: 12px 20px;
|
||||
margin: 18px;
|
||||
display: inline-block;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
label {
|
||||
font-size: 1rem;
|
||||
}
|
||||
*/
|
||||
.value{
|
||||
font-size: 1rem;
|
||||
color: #1282A2;
|
||||
}
|
||||
.state {
|
||||
font-size: 1rem;
|
||||
color: #1282A2;
|
||||
}
|
||||
|
||||
.button {
|
||||
font-size: 2em;
|
||||
padding: 3px;
|
||||
color: #dbd75e;
|
||||
border: 1px solid #000;
|
||||
border-radius: 5px;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
transition: all 1s ease-out;
|
||||
|
||||
background: #1b06d8;
|
||||
}
|
||||
.button:hover {
|
||||
background: #06D85F;
|
||||
}
|
||||
|
||||
/*
|
||||
button {
|
||||
//border: none;
|
||||
// color: #FEFCFB;
|
||||
// padding: 15px 32px;
|
||||
// text-align: center;
|
||||
// font-size: 30px;
|
||||
// width: 100px;
|
||||
// border-radius: 4px;
|
||||
transition-duration: 0.4s;
|
||||
}
|
||||
.button-on {
|
||||
// background-color: #034078;
|
||||
}
|
||||
.button-on:hover {
|
||||
// background-color: #1282A2;
|
||||
}
|
||||
.button-off {
|
||||
// background-color: #858585;
|
||||
}
|
||||
.button-off:hover {
|
||||
// background-color: #252524;
|
||||
}
|
||||
*/
|
||||
#sk-modules-table {
|
||||
border: solid thin;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
#sk-modules-table caption {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
#sk-modules-table th,
|
||||
#sk-modules-table td {
|
||||
border: solid thin;
|
||||
padding: 0.5rem 2rem;
|
||||
}
|
||||
#sk-modules-table td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
#sk-modules-table th {
|
||||
font-weight: normal;
|
||||
}
|
||||
#sk-modules-table td {
|
||||
border-style: none solid;
|
||||
vertical-align: top;
|
||||
}
|
||||
#sk-modules-table th {
|
||||
padding: 0.2em;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#sk-modules-table tbody td:first-child::after {
|
||||
content: leader(". ");
|
||||
}
|
||||
|
||||
1
projects/tzpuPico/SD/default/webfs/css/styles.css
vendored
Executable file
1
projects/tzpuPico/SD/default/webfs/css/styles.css
vendored
Executable file
@@ -0,0 +1 @@
|
||||
body { padding-bottom: 70px; }
|
||||
BIN
projects/tzpuPico/SD/default/webfs/css/trumbowyg.min.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/css/trumbowyg.min.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/favicon.ico
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/favicon.ico
vendored
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
159
projects/tzpuPico/SD/default/webfs/filemanager.htm
vendored
Executable file
159
projects/tzpuPico/SD/default/webfs/filemanager.htm
vendored
Executable file
@@ -0,0 +1,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Add custom CSS here -->
|
||||
<link href="css/sb-admin.css" rel="stylesheet">
|
||||
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="font-awesome/css/font-awesome.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
|
||||
<li><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i> Status</a></li>
|
||||
<li><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Config Editor</a></li>
|
||||
<li class="active"><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i> File Manager</a></li>
|
||||
|
||||
<li>
|
||||
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-gear"></i> Settings
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="settings" class="nav collapse">
|
||||
<li>
|
||||
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="ota" class="nav collapse">
|
||||
<li><a href="ota-esp32.htm">ESP32</a></li>
|
||||
<li><a href="ota-rp2350.htm">RP2350</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wifimanager.htm">
|
||||
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="personality.htm">
|
||||
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
|
||||
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
|
||||
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Action Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (%SK_FLOPPY1%)</a></li>
|
||||
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (%SK_FLOPPY2%)</a></li>
|
||||
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (%SK_QDDISK%)</a></li>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px;">
|
||||
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1>File Manager </h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><i class="fa fa-dashboard"></i> File Manager</li>
|
||||
</ol>
|
||||
<div class="alert alert-success alert-dismissable justify">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<p>This is a simple file manager for uploading, downloading and general maintenance of your ROMS, Disks, Applications and Configuration.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> SD Card Directory</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive">
|
||||
%SK_FILEDIR%
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
</div><!-- /#page-wrapper -->
|
||||
|
||||
</div><!-- /#wrapper -->
|
||||
|
||||
<!-- JavaScript -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script>
|
||||
// Store the name of the active and secondary interfaces.
|
||||
const activeInterface = "%SK_CURRENTIF%";
|
||||
const secondaryInterface = "%SK_SECONDIF%"
|
||||
</script>
|
||||
<script src="js/filemanager.js"></script>
|
||||
<script src="js/actions.js"></script>
|
||||
<script src="js/common.js"></script>
|
||||
|
||||
<!-- Editor -->
|
||||
<script src="js/editor.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
projects/tzpuPico/SD/default/webfs/font-awesome/css/font-awesome.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/font-awesome/css/font-awesome.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/font-awesome/css/font-awesome.min.css.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/font-awesome/css/font-awesome.min.css.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/font-awesome/fonts/fontawesome-webfont.woff.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/font-awesome/fonts/fontawesome-webfont.woff.gz
vendored
Executable file
Binary file not shown.
324
projects/tzpuPico/SD/default/webfs/index.htm
vendored
Executable file
324
projects/tzpuPico/SD/default/webfs/index.htm
vendored
Executable file
@@ -0,0 +1,324 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Add custom CSS here -->
|
||||
<link href="css/sb-admin.css" rel="stylesheet">
|
||||
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="font-awesome/css/font-awesome.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
|
||||
<li class="active"><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i> Status</a></li>
|
||||
<li><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Config Editor</a></li>
|
||||
<li><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i> File Manager</a></li>
|
||||
|
||||
<li>
|
||||
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-gear"></i> Settings
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="settings" class="nav collapse">
|
||||
<li>
|
||||
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="ota" class="nav collapse">
|
||||
<li><a href="ota-esp32.htm">ESP32</a></li>
|
||||
<li><a href="ota-rp2350.htm">RP2350</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wifimanager.htm">
|
||||
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="personality.htm">
|
||||
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
|
||||
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
|
||||
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Action Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (%SK_FLOPPY1%)</a></li>
|
||||
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (%SK_FLOPPY2%)</a></li>
|
||||
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (%SK_QDDISK%)</a></li>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px;">
|
||||
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1>Status </h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><i class="fa fa-dashboard"></i> Status</li>
|
||||
</ol>
|
||||
<div class="alert alert-success alert-dismissable justify">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<p>This built-in web app allows configuration of the host, emulated processor, virtual interfaces, <u>O</u>ver <u>T</u>he <u>A</u>ir firmware updates and more.<br>Please read the documentation if you need help.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-wifi"></i> WiFi Configuration</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive" id="client-wifi-config-area">
|
||||
<!--<div id="client-wifi-config-area">-->
|
||||
<div id="wifiCfg%SK_WIFIMODEAP%">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tbody>
|
||||
<tr style="display: compact;">
|
||||
<td>SSID:</td><td><span style="color: blue;">%SK_APSSID%</span></td>
|
||||
<td>TX Power:</td><td><span class="txpower-live" style="color: blue;">%SK_TXPOWERDBM% dBm</span></td>
|
||||
</tr>
|
||||
<tr style="display: compact;">
|
||||
<td>Password:</td><td><span style="color: blue;">%SK_APPWD%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IP (AP):</td><td><span style="color: blue;">%SK_CURRENTIP%</span></td>
|
||||
<td>NETMASK:</td><td><span style="color: blue;">%SK_CURRENTNM%</span></td>
|
||||
<td>GATEWAY:</td><td><span style="color: blue;">%SK_CURRENTGW%</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="wifiCfg0%SK_WIFIMODECLIENT%">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tbody>
|
||||
<tr style="display: compact;">
|
||||
<td>SSID:</td><td><span style="color: blue;">%SK_CLIENTSSID%</span></td>
|
||||
<td>TX Power:</td><td><span class="txpower-live" style="color: blue;">%SK_TXPOWERDBM% dBm</span></td>
|
||||
<td>RSSI:</td><td><span class="rssi-live" style="color: blue;">%SK_RSSI% dBm</span></td>
|
||||
</tr>
|
||||
<tr style="display: compact;" id="wifiCfg1%SK_CLIENTDHCPON%">
|
||||
<td>DHCP:</td><td><span style="color: blue;">Enabled</span></td>
|
||||
</tr>
|
||||
<tr id="wifiCfg3%SK_CLIENTDHCPON%">
|
||||
<td>IP (assigned):</td><td><span style="color: blue;">%SK_CURRENTIP%</span></td>
|
||||
<td>NETMASK:</td><td><span style="color: blue;">%SK_CURRENTNM%</span></td>
|
||||
<td>GATEWAY:</td><td><span style="color: blue;">%SK_CURRENTGW%</span></td>
|
||||
</tr>
|
||||
<tr id="wifiCfg3%SK_CLIENTDHCPOFF%">
|
||||
<td>IP (fixed):</td><td><span style="color: blue;">%SK_CURRENTIP%</span></td>
|
||||
<td>NETMASK:</td><td><span style="color: blue;">%SK_CURRENTNM%</span></td>
|
||||
<td>GATEWAY:</td><td><span style="color: blue;">%SK_CURRENTGW%</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-dashboard"></i> System Status</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<table class="table table-borderless table-sm" style="margin-bottom:0; width:auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="width:140px; padding-right:4px;">Firmware Version:</td><td style="width:200px;"><span style="color:#5bf;">%SK_FWVERSION%</span></td>
|
||||
<td style="width:140px; padding-right:4px;">ESP32 Version:</td><td style="width:200px;"><span style="color:#5bf;">%SK_ESPVERSION%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Active Partition:</td><td><span style="color:#5bf;">%SK_ACTIVEPARTITION%</span></td>
|
||||
<td>Active Persona:</td><td><span style="color:#5bf;">%SK_PERSONA%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>RP2350 Clock:</td><td><span style="color:#5bf;">%SK_CPUCLOCK%</span></td>
|
||||
<td>ESP32 Clock:</td><td><span style="color:#5bf;">%SK_ESP32CLOCK%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>RP2350 Flash:</td><td><span style="color:#5bf;">%SK_RP2350FLASH%</span></td>
|
||||
<td>ESP32 Flash:</td><td><span style="color:#5bf;">%SK_ESP32FLASH%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>RP2350 PSRAM:</td><td><span style="color:#5bf;">%SK_RP2350PSRAM%</span></td>
|
||||
<td>ESP32 PSRAM:</td><td><span style="color:#5bf;">%SK_ESP32PSRAM%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PSRAM Clock:</td><td><span style="color:#5bf;">%SK_PSRAMCLOCK%</span></td>
|
||||
<td>SD Card:</td><td><span style="color:#5bf;">%SK_SDCARD%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>FilePack:</td><td><span style="color:#5bf;">%SK_FILEPACK%</span></td>
|
||||
<td>Uptime:</td><td><span style="color:#5bf;" id="sys-uptime">%SK_UPTIME%</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> Version Information</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive">
|
||||
<div id="title" style="font-size:16px;padding-bottom:25px;">%SK_PRODNAME% v%SK_PRODVERSION% © P.D. Smart, 2018-26</div>
|
||||
<div id="esp32-info" style="font-size:12px;padding-top:8px;padding-bottom:8px;"><b>ESP32 Partitions</b></div>
|
||||
<div id="esp32-partitions-area" style="padding-left:25px;">
|
||||
<table class="table table-borderless table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>Partition Name</b></th>
|
||||
<th><b>Type</b></th>
|
||||
<th><b>Sub-Type</b></th>
|
||||
<th><b>Address</b></th>
|
||||
<th><b>Size</b></th>
|
||||
<th><b>Version</b></th>
|
||||
<th><b>Timestamp</b></th>
|
||||
<th><b>Active (Running)</b></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%SK_PARTITIONS%
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="rp2350-info" style="font-size:12px;padding-top:8px;padding-bottom:8px;"><b>RP2350 Partitions</b></div>
|
||||
<div id="rp2350-partitions-area" style="padding-left:25px;">
|
||||
<table class="table table-borderless table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>Partition</b></th>
|
||||
<th><b>Addr</b></th>
|
||||
<th><b>Size</b></th>
|
||||
<th><b>CheckSum</b></th>
|
||||
<th><b>Active (Running)</b></th>
|
||||
<th><b>License</b></th>
|
||||
<th><b>Author</b></th>
|
||||
<th><b>Description</b></th>
|
||||
<th><b>Version</b></th>
|
||||
<th><b>Date</b></th>
|
||||
<th><b>Copyright</b></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%SK_RP_PARTITIONS%
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
</div><!-- /#page-wrapper -->
|
||||
|
||||
</div><!-- /#wrapper -->
|
||||
|
||||
<!-- JavaScript -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script>
|
||||
// Store the name of the active and secondary interfaces.
|
||||
const activeInterface = "%SK_CURRENTIF%";
|
||||
const secondaryInterface = "%SK_SECONDIF%"
|
||||
|
||||
</script>
|
||||
<script src="js/index.js"></script>
|
||||
<script src="js/actions.js"></script>
|
||||
<script src="js/common.js"></script>
|
||||
<script>
|
||||
// Live WiFi signal strength polling (updates every 3 seconds).
|
||||
(function pollWifiStatus() {
|
||||
$.getJSON("/data/wifistatus", function(data) {
|
||||
$(".rssi-live").text(data.rssi + " dBm");
|
||||
$(".txpower-live").text(data.txPower.toFixed(1) + " dBm");
|
||||
if (data.connected) {
|
||||
var r = data.rssi;
|
||||
var color = r >= -50 ? "green" : r >= -70 ? "blue" : r >= -80 ? "orange" : "red";
|
||||
$(".rssi-live").css("color", color);
|
||||
} else {
|
||||
$(".rssi-live").text("N/A").css("color", "gray");
|
||||
}
|
||||
// Update uptime if present in response
|
||||
if (data.uptime) {
|
||||
$("#sys-uptime").text(data.uptime);
|
||||
}
|
||||
}).always(function() {
|
||||
setTimeout(pollWifiStatus, 3000);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
projects/tzpuPico/SD/default/webfs/js/140medley.min.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/140medley.min.js.gz
vendored
Executable file
Binary file not shown.
41
projects/tzpuPico/SD/default/webfs/js/actions.js
vendored
Executable file
41
projects/tzpuPico/SD/default/webfs/js/actions.js
vendored
Executable file
@@ -0,0 +1,41 @@
|
||||
function rebootRP2350() {
|
||||
fetch('/reboot/rp2350')
|
||||
.then(response => {
|
||||
if (response.ok) {
|
||||
void(0);
|
||||
} else {
|
||||
alert('Reboot failed: ' + response.status);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
alert('Error: ' + err);
|
||||
});
|
||||
}
|
||||
|
||||
function rebootHost() {
|
||||
fetch('/reboot/host')
|
||||
.then(response => {
|
||||
if (response.ok) {
|
||||
void(0);
|
||||
} else {
|
||||
alert('Reboot failed: ' + response.status);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
alert('Error: ' + err);
|
||||
});
|
||||
}
|
||||
|
||||
function reloadConfig() {
|
||||
fetch('/tasks/reloadcfg')
|
||||
.then(response => {
|
||||
if (response.ok) {
|
||||
void(0);
|
||||
} else {
|
||||
alert('Reload failed: ' + response.status);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
alert('Error: ' + err);
|
||||
});
|
||||
}
|
||||
BIN
projects/tzpuPico/SD/default/webfs/js/bootstrap.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/bootstrap.js.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/js/bootstrap.min.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/bootstrap.min.js.gz
vendored
Executable file
Binary file not shown.
5
projects/tzpuPico/SD/default/webfs/js/common.js
vendored
Executable file
5
projects/tzpuPico/SD/default/webfs/js/common.js
vendored
Executable file
@@ -0,0 +1,5 @@
|
||||
$(document).ready(function() {
|
||||
$('.side-nav a, .side-nav .dropdown-toggle').on('mousedown touchstart', function() {
|
||||
$(this).blur();
|
||||
});
|
||||
});
|
||||
215
projects/tzpuPico/SD/default/webfs/js/editor.js
vendored
Executable file
215
projects/tzpuPico/SD/default/webfs/js/editor.js
vendored
Executable file
@@ -0,0 +1,215 @@
|
||||
var decodeEntities = (function() {
|
||||
// this prevents any overhead from creating the object each time
|
||||
var element = document.createElement('div');
|
||||
|
||||
function decodeHTMLEntities (str) {
|
||||
if(str && typeof str === 'string') {
|
||||
// strip script/html tags
|
||||
str = str.replace(/<script[^>]*>([\S\s]*?)<\/script>/gmi, '');
|
||||
str = str.replace(/<\/?\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, '');
|
||||
element.innerHTML = str;
|
||||
str = element.textContent;
|
||||
element.textContent = '';
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
return decodeHTMLEntities;
|
||||
})();
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
// Export content as HTML
|
||||
$('#editDownloadHtml').click(function () {
|
||||
var htmlContent = $('#editFrameTest');
|
||||
downloadFile(htmlContent, 'content.html', 'text/html');
|
||||
});
|
||||
|
||||
// Export content as plain text
|
||||
$('#editDownloadText').click(function () {
|
||||
//var plainTextContent = $('#editor').trumbowyg('html').replace(/<[^>]*>/g, '');
|
||||
var plainTextContent = decodeEntities($('#editFrameTest'));
|
||||
downloadFile(plainTextContent, 'content.txt', 'text/plain');
|
||||
});
|
||||
|
||||
// Quit back to Filemanager.
|
||||
$('#editQuit').click(function () {
|
||||
history.back();
|
||||
});
|
||||
|
||||
// Save buffer and continue editting.
|
||||
$('#editSave').click(function () {
|
||||
saveFile();
|
||||
});
|
||||
|
||||
// Save buffer and exit.
|
||||
$('#editExit').click(function () {
|
||||
saveFile();
|
||||
history.back();
|
||||
});
|
||||
|
||||
// Save buffer and apply configuration.
|
||||
$('#editApply').click(function () {
|
||||
const statusDiv = document.getElementById('saveStatus');
|
||||
|
||||
// Updated changes.
|
||||
saveFile();
|
||||
|
||||
// Reload ESP32, if the config has changed then it will initiate an RP2350 config reload.
|
||||
setTimeout(function() {
|
||||
const statusDiv = document.getElementById('saveStatus');
|
||||
if (statusDiv) {
|
||||
statusDiv.style.backgroundColor = "#fff3cd";
|
||||
statusDiv.style.color = "#856404";
|
||||
statusDiv.innerHTML = "Requesting ESP32 reload configuration,,,)";
|
||||
}
|
||||
setTimeout(function() {
|
||||
window.location.href="/reboot/esp32";
|
||||
}, 2000);
|
||||
}, 2000);
|
||||
});
|
||||
|
||||
// Method to save the contents of the textarea buffer into a file on the SD card (AJAX style)
|
||||
async function saveFile() {
|
||||
const editFileInput = document.getElementById('editFile');
|
||||
const textarea = document.getElementById('editFrameText');
|
||||
const statusDiv = document.getElementById('saveStatus');
|
||||
|
||||
if (!editFileInput || !textarea) {
|
||||
alert("Editor elements not found!");
|
||||
return;
|
||||
}
|
||||
|
||||
let fullInput = editFileInput.value.trim();
|
||||
if (!fullInput) {
|
||||
alert("No file path/filename specified!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Clean path (same logic as before)
|
||||
let cleanedPath = fullInput
|
||||
.replace(/^\/(sdcard|sdpath)\/?/i, '')
|
||||
.replace(/^sd(card|path)\/?/i, '')
|
||||
.replace(/^[\\/]+/, '');
|
||||
|
||||
if (!cleanedPath) {
|
||||
alert("No valid path after removing SD prefix!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Split → dir + filename
|
||||
let dirPart = "";
|
||||
let filenameOnly = cleanedPath;
|
||||
const lastSlash = Math.max(cleanedPath.lastIndexOf('/'), cleanedPath.lastIndexOf('\\'));
|
||||
|
||||
if (lastSlash >= 0) {
|
||||
dirPart = cleanedPath.substring(0, lastSlash).replace(/^[\\/]+|[\\/]+$/g, '');
|
||||
filenameOnly = cleanedPath.substring(lastSlash + 1);
|
||||
}
|
||||
|
||||
if (!filenameOnly) {
|
||||
alert("No valid filename found!");
|
||||
return;
|
||||
}
|
||||
if (filenameOnly.includes(' ')) {
|
||||
alert("Filename cannot contain spaces!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Prepare UI for saving
|
||||
const saveButton = document.getElementById('editSave');
|
||||
if (saveButton) saveButton.disabled = true;
|
||||
textarea.disabled = true;
|
||||
editFileInput.disabled = true;
|
||||
|
||||
if (statusDiv) {
|
||||
statusDiv.style.backgroundColor = "#fff3cd";
|
||||
statusDiv.style.color = "#856404";
|
||||
statusDiv.innerHTML = "Saving... (creating backup if needed)";
|
||||
}
|
||||
|
||||
// Attempt backup. Keep same name as server will rename to <filename>;<next unique number>
|
||||
let backupDone = false;
|
||||
let backupMsg = "";
|
||||
|
||||
try {
|
||||
const renameParams = new URLSearchParams();
|
||||
if (dirPart) renameParams.set("dir", dirPart);
|
||||
renameParams.set("oldname", filenameOnly);
|
||||
renameParams.set("name", filenameOnly);
|
||||
|
||||
const renameUrl = `/data/rename?${renameParams.toString()}`;
|
||||
const renameRes = await fetch(renameUrl, { method: "GET" });
|
||||
|
||||
backupDone = renameRes.ok;
|
||||
backupMsg = backupDone ? "Backup created. " : "No backup created (may already exist). ";
|
||||
} catch (err) {
|
||||
console.warn("Backup rename failed:", err);
|
||||
backupMsg = "Backup attempt failed. ";
|
||||
}
|
||||
|
||||
// Save the current content
|
||||
const content = textarea.value;
|
||||
|
||||
let saveUrl = `/data/upload/${encodeURIComponent(filenameOnly)}`;
|
||||
if (dirPart) {
|
||||
saveUrl += `?dir=${encodeURIComponent(dirPart)}`;
|
||||
}
|
||||
|
||||
try {
|
||||
const saveRes = await fetch(saveUrl, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "text/plain; charset=utf-8"
|
||||
},
|
||||
body: content
|
||||
});
|
||||
|
||||
if (!saveRes.ok) {
|
||||
const errorText = await saveRes.text().catch(() => "(no details)");
|
||||
throw new Error(`Save failed (${saveRes.status}) – ${errorText}`);
|
||||
}
|
||||
|
||||
// Success path
|
||||
if (statusDiv) {
|
||||
statusDiv.style.backgroundColor = "#d4edda";
|
||||
statusDiv.style.color = "#155724";
|
||||
statusDiv.innerHTML = `✓ Saved successfully. ${backupMsg}`;
|
||||
}
|
||||
|
||||
// Optional: small delay then fade or clear status
|
||||
setTimeout(() => {
|
||||
if (statusDiv) statusDiv.style.opacity = "0.7";
|
||||
}, 2000);
|
||||
|
||||
} catch (err) {
|
||||
console.error("Save error:", err);
|
||||
if (statusDiv) {
|
||||
statusDiv.style.backgroundColor = "#f8d7da";
|
||||
statusDiv.style.color = "#721c24";
|
||||
statusDiv.innerHTML = `✗ Save failed: ${err.message}`;
|
||||
}
|
||||
alert("Save failed!\n" + err.message); // keep alert as fallback
|
||||
|
||||
} finally {
|
||||
// Re-enable controls
|
||||
if (saveButton) saveButton.disabled = false;
|
||||
textarea.disabled = false;
|
||||
editFileInput.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Function to download file
|
||||
function downloadFile(content, filename, contentType) {
|
||||
var blob = new Blob([ content ], { type: contentType });
|
||||
var url = window.URL.createObjectURL(blob);
|
||||
var a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
}
|
||||
|
||||
});
|
||||
232
projects/tzpuPico/SD/default/webfs/js/filemanager.js
vendored
Executable file
232
projects/tzpuPico/SD/default/webfs/js/filemanager.js
vendored
Executable file
@@ -0,0 +1,232 @@
|
||||
var lastStatus = 0;
|
||||
|
||||
// Confirm delete with "Don't ask again" checkbox.
|
||||
// Uses localStorage to persist the preference across sessions.
|
||||
// To re-enable: localStorage.removeItem('skipDeleteConfirm') in browser console.
|
||||
var _delPendingForm = null;
|
||||
function confirmDelete(filename) {
|
||||
if (localStorage.getItem('skipDeleteConfirm') === 'true') {
|
||||
return true;
|
||||
}
|
||||
// Show a modal overlay with confirm + checkbox
|
||||
var overlay = document.createElement('div');
|
||||
overlay.id = 'delConfirmOverlay';
|
||||
overlay.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;' +
|
||||
'background:rgba(0,0,0,0.5);z-index:10000;display:flex;align-items:center;justify-content:center;';
|
||||
overlay.innerHTML =
|
||||
'<div style="background:#2c2c2c;border:1px solid #555;border-radius:8px;padding:20px 30px;' +
|
||||
'max-width:400px;color:#eee;font-size:14px;text-align:center;">' +
|
||||
'<p style="margin-bottom:15px;">Delete <b>"' + filename + '"</b>?</p>' +
|
||||
'<label style="display:block;margin-bottom:15px;font-size:12px;cursor:pointer;">' +
|
||||
'<input type="checkbox" id="delNoAsk" style="margin-right:6px;">Don\'t ask again</label>' +
|
||||
'<button id="delOk" style="margin-right:10px;padding:6px 20px;cursor:pointer;' +
|
||||
'background:#c33;color:#fff;border:1px solid #a22;border-radius:4px;">Delete</button>' +
|
||||
'<button id="delCancel" style="padding:6px 20px;cursor:pointer;' +
|
||||
'background:#555;color:#fff;border:1px solid #444;border-radius:4px;">Cancel</button></div>';
|
||||
document.body.appendChild(overlay);
|
||||
// Capture the form that triggered this
|
||||
_delPendingForm = event.target.closest('form');
|
||||
document.getElementById('delOk').onclick = function() {
|
||||
if (document.getElementById('delNoAsk').checked) {
|
||||
localStorage.setItem('skipDeleteConfirm', 'true');
|
||||
}
|
||||
document.body.removeChild(overlay);
|
||||
if (_delPendingForm) _delPendingForm.submit();
|
||||
};
|
||||
document.getElementById('delCancel').onclick = function() {
|
||||
document.body.removeChild(overlay);
|
||||
};
|
||||
return false; // Prevent the default form submit
|
||||
}
|
||||
|
||||
// Method to display a message in a message field. The existing html is saved and replaced
|
||||
// with the new html. After a timeout period the original html is restored.
|
||||
//
|
||||
$origMessage = null;
|
||||
$origId = null;
|
||||
$msgTimerId = null;
|
||||
function showMessage(timeout, id, message)
|
||||
{
|
||||
// Is this a new message whilst one is active?
|
||||
if($origMessage !== null)
|
||||
{
|
||||
// Cancel timer and restore original message.
|
||||
clearTimeout($msgTimerId);
|
||||
$('#' + $origId).html($origMessage);
|
||||
}
|
||||
|
||||
// Store original message and Id so that on timer expiry it can be replaced..
|
||||
$origMessage = $('#' + id).html();
|
||||
$origId = id;
|
||||
|
||||
// Change HTML and set timer to restore it.
|
||||
$('#' + id).html(message);
|
||||
$msgTimerId = setTimeout(function(msgFieldId)
|
||||
{
|
||||
$('#' + msgFieldId).html($origMessage);
|
||||
$origMessage = null;
|
||||
}, timeout, id);
|
||||
}
|
||||
|
||||
// Clear the file input array.
|
||||
function clearFileInput(ctrl)
|
||||
{
|
||||
try {
|
||||
ctrl.value = null;
|
||||
} catch(ex) { }
|
||||
if (ctrl.value) {
|
||||
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
|
||||
}
|
||||
}
|
||||
|
||||
function setpath() {
|
||||
var default_path = document.getElementById("newfile").files[0].name;
|
||||
document.getElementById("filepath").value = default_path;
|
||||
}
|
||||
|
||||
function uploadFile() {
|
||||
var filePath = document.getElementById("filepath").value;
|
||||
var upload_path = "/data/upload/" + filePath;
|
||||
var fileInput = document.getElementById("newfile").files;
|
||||
|
||||
var MAX_FILE_SIZE = 512*1024*1024;
|
||||
var MAX_FILE_SIZE_STR = "512MB";
|
||||
|
||||
if (fileInput.length == 0)
|
||||
{
|
||||
alert("No file selected!");
|
||||
} else if (filePath.length == 0)
|
||||
{
|
||||
alert("File path on server is not set!");
|
||||
} else if (filePath.indexOf(' ') >= 0)
|
||||
{
|
||||
alert("File path on server cannot have spaces!");
|
||||
} else if (filePath[filePath.length-1] == '/')
|
||||
{
|
||||
alert("File name not specified after path!");
|
||||
} else if (fileInput[0].size > MAX_FILE_SIZE)
|
||||
{
|
||||
alert("File size must be less than "+MAX_FILE_SIZE_STR+"!");
|
||||
} else
|
||||
{
|
||||
document.getElementById("newfile").disabled = true;
|
||||
document.getElementById("filepath").disabled = true;
|
||||
document.getElementById("upload").disabled = true;
|
||||
//document.getElementById("download").disabled = true;
|
||||
document.getElementById("mkdir").disabled = true;
|
||||
|
||||
var file = fileInput[0];
|
||||
var xhttp;
|
||||
if(window.XMLHttpRequest)
|
||||
{
|
||||
xhttp = new XMLHttpRequest();
|
||||
} else
|
||||
{
|
||||
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
xhttp.onreadystatechange = function()
|
||||
{
|
||||
if (xhttp.readyState == 4)
|
||||
{
|
||||
if (xhttp.status == 200)
|
||||
{
|
||||
document.open();
|
||||
document.write(xhttp.responseText);
|
||||
document.close();
|
||||
alert("File upload successful!");
|
||||
location.reload()
|
||||
} else if (xhttp.status == 0)
|
||||
{
|
||||
alert("Upload failed, server closed the connection abruptly!");
|
||||
location.reload()
|
||||
} else
|
||||
{
|
||||
alert(xhttp.status + " Error!\n" + xhttp.responseText);
|
||||
location.reload()
|
||||
}
|
||||
}
|
||||
};
|
||||
xhttp.open("POST", upload_path+window.location.search, true);
|
||||
xhttp.send(fileInput[0]);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to handle form submission for file download
|
||||
function downloadFile(event) {
|
||||
event.preventDefault(); // Prevent default form submission
|
||||
|
||||
const form = event.target.closest("form"); // Get the parent form
|
||||
const filename = form.querySelector("input[name='name']").value; // Extract filename
|
||||
const directory = form.querySelector("input[name='dir']").value; // Extract directory
|
||||
|
||||
// Send AJAX GET request to the server
|
||||
const url = `/data/download/?name=${encodeURIComponent(filename)}&dir=${encodeURIComponent(directory)}`;
|
||||
|
||||
fetch(url, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Accept": "application/octet-stream"
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error("Failed to download file");
|
||||
}
|
||||
return response.blob(); // Get the file as a blob
|
||||
})
|
||||
.then(blob => {
|
||||
// Create a temporary link to trigger download
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const link = document.createElement("a");
|
||||
link.href = url;
|
||||
link.download = filename; // Set the downloaded file's name
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
window.URL.revokeObjectURL(url); // Clean up
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Download failed:", error);
|
||||
alert("Failed to download the file.");
|
||||
});
|
||||
}
|
||||
|
||||
// Add event listeners to all download forms
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const downloadForms = document.querySelectorAll("form[action='?cmd=download']");
|
||||
downloadForms.forEach(form => {
|
||||
form.addEventListener("submit", downloadFile); // Handle form submission
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
function mkdir() {
|
||||
// Get the basepath from the hidden field and filepath from the input box
|
||||
const basepath = document.getElementById('basepath').value;
|
||||
const filepath = document.getElementById('filepath').value;
|
||||
|
||||
// Combine basepath and filepath, ensuring no double slashes
|
||||
const fullpath = `${basepath.replace(/\/+$/, '')}/${filepath.replace(/^\/+/, '')}`;
|
||||
|
||||
// Construct the URL with the full path
|
||||
const url = `/data/mkdir?dir=${encodeURIComponent(fullpath)}`;
|
||||
|
||||
// Make the GET request using fetch
|
||||
fetch(url, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
// Reload the page after successful request
|
||||
location.reload();
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
alert('Failed to create directory');
|
||||
});
|
||||
}
|
||||
106
projects/tzpuPico/SD/default/webfs/js/index.js
vendored
Executable file
106
projects/tzpuPico/SD/default/webfs/js/index.js
vendored
Executable file
@@ -0,0 +1,106 @@
|
||||
function showIPConfig()
|
||||
{
|
||||
if(document.getElementById("wifiCfg0checked"))
|
||||
{
|
||||
document.getElementById("wifiCfg0checked").style.display = 'compact';
|
||||
document.getElementById("wifiCfg").style.display = 'none';
|
||||
|
||||
if(document.getElementById("wifiCfg3checked"))
|
||||
{
|
||||
document.getElementById("wifiCfg3checked").style.display = 'compact';
|
||||
document.getElementById("wifiCfg3").style.display = 'none';
|
||||
} else
|
||||
{
|
||||
document.getElementById("wifiCfg3checked").style.display = 'none';
|
||||
document.getElementById("wifiCfg3").style.display = 'compact';
|
||||
}
|
||||
|
||||
if(document.getElementById("wifiCfg1checked"))
|
||||
{
|
||||
document.getElementById("wifiCfg1checked").style.display = 'compact';
|
||||
} else
|
||||
{
|
||||
document.getElementById("wifiCfg1").style.display = 'none';
|
||||
}
|
||||
} else
|
||||
{
|
||||
document.getElementById("wifiCfg0").style.display = 'none';
|
||||
document.getElementById("wifiCfgchecked").style.display = 'compact';
|
||||
}
|
||||
}
|
||||
|
||||
// Method to enable the correct side-bar menu for the underlying host interface.
|
||||
function enableIfConfig()
|
||||
{
|
||||
// // Create menu dynamically according to modules present.
|
||||
// if(activeInterface === "KeyInterface ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// }
|
||||
// // Mouse interface active?
|
||||
// else if(activeInterface === "Mouse ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'compact';
|
||||
//
|
||||
// // Secondary interface available?
|
||||
// if(secondaryInterface == "Mouse ")
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'none';
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
function reloadConfig() {
|
||||
fetch('/tasks/reloadcfg')
|
||||
.then(response => {
|
||||
if (response.ok) {
|
||||
// Optional: show a quick message (non-blocking)
|
||||
alert('RP2350 config reloaded successfully');
|
||||
// or better: add a <div id="status"> somewhere and do:
|
||||
// document.getElementById('status').innerText = 'Reloaded OK';
|
||||
} else {
|
||||
alert('Reload failed: ' + response.status);
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
alert('Error: ' + err);
|
||||
});
|
||||
}
|
||||
|
||||
// On document load, setup the items viewable on the page according to set values.
|
||||
document.addEventListener("DOMContentLoaded", function setPageDefaults()
|
||||
{
|
||||
showIPConfig();
|
||||
enableIfConfig();
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$('.dropdown-btn').on('click', function(e) {
|
||||
e.preventDefault(); // prevent page jump if it's a #
|
||||
|
||||
var $this = $(this);
|
||||
var $submenu = $this.next('.submenu');
|
||||
|
||||
// Close all other open menus
|
||||
$('.submenu').not($submenu).slideUp(200);
|
||||
$('.dropdown-btn').not($this).removeClass('open');
|
||||
|
||||
// Toggle current one
|
||||
$this.toggleClass('open');
|
||||
$submenu.slideToggle(20);
|
||||
});
|
||||
|
||||
// Optional: if you want to keep submenu open when clicking a link inside
|
||||
$('.submenu a').on('click', function() {
|
||||
// You can add active class logic here if needed
|
||||
$('.components li').removeClass('active');
|
||||
$(this).closest('li').addClass('active').closest('li').addClass('active');
|
||||
});
|
||||
});
|
||||
BIN
projects/tzpuPico/SD/default/webfs/js/jasny-bootstrap.min.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/jasny-bootstrap.min.js.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/js/jquery.edittable.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/jquery.edittable.js.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/js/jquery.edittable.min.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/jquery.edittable.min.js.gz
vendored
Executable file
Binary file not shown.
BIN
projects/tzpuPico/SD/default/webfs/js/jquery.min.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/jquery.min.js.gz
vendored
Executable file
Binary file not shown.
309
projects/tzpuPico/SD/default/webfs/js/ota-esp32.js
vendored
Executable file
309
projects/tzpuPico/SD/default/webfs/js/ota-esp32.js
vendored
Executable file
@@ -0,0 +1,309 @@
|
||||
var lastStatus = 0;
|
||||
|
||||
// Method to display a message in a message field. The existing html is saved and replaced
|
||||
// with the new html. After a timeout period the original html is restored.
|
||||
//
|
||||
$origMessage = null;
|
||||
$origId = null;
|
||||
$msgTimerId = null;
|
||||
function showMessage(timeout, id, message)
|
||||
{
|
||||
// Is this a new message whilst one is active?
|
||||
if($origMessage !== null)
|
||||
{
|
||||
// Cancel timer and restore original message.
|
||||
clearTimeout($msgTimerId);
|
||||
$('#' + $origId).html($origMessage);
|
||||
}
|
||||
|
||||
// Store original message and Id so that on timer expiry it can be replaced..
|
||||
$origMessage = $('#' + id).html();
|
||||
$origId = id;
|
||||
|
||||
// Change HTML and set timer to restore it.
|
||||
$('#' + id).html(message);
|
||||
$msgTimerId = setTimeout(function(msgFieldId)
|
||||
{
|
||||
$('#' + msgFieldId).html($origMessage);
|
||||
$origMessage = null;
|
||||
}, timeout, id);
|
||||
}
|
||||
|
||||
// Clear the file input array.
|
||||
function clearFileInput(ctrl)
|
||||
{
|
||||
try {
|
||||
ctrl.value = null;
|
||||
} catch(ex) { }
|
||||
if (ctrl.value) {
|
||||
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
|
||||
}
|
||||
}
|
||||
|
||||
// Firmware handlers.
|
||||
document.getElementById('esp32FirmwareUpload').onchange = function esp32GetFirmwareFileName(e)
|
||||
{
|
||||
var default_path = document.getElementById("esp32FirmwareUpload").files[0].name;
|
||||
|
||||
// Put the name of the file into the table cell.
|
||||
document.getElementById('esp32FirmwareName').innerHTML = "<b>=></b>" + default_path;
|
||||
document.getElementById('esp32FirmwareUpgrade').value = document.getElementById('esp32FirmwareUpload').files[0].name;
|
||||
|
||||
// Disable select and enable upgrade/cancel.
|
||||
document.getElementById('esp32FirmwareUploadLabel').style.display = 'none';
|
||||
document.getElementById('esp32FirmwareUpgrade').disabled = false;
|
||||
document.getElementById('esp32FirmwareUpgrade').style.display = 'block';
|
||||
document.getElementById('esp32FirmwareCancel').disabled = false;
|
||||
document.getElementById('esp32FirmwareCancel').style.display = 'block';
|
||||
document.getElementById('esp32FirmwareMsg').innerHTML = "Press <b>Upgrade</b> to upload and flash the firmware into the Pico Z-80 ESP32 MCU or <b>Cancel</b> to cancel and re-select file.";
|
||||
}
|
||||
document.getElementById('esp32FirmwareCancel').onclick = function esp32CancelFirmwareUpload(e)
|
||||
{
|
||||
var default_path = document.getElementById("esp32FirmwareUpload").files[0].name;
|
||||
|
||||
// Reset the selected filename.
|
||||
document.getElementById('esp32FirmwareName').innerHTML = "";
|
||||
document.getElementById('esp32FirmwareUpgrade').value = [];
|
||||
clearFileInput(document.getElementById('esp32FirmwareUpload'));
|
||||
|
||||
// Enable select and disable upgrade/cancel.
|
||||
document.getElementById('esp32FirmwareUploadLabel').style.display = 'block';
|
||||
document.getElementById('esp32FirmwareUpgrade').disabled = true;
|
||||
document.getElementById('esp32FirmwareUpgrade').style.display = 'none';
|
||||
document.getElementById('esp32FirmwareCancel').disabled = true;
|
||||
document.getElementById('esp32FirmwareCancel').style.display = 'none';
|
||||
document.getElementById('esp32FirmwareMsg').innerHTML = "Select a firmware image file with which to upgrade the Pico Z-80 ESP32 MCU.";
|
||||
}
|
||||
|
||||
// Firmware upgrade handler.
|
||||
function esp32FirmwareUpdateProgress(e)
|
||||
{
|
||||
if (e.lengthComputable)
|
||||
{
|
||||
var percentage = Math.round((e.loaded/e.total)*100);
|
||||
document.getElementById('esp32FirmwareProgressBar').style.width = percentage + '%';
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById('esp32FirmwareProgressBar').innerHTML = "Unable to compute progress information since the total size is unknown";
|
||||
}
|
||||
}
|
||||
document.getElementById('esp32FirmwareUpgrade').onclick = function esp32FirmwareUpload()
|
||||
{
|
||||
var fileInput = document.getElementById("esp32FirmwareUpload").files;
|
||||
|
||||
// Override the partition based on the selected filename.
|
||||
const selectedFile = fileInput[0];
|
||||
const filename = selectedFile.name.toLowerCase();
|
||||
if (filename.includes("0x10020000")) {
|
||||
setRp2350Partition("1");
|
||||
} else if (filename.includes("0x10520000")) {
|
||||
setRp2350Partition("2");
|
||||
}
|
||||
|
||||
// Reset the last status. Used to track state change.
|
||||
lastStatus = 0;
|
||||
|
||||
// Client side checks, no point initiating a firmware update if the file isnt valid!
|
||||
if (fileInput.length == 0)
|
||||
{
|
||||
alert("No file selected!");
|
||||
} else if (fileInput[0].size > 1984*1024)
|
||||
{
|
||||
alert("File size must be less than 1.9MB!");
|
||||
} else
|
||||
{
|
||||
document.getElementById("esp32FirmwareUpload").disabled = true;
|
||||
document.getElementById("esp32FirmwareUploadLabel").style.display = 'none';
|
||||
document.getElementById("esp32FirmwareUpgrade").disabled = true;
|
||||
document.getElementById("esp32FirmwareUpgrade").style.display = 'none';
|
||||
document.getElementById("esp32FirmwareCancel").style.display = 'none';
|
||||
document.getElementById("esp32FirmwareProgress").style.display = 'block';
|
||||
|
||||
var xhttp;
|
||||
if(window.XMLHttpRequest)
|
||||
{
|
||||
xhttp = new XMLHttpRequest();
|
||||
} else
|
||||
{
|
||||
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
|
||||
// Install listeners to
|
||||
xhttp.upload.addEventListener("progress", esp32FirmwareUpdateProgress, false);
|
||||
xhttp.onreadystatechange = function()
|
||||
{
|
||||
if (xhttp.readyState == 4)
|
||||
{
|
||||
lastStatus = xhttp.status;
|
||||
if (xhttp.status == 200)
|
||||
{
|
||||
document.getElementById('esp32FirmwareMsg').innerHTML = "<p style=\"color:green;\">Transfer complete, ESP32 firmware successfully flashed onto the Pico Z-80. Please press <b>Reboot</b> to activate.</p>";
|
||||
document.getElementById("esp32FirmwareProgress").style.display = 'none';
|
||||
document.getElementById('esp32FirmwareName').style.display = 'none';
|
||||
} else if (xhttp.status == 500)
|
||||
{
|
||||
document.getElementById('esp32FirmwareMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Press Reboot</p>";
|
||||
}
|
||||
else if (xhttp.status == 0)
|
||||
{
|
||||
document.getElementById('esp32FirmwareMsg').innerHTML = "<p style=\"color:red;\">Error: Server closed the connection abrubtly, flash status unknown! - Press Reboot</p>";
|
||||
} else
|
||||
{
|
||||
document.getElementById('esp32FirmwareMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Press Reboot</p>";
|
||||
}
|
||||
}
|
||||
};
|
||||
document.getElementById('esp32FirmwareMsg').innerHTML = "<p style=\"color:orange;\">Uploading and flashing the new ESP32 firmware, please wait...</p>";
|
||||
xhttp.open("POST", "/ota/esp32firmware", true);
|
||||
xhttp.send(fileInput[0]);
|
||||
}
|
||||
}
|
||||
|
||||
// Filepack handlers.
|
||||
document.getElementById('filepackUpload').onchange = function getFilepackFileName(e)
|
||||
{
|
||||
var default_path = document.getElementById("filepackUpload").files[0].name;
|
||||
|
||||
// Put the name of the file into the table cell.
|
||||
document.getElementById('filepackName').innerHTML = "<b>=></b>" + default_path;
|
||||
document.getElementById('filepackUpgrade').value = document.getElementById('filepackUpload').files[0].name;
|
||||
|
||||
// Disable select and enable upgrade/cancel.
|
||||
document.getElementById('filepackUploadLabel').style.display = 'none';
|
||||
document.getElementById('filepackUpgrade').disabled = false;
|
||||
document.getElementById('filepackUpgrade').style.display = 'block';
|
||||
document.getElementById('filepackCancel').disabled = false;
|
||||
document.getElementById('filepackCancel').style.display = 'block';
|
||||
document.getElementById('filepackWarning').style.display = 'block';
|
||||
document.getElementById('filepackMsg').innerHTML = "Press <b>Upgrade</b> to upload and flash the filepack onto the Pico Z-80 SD Card filesystem or <b>Cancel</b> to cancel and re-select file.";
|
||||
}
|
||||
document.getElementById('filepackCancel').onclick = function cancelFilepackUpload(e)
|
||||
{
|
||||
var default_path = document.getElementById("filepackUpload").files[0].name;
|
||||
|
||||
// Reset the selected filename.
|
||||
document.getElementById('filepackName').innerHTML = "";
|
||||
clearFileInput(document.getElementById('filepackUpload'));
|
||||
|
||||
// Enable select and disable upgrade/cancel.
|
||||
document.getElementById('filepackUploadLabel').style.display = 'block';
|
||||
document.getElementById('filepackUpgrade').disabled = true;
|
||||
document.getElementById('filepackUpgrade').style.display = 'none';
|
||||
document.getElementById('filepackCancel').disabled = true;
|
||||
document.getElementById('filepackCancel').style.display = 'none';
|
||||
document.getElementById('filepackWarning').style.display = 'none';
|
||||
document.getElementById('filepackMsg').innerHTML = "Select a filepack image file with which to upgrade the Pico Z-80 SD Card filesystem.";
|
||||
}
|
||||
|
||||
// Filepack upgrade handler.
|
||||
function filepackUpdateProgress(e)
|
||||
{
|
||||
if (e.lengthComputable)
|
||||
{
|
||||
var percentage = Math.round((e.loaded/e.total)*100);
|
||||
document.getElementById('filepackProgressBar').style.width = percentage + '%';
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById('filepackProgressBar').innerHTML = "Unable to compute progress information since the total size is unknown";
|
||||
}
|
||||
}
|
||||
document.getElementById('filepackUpgrade').onclick = function filepackUpload()
|
||||
{
|
||||
var fileInput = document.getElementById("filepackUpload").files;
|
||||
|
||||
// Reset the last status. Used to track state change.
|
||||
lastStatus = 0;
|
||||
|
||||
// Client side checks, no point initiating a filepack update if the file isnt valid!
|
||||
if (fileInput.length == 0)
|
||||
{
|
||||
alert("No file selected!");
|
||||
// Set a limit, so assume a minimum 2GB SD Card, of which 512MB would be useable..
|
||||
} else if (fileInput[0].size > 512*1024*1024)
|
||||
{
|
||||
alert("File size must be less than 512MB!");
|
||||
} else
|
||||
{
|
||||
document.getElementById("filepackUpload").disabled = true;
|
||||
document.getElementById("filepackUploadLabel").style.display = 'none';
|
||||
document.getElementById("filepackUpgrade").disabled = true;
|
||||
document.getElementById("filepackUpgrade").style.display = 'none';
|
||||
document.getElementById("filepackCancel").style.display = 'none';
|
||||
document.getElementById("filepackProgress").style.display = 'block';
|
||||
|
||||
var xhttp;
|
||||
if(window.XMLHttpRequest)
|
||||
{
|
||||
xhttp = new XMLHttpRequest();
|
||||
} else
|
||||
{
|
||||
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
|
||||
// Install listeners to
|
||||
xhttp.upload.addEventListener("progress", filepackUpdateProgress, false);
|
||||
xhttp.onreadystatechange = function()
|
||||
{
|
||||
if (xhttp.readyState == 4)
|
||||
{
|
||||
lastStatus = xhttp.status;
|
||||
if (xhttp.status == 200)
|
||||
{
|
||||
document.getElementById('filepackMsg').innerHTML = "<p style=\"color:green;\">Transfer complete, filepack successfully flashed onto Pico Z-80 SD Card filesystem. Please press <b>Reboot</b> to activate.</p>";
|
||||
document.getElementById("filepackProgress").style.display = 'none';
|
||||
document.getElementById('filepackName').style.display = 'none';
|
||||
} else if (xhttp.status == 500)
|
||||
{
|
||||
document.getElementById('filepackMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Press Reboot</p>";
|
||||
}
|
||||
else if (xhttp.status == 0)
|
||||
{
|
||||
document.getElementById('filepackMsg').innerHTML = "<p style=\"color:red;\">Error: Server closed the connection abrubtly, SD Card wont be updated! - Press Reboot</p>";
|
||||
} else
|
||||
{
|
||||
document.getElementById('filepackMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Press Reboot</p>";
|
||||
}
|
||||
}
|
||||
};
|
||||
document.getElementById('filepackMsg').innerHTML = "<p style=\"color:orange;\">Uploading and flashing the new filepack, please wait...</p>";
|
||||
xhttp.open("POST", "/ota/filepack", true);
|
||||
xhttp.send(fileInput[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Method to enable the correct side-bar menu for the underlying host interface.
|
||||
function enableIfConfig()
|
||||
{
|
||||
// // Create active sidebar according to enabled components.
|
||||
// if(activeInterface === "KeyInterface ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// }
|
||||
// // Mouse interface active?
|
||||
// else if(activeInterface === "Mouse ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'compact';
|
||||
//
|
||||
// // Secondary interface available?
|
||||
// if(secondaryInterface == "Mouse ")
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'none';
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// On document load, setup the items viewable on the page according to set values.
|
||||
document.addEventListener("DOMContentLoaded", function setPageDefaults()
|
||||
{
|
||||
enableIfConfig();
|
||||
});
|
||||
264
projects/tzpuPico/SD/default/webfs/js/ota-rp2350.js
vendored
Executable file
264
projects/tzpuPico/SD/default/webfs/js/ota-rp2350.js
vendored
Executable file
@@ -0,0 +1,264 @@
|
||||
var lastStatus = 0;
|
||||
|
||||
// Method to display a message in a message field. The existing html is saved and replaced
|
||||
// with the new html. After a timeout period the original html is restored.
|
||||
//
|
||||
$origMessage = null;
|
||||
$origId = null;
|
||||
$msgTimerId = null;
|
||||
function showMessage(timeout, id, message)
|
||||
{
|
||||
// Is this a new message whilst one is active?
|
||||
if($origMessage !== null)
|
||||
{
|
||||
// Cancel timer and restore original message.
|
||||
clearTimeout($msgTimerId);
|
||||
$('#' + $origId).html($origMessage);
|
||||
}
|
||||
|
||||
// Store original message and Id so that on timer expiry it can be replaced..
|
||||
$origMessage = $('#' + id).html();
|
||||
$origId = id;
|
||||
|
||||
// Change HTML and set timer to restore it.
|
||||
$('#' + id).html(message);
|
||||
$msgTimerId = setTimeout(function(msgFieldId)
|
||||
{
|
||||
$('#' + msgFieldId).html($origMessage);
|
||||
$origMessage = null;
|
||||
}, timeout, id);
|
||||
}
|
||||
|
||||
// Clear the file input array.
|
||||
function clearFileInput(ctrl)
|
||||
{
|
||||
try {
|
||||
ctrl.value = null;
|
||||
} catch(ex) { }
|
||||
if (ctrl.value) {
|
||||
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
|
||||
}
|
||||
}
|
||||
|
||||
function setRp2350Partition(value) {
|
||||
const radios = document.getElementsByName("rp2350Partition");
|
||||
for (const radio of radios) {
|
||||
radio.checked = (radio.value === value);
|
||||
}
|
||||
}
|
||||
// RP2350 Firmware handlers.
|
||||
document.getElementById('rp2350FirmwareUpload').onchange = function rp2350GetFirmwareFileName(e)
|
||||
{
|
||||
var default_path = document.getElementById("rp2350FirmwareUpload").files[0].name;
|
||||
|
||||
// Override the partition based on the selected filename.
|
||||
const filename = default_path.toLowerCase();
|
||||
if (filename.includes("0x10020000")) {
|
||||
setRp2350Partition("1");
|
||||
} else if (filename.includes("0x10520000")) {
|
||||
setRp2350Partition("2");
|
||||
}
|
||||
|
||||
// Put the name of the file into the table cell.
|
||||
document.getElementById('rp2350FirmwareName').innerHTML = "<b>=></b>" + default_path;
|
||||
document.getElementById('rp2350FirmwareUpgrade').value = default_path;
|
||||
|
||||
// Disable select and enable upgrade/cancel.
|
||||
document.getElementById('rp2350FirmwareUploadLabel').style.display = 'none';
|
||||
document.getElementById('rp2350FirmwareUpgrade').disabled = false;
|
||||
document.getElementById('rp2350FirmwareUpgrade').style.display = 'block';
|
||||
document.getElementById('rp2350FirmwareCancel').disabled = false;
|
||||
document.getElementById('rp2350FirmwareCancel').style.display = 'block';
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "Press <b>Upgrade</b> to upload and flash the RP2350 firmware into the Pico Z-80 RP2350 MCU or <b>Cancel</b> to cancel and re-select file.";
|
||||
}
|
||||
document.getElementById('rp2350FirmwareCancel').onclick = function rp2350CancelFirmwareUpload(e)
|
||||
{
|
||||
var default_path = document.getElementById("rp2350FirmwareUpload").files[0].name;
|
||||
|
||||
// Reset the selected filename.
|
||||
document.getElementById('rp2350FirmwareName').innerHTML = "";
|
||||
document.getElementById('rp2350FirmwareUpgrade').value = [];
|
||||
clearFileInput(document.getElementById('rp2350FirmwareUpload'));
|
||||
|
||||
// Enable select and disable upgrade/cancel.
|
||||
document.getElementById('rp2350FirmwareUploadLabel').style.display = 'block';
|
||||
document.getElementById('rp2350FirmwareUpgrade').disabled = true;
|
||||
document.getElementById('rp2350FirmwareUpgrade').style.display = 'none';
|
||||
document.getElementById('rp2350FirmwareCancel').disabled = true;
|
||||
document.getElementById('rp2350FirmwareCancel').style.display = 'none';
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "Select an RP2350 firmware image file with which to upgrade the Pico Z-80 RP2350 MCU.";
|
||||
}
|
||||
|
||||
// Firmware upgrade handler.
|
||||
function rp2350FirmwareUpdateProgress(e)
|
||||
{
|
||||
if (e.lengthComputable)
|
||||
{
|
||||
var percentage = Math.round((e.loaded/e.total)*100);
|
||||
document.getElementById('rp2350FirmwareProgressBar').style.width = percentage + '%';
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById('rp2350FirmwareProgressBar').innerHTML = "Unable to compute progress information since the total size is unknown";
|
||||
}
|
||||
}
|
||||
document.getElementById('rp2350FirmwareUpgrade').onclick = function rp2350FirmwareUpload()
|
||||
{
|
||||
var fileInput = document.getElementById("rp2350FirmwareUpload").files;
|
||||
var partition = document.querySelector('input[name="rp2350Partition"]:checked')?.value || '1';
|
||||
var clearCfg = document.getElementById("clearConfig").checked ? "1" : "0";
|
||||
var clearHdr = document.getElementById("clearFlashHeader").checked ? "1" : "0";
|
||||
|
||||
// Build URL with parameters
|
||||
const url = "/ota/rp2350firmware?partition=" + encodeURIComponent(partition)
|
||||
+ "&clearcfg=" + clearCfg
|
||||
+ "&clearhdr=" + clearHdr;
|
||||
|
||||
// Override the partition based on the filename (unchanged)
|
||||
const selectedFile = fileInput[0];
|
||||
const filename = selectedFile.name.toLowerCase();
|
||||
if (filename.includes("0x10020000")) {
|
||||
partition = "1";
|
||||
setRp2350Partition("1");
|
||||
} else if (filename.includes("0x10520000")) {
|
||||
partition = "2";
|
||||
setRp2350Partition("2");
|
||||
}
|
||||
|
||||
// Reset the last status. Used to track state change.
|
||||
lastStatus = 0;
|
||||
|
||||
// Client side checks, no point initiating a firmware update if the file isnt valid!
|
||||
if (fileInput.length == 0)
|
||||
{
|
||||
alert("No file selected!");
|
||||
} else if (fileInput[0].size > 16384*1024)
|
||||
{
|
||||
alert("File size must be less than 16.0MB!");
|
||||
} else
|
||||
{
|
||||
document.getElementById("rp2350FirmwareUpload").disabled = true;
|
||||
document.getElementById("rp2350FirmwareUploadLabel").style.display = 'none';
|
||||
document.getElementById("rp2350FirmwareUpgrade").disabled = true;
|
||||
document.getElementById("rp2350PartitionRadio").disabled = true;
|
||||
document.getElementById("rp2350FirmwareUpgrade").style.display = 'none';
|
||||
document.getElementById("rp2350FirmwareCancel").style.display = 'none';
|
||||
document.getElementById("rp2350FirmwareProgress").style.display = 'block';
|
||||
document.getElementById("rp2350PartitionRadio").style.display = 'none';
|
||||
|
||||
var xhttp;
|
||||
if(window.XMLHttpRequest)
|
||||
{
|
||||
xhttp = new XMLHttpRequest();
|
||||
} else
|
||||
{
|
||||
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
|
||||
// Install listeners to
|
||||
xhttp.upload.addEventListener("progress", rp2350FirmwareUpdateProgress, false);
|
||||
xhttp.onreadystatechange = function()
|
||||
{
|
||||
if (xhttp.readyState == 4)
|
||||
{
|
||||
lastStatus = xhttp.status;
|
||||
if (xhttp.status == 200)
|
||||
{
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "<p style=\"color:green;\">Transfer complete, firmware successfully flashed onto the Pico Z-80 RP2350 MCU. The MCU was automatically rebooted.</p>";
|
||||
document.getElementById("rp2350FirmwareProgress").style.display = 'none';
|
||||
document.getElementById('rp2350FirmwareName').style.display = 'none';
|
||||
} else if (xhttp.status == 500)
|
||||
{
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Please reset MCU and retry.</p>";
|
||||
}
|
||||
else if (xhttp.status == 0)
|
||||
{
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "<p style=\"color:red;\">Error: Server closed the connection abrubtly, flash status unknown! - Please reset MCU and retry.</p>";
|
||||
} else
|
||||
{
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Press Reboot</p>";
|
||||
}
|
||||
}
|
||||
};
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "<p style=\"color:orange;\">Uploading and flashing the new firmware, please wait...</p>";
|
||||
xhttp.open("POST", url, true);
|
||||
xhttp.send(fileInput[0]);
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('rp2350ActivePartitionSelect').onclick = function rp2350ActivePartitionSelect(e)
|
||||
{
|
||||
var partition = document.querySelector('input[name="rp2350ActivePartition"]:checked')?.value || '1';
|
||||
const url = "/data/rp2350"
|
||||
const params = "activepartition=" + encodeURIComponent(partition);
|
||||
|
||||
var xhttp;
|
||||
if(window.XMLHttpRequest)
|
||||
{
|
||||
xhttp = new XMLHttpRequest();
|
||||
} else
|
||||
{
|
||||
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
|
||||
// Install listeners to
|
||||
xhttp.upload.addEventListener("progress", rp2350FirmwareUpdateProgress, false);
|
||||
xhttp.onreadystatechange = function()
|
||||
{
|
||||
if (xhttp.readyState == 4)
|
||||
{
|
||||
lastStatus = xhttp.status;
|
||||
if (xhttp.status == 200)
|
||||
{
|
||||
document.getElementById('rp2350ActivePartitionMsg').innerHTML = "Partition " + partition + " activated.";
|
||||
} else if (xhttp.status == 500)
|
||||
{
|
||||
document.getElementById('rp2350ActivePartitionMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Please reboot RP2350 MCU and retry.</p>";
|
||||
}
|
||||
else if (xhttp.status == 0)
|
||||
{
|
||||
document.getElementById('rp2350ActivePartitionMsg').innerHTML = "<p style=\"color:red;\">Error: Server closed the connection abrubtly, active partition status unknown! - Please reboot RP2350 MCU and retry.</p>";
|
||||
} else
|
||||
{
|
||||
document.getElementById('rp2350FirmwareMsg').innerHTML = "<p style=\"color:red;\">Error: " + xhttp.responseText + " - Press RP2350 Reboot</p>";
|
||||
}
|
||||
}
|
||||
};
|
||||
document.getElementById('rp2350ActivePartitionMsg').innerHTML = "<p style=\"color:orange;\">Requesting Partition " + partition + " is made active, please wait....</p>";
|
||||
xhttp.open("POST", url, true);
|
||||
xhttp.send(params);
|
||||
}
|
||||
|
||||
// Method to enable the correct side-bar menu for the underlying host interface.
|
||||
function enableIfConfig()
|
||||
{
|
||||
// // Create active sidebar according to enabled components.
|
||||
// if(activeInterface === "KeyInterface ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// }
|
||||
// // Mouse interface active?
|
||||
// else if(activeInterface === "Mouse ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'compact';
|
||||
//
|
||||
// // Secondary interface available?
|
||||
// if(secondaryInterface == "Mouse ")
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'none';
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// On document load, setup the items viewable on the page according to set values.
|
||||
document.addEventListener("DOMContentLoaded", function setPageDefaults()
|
||||
{
|
||||
enableIfConfig();
|
||||
});
|
||||
81
projects/tzpuPico/SD/default/webfs/js/personality.js
vendored
Executable file
81
projects/tzpuPico/SD/default/webfs/js/personality.js
vendored
Executable file
@@ -0,0 +1,81 @@
|
||||
$(document).ready(function() {
|
||||
|
||||
$("#selectPersonaBtn").click(function() {
|
||||
|
||||
// Get selected values
|
||||
var p1 = $('input[name="partition1"]:checked').val();
|
||||
var p2 = $('input[name="partition2"]:checked').val();
|
||||
|
||||
// Basic validation
|
||||
if (!p1 || !p2) {
|
||||
$("#personaMsg")
|
||||
.removeClass("alert-success alert-danger")
|
||||
.addClass("alert-warning")
|
||||
.text("Please select a persona for both partitions.")
|
||||
.show();
|
||||
return;
|
||||
}
|
||||
|
||||
// Prepare data
|
||||
var data = {
|
||||
partition1: p1,
|
||||
partition2: p2
|
||||
};
|
||||
|
||||
// Disable button during request
|
||||
$("#selectPersonaBtn").prop("disabled", true);
|
||||
|
||||
$.ajax({
|
||||
url: "/data/persona",
|
||||
type: "POST",
|
||||
data: data,
|
||||
// dataType: "json", ← comment this out during debugging
|
||||
|
||||
success: function(response, textStatus, jqXHR) {
|
||||
console.log("Raw success response:", response); // keep for debugging
|
||||
|
||||
var msg = "";
|
||||
var alertClass = "alert-success";
|
||||
|
||||
// Handle plain string (your current case) or object
|
||||
if (typeof response === 'string') {
|
||||
msg = response; // ← this is your <font>...</font> string
|
||||
} else if (typeof response === 'object' && response !== null) {
|
||||
if (response.message) {
|
||||
msg = response.message;
|
||||
} else if (response.error) {
|
||||
msg = response.error;
|
||||
alertClass = "alert-danger";
|
||||
} else {
|
||||
msg = "Update completed.";
|
||||
}
|
||||
} else {
|
||||
msg = "Update completed (unexpected format).";
|
||||
}
|
||||
|
||||
$("#personaMsg")
|
||||
.removeClass("alert-success alert-danger alert-warning")
|
||||
.addClass(alertClass)
|
||||
.html(msg) // ← changed from .text() to .html()
|
||||
.show();
|
||||
|
||||
$("#selectPersonaBtn").prop("disabled", false);
|
||||
},
|
||||
|
||||
error: function(jqXHR, textStatus, errorThrown) {
|
||||
console.log("AJAX error:", textStatus, errorThrown);
|
||||
console.log("Response text:", jqXHR.responseText);
|
||||
|
||||
var msg = jqXHR.responseText || "Failed to update personalities.";
|
||||
|
||||
$("#personaMsg")
|
||||
.removeClass("alert-success alert-warning")
|
||||
.addClass("alert-danger")
|
||||
.html(msg) // ← changed here too
|
||||
.show();
|
||||
|
||||
$("#selectPersonaBtn").prop("disabled", false);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
BIN
projects/tzpuPico/SD/default/webfs/js/trumbowyg.min.js.gz
vendored
Executable file
BIN
projects/tzpuPico/SD/default/webfs/js/trumbowyg.min.js.gz
vendored
Executable file
Binary file not shown.
1
projects/tzpuPico/SD/default/webfs/js/ui/icons.svg
vendored
Executable file
1
projects/tzpuPico/SD/default/webfs/js/ui/icons.svg
vendored
Executable file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 32 KiB |
189
projects/tzpuPico/SD/default/webfs/js/wifimanager.js
vendored
Executable file
189
projects/tzpuPico/SD/default/webfs/js/wifimanager.js
vendored
Executable file
@@ -0,0 +1,189 @@
|
||||
// Method to display a message in a message field. The existing html is saved and replaced
|
||||
// with the new html. After a timeout period the original html is restored.
|
||||
//
|
||||
$origMessage = null;
|
||||
$origId = null;
|
||||
$msgTimerId = null;
|
||||
function showMessage(timeout, id, message)
|
||||
{
|
||||
// Is this a new message whilst one is active?
|
||||
if($origMessage !== null)
|
||||
{
|
||||
// Cancel timer and restore original message.
|
||||
clearTimeout($msgTimerId);
|
||||
$('#' + $origId).html($origMessage);
|
||||
}
|
||||
|
||||
// Store original message and Id so that on timer expiry it can be replaced..
|
||||
$origMessage = $('#' + id).html();
|
||||
$origId = id;
|
||||
|
||||
// Change HTML and set timer to restore it.
|
||||
$('#' + id).html(message);
|
||||
$msgTimerId = setTimeout(function(msgFieldId)
|
||||
{
|
||||
$('#' + msgFieldId).html($origMessage);
|
||||
$origMessage = null;
|
||||
}, timeout, id);
|
||||
}
|
||||
|
||||
|
||||
function showWiFiAPInput()
|
||||
{
|
||||
document.getElementById('inputWiFiClient').style.display = 'none';
|
||||
document.getElementById('inputWiFiAP').style.display = 'block';
|
||||
var el = document.getElementById("errorMsg");
|
||||
if (el) el.innerHTML = "";
|
||||
}
|
||||
|
||||
function showWiFiClientInput()
|
||||
{
|
||||
document.getElementById('inputWiFiClient').style.display = 'block';
|
||||
document.getElementById('inputWiFiAP').style.display = 'none';
|
||||
var el = document.getElementById("errorMsg");
|
||||
if (el) el.innerHTML = "";
|
||||
}
|
||||
|
||||
function hideFixedIPInput()
|
||||
{
|
||||
document.getElementById('rowClientIP').style.display = 'none';
|
||||
document.getElementById('rowClientNETMASK').style.display = 'none';
|
||||
document.getElementById('rowClientGATEWAY').style.display = 'none';
|
||||
document.getElementById('dhcpInput').style.display = 'block';
|
||||
var el = document.getElementById("errorMsg");
|
||||
if (el) el.innerHTML = "";
|
||||
}
|
||||
|
||||
function showFixedIPInput()
|
||||
{
|
||||
document.getElementById('rowClientIP').style.display = 'table-row';
|
||||
document.getElementById('rowClientNETMASK').style.display = 'table-row';
|
||||
document.getElementById('rowClientGATEWAY').style.display = 'table-row';
|
||||
document.getElementById('dhcpInput').style.display = 'none';
|
||||
var el = document.getElementById("errorMsg");
|
||||
if (el) el.innerHTML = "";
|
||||
}
|
||||
|
||||
function showIPConfig()
|
||||
{
|
||||
// Helper to safely show/hide an element by ID.
|
||||
function setDisplay(id, display) {
|
||||
var el = document.getElementById(id);
|
||||
if (el) el.style.display = display;
|
||||
}
|
||||
|
||||
if(document.getElementById("wifiCfg0checked"))
|
||||
{
|
||||
// Client mode active — show client status, hide AP status.
|
||||
setDisplay("wifiCfg0checked", "compact");
|
||||
setDisplay("wifiCfg", "none");
|
||||
|
||||
if(document.getElementById("wifiCfg3checked"))
|
||||
{
|
||||
// DHCP on — show assigned IP row, hide fixed IP row.
|
||||
setDisplay("wifiCfg3checked", "compact");
|
||||
setDisplay("wifiCfg3", "none");
|
||||
} else
|
||||
{
|
||||
// DHCP off — show fixed IP row, hide assigned IP row.
|
||||
setDisplay("wifiCfg3checked", "none");
|
||||
setDisplay("wifiCfg3", "compact");
|
||||
}
|
||||
|
||||
if(document.getElementById("wifiCfg1checked"))
|
||||
{
|
||||
setDisplay("wifiCfg1checked", "compact");
|
||||
} else
|
||||
{
|
||||
setDisplay("wifiCfg1", "none");
|
||||
}
|
||||
} else
|
||||
{
|
||||
// AP mode active — show AP status, hide client status.
|
||||
setDisplay("wifiCfg0", "none");
|
||||
setDisplay("wifiCfgchecked", "compact");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Method to enable the correct side-bar menu for the underlying host interface.
|
||||
function enableIfConfig()
|
||||
{
|
||||
// // Create menu dynamically according to modules present.
|
||||
// if(activeInterface === "KeyInterface ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// }
|
||||
// // Mouse interface active?
|
||||
// else if(activeInterface === "Mouse ")
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'none';
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("keyMapAvailable").style.display = 'compact';
|
||||
//
|
||||
// // Secondary interface available?
|
||||
// if(secondaryInterface == "Mouse ")
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'compact';
|
||||
// } else
|
||||
// {
|
||||
// document.getElementById("mouseCfgAvailable").style.display = 'none';
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
// On document load, setup the items viewable on the page according to set values.
|
||||
document.addEventListener("DOMContentLoaded", function setPageDefaults()
|
||||
{
|
||||
document.getElementById('wifiModeAccessPoint').onclick = showWiFiAPInput;
|
||||
document.getElementById('wifiModeClient').onclick = showWiFiClientInput;
|
||||
document.getElementById('dhcpModeEnabled').onclick = hideFixedIPInput;
|
||||
document.getElementById('dhcpModeDisabled').onclick = showFixedIPInput;
|
||||
|
||||
// Setup AP/Client display.
|
||||
if(document.getElementById('wifiModeClient').checked)
|
||||
{
|
||||
showWiFiClientInput();
|
||||
} else
|
||||
{
|
||||
showWiFiAPInput();
|
||||
}
|
||||
if(document.getElementById('dhcpModeEnabled').checked)
|
||||
{
|
||||
hideFixedIPInput();
|
||||
} else
|
||||
{
|
||||
showFixedIPInput();
|
||||
}
|
||||
|
||||
// AJAX code to post in a controlled manner so that we can receive back an error/success message to the commit.
|
||||
$("#wifiman").submit( function(e)
|
||||
{
|
||||
var form = $(this);
|
||||
var actionUrl = form.attr('action');
|
||||
|
||||
// Prevent default submit action, we want to manually submit and be able to receive a response for errors/success.
|
||||
e.preventDefault();
|
||||
|
||||
// Clear message window before making a POST, allows for a new message if one is provided or blank if it isnt.
|
||||
var errEl = document.getElementById("errorMsg");
|
||||
if (errEl) errEl.innerHTML = "";
|
||||
|
||||
$.ajax(
|
||||
{
|
||||
type: "POST",
|
||||
url: actionUrl,
|
||||
data: form.serialize(), // serializes the form's elements.
|
||||
success: function(data)
|
||||
{
|
||||
var el = document.getElementById("errorMsg");
|
||||
if (el) el.innerHTML = data;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
showIPConfig();
|
||||
enableIfConfig();
|
||||
});
|
||||
292
projects/tzpuPico/SD/default/webfs/ota-esp32.htm
vendored
Executable file
292
projects/tzpuPico/SD/default/webfs/ota-esp32.htm
vendored
Executable file
@@ -0,0 +1,292 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/jasny-bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Add custom CSS here -->
|
||||
<link href="css/sb-admin.css" rel="stylesheet">
|
||||
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="font-awesome/css/font-awesome.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
|
||||
<li><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i> Status</a></li>
|
||||
<li><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Config Editor</a></li>
|
||||
<li><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i> File Manager</a></li>
|
||||
|
||||
<li>
|
||||
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-gear"></i> Settings
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="settings" class="nav collapse in">
|
||||
<li>
|
||||
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="ota" class="nav collapse in">
|
||||
<li><a href="ota-esp32.htm" class="active">ESP32</a></li>
|
||||
<li><a href="ota-rp2350.htm">RP2350</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wifimanager.htm">
|
||||
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="personality.htm">
|
||||
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
|
||||
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
|
||||
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Action Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (%SK_FLOPPY1%)</a></li>
|
||||
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (%SK_FLOPPY2%)</a></li>
|
||||
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (%SK_QDDISK%)</a></li>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px;">
|
||||
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1><b>ESP32</b> <b>F</b>irmware <b>U</b>pdate </h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><i class="fa fa-dashboard"></i> Settings->Firmware->ESP32 </li>
|
||||
</ol>
|
||||
<div class="alert alert-success alert-dismissable justify">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<p>This page allows you to upgrade the esp32 firmware/filepack. Please read the documentation if you need help.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> ESP32 Firmware</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive">
|
||||
<div id="firmware-revision-area">
|
||||
<b>Modules</b><br>
|
||||
%SK_MODULES%
|
||||
<b>File Pack</b><br>
|
||||
%SK_FILEPACK%
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-table"></i> ESP32 Partitions</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive">
|
||||
<div id="esp32-partitions-area">
|
||||
<table class="table table-borderless table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>Partition Name</b></th>
|
||||
<th><b>Type</b></th>
|
||||
<th><b>Sub-Type</b></th>
|
||||
<th><b>Address</b></th>
|
||||
<th><b>Size</b></th>
|
||||
<th><b>Version</b></th>
|
||||
<th><b>Timestamp</b></th>
|
||||
<th><b>Active (Running)</b></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%SK_PARTITIONS%
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> ESP32 Firmware Upload</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive" id="upload-firmware-area">
|
||||
<form action="/data/wifi" method="POST" id="fwupgrade">
|
||||
<p>This <i>Firmware</i> is a binary file containing the latest software for the <i>Pico %SK_PROCESSOR%</i> onboard ESP32 microcontroller.</p>
|
||||
<hr class="hr_no_margin">
|
||||
<p id="esp32FirmwareMsg">Select a firmware image file with which to upgrade the ESP32 on the <i>Pico %SK_PROCESSOR%</i> then select Upgrade. Click Cancel to abort or choose a different file.</p>
|
||||
<hr class="hr_no_margin">
|
||||
<table class="table-condensed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="esp32FirmwareUpload" class="firmware-file-upload" id="esp32FirmwareUploadLabel">Select file<input type="file" id="esp32FirmwareUpload"/>
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<div id="esp32FirmwareName"></div>
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" class="wm-button" name="esp32FirmwareUpgrade" id="esp32FirmwareUpgrade" value="" style="display: none;" disabled>Upgrade</button>
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" class="wm-button" name="esp32FirmwareCancel" id="esp32FirmwareCancel" style="display: none;" disabled>Cancel</button>
|
||||
</td>
|
||||
<td>
|
||||
<div class="progress progress-striped" id="esp32FirmwareProgress">
|
||||
<div class="progress-bar progress-bar-striped active" id="esp32FirmwareProgressBar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> File Pack Upload</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive" id="upload-firmware-area">
|
||||
<form action="/data/wifi" method="POST" id="fpupgrade">
|
||||
<p style="white-space: pre-wrap;">A filepack is a gzipped tar file which contains support files for the <i>Pico %SK_PROCESSOR%</i> including the web interface static template files.</p>
|
||||
<p id="filepackWarning" style="display: none; white-space: pre-wrap;"><b>WARNING!</b> There is no automated rollback for this update. Backup directory is: webfs.<version>.
|
||||
If this process fails, place SD card into a FAT compatible PC and rename the directory, ie. webfs.<version> to webfs.
|
||||
<br></p>
|
||||
<hr class="hr_no_margin">
|
||||
<p id="filepackMsg">Select a filepack image file with which to upgrade the <i>Pico %SK_PROCESSOR%</i> filesystem then click Upgrade. Click Cancel to abort or choose a different file.</p>
|
||||
<hr class="hr_no_margin">
|
||||
<table class="table-condensed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="filepackUpload" class="firmware-file-upload" id="filepackUploadLabel">Select file<input type="file" id="filepackUpload"/>
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<div id="filepackName"></div>
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" class="wm-button" name="filepackUpgrade" id="filepackUpgrade" value="" style="display: none;" disabled>Upgrade</button>
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" class="wm-button" name="filepackCancel" id="filepackCancel" style="display: none;" disabled>Cancel</button>
|
||||
</td>
|
||||
<td>
|
||||
<div class="progress progress-striped" id="filepackProgress">
|
||||
<div class="progress-bar progress-bar-striped active" id="filepackProgressBar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
</div><!-- /#page-wrapper -->
|
||||
|
||||
</div><!-- /#wrapper -->
|
||||
|
||||
<!-- JavaScript -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script src="js/jasny-bootstrap.min.js"></script>
|
||||
<script>
|
||||
// Store the name of the active and secondary interfaces.
|
||||
const activeInterface = "%SK_CURRENTIF%";
|
||||
const secondaryInterface = "%SK_SECONDIF%"
|
||||
</script>
|
||||
<script src="js/ota-esp32.js"></script>
|
||||
<script src="js/actions.js"></script>
|
||||
<script src="js/common.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
287
projects/tzpuPico/SD/default/webfs/ota-rp2350.htm
vendored
Executable file
287
projects/tzpuPico/SD/default/webfs/ota-rp2350.htm
vendored
Executable file
@@ -0,0 +1,287 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/jasny-bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Add custom CSS here -->
|
||||
<link href="css/sb-admin.css" rel="stylesheet">
|
||||
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="font-awesome/css/font-awesome.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
|
||||
<li><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i> Status</a></li>
|
||||
<li><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Config Editor</a></li>
|
||||
<li><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i> File Manager</a></li>
|
||||
|
||||
<li>
|
||||
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-gear"></i> Settings
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="settings" class="nav collapse in">
|
||||
<li>
|
||||
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="ota" class="nav collapse in">
|
||||
<li><a href="ota-esp32.htm">ESP32</a></li>
|
||||
<li><a href="ota-rp2350.htm" class="active">RP2350</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wifimanager.htm">
|
||||
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="personality.htm">
|
||||
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
|
||||
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
|
||||
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Action Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (%SK_FLOPPY1%)</a></li>
|
||||
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (%SK_FLOPPY2%)</a></li>
|
||||
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (%SK_QDDISK%)</a></li>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px;">
|
||||
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1><b>RP2350</b> <b>F</b>irmware <b>U</b>pdate </h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><i class="fa fa-dashboard"></i> Status->Firmware->RP2350 </li>
|
||||
</ol>
|
||||
<div class="alert alert-success alert-dismissable justify">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<p>This page allows you to upgrade the rp2350 firmware. Please read the documentation if you need help.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
</div><!-- /.row -->
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-table"></i> RP2350 Partitions</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive">
|
||||
<div id="rp2350-partitions-area">
|
||||
<table class="table table-borderless table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><b>Partition</b></th>
|
||||
<th><b>Addr</b></th>
|
||||
<th><b>Size</b></th>
|
||||
<th><b>CheckSum</b></th>
|
||||
<th><b>Active (Running)</b></th>
|
||||
<th><b>License</b></th>
|
||||
<th><b>Author</b></th>
|
||||
<th><b>Description</b></th>
|
||||
<th><b>Version</b></th>
|
||||
<th><b>Date</b></th>
|
||||
<th><b>Copyright</b></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
%SK_RP_PARTITIONS%
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> RP2350 Firmware Upload</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive" id="upload-firmware-area">
|
||||
<form action="/data/wifi" method="POST" id="fwupgrade">
|
||||
<p>This <i>Firmware</i> is a binary file containing the latest software for the <i>Pico %SK_PROCESSOR%</i> RP2350 microcontroller.</p>
|
||||
<hr class="hr_no_margin">
|
||||
<p id="rp2350FirmwareMsg">Select the desired partition and firmware image file with which to upgrade the RP2350 on the <i>Pico %SK_PROCESSOR%</i> then select Upgrade. Click Cancel to abort or choose a different file.</p>
|
||||
<hr class="hr_no_margin">
|
||||
<table class="table-condensed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<label for="rp2350FirmwareUpload" class="firmware-file-upload" id="rp2350FirmwareUploadLabel">Select file<input type="file" id="rp2350FirmwareUpload"/>
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<div id="rp2350FirmwareName"></div>
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" class="wm-button" name="rp2350FirmwareUpgrade" id="rp2350FirmwareUpgrade" value="" style="display: none;" disabled>Upgrade</button>
|
||||
</td>
|
||||
<td>
|
||||
<button type="button" class="wm-button" name="rp2350FirmwareCancel" id="rp2350FirmwareCancel" style="display: none;" disabled>Cancel</button>
|
||||
</td>
|
||||
<td colspan="5" class="radio-partition" id="rp2350PartitionRadio" style="display: block;">
|
||||
<label style="margin-right: 20px;">
|
||||
<input type="radio" name="rp2350Partition" value="1" checked> Partition 1
|
||||
</label>
|
||||
<label style="margin-right: 28px;">
|
||||
<input type="radio" name="rp2350Partition" value="2"> Partition 2
|
||||
</label>
|
||||
<label style="margin-left: 12px; white-space: nowrap;">
|
||||
<input type="checkbox" id="clearConfig" name="clearConfig" value="1">
|
||||
Clear App config
|
||||
</label>
|
||||
<label style="margin-left: 12px; white-space: nowrap;">
|
||||
<input type="checkbox" id="clearFlashHeader" name="clearFlashHeader" value="1">
|
||||
Clear Flash Header
|
||||
</label>
|
||||
</td>
|
||||
<td>
|
||||
<div class="progress progress-striped" id="rp2350FirmwareProgress">
|
||||
<div class="progress-bar progress-bar-striped active" id="rp2350FirmwareProgressBar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%">
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-file"></i> RP2350 Active Partition </h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive" id="select-firmware-area">
|
||||
<form action="/data/rp2350" method="POST" id="rp2350ActivePartition">
|
||||
<p>The RP2350 contains two firmware partitions. Normally the active partition is set according to the last firmware upload. This option allows you to change the active partition.</P>
|
||||
<hr class="hr_no_margin">
|
||||
<p id="rp2350ActivePartitionMsg">Select the desired partition to make active on the <i>Pico %SK_PROCESSOR%</i>, an automatic reboot will occur after selection.</p>
|
||||
<hr class="hr_no_margin">
|
||||
<table class="table-condensed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<button type="button" class="wm-button firmware-file-upload" name="rp2350ActivePartitionSelect" id="rp2350ActivePartitionSelect" value="" style="display: block;">Set Active</button>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td colspan="5" class="radio-partition" id="rp2350ActivePartitionRadio" style="display: block;">
|
||||
<label style="margin-right: 20px;">
|
||||
<input type="radio" name="rp2350ActivePartition" value="1" checked> Partition 1
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="rp2350ActivePartition" value="2"> Partition 2
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
</div><!-- /#page-wrapper -->
|
||||
|
||||
</div><!-- /#wrapper -->
|
||||
|
||||
<!-- JavaScript -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script src="js/jasny-bootstrap.min.js"></script>
|
||||
<script>
|
||||
// Store the name of the active and secondary interfaces.
|
||||
const activeInterface = "%SK_CURRENTIF%";
|
||||
const secondaryInterface = "%SK_SECONDIF%"
|
||||
</script>
|
||||
<script src="js/ota-rp2350.js"></script>
|
||||
<script src="js/actions.js"></script>
|
||||
<script src="js/common.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
308
projects/tzpuPico/SD/default/webfs/personality.htm
vendored
Executable file
308
projects/tzpuPico/SD/default/webfs/personality.htm
vendored
Executable file
@@ -0,0 +1,308 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Add custom CSS here -->
|
||||
<link href="css/sb-admin.css" rel="stylesheet">
|
||||
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
|
||||
<link href="font-awesome/css/font-awesome.css" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="/css/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
<li><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i> Status</a></li>
|
||||
<li><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Config Editor</a></li>
|
||||
<li><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i> File Manager</a></li>
|
||||
<li>
|
||||
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-gear"></i> Settings
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="settings" class="nav collapse in">
|
||||
<li>
|
||||
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="ota" class="nav collapse">
|
||||
<li><a href="ota-esp32.htm">ESP32</a></li>
|
||||
<li><a href="ota-rp2350.htm">RP2350</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wifimanager.htm">
|
||||
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="active">
|
||||
<a href="personality.htm"">
|
||||
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
|
||||
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
|
||||
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Action Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (%SK_FLOPPY1%)</a></li>
|
||||
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (%SK_FLOPPY2%)</a></li>
|
||||
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (%SK_QDDISK%)</a></li>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px;">
|
||||
<li><a href="tasks/reloadcfg"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1>Pico %SK_PROCESSOR% Persona </h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><i class="fa fa-dashboard"></i> Settings->Persona</li>
|
||||
</ol>
|
||||
<div class="alert alert-success alert-dismissable justify">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<p>This page allows you to configure the <i>Pico %SK_PROCESSOR%</i> Persona, ie. Basic (original CPU, no enhancements) or customised with drivers for a target computer.</p>
|
||||
<p>Once a personality is chosen, it can be customised within the <b>Config Editor</b>.</p><p>WARNING: The existing configuration will be backed up to /config.json;<number>, the highest <number> being the latest backup.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-table"></i> Pico %SK_PROCESSOR% Persona</h3>
|
||||
</div>
|
||||
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive" id="wifi-configuration-area">
|
||||
<div class="row mt-4">
|
||||
<!-- Partition 1 -->
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Partition 1 Persona</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="radio-group">
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="Basic" %SK_P1_BASIC_CHECKED%>
|
||||
Basic CPU
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-80A" %SK_P1_MZ80A_CHECKED%>
|
||||
MZ-80A
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-80B" %SK_P1_MZ80B_CHECKED%>
|
||||
MZ-80B
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-700" %SK_P1_MZ700_CHECKED%>
|
||||
MZ-700
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-800" %SK_P1_MZ800_CHECKED%>
|
||||
MZ-800
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-1500" %SK_P1_MZ1500_CHECKED%>
|
||||
MZ-1500
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-2000" %SK_P1_MZ2000_CHECKED%>
|
||||
MZ-2000
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-2200" %SK_P1_MZ2200_CHECKED%>
|
||||
MZ-2200
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition1" value="MZ-2500" %SK_P1_MZ2500_CHECKED%>
|
||||
MZ-2500
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Partition 2 -->
|
||||
<div class="col-md-6">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">Partition 2 Persona</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="radio-group">
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="Basic" %SK_P2_BASIC_CHECKED%>
|
||||
Basic CPU
|
||||
</label>
|
||||
</div>
|
||||
<!-- Repeat the same list for partition2 with different placeholders -->
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-80A" %SK_P2_MZ80A_CHECKED%>
|
||||
MZ-80A
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-80B" %SK_P2_MZ80B_CHECKED%>
|
||||
MZ-80B
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-700" %SK_P2_MZ700_CHECKED%>
|
||||
MZ-700
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-800" %SK_P2_MZ800_CHECKED%>
|
||||
MZ-800
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-1500" %SK_P2_MZ1500_CHECKED%>
|
||||
MZ-1500
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-2000" %SK_P2_MZ2000_CHECKED%>
|
||||
MZ-2000
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-2200" %SK_P2_MZ2200_CHECKED%>
|
||||
MZ-2200
|
||||
</label>
|
||||
</div>
|
||||
<div class="radio">
|
||||
<label>
|
||||
<input type="radio" name="partition2" value="MZ-2500" %SK_P2_MZ2500_CHECKED%>
|
||||
MZ-2500
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Feedback area -->
|
||||
<div id="personaMsg" class="alert alert-info mt-3" style="display:none;"></div>
|
||||
|
||||
<!-- Action button -->
|
||||
<div class="mt-4">
|
||||
<button type="button" class="btn btn-primary" id="selectPersonaBtn">
|
||||
Select Personae
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
</div><!-- /#page-wrapper -->
|
||||
|
||||
</div><!-- /#wrapper -->
|
||||
|
||||
<!-- JavaScript -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script>
|
||||
// Store the name of the active and secondary interfaces.
|
||||
const activeInterface = "%SK_CURRENTIF%";
|
||||
const secondaryInterface = "%SK_SECONDIF%"
|
||||
</script>
|
||||
<script src="js/personality.js"></script>
|
||||
<script src="js/actions.js"></script>
|
||||
<script src="js/common.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
1
projects/tzpuPico/SD/default/webfs/webfs_version.txt
vendored
Executable file
1
projects/tzpuPico/SD/default/webfs/webfs_version.txt
vendored
Executable file
@@ -0,0 +1 @@
|
||||
2.03
|
||||
381
projects/tzpuPico/SD/default/webfs/wifimanager.htm
vendored
Executable file
381
projects/tzpuPico/SD/default/webfs/wifimanager.htm
vendored
Executable file
@@ -0,0 +1,381 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
|
||||
<title>Dashboard - Pico %SK_PROCESSOR% Admin</title>
|
||||
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Add custom CSS here -->
|
||||
<link href="css/sb-admin.css" rel="stylesheet">
|
||||
<link href="css/%SK_DEVICE%.css" rel="stylesheet">
|
||||
<link href="font-awesome/css/font-awesome.css" rel="stylesheet">
|
||||
<link rel="stylesheet" type="text/css" href="/css/style.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.htm">Pico %SK_PROCESSOR% Dashboard</a>
|
||||
</div>
|
||||
|
||||
<!-- Collect the nav links, forms, and other content for toggling -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
<li><a href="index.htm"><i style="color: yellow;" class="fa fa-dashboard"></i> Status</a></li>
|
||||
<li><a href="config.htm?cmd=edit&dir=/&name=config.json&apply=yes"><i style="color: yellow;" class="fa fa-wrench"></i> Config Editor</a></li>
|
||||
<li><a href="filemanager.htm"><i style="color: yellow;" class="fa fa-folder"></i> File Manager</a></li>
|
||||
<li>
|
||||
<a href="#settings" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-gear"></i> Settings
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="settings" class="nav collapse in">
|
||||
<li>
|
||||
<a href="#ota" data-toggle="collapse" aria-expanded="true" class="dropdown-toggle">
|
||||
<i style="color: yellow;" class="fa fa-refresh"></i> Firmware
|
||||
<span class="caret pull-right"></span>
|
||||
</a>
|
||||
|
||||
<ul id="ota" class="nav collapse">
|
||||
<li><a href="ota-esp32.htm">ESP32</a></li>
|
||||
<li><a href="ota-rp2350.htm">RP2350</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="wifimanager.htm" class="active">
|
||||
<i style="color: yellow;" class="fa fa-wifi"></i> WiFi Manager
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="personality.htm">
|
||||
<i style="color: yellow;" class="fa fa-microchip"></i> Persona
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:40px;"><i class="fa fa-rotate-left" style="color: yellow;"></i> Reboot <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Reboot Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="reboot/esp32"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">ESP32</a></li>
|
||||
<li><a href="#" onclick="rebootRP2350(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">RP2350B</a></li>
|
||||
<li><a href="#" onclick="rebootHost(); return false;"><i class="fa fa-rotate-left"></i><span style="padding-left: 10px;">Host</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right navbar-user">
|
||||
<li class="dropdown user-dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" style="padding-right:35px;"><i class="fa fa-tasks" style="color: yellow;"></i> Actions <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li style="margin-left: 1em;"><b>Action Menu</b></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="tasks/changefloppy?diskno=0"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 1 (%SK_FLOPPY1%)</a></li>
|
||||
<li><a href="tasks/changefloppy?diskno=1"><i class="fa fa-floppy-o"></i><span style="padding-left: 10px;">Change Floppy Disk 2 (%SK_FLOPPY2%)</a></li>
|
||||
<li><a href="tasks/changeqd"><i class="fa fa-file"></i><span style="padding-left: 10px;">Change QD Disk (%SK_QDDISK%)</a></li>
|
||||
<hr style="margin-top: 10px; margin-bottom: 10px;">
|
||||
<li><a href="tasks/reloadcfg"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
<li><a href="#" onclick="reloadConfig(); return false;"><i class="fa fa-repeat"></i><span style="padding-left: 10px;">Reload RP2350 Config</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div><!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
|
||||
<div id="page-wrapper">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h1>WiFi Manager </h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><i class="fa fa-dashboard"></i> Settings->WiFi Manager</li>
|
||||
</ol>
|
||||
<div class="alert alert-success alert-dismissable justify">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
|
||||
<p>This page allows you to configure the <i>Pico %SK_PROCESSOR%</i> WiFi Access Point (you connect to the <i>Pico %SK_PROCESSOR%</i>) or the Client mode (<i>Pico %SK_PROCESSOR%</i> connects to your network).</p>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-wifi"></i> WiFi Configuration</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive">
|
||||
<div id="client-wifi-config-area">
|
||||
|
||||
<div id="wifiCfg%SK_WIFIMODEAP%">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tbody>
|
||||
<tr style="display: compact;">
|
||||
<td>SSID:</td><td><span style="color: blue;">%SK_APSSID%</span></td>
|
||||
<td>TX Power:</td><td><span class="txpower-live" style="color: blue;">%SK_TXPOWERDBM% dBm</span></td>
|
||||
</tr>
|
||||
<tr style="display: compact;">
|
||||
<td>Password:</td><td><span style="color: blue;">%SK_APPWD%</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IP (AP):</td><td><span style="color: blue;">%SK_CURRENTIP%</span></td>
|
||||
<td>NETMASK:</td><td><span style="color: blue;">%SK_CURRENTNM%</span></td>
|
||||
<td>GATEWAY:</td><td><span style="color: blue;">%SK_CURRENTGW%</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="wifiCfg0%SK_WIFIMODECLIENT%">
|
||||
<table class="table table-borderless table-sm">
|
||||
<tbody>
|
||||
<tr style="display: compact;">
|
||||
<td>SSID:</td><td><span style="color: blue;">%SK_CLIENTSSID%</span></td>
|
||||
<td>TX Power:</td><td><span class="txpower-live" style="color: blue;">%SK_TXPOWERDBM% dBm</span></td>
|
||||
<td>RSSI:</td><td><span class="rssi-live" style="color: blue;">%SK_RSSI% dBm</span></td>
|
||||
</tr>
|
||||
<tr style="display: compact;" id="wifiCfg1%SK_CLIENTDHCPON%">
|
||||
<td>DHCP:</td><td><span style="color: blue;">Enabled</span></td>
|
||||
</tr>
|
||||
<tr id="wifiCfg3%SK_CLIENTDHCPON%">
|
||||
<td>IP (assigned):</td><td><span style="color: blue;">%SK_CURRENTIP%</span></td>
|
||||
<td>NETMASK:</td><td><span style="color: blue;">%SK_CURRENTNM%</span></td>
|
||||
<td>GATEWAY:</td><td><span style="color: blue;">%SK_CURRENTGW%</span></td>
|
||||
</tr>
|
||||
<tr id="wifiCfg3%SK_CLIENTDHCPOFF%">
|
||||
<td>IP (fixed):</td><td><span style="color: blue;">%SK_CURRENTIP%</span></td>
|
||||
<td>NETMASK:</td><td><span style="color: blue;">%SK_CURRENTNM%</span></td>
|
||||
<td>GATEWAY:</td><td><span style="color: blue;">%SK_CURRENTGW%</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="panel panel-primary">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title"><i class="fa fa-table"></i> Configure WiFi</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="table-responsive" id="wifi-configuration-area">
|
||||
<form action="/data/wifi" method="POST" id="wifiman">
|
||||
<div>
|
||||
<table class="sk-client-wifi-config-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><b>WiFi Mode:</b></td>
|
||||
<td>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="wifiMode" id="wifiModeAccessPoint" value="ap" %SK_WIFIMODEAP%>
|
||||
<label class="form-check-label" for="wifiModeAccessPoint">Access Point</label>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="wifiMode" id="wifiModeClient" value="client" %SK_WIFIMODECLIENT%>
|
||||
<label class="form-check-label" for="wifiModeClient">Client</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Client Mode -->
|
||||
<div id="inputWiFiClient">
|
||||
<div>
|
||||
<table class="sk-client-wifi-config-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><label for="clientSSID">SSID:</label></td>
|
||||
<td><input type="text" id="clientSSID" name="clientSSID" value="%SK_CLIENTSSID%" autocapitalize="none"></td>
|
||||
<td>Name of Wifi router to use.<td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="clientPWD">Password:</label></td>
|
||||
<td><input type="text" id="clientPWD" name="clientPWD" value="%SK_CLIENTPWD%" autocapitalize="none"></td>
|
||||
<td>Password of WiFi router.</td>
|
||||
</tr>
|
||||
<br>
|
||||
<tr>
|
||||
<td><b>DHCP Mode:</b></td>
|
||||
<td>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="dhcpMode" id="dhcpModeEnabled" value="on" %SK_CLIENTDHCPON%>
|
||||
<label class="form-check-label" for="dhcpModeEnabled">
|
||||
Enabled
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
<td style="width: 1px;">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="radio" name="dhcpMode" id="dhcpModeDisabled" value="off" %SK_CLIENTDHCPOFF%>
|
||||
<label class="form-check-label" for="dhcpModeDisabled">
|
||||
Disabled
|
||||
</label>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="rowClientIP">
|
||||
<td><label for="clientIP">IP Address</label></td>
|
||||
<td><input id="clientIP" name="clientIP" inputmode="decimal" placeholder="_._._._" value="%SK_CLIENTIP%"></td>
|
||||
<td>Static IP address to assign to the <i>Pico %SK_PROCESSOR%</i></td>
|
||||
</tr>
|
||||
<tr id="rowClientNETMASK">
|
||||
<td><label for "clientNETMASK">Netmask</label></td>
|
||||
<td><input id="clientNETMASK" name="clientNETMASK" inputmode="decimal" placeholder="_._._._" value="%SK_CLIENTNM%"/></td>
|
||||
<td>Netmask for Static IP</td>
|
||||
</tr>
|
||||
<tr id="rowClientGATEWAY">
|
||||
<td><label for="clientGATEWAY">Gateway</label></td>
|
||||
<td><input id="clientGATEWAY" name="clientGATEWAY" inputmode="decimal" placeholder="_._._._" value="%SK_CLIENTGW%"/></td>
|
||||
<td>Gateway or router IP Address (if needed).</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="justify" id="dhcpInput">
|
||||
<p style="white-space: initial;">DHCP Mode enabled.<br>The <i>Pico %SK_PROCESSOR%</i> will use the credentials specified above (SSID/Password) to connect to your router and obtain
|
||||
an IP address, Netmask and Gateway. Use your router admin page to determine the IP address allocated and connect to the <i>Pico %SK_PROCESSOR%</i> via http://<assigned IP></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Access Point Mode -->
|
||||
<div id="inputWiFiAP">
|
||||
<div>
|
||||
<br>
|
||||
<table class="sk-client-wifi-config-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><label for="apSSID">SSID</label></td>
|
||||
<td><input type="text" id="apSSID" name="apSSID" value="%SK_APSSID%" autocapitalize="none"></td>
|
||||
<td>Name of this WiFi Access Point.<td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="apPWD">Password</label></td>
|
||||
<td><input type="text" id="apPWD" name="apPWD" value="%SK_APPWD%" autocapitalize="none"></td>
|
||||
<td>Password required by this AP to authenticate clients.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="apIP">IP Address</label></td>
|
||||
<td><input id="apIP" name="apIP" inputmode="decimal" placeholder="_._._._" value="%SK_APIP%"></td>
|
||||
<td>IP address assigned to this Access Point. ie. 192.168.4.1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for "apNETMASK">Netmask</label></td>
|
||||
<td><input id="apNETMASK" name="apNETMASK" inputmode="decimal" placeholder="_._._._" value="%SK_APNM%"/></td>
|
||||
<td>Netmask of this AP network.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="apGATEWAY">Gateway</label></td>
|
||||
<td><input id="apGATEWAY" name="apGATEWAY" inputmode="decimal" placeholder="_._._._" value="%SK_APGW%"/></td>
|
||||
<td>Gateway this AP will assign to a client. Normally same as IP.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- TX Power (applies to both Client and AP modes) -->
|
||||
<div>
|
||||
<hr class="hr_no_margin">
|
||||
<h6>TX Power</h6>
|
||||
<table class="sk-client-wifi-config-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><label for="txPower">Power (0.25dBm units)</label></td>
|
||||
<td><input id="txPower" name="txPower" type="number" min="0" max="84" step="4" value="%SK_TXPOWER%" style="width:60px"/></td>
|
||||
<td>0=default, 8=2dBm, 40=10dBm, 80=20dBm. Current: %SK_TXPOWERDBM% dBm</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="errorMsg">
|
||||
%SK_ERRMSG%
|
||||
</div>
|
||||
<hr class="hr_no_margin">
|
||||
<div class="buttons" style="float: left; padding-left: 0px">
|
||||
<table class="sk-client-wifi-config-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><button type="submit" class="wm-button" name="save" id="save" form="wifiman">Save</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.row -->
|
||||
|
||||
</div><!-- /#page-wrapper -->
|
||||
|
||||
</div><!-- /#wrapper -->
|
||||
|
||||
<!-- JavaScript -->
|
||||
<script src="js/jquery.min.js"></script>
|
||||
<script src="js/bootstrap.min.js"></script>
|
||||
<script>
|
||||
// Store the name of the active and secondary interfaces.
|
||||
const activeInterface = "%SK_CURRENTIF%";
|
||||
const secondaryInterface = "%SK_SECONDIF%"
|
||||
</script>
|
||||
<script src="js/wifimanager.js"></script>
|
||||
<script src="js/actions.js"></script>
|
||||
<script src="js/common.js"></script>
|
||||
<script>
|
||||
// Live WiFi signal strength polling (updates every 3 seconds).
|
||||
(function pollWifiStatus() {
|
||||
$.getJSON("/data/wifistatus", function(data) {
|
||||
$(".rssi-live").text(data.rssi + " dBm");
|
||||
$(".txpower-live").text(data.txPower.toFixed(1) + " dBm");
|
||||
if (data.connected) {
|
||||
var r = data.rssi;
|
||||
var color = r >= -50 ? "green" : r >= -70 ? "blue" : r >= -80 ? "orange" : "red";
|
||||
$(".rssi-live").css("color", color);
|
||||
} else {
|
||||
$(".rssi-live").text("N/A").css("color", "gray");
|
||||
}
|
||||
}).always(function() {
|
||||
setTimeout(pollWifiStatus, 3000);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
438
projects/tzpuPico/kicad/PICOZ80/LICENSE-HARDWARE.txt
vendored
Normal file
438
projects/tzpuPico/kicad/PICOZ80/LICENSE-HARDWARE.txt
vendored
Normal file
@@ -0,0 +1,438 @@
|
||||
Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||
("Public License"). To the extent this Public License may be
|
||||
interpreted as a contract, You are granted the Licensed Rights in
|
||||
consideration of Your acceptance of these terms and conditions, and the
|
||||
Licensor grants You such rights in consideration of benefits the
|
||||
Licensor receives from making the Licensed Material available under
|
||||
these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-NC-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution, NonCommercial, and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. NonCommercial means not primarily intended for or directed towards
|
||||
commercial advantage or monetary compensation. For purposes of
|
||||
this Public License, the exchange of the Licensed Material for
|
||||
other material subject to Copyright and Similar Rights by digital
|
||||
file-sharing or similar means is NonCommercial provided there is
|
||||
no payment of monetary compensation in connection with the
|
||||
exchange.
|
||||
|
||||
l. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
m. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
n. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part, for NonCommercial purposes only; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material for
|
||||
NonCommercial purposes only.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties, including when
|
||||
the Licensed Material is used other than for NonCommercial
|
||||
purposes.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-NC-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database for NonCommercial purposes
|
||||
only;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
||||
147
projects/tzpuPico/kicad/PICOZ80/NOTICE
vendored
Normal file
147
projects/tzpuPico/kicad/PICOZ80/NOTICE
vendored
Normal file
@@ -0,0 +1,147 @@
|
||||
picoZ80 / pico6502 — NOTICE
|
||||
============================
|
||||
|
||||
Copyright (c) 2019-2026 Philip Smart <info@eaw.app>
|
||||
https://eaw.app
|
||||
|
||||
|
||||
1. Attribution Requirements
|
||||
---------------------------
|
||||
If you redistribute, display, or build upon any part of this project
|
||||
you MUST:
|
||||
|
||||
a) Retain this NOTICE file and all copyright headers in their
|
||||
entirety in every copy or substantial portion of the work.
|
||||
|
||||
b) Clearly and prominently credit "Philip Smart" and "engineers@work
|
||||
(eaw.app)" as the original author and project, with a link to
|
||||
https://eaw.app in any accompanying documentation, README, web
|
||||
page, or "About" screen.
|
||||
|
||||
c) If you have modified the work, clearly state what changes you made
|
||||
and that your version is a modified derivative — not the original
|
||||
picoZ80 or pico6502 project.
|
||||
|
||||
d) You may NOT imply that the original author endorses you, your
|
||||
organisation, or your derivative work without explicit written
|
||||
permission.
|
||||
|
||||
|
||||
2. Trademark and Name Protection
|
||||
---------------------------------
|
||||
The following names and marks are trademarks of Philip Smart and may
|
||||
NOT be used without prior written permission:
|
||||
|
||||
- picoZ80
|
||||
- pico6502
|
||||
- engineers@work
|
||||
- eaw.app
|
||||
- The picoZ80 and pico6502 logos and board silkscreen artwork
|
||||
|
||||
You may use these names solely to accurately describe the origin of
|
||||
the work (e.g., "based on the picoZ80 project by Philip Smart") but
|
||||
you may NOT:
|
||||
|
||||
a) Use "picoZ80", "pico6502", or any confusingly similar name as
|
||||
the name of a derivative product, fork, or commercial offering.
|
||||
|
||||
b) Remove, obscure, or alter the project name, author attribution,
|
||||
or copyright notices on the PCB silkscreen, in the firmware
|
||||
boot/splash screen, or in the web interface.
|
||||
|
||||
c) Present a copy, fork, or derivative as if it were the original
|
||||
project or your own original creation.
|
||||
|
||||
|
||||
3. Anti-Passing-Off
|
||||
--------------------
|
||||
You may NOT:
|
||||
|
||||
a) Claim authorship of this work or represent it as your own original
|
||||
creation.
|
||||
|
||||
b) Re-brand this project or any substantial portion of it under a
|
||||
different name and present it as a new or independent project.
|
||||
|
||||
c) Remove or alter authorship information, version strings, copyright
|
||||
notices, licence headers, or boot/splash screen credits.
|
||||
|
||||
d) Publish this work or derivatives on any repository, marketplace,
|
||||
or platform in a way that misrepresents the origin, authorship,
|
||||
or licensing of the project.
|
||||
|
||||
Any of the above constitutes passing off and is a violation of both
|
||||
the applicable licence terms and the moral rights of the author.
|
||||
|
||||
|
||||
4. Non-Commercial Use
|
||||
---------------------
|
||||
The hardware designs in this project are licensed under CC BY-NC-SA 4.0.
|
||||
"NonCommercial" means you may NOT use the hardware designs for
|
||||
commercial advantage or monetary compensation without the prior written
|
||||
permission of the copyright holder. Specifically:
|
||||
|
||||
- You MAY build boards for your own personal use.
|
||||
- You MAY build boards for use within your club, hackerspace,
|
||||
or educational institution (provided no profit is made).
|
||||
- You MAY share your modifications under the same licence terms.
|
||||
- You may NOT manufacture boards for sale.
|
||||
- You may NOT sell kits, assembled boards, or products derived from
|
||||
these designs.
|
||||
- You may NOT include these designs in a commercial product.
|
||||
|
||||
If you wish to manufacture or sell picoZ80 or pico6502 hardware, or
|
||||
incorporate the designs into a commercial product, please contact the
|
||||
author to arrange a commercial licence:
|
||||
|
||||
Philip Smart <info@eaw.app>
|
||||
|
||||
|
||||
5. Firmware Copyleft (GPL v3)
|
||||
-----------------------------
|
||||
The firmware source code is licensed under the GNU General Public
|
||||
License v3. This means:
|
||||
|
||||
- You must make your source code available if you distribute binaries.
|
||||
- Any modifications you distribute must also be licensed under GPL v3.
|
||||
- You must preserve all copyright notices and licence headers.
|
||||
- The GPL v3 does permit commercial use of the software, but note
|
||||
that the hardware required to run it is under the non-commercial
|
||||
CC BY-NC-SA 4.0 licence.
|
||||
|
||||
|
||||
6. Third-Party Components
|
||||
-------------------------
|
||||
This project includes the following third-party components which are
|
||||
copyright their respective authors:
|
||||
|
||||
Z80 CPU emulator library
|
||||
Copyright (c) 1999-2024 Manuel Sainz de Baranda y Goñi
|
||||
Licensed under GNU GPL v3
|
||||
https://github.com/redcode/Z80
|
||||
|
||||
Raspberry Pi Pico SDK
|
||||
Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
Licensed under BSD 3-Clause
|
||||
|
||||
TinyUSB
|
||||
Copyright (c) 2018 hathach (tinyusb.org)
|
||||
Licensed under MIT
|
||||
|
||||
cJSON
|
||||
Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
|
||||
Licensed under MIT
|
||||
|
||||
ESP-IDF
|
||||
Copyright (c) 2016-2024 Espressif Systems (Shanghai) Co. Ltd.
|
||||
Licensed under Apache License 2.0
|
||||
|
||||
|
||||
7. Contact
|
||||
----------
|
||||
For commercial licensing, permissions, or any questions:
|
||||
|
||||
Philip Smart
|
||||
Email: info@eaw.app
|
||||
Web: https://eaw.app
|
||||
Git: https://git.eaw.app/eaw/pico
|
||||
Reference in New Issue
Block a user