Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Initial import from subversion repo

  • Loading branch information...
commit 8f9eac131af584ca3f9aa1a7bc19bbf5f7116269 1 parent 90823c3
Christopher Mosher authored
Showing with 13,828 additions and 0 deletions.
  1. +1 −0  AUTHORS
  2. +674 −0 COPYING
  3. +20 −0 COPYING.other
  4. +180 −0 COPYING.sdl
  5. 0  ChangeLog
  6. +167 −0 INSTALL
  7. +25 −0 Makefile.am
  8. 0  NEWS
  9. +135 −0 README
  10. +25 −0 conf/Makefile.am
  11. +11 −0 conf/epple2.a2bare.conf.in
  12. +24 −0 conf/epple2.a2dos31.conf.in
  13. +29 −0 conf/epple2.a2dos33.conf.in
  14. +68 −0 conf/epple2.a2loaded.conf.in
  15. +10 −0 conf/epple2.a2pbare.conf.in
  16. +28 −0 conf/epple2.a2pdos33.conf.in
  17. +68 −0 conf/epple2.a2ploaded.conf.in
  18. +55 −0 conf/epple2.conf.in
  19. +21 −0 conf/epple2.rev0bare.conf.in
  20. +50 −0 configure.ac
  21. +31 −0 epple2.spec
  22. +17 −0 installer/Makefile.am
  23. +61 −0 installer/epple2.wxs
  24. +32 −0 src/Makefile.am
  25. +392 −0 src/SDL_win32_main.c
  26. +93 −0 src/a2colorsobserved.cpp
  27. +55 −0 src/a2colorsobserved.h
  28. +229 −0 src/addressbus.cpp
  29. +62 −0 src/addressbus.h
  30. +611 −0 src/analogtv.cpp
  31. +111 −0 src/analogtv.h
  32. +91 −0 src/apple2.cpp
  33. +71 −0 src/apple2.h
  34. +18 −0 src/applentsc.cpp
  35. +51 −0 src/applentsc.h
  36. +102 −0 src/card.cpp
  37. +51 −0 src/card.h
  38. +209 −0 src/cassette.cpp
  39. +83 −0 src/cassette.h
  40. +230 −0 src/clipboardhandler.cpp
  41. +33 −0 src/clipboardhandler.h
  42. +70 −0 src/clockcard.cpp
  43. +42 −0 src/clockcard.h
  44. +425 −0 src/configep2.cpp
  45. +54 −0 src/configep2.h
  46. +2,118 −0 src/cpu.cpp
  47. +217 −0 src/cpu.h
  48. +131 −0 src/diskbytes.cpp
  49. +72 −0 src/diskbytes.h
  50. +82 −0 src/diskcontroller.cpp
  51. +166 −0 src/diskcontroller.h
  52. +18 −0 src/drive.cpp
  53. +104 −0 src/drive.h
  54. +169 −0 src/e2const.h
  55. +18 −0 src/emptyslot.cpp
  56. +36 −0 src/emptyslot.h
  57. +461 −0 src/emulator.cpp
  58. +80 −0 src/emulator.h
  59. +60 −0 src/firmwarecard.cpp
  60. +73 −0 src/firmwarecard.h
  61. +693 −0 src/font3x5.h
  62. +50 −0 src/gui.cpp
  63. +38 −0 src/gui.h
  64. +18 −0 src/hypermode.cpp
  65. +45 −0 src/hypermode.h
  66. +73 −0 src/keyboard.cpp
  67. +48 −0 src/keyboard.h
  68. +18 −0 src/keyboardbuffermode.cpp
  69. +46 −0 src/keyboardbuffermode.h
  70. +95 −0 src/languagecard.cpp
  71. +51 −0 src/languagecard.h
  72. +18 −0 src/lowpass_1_5_mhz.cpp
  73. +51 −0 src/lowpass_1_5_mhz.h
  74. +18 −0 src/lowpass_3_58_mhz.cpp
  75. +50 −0 src/lowpass_3_58_mhz.h
  76. +68 −0 src/main.cpp
  77. +50 −0 src/memory.cpp
  78. +53 −0 src/memory.h
  79. +44 −0 src/paddlebuttonstates.cpp
  80. +33 −0 src/paddlebuttonstates.h
  81. +93 −0 src/paddles.cpp
  82. +41 −0 src/paddles.h
  83. +327 −0 src/picturegenerator.cpp
  84. +68 −0 src/picturegenerator.h
  85. +48 −0 src/powerupreset.cpp
  86. +36 −0 src/powerupreset.h
  87. +137 −0 src/raminitializer.cpp
  88. +41 −0 src/raminitializer.h
  89. +561 −0 src/screenimage.cpp
  90. +94 −0 src/screenimage.h
  91. +151 −0 src/slots.cpp
  92. +51 −0 src/slots.h
  93. +179 −0 src/speakerclicker.cpp
  94. +34 −0 src/speakerclicker.h
  95. +65 −0 src/standardin.cpp
  96. +39 −0 src/standardin.h
  97. +100 −0 src/standardinproducer.cpp
  98. +35 −0 src/standardinproducer.h
  99. +50 −0 src/standardout.cpp
  100. +34 −0 src/standardout.h
  101. +117 −0 src/steppermotor.cpp
  102. +64 −0 src/steppermotor.h
  103. +580 −0 src/textcharacterimages.h
  104. +45 −0 src/textcharacters.cpp
  105. +37 −0 src/textcharacters.h
  106. +18 −0 src/timable.cpp
  107. +30 −0 src/timable.h
  108. +64 −0 src/util.h
  109. +125 −0 src/video.cpp
  110. +65 −0 src/video.h
  111. +85 −0 src/videoaddressing.cpp
  112. +30 −0 src/videoaddressing.h
  113. +48 −0 src/videomode.cpp
  114. +44 −0 src/videomode.h
  115. +70 −0 src/videostaticgenerator.cpp
  116. +42 −0 src/videostaticgenerator.h
1  AUTHORS
View
@@ -0,0 +1 @@
+cmosher = Christopher A. Mosher <chris@mosher.mine.nu>
674 COPYING
View
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
20 COPYING.other
View
@@ -0,0 +1,20 @@
+For the analogtv class, portions were inspired by Trevor Blackwell's analog
+TV module for xscreensaver. For those portions:
+/* analogtv, Copyright (c) 2003, 2004 Trevor Blackwell <tlb@tlb.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+Thanks, Trevor, for your code and your inspiration.
+
+
+
+The ADC and SBC instructions of the CPU class were based on those taken
+from Verhille Arnaud's POM1 Apple 1 emulator. For those portions:
+// Copyright (C) 2000, by Verhille Arnaud, GPLv2 license.
+Thanks, Verhille.
180 COPYING.sdl
View
@@ -0,0 +1,180 @@
+EPPLE ][ makes use of the Simple DirectMedia Layer (SDL) library.
+
+SDL is included under the terms of the LGPL license, a copy of which
+is provided below.
+
+Windows: The EPPLE ][ executable (epple2.exe) links against SDL.dll.
+Linux: The EPPLE ][ executable (/bin/epple2) links against libSDL.so.
+These are standard versions of the SDL libaray, which are available
+from the SDL web site: http://wsw.libsdl.org
+
+Many thanks to those who are responsible for making SDL what it is today,
+and making it freely available for others.
+
+
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
0  ChangeLog
View
No changes.
167 INSTALL
View
@@ -0,0 +1,167 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes a while. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 4. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
25 Makefile.am
View
@@ -0,0 +1,25 @@
+SUBDIRS = src conf installer
+
+NAME = epple2
+VERSION = 1.0
+ARCH = i386
+
+EXTRA_DIST = COPYING.sdl COPYING.other epple2.spec
+
+RPM := $(abspath rpm)
+
+package: $(NAME).spec dist
+ mkdir -p $(RPM)/BUILD
+ mkdir -p $(RPM)/BUILDROOT
+ mkdir -p $(RPM)/RPMS
+ mkdir -p $(RPM)/SOURCES
+ mkdir -p $(RPM)/SPECS
+ mkdir -p $(RPM)/SRPMS
+ mkdir -p $(RPM)/VPATH
+ cp $(NAME)-$(VERSION).tar.gz $(RPM)/SOURCES
+ touch .rpmmacros
+ echo "%_prefix $(prefix)" >>$(RPM)/.rpmmacros
+ echo "%_sysconfdir $(sysconfdir)" >>$(RPM)/.rpmmacros
+ echo "%_topdir $(RPM)" >>$(RPM)/.rpmmacros
+ HOME=$(RPM) rpmbuild -ba --clean --buildroot $(RPM)/BUILDROOT $<
+ fakeroot alien $(RPM)/RPMS/$(ARCH)/$(NAME)-$(VERSION)-1.$(ARCH).rpm
0  NEWS
View
No changes.
135 README
View
@@ -0,0 +1,135 @@
+epple2 (Emulated Apple ][)
+--------------------------
+
+
+epple2 is an emulator of the Apple ][ and Apple ][ plus
+computers from Apple, Inc. It strives to faithfully simulate
+much of the internal workings of the original Apple ][,
+including the individual cycles of the 6502 CPU, and the
+NTSC video signal generation, including the "strange orange
+line", other color anomalies, and the "floating data bus."
+Understanding the Apple ][, by Jim Sather, is the primary
+source for information about the internals of the Apple ][.
+
+The CPU and video timings are synchronized, and the emulator
+is designed to run at the same speed as the original
+machine (if your computer is fast enough). It also emulates
+several different types of television screens and monitors
+for the display.
+
+It includes emulation of a Disk ][ controller card, a ROM
+firmware card, and a RAM "Language" card, as well as a
+simple clock card.
+
+epple2 is written in C++, and is designed to be buildable
+on Windows (with MSYS/MinGW or Visual C++ 2008, Express
+Edition) or Linux (gcc).
+
+The SDL library (http://www.libsdl.org) is the only dependency
+of epple2 (see below).
+
+The epple2 is released under GPLv3.
+
+
+
+RUNNING
+-------
+SDL:
+To run epple2, you need to have the SDL libraries installed.
+See http://www.libsdl.org for information on SDL.
+You'll need to download and install the "Runtime Libraries"
+for your platform (Win32 or Linux).
+
+ROM:
+With epple2 and SDL, you can run the emulator, but it won't
+do too much without the appropriate Apple ROM code. You can
+use ROM images from your own original Apple ][ or ][ plus, or
+you can find some on the Internet (check the Asimov Apple
+repository).
+Alternatively, you can build the ROMs yourself from assembly
+language source files I've created; these are available in
+the apple2src project. (See that project for details).
+
+Disks:
+You will also probably want floppy disk images. Again, you can
+download some from the Internet, especially from Asimov. The
+epple2 only reads NIBBLE IMAGES. If you only have 16 sector
+images, you will need to convert them to nibble images; you
+can use CiderPress (http://ciderpress.sourceforge.net).
+
+
+
+
+BUILDING
+--------
+See INSTALL for generic instructions on building and installing
+a normal distribution.
+
+If you want to build epple2 from the source distribution,
+you'll need to have the SDL development libraries installed.
+See http://www.libsdl.org for information on SDL.
+You'll need to download and install the "Development Libraries"
+for your platform (Win32 or Linux).
+
+Developers fetching directly from the repository instead of
+downloading the distribution will need to execute the bootstrap
+script before running ./configure or make.
+
+
+
+PLATFORM-SPECIFIC BUILDING
+--------------------------
+
+Windows/MSYS
+--------------
+Install MSYS into C:\MSYS\1.0
+Install MinGW into C:\mingw
+
+Install SDL. At http://www.libsdl.org/ find the download page.
+Download the "Development Libraries" for Win32, mingw, for example:
+SDL-devel-1.2.13-mingw32.tar.gz (Mingw32)
+And save it to your MSYS home directory.
+Untar the SDL archive to your home directory:
+$ cd
+$ tar xzvf SDL-devel-1.2.13-mingw32.tar.gz
+Then follow the instructions to install SDL, for example:
+$ cd SDL-1.2.13
+$ make native
+
+
+
+Run MSYS, and at the bash prompt, go to your home directory and
+untar the epple2 source distribution tar file and cd to the
+epple2 directory. For example:
+$ cd
+$ tar xzvf epple2-1.0.tar.gz
+
+NOTE: If you checked out epple2 from subversion, rather
+than downloading the distribution, you need to first run
+the bootstrap script. But first you'll need to install
+autoconf, automake, etc.
+$ cd
+$ cd epple2
+$ ./bootstrap
+
+
+
+Then build as follows. I recommend doing a VPATH build, in
+which you build into a different directory that the source
+directory. To accomplish this, create a new directory for
+building, somewhere, such as:
+$ cd
+$ mkdir buildepple2
+$ cd buildepple2
+Then run configure from there. For the MSYS build to work,
+you need some extra parameters to the build, and you could
+also add some compiler options to optimize the build. For
+example (from the buildepple2 directory you just created):
+$ ~/epple2/configure --prefix= \
+CXXFLAGS="-I/usr/include -O4 -msse3" \
+CFLAGS="-I/usr/include" \
+LDFLAGS="-L/usr/lib -mconsole -mthreads -mno-cygwin"
+$ make
+$ make install
+
+Then follow the instruction above under "RUNNING" for ROM and disks.
25 conf/Makefile.am
View
@@ -0,0 +1,25 @@
+etcdir = $(sysconfdir)/epple2
+
+if HAVE_WINDOWS
+CONF_PREFIX =
+else
+CONF_PREFIX = $(prefix)/
+endif
+
+%.conf: %.conf.in
+ sed -e 's,$$(PREFIX),$(CONF_PREFIX),g' <$< >$@
+
+CONF_FILES = \
+ epple2.conf \
+ epple2.a2bare.conf \
+ epple2.a2dos33.conf \
+ epple2.a2pbare.conf \
+ epple2.a2ploaded.conf \
+ epple2.rev0bare.conf \
+ epple2.a2dos31.conf \
+ epple2.a2loaded.conf \
+ epple2.a2pdos33.conf
+
+etc_DATA = $(CONF_FILES)
+
+EXTRA_DIST = $(etc_DATA)
11 conf/epple2.a2bare.conf.in
View
@@ -0,0 +1,11 @@
+# Apple ][ (with revision 1 or later motherboard), bare
+#
+# This set up is a standard Apple ][ (with a newer motherboard,
+# that is, not an original revision zero motherboard), and
+# nothing in any slots. It has Integer BASIC and the old Monitor ROMs.
+
+
+
+import motherboard rom 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+import motherboard rom 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
24 conf/epple2.a2dos31.conf.in
View
@@ -0,0 +1,24 @@
+# Apple ][ with (13-sector) DOS 3.1 (the original version of DOS 3.3).
+#
+# After power-up, type C600G to boot the DOS 3.1 System Master disk.
+#
+# Since this System Master disk has "APPLESOFT" on it, you can type
+# FP at the Integer BASIC prompt to run Applesoft BASIC. When you do
+# it this way, you get an interesting title page for Applesoft, showing
+# copyright notices for Apple and Microsoft.
+
+
+
+# Integer BASIC and old Monitor ROMs
+import motherboard rom 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+import motherboard rom 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
+
+
+
+# Disk ][ card with 13-sector ROMs
+slot 6 disk
+import slot 6 rom 0 $(PREFIX)lib/apple2/dos3x/13sector/controller/disk2.ex65
+
+# Insert DOS 3.1 System Master disk into drive 1
+load slot 6 drive 1 $(PREFIX)lib/apple2/dos3x/13sector/disks/dos310/clean31sysmas_stock_rawdos.nib
29 conf/epple2.a2dos33.conf.in
View
@@ -0,0 +1,29 @@
+# Apple ][ with language card and DOS 3.3 (original version)
+#
+# After power-on, type C600G to boot the DOS 3.3 System Master disk.
+# Notice it shows "APPLE II STANDARD" for this machine, and then it
+# loads APPLESOFT into the language card.
+#
+# You can use FP to switch to Applesoft, and INT to switch
+# back to Integer BASIC. As you do this, notice the "R" reading
+# indicator on the language card line turning on or off.
+
+
+# Integer BASIC and old Monitor ROMs
+import motherboard rom 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+import motherboard rom 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
+
+
+
+# Language card in slot 0
+slot 0 language
+
+
+
+# Disk ][ controller card in slot 6, with 16-sector ROMs
+slot 6 disk
+import slot 6 rom 0 $(PREFIX)lib/apple2/dos3x/16sector/controller/disk2.ex65
+
+# Insert DOS 3.3 System Master disk (original version) in drive 1
+load slot 6 drive 1 $(PREFIX)lib/apple2/dos3x/16sector/disks/dos330/clean330sysmas.nib
68 conf/epple2.a2loaded.conf.in
View
@@ -0,0 +1,68 @@
+# Apple ][, loaded
+#
+# This is an Apple ][ (Integer BASIC and old Monitor), with
+# every card provided by the EPPLE ][ Emulator installed.
+#
+# Since this machine doesn't have the Autostart Monitor, after powering
+# it on you'll need to type C600G to boot the DOS 3.3 System Master,
+# or C500G to boot the DOS 3.1 System Master.
+
+
+
+# Integer BASIC and old Monitor ROMs
+import motherboard rom 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+import motherboard rom 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
+
+
+
+# Language card in slot 0. When the DOS 3.3 System Master boots,
+# it will load Applesoft into the language card.
+slot 0 language
+
+
+
+# Standard-output "card" in slot 1, so typing
+# PR#1 will start sending characters to standard output of the emulator
+slot 1 stdout
+import slot 1 rom 0 $(PREFIX)lib/epple2/cards/stdout.ex65
+
+
+
+# Standard-input "card" in slot 2, so typing
+# IN#2 will start reading characters from standard input of the emulator
+slot 2 stdin
+import slot 2 rom 0 $(PREFIX)lib/epple2/cards/stdin.ex65
+
+
+
+# Clock card in slot 4
+slot 4 clock
+import slot 4 rom 0 $(PREFIX)lib/epple2/cards/clock.ex65
+
+
+
+# Disk ][ controller card in slot 5, with 13-sector ROMs.
+# This will read (DOS 3.1, 3.2, and 3.2.1) disks, which
+# have 13 sectors per track.
+slot 5 disk
+import slot 5 rom 0 $(PREFIX)lib/apple2/dos3x/13sector/controller/disk2.ex65
+# Insert the DOS 3.1 System Master disk into drive 1 of slot 5
+load slot 5 drive 1 $(PREFIX)lib/apple2/dos3x/13sector/disks/dos310/clean31sysmas_stock_rawdos.nib
+
+
+
+# Disk ][ controller card in slot 6, with 16-sector ROMs.
+# This will read (DOS 3.3) disks, which have 16 sectors per track.
+slot 6 disk
+import slot 6 rom 0 $(PREFIX)lib/apple2/dos3x/16sector/controller/disk2.ex65
+# Insert the DOS 3.3 System Master disk (original version) into slot 6
+load slot 6 drive 1 $(PREFIX)lib/apple2/dos3x/16sector/disks/dos330/clean330sysmas.nib
+
+
+
+# Firmware card with Applesoft and Autostart Monitor.
+# DOS will not use this firmware card, because it is not in slot 0.
+slot 7 firmware
+import slot 7 rombank 0000 $(PREFIX)lib/apple2/system/applesoft/applesoft.ex65
+import slot 7 rombank 2800 $(PREFIX)lib/apple2/system/monitor/apple2plus/monitor.ex65
10 conf/epple2.a2pbare.conf.in
View
@@ -0,0 +1,10 @@
+# Apple ][ plus, bare
+#
+# This set up is a standard Apple ][ plus, and
+# nothing in any slots. It has Applesoft BASIC
+# and the Autostart Monitor ROMs.
+
+
+
+import motherboard rom 0000 $(PREFIX)lib/apple2/system/applesoft/applesoft.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2plus/monitor.ex65
28 conf/epple2.a2pdos33.conf.in
View
@@ -0,0 +1,28 @@
+# Apple ][ plus, with language card and DOS 3.3 (original version)
+#
+# After power-on, it will boot the DOS 3.3 System Master disk.
+# Notice it shows "APPLE II PLUS OR ROMCARD" for this machine, and then it
+# loads Integer BASIC into the language card.
+#
+# You can use FP to switch to Applesoft, and INT to switch
+# back to Integer BASIC. As you do this, notice the "R" reading
+# indicator on the language card line turning on or off.
+
+
+# Applesoft BASIC and Autostart Monitor ROMs
+import motherboard rom 0000 $(PREFIX)lib/apple2/system/applesoft/applesoft.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2plus/monitor.ex65
+
+
+
+# Language card in slot 0
+slot 0 language
+
+
+
+# Disk ][ controller card in slot 6, with 16-sector ROMs
+slot 6 disk
+import slot 6 rom 0 $(PREFIX)lib/apple2/dos3x/16sector/controller/disk2.ex65
+
+# Insert DOS 3.3 System Master disk (original version) in drive 1
+load slot 6 drive 1 $(PREFIX)lib/apple2/dos3x/16sector/disks/dos330/clean330sysmas.nib
68 conf/epple2.a2ploaded.conf.in
View
@@ -0,0 +1,68 @@
+# Apple ][ plus, loaded
+#
+# This is an Apple ][ plus (Applesoft BASIC and Autostart Monitor), with
+# every card provided by the EPPLE ][ Emulator installed.
+#
+# This machine has two Disk ][ controller cards; the Autostart Monitor
+# searches from slot 7 downwards for a Disk ][ card, so it will boot
+# the disk in slot 6, the DOS 3.3 System Master.
+
+
+
+# Applesoft BASIC and Autostart Monitor ROMs
+import motherboard rom 0000 $(PREFIX)lib/apple2/system/applesoft/applesoft.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2plus/monitor.ex65
+
+
+
+# Language card in slot 0. When the DOS 3.3 System Master boots,
+# it will load Integer BASIC into the language card.
+slot 0 language
+
+
+
+# Standard-output "card" in slot 1, so typing
+# PR#1 will start sending characters to standard output of the emulator
+slot 1 stdout
+import slot 1 rom 0 $(PREFIX)lib/epple2/cards/stdout.ex65
+
+
+
+# Standard-input "card" in slot 2, so typing
+# IN#2 will start reading characters from standard input of the emulator
+slot 2 stdin
+import slot 2 rom 0 $(PREFIX)lib/epple2/cards/stdin.ex65
+
+
+
+# Clock card in slot 4
+slot 4 clock
+import slot 4 rom 0 $(PREFIX)lib/epple2/cards/clock.ex65
+
+
+
+# Disk ][ controller card in slot 5, with 13-sector ROMs.
+# This will read (DOS 3.1, 3.2, and 3.2.1) disks, which
+# have 13 sectors per track.
+slot 5 disk
+import slot 5 rom 0 $(PREFIX)lib/apple2/dos3x/13sector/controller/disk2.ex65
+# Insert the DOS 3.1 System Master disk into drive 1 of slot 5
+load slot 5 drive 1 $(PREFIX)lib/apple2/dos3x/13sector/disks/dos310/clean31sysmas_stock_rawdos.nib
+
+
+
+# Disk ][ controller card in slot 6, with 16-sector ROMs.
+# This will read (DOS 3.3) disks, which have 16 sectors per track.
+slot 6 disk
+import slot 6 rom 0 $(PREFIX)lib/apple2/dos3x/16sector/controller/disk2.ex65
+# Insert the DOS 3.3 System Master disk (original version) into slot 6
+load slot 6 drive 1 $(PREFIX)lib/apple2/dos3x/16sector/disks/dos330/clean330sysmas.nib
+
+
+
+# Firmware card with Integer BASIC and the old Monitor.
+# DOS will not use this firmware card, because it is not in slot 0.
+slot 7 firmware
+import slot 7 rombank 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+import slot 7 rombank 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+import slot 7 rombank 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
55 conf/epple2.conf.in
View
@@ -0,0 +1,55 @@
+# epple2.conf
+# Copyright 2009, by Chris Mosher <chris@mosher.mine.nu>
+# GPLv3
+#
+# Configuration file for the Epple 2 emulator.
+#
+# This sample file is the default setup for the emulator.
+# It does not load any proprietary ROMs, only GPLv3 ROMs
+# written by the author of the emulator.
+#
+
+
+
+# Demo system ROM for the emulator. This is only to allow the
+# emulator to do something useful when there are no real Apple ROM
+# images provided.
+#
+import motherboard rom 2C00 $(PREFIX)lib/epple2/system/epple2sys.ex65
+
+# These are how to load the real (proprietary) Apple ROMs.
+# There ROMs are not distributed with the Epple 2 emulator.
+# These two lines are for an Apple ][ plus:
+#import motherboard rom 0000 $(PREFIX)lib/apple2/system/applesoft/applesoft.ex65
+#import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2plus/monitor.ex65
+# or instead, use these three lines are for an Apple ][:
+#import motherboard rom 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+#import motherboard rom 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+#import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
+
+slot 0 language
+
+slot 1 stdout
+import slot 1 rom 0 $(PREFIX)lib/epple2/cards/stdout.ex65
+
+slot 2 stdin
+import slot 2 rom 0 $(PREFIX)lib/epple2/cards/stdin.ex65
+
+slot 4 clock
+import slot 4 rom 0 $(PREFIX)lib/epple2/cards/clock.ex65
+
+#slot 5 disk
+#import slot 5 rom 0 $(PREFIX)lib/apple2/dos3x/13sector/controller/disk2.ex65
+#load slot 5 drive 1 $(PREFIX)lib/apple2/dos3x/13sector/disks/dos310/clean31sysmas_stock_rawdos.nib
+
+#slot 6 disk
+#import slot 6 rom 0 $(PREFIX)lib/apple2/dos3x/16sector/controller/disk2.ex65
+#load slot 6 drive 1 $(PREFIX)lib/apple2/dos3x/16sector/disks/dos330/clean330sysmas.nib
+
+#slot 7 firmware
+#import slot 7 rombank 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+#import slot 7 rombank 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+#import slot 7 rombank 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
+
+#revision 0
+revision 1
21 conf/epple2.rev0bare.conf.in
View
@@ -0,0 +1,21 @@
+# Apple ][ with revision zero motherboard
+#
+# This sets up a revision zero motherboard, and loads
+# Integer BASIC and the old Monitor ROMs. This set up
+# has nothing in any slots; it's a minimalist Apple ][.
+#
+# With a revision zero motherboard, powering on the machine
+# doesn't start it running; you need to press RESET (Break)
+# to get it actually running.
+
+
+
+# Load Integer BASIC and old Monitor ROMs
+import motherboard rom 1000 $(PREFIX)lib/apple2/system/intbasic/intbasic.ex65
+import motherboard rom 2425 $(PREFIX)lib/apple2/system/other/other.ex65
+import motherboard rom 2800 $(PREFIX)lib/apple2/system/monitor/apple2/monitor.ex65
+
+
+
+# Use an original, revision zero, motherboard
+revision 0
50 configure.ac
View
@@ -0,0 +1,50 @@
+# Process this file with autoconf to produce a configure script.
+AC_INIT(src/apple2.cpp)
+AC_PREREQ(2.59)
+
+AC_CONFIG_SRCDIR([config.h.in])
+
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(epple2, 1.0)
+
+
+
+# Checks for programs.
+AC_PROG_CXX
+AC_LANG_CPLUSPLUS
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+AM_PROG_CC_C_O
+
+# Checks for libraries.
+AC_CHECK_LIB([SDL],[SDL_Init],,[AC_MSG_ERROR([cannot find libsdl])])
+AC_CHECK_LIB([X11],[XOpenDisplay],,[AC_MSG_ERROR([cannot find X11])])
+
+
+
+# Checks for header files.
+AC_HEADER_STDBOOL
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_SIZE_T
+AC_CHECK_HEADERS([windows.h])
+AC_CHECK_HEADER([windows.h],[WINDOWS=true].[WINDOWS=])
+AM_CONDITIONAL([HAVE_WINDOWS],test "$WINDOWS")
+
+# Checks for library functions.
+AC_HEADER_STDC
+AC_TYPE_SIGNAL
+AC_CHECK_FUNCS([memset sqrt])
+
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+
+
+AC_CONFIG_FILES([Makefile src/Makefile conf/Makefile installer/Makefile])
+AC_OUTPUT
31 epple2.spec
View
@@ -0,0 +1,31 @@
+Summary: EPPLE ][, The Emulated Apple ][
+Name: epple2
+Version: 1.0
+Release: 1
+Source: %{name}-%{version}.tar.gz
+License: GPL
+Group: System/Emulators/Other
+
+%description
+EPPLE ][ is an emulator of Apple ][ and Apple ][ plus computers.
+
+%prep
+%setup -q
+
+%build
+cd ../../VPATH
+if [ -x ./config.status ]
+then
+ ./config.status
+else
+ ../BUILD/%{name}-%{version}/configure --prefix=%{_prefix} --sysconfdir=%{_sysconfdir}
+fi
+make
+
+%install
+cd ../../VPATH
+make install DESTDIR=%{buildroot}
+
+%files
+%{_bindir}/%{name}
+%{_sysconfdir}/%{name}
17 installer/Makefile.am
View
@@ -0,0 +1,17 @@
+EXTRA_DIST = epple2.wxs
+
+if HAVE_WINDOWS
+
+SUFFIXES = .wxs .wixobj .msi
+
+all: epple2.msi
+
+epple2.msi: epple2.wixobj ../src/epple2.exe
+ strip -o epple2.exe ../src/epple2.exe
+ light $< -out $@
+ cp $@ $(basename $@)-$(VERSION)$(suffix $@)
+
+epple2.wixobj: epple2.wxs
+ candle $< -out $@ -dSDLDIR=/bin -dMINGWMDIR=/mingw/bin
+
+endif
61 installer/epple2.wxs
View
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
+ <Product Name="EPPLE ][" Id="d603c69f-4116-4b8e-910f-44f488a772a4" Language="1033" Codepage="1252" Version="1.0.0" Manufacturer="Chris Mosher">
+ <Package Id="0ca046fe-0adb-4df3-9fab-048baa55b165" Description="Emulated Apple ][" InstallerVersion="100" Languages="1033" Compressed="yes" />
+ <Media Id="1" Cabinet="Epple2.cab" EmbedCab="yes" DiskPrompt="Epple2.cab" />
+ <Property Id="DiskPrompt" Value="Epple ][ Installation" />
+
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="ProgramFilesFolder" Name="PFiles">
+ <Directory Id="INSTALLDIR" Name="Epple2">
+ <Directory Id="bindot" Name=".">
+ <Directory Id="bin" Name="bin">
+ <Component Id="MainExecutable" Guid="d3f60e2b-92e2-4a41-b83a-a38591c2e6c3">
+ <File Id="EPPLE2_EXE" Name="epple2.exe" DiskId="1" Source="epple2.exe" Vital="yes">
+ <Shortcut Id="startmenuEpple2" Directory="ProgramMenuDir" Name="Epple2" WorkingDirectory="INSTALLDIR" />
+ <Shortcut Id="desktopEpple2" Directory="DesktopFolder" Name="Epple2" WorkingDirectory="INSTALLDIR" />
+ </File>
+ <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
+ </Component>
+ <Component Id="SDL" Guid="d8e283c0-9af6-4275-8d66-45ca2a0e51ce">
+ <File Id="SDLDLL" Name="sdl.dll" DiskId="1" Source="$(var.SDLDIR)\SDL.dll" />
+ </Component>
+
+ <Component Id="MINGWM" Guid="d8e283c0-9af6-4275-8d66-45ca2a0e51ce">
+ <File Id="MINGWMDLL" Name="mingwm10.dll" DiskId="1" Source="$(var.MINGWMDIR)\mingwm10.dll" />
+ </Component>
+ </Directory>
+ </Directory>
+
+ <Directory Id="etcdot" Name=".">
+ <Directory Id="etc" Name="etc">
+ <Directory Id="etc_epple2" Name="epple2">
+ <Component Id="ConfigFiles" Guid="73057afd-e28b-48b1-b428-6e2bf029b74d">
+ <File Id="Config" Name="epple2.cfg" LongName="epple2.conf" DiskId="1" Source="..\conf\epple2.conf" Vital="yes" />
+ <File Id="Config_rev0bare" Name="epple2_1.cfg" LongName="epple2.rev0bare.conf" DiskId="1" Source="..\conf\epple2.rev0bare.conf" Vital="yes" />
+ <File Id="Config_a2bare" Name="epple2_2.cfg" LongName="epple2.a2bare.conf" DiskId="1" Source="..\conf\epple2.a2bare.conf" Vital="yes" />
+ <File Id="Config_a2dos31" Name="epple2_3.cfg" LongName="epple2.a2dos31.conf" DiskId="1" Source="..\conf\epple2.a2dos31.conf" Vital="yes" />
+ <File Id="Config_a2dos33" Name="epple2_4.cfg" LongName="epple2.a2dos33.conf" DiskId="1" Source="..\conf\epple2.a2dos33.conf" Vital="yes" />
+ <File Id="Config_a2loaded" Name="epple2_5.cfg" LongName="epple2.a2loaded.conf" DiskId="1" Source="..\conf\epple2.a2loaded.conf" Vital="yes" />
+ </Component>
+ </Directory>
+ </Directory>
+ </Directory>
+ </Directory>
+ </Directory>
+
+ <Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs">
+ <Directory Id="ProgramMenuDir" Name="Epple2" />
+ </Directory>
+
+ <Directory Id="DesktopFolder" Name="Desktop" />
+ </Directory>
+
+ <Feature Id="Complete" Level="1">
+ <ComponentRef Id="MainExecutable" />
+ <ComponentRef Id="ConfigFiles" />
+ <ComponentRef Id="SDL" />
+ <ComponentRef Id="MINGWM" />
+ </Feature>
+ </Product>
+</Wix>
32 src/Makefile.am
View
@@ -0,0 +1,32 @@
+METASOURCES=AUTO
+
+
+
+bin_PROGRAMS=epple2
+
+AM_CPPFLAGS=$(all_includes)
+epple2_LDFLAGS=$(all_libraries)
+
+epple2_CPPFLAGS = $(AM_CPPFLAGS) -DETCDIR=\"$(sysconfdir)\"
+
+epple2_SOURCES = a2colorsobserved.cpp addressbus.cpp analogtv.cpp apple2.cpp \
+ applentsc.cpp card.cpp cassette.cpp clipboardhandler.cpp clockcard.cpp \
+ configep2.cpp cpu.cpp diskbytes.cpp diskcontroller.cpp drive.cpp \
+ emptyslot.cpp emulator.cpp firmwarecard.cpp gui.cpp hypermode.cpp \
+ keyboard.cpp keyboardbuffermode.cpp languagecard.cpp lowpass_1_5_mhz.cpp \
+ lowpass_3_58_mhz.cpp main.cpp memory.cpp paddlebuttonstates.cpp \
+ paddles.cpp picturegenerator.cpp powerupreset.cpp raminitializer.cpp \
+ screenimage.cpp slots.cpp speakerclicker.cpp standardin.cpp \
+ standardinproducer.cpp standardout.cpp steppermotor.cpp textcharacters.cpp \
+ timable.cpp video.cpp videoaddressing.cpp videomode.cpp \
+ videostaticgenerator.cpp SDL_win32_main.c
+
+noinst_HEADERS = a2colorsobserved.h addressbus.h analogtv.h apple2.h applentsc.h \
+ card.h cassette.h clipboardhandler.h clockcard.h configep2.h cpu.h diskbytes.h \
+ diskcontroller.h drive.h e2const.h emptyslot.h emulator.h firmwarecard.h font3x5.h gui.h \
+ hypermode.h keyboardbuffermode.h keyboard.h languagecard.h lowpass_1_5_mhz.h \
+ lowpass_3_58_mhz.h memory.h paddlebuttonstates.h paddles.h picturegenerator.h \
+ powerupreset.h raminitializer.h screenimage.h slots.h speakerclicker.h \
+ standardin.h standardinproducer.h standardout.h steppermotor.h \
+ textcharacterimages.h textcharacters.h timable.h util.h \
+ videoaddressing.h video.h videomode.h videostaticgenerator.h
392 src/SDL_win32_main.c
View
@@ -0,0 +1,392 @@
+/*
+ SDL_main.c, placed in the public domain by Sam Lantinga 4/13/98
+
+ The WinMain function -- calls your program's main() function
+*/
+#include "config.h"
+
+#ifdef HAVE_WINDOWS_H
+#include <stdio.h>
+#include <stdlib.h>
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+// Chris Mosher added this:
+#define NO_STDIO_REDIRECT
+
+#ifdef _WIN32_WCE
+# define DIR_SEPERATOR TEXT("\\")
+# undef _getcwd
+# define _getcwd(str,len) wcscpy(str,TEXT(""))
+# define setbuf(f,b)
+# define setvbuf(w,x,y,z)
+# define fopen _wfopen
+# define freopen _wfreopen
+# define remove(x) DeleteFile(x)
+#else
+# define DIR_SEPERATOR TEXT("/")
+# include <direct.h>
+#endif
+
+/* Include the SDL main definition header */
+#include "SDL/SDL.h"
+#include "SDL/SDL_main.h"
+
+#ifdef main
+# ifndef _WIN32_WCE_EMULATION
+# undef main
+# endif /* _WIN32_WCE_EMULATION */
+#endif /* main */
+
+/* The standard output files */
+#define STDOUT_FILE TEXT("stdout.txt")
+#define STDERR_FILE TEXT("stderr.txt")
+
+#ifndef NO_STDIO_REDIRECT
+# ifdef _WIN32_WCE
+ static wchar_t stdoutPath[MAX_PATH];
+ static wchar_t stderrPath[MAX_PATH];
+# else
+ static char stdoutPath[MAX_PATH];
+ static char stderrPath[MAX_PATH];
+# endif
+#endif
+
+#if defined(_WIN32_WCE) && _WIN32_WCE < 300
+/* seems to be undefined in Win CE although in online help */
+#define isspace(a) (((CHAR)a == ' ') || ((CHAR)a == '\t'))
+#endif /* _WIN32_WCE < 300 */
+
+static void UnEscapeQuotes( char *arg )
+{
+ char *last = NULL;
+
+ while( *arg ) {
+ if( *arg == '"' && *last == '\\' ) {
+ char *c_curr = arg;
+ char *c_last = last;
+
+ while( *c_curr ) {
+ *c_last = *c_curr;
+ c_last = c_curr;
+ c_curr++;
+ }
+ *c_last = '\0';
+ }
+ last = arg;
+ arg++;
+ }
+}
+
+/* Parse a command line buffer into arguments */
+static int ParseCommandLine(char *cmdline, char **argv)
+{
+ char *bufp;
+ char *lastp = NULL;
+ int argc, last_argc;
+
+ argc = last_argc = 0;
+ for ( bufp = cmdline; *bufp; ) {
+ /* Skip leading whitespace */
+ while ( isspace(*bufp) ) {
+ ++bufp;
+ }
+ /* Skip over argument */
+ if ( *bufp == '"' ) {
+ ++bufp;
+ if ( *bufp ) {
+ if ( argv ) {
+ argv[argc] = bufp;
+ }
+ ++argc;
+ }
+ /* Skip over word */
+ while ( *bufp && ( *bufp != '"' || *lastp == '\\' ) ) {
+ lastp = bufp;
+ ++bufp;
+ }
+ } else {
+ if ( *bufp ) {
+ if ( argv ) {
+ argv[argc] = bufp;
+ }
+ ++argc;
+ }
+ /* Skip over word */
+ while ( *bufp && ! isspace(*bufp) ) {
+ ++bufp;
+ }
+ }
+ if ( *bufp ) {
+ if ( argv ) {
+ *bufp = '\0';
+ }
+ ++bufp;
+ }
+
+ /* Strip out \ from \" sequences */
+ if( argv && last_argc != argc ) {
+ UnEscapeQuotes( argv[last_argc] );
+ }
+ last_argc = argc;
+ }
+ if ( argv ) {
+ argv[argc] = NULL;
+ }
+ return(argc);
+}
+
+/* Show an error message */
+static void ShowError(const char *title, const char *message)
+{
+/* If USE_MESSAGEBOX is defined, you need to link with user32.lib */
+#ifdef USE_MESSAGEBOX
+ MessageBox(NULL, message, title, MB_ICONEXCLAMATION|MB_OK);
+#else
+ fprintf(stderr, "%s: %s\n", title, message);
+#endif
+}
+
+/* Pop up an out of memory message, returns to Windows */
+static BOOL OutOfMemory(void)
+{
+ ShowError("Fatal Error", "Out of memory - aborting");
+ return FALSE;
+}
+
+/* SDL_Quit() shouldn't be used with atexit() directly because
+ calling conventions may differ... */
+static void cleanup(void)
+{
+ SDL_Quit();
+}
+
+/* Remove the output files if there was no output written */
+static void cleanup_output(void)
+{
+#ifndef NO_STDIO_REDIRECT
+ FILE *file;
+ int empty;
+#endif
+
+ /* Flush the output in case anything is queued */
+ fclose(stdout);
+ fclose(stderr);
+
+#ifndef NO_STDIO_REDIRECT
+ /* See if the files have any output in them */
+ if ( stdoutPath[0] ) {
+ file = fopen(stdoutPath, TEXT("rb"));
+ if ( file ) {
+ empty = (fgetc(file) == EOF) ? 1 : 0;
+ fclose(file);
+ if ( empty ) {
+ remove(stdoutPath);
+ }
+ }
+ }
+ if ( stderrPath[0] ) {
+ file = fopen(stderrPath, TEXT("rb"));
+ if ( file ) {
+ empty = (fgetc(file) == EOF) ? 1 : 0;
+ fclose(file);
+ if ( empty ) {
+ remove(stderrPath);
+ }
+ }
+ }
+#endif
+}
+
+#if defined(_MSC_VER) && !defined(_WIN32_WCE)
+/* The VC++ compiler needs main defined */
+#define console_main main
+#endif
+
+/* This is where execution begins [console apps] */
+int console_main(int argc, char *argv[])
+{
+ size_t n;
+ char *bufp, *appname;
+ int status;
+
+ /* Get the class name from argv[0] */
+ appname = argv[0];
+ if ( (bufp=SDL_strrchr(argv[0], '\\')) != NULL ) {
+ appname = bufp+1;
+ } else
+ if ( (bufp=SDL_strrchr(argv[0], '/')) != NULL ) {
+ appname = bufp+1;
+ }
+
+ if ( (bufp=SDL_strrchr(appname, '.')) == NULL )
+ n = SDL_strlen(appname);
+ else
+ n = (bufp-appname);
+
+ bufp = SDL_stack_alloc(char, n+1);
+ if ( bufp == NULL ) {
+ return OutOfMemory();
+ }
+ SDL_strlcpy(bufp, appname, n+1);
+ appname = bufp;
+
+ /* Load SDL dynamic link library */
+ if ( SDL_Init(SDL_INIT_NOPARACHUTE) < 0 ) {
+ ShowError("WinMain() error", SDL_GetError());
+ return(FALSE);
+ }
+ atexit(cleanup_output);
+ atexit(cleanup);
+
+ /* Sam:
+ We still need to pass in the application handle so that
+ DirectInput will initialize properly when SDL_RegisterApp()
+ is called later in the video initialization.
+ */
+ SDL_SetModuleHandle(GetModuleHandle(NULL));
+
+ /* Run the application main() code */
+ status = SDL_main(argc, argv);
+
+ /* Exit cleanly, calling atexit() functions */
+ exit(status);
+
+ /* Hush little compiler, don't you cry... */
+ return 0;
+}
+
+/* This is where execution begins [windowed apps] */
+#ifdef _WIN32_WCE
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPWSTR szCmdLine, int sw)
+#else
+int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
+#endif
+{
+ HINSTANCE handle;
+ char **argv;
+ int argc;
+ char *cmdline;
+#ifdef _WIN32_WCE
+ wchar_t *bufp;
+ int nLen;
+#else
+ char *bufp;
+ size_t nLen;
+#endif
+#ifndef NO_STDIO_REDIRECT
+ DWORD pathlen;
+#ifdef _WIN32_WCE
+ wchar_t path[MAX_PATH];
+#else
+ char path[MAX_PATH];
+#endif
+ FILE *newfp;
+#endif
+
+ /* Start up DDHELP.EXE before opening any files, so DDHELP doesn't
+ keep them open. This is a hack.. hopefully it will be fixed
+ someday. DDHELP.EXE starts up the first time DDRAW.DLL is loaded.
+ */
+ handle = LoadLibrary(TEXT("DDRAW.DLL"));
+ if ( handle != NULL ) {
+ FreeLibrary(handle);
+ }
+
+#ifndef NO_STDIO_REDIRECT
+ pathlen = GetModuleFileName(NULL, path, SDL_arraysize(path));
+ while ( pathlen > 0 && path[pathlen] != '\\' ) {
+ --pathlen;
+ }
+ path[pathlen] = '\0';
+
+#ifdef _WIN32_WCE
+ wcsncpy( stdoutPath, path, SDL_arraysize(stdoutPath) );
+ wcsncat( stdoutPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
+#else
+ SDL_strlcpy( stdoutPath, path, SDL_arraysize(stdoutPath) );
+ SDL_strlcat( stdoutPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
+#endif
+
+ /* Redirect standard input and standard output */
+ newfp = freopen(stdoutPath, TEXT("w"), stdout);
+
+#ifndef _WIN32_WCE
+ if ( newfp == NULL ) { /* This happens on NT */
+#if !defined(stdout)
+ stdout = fopen(stdoutPath, TEXT("w"));
+#else
+ newfp = fopen(stdoutPath, TEXT("w"));
+ if ( newfp ) {
+ *stdout = *newfp;
+ }
+#endif
+ }
+#endif /* _WIN32_WCE */
+
+#ifdef _WIN32_WCE
+ wcsncpy( stderrPath, path, SDL_arraysize(stdoutPath) );
+ wcsncat( stderrPath, DIR_SEPERATOR STDOUT_FILE, SDL_arraysize(stdoutPath) );
+#else
+ SDL_strlcpy( stderrPath, path, SDL_arraysize(stderrPath) );
+ SDL_strlcat( stderrPath, DIR_SEPERATOR STDERR_FILE, SDL_arraysize(stderrPath) );
+#endif
+
+ newfp = freopen(stderrPath, TEXT("w"), stderr);
+#ifndef _WIN32_WCE
+ if ( newfp == NULL ) { /* This happens on NT */
+#if !defined(stderr)
+ stderr = fopen(stderrPath, TEXT("w"));
+#else
+ newfp = fopen(stderrPath, TEXT("w"));
+ if ( newfp ) {
+ *stderr = *newfp;
+ }
+#endif
+ }
+#endif /* _WIN32_WCE */
+
+ setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* Line buffered */
+ setbuf(stderr, NULL); /* No buffering */
+#endif /* !NO_STDIO_REDIRECT */
+
+#ifdef _WIN32_WCE
+ nLen = wcslen(szCmdLine)+128+1;
+ bufp = SDL_stack_alloc(wchar_t, nLen*2);
+ wcscpy (bufp, TEXT("\""));
+ GetModuleFileName(NULL, bufp+1, 128-3);
+ wcscpy (bufp+wcslen(bufp), TEXT("\" "));
+ wcsncpy(bufp+wcslen(bufp), szCmdLine,nLen-wcslen(bufp));
+ nLen = wcslen(bufp)+1;
+ cmdline = SDL_stack_alloc(char, nLen);
+ if ( cmdline == NULL ) {
+ return OutOfMemory();
+ }
+ WideCharToMultiByte(CP_ACP, 0, bufp, -1, cmdline, nLen, NULL, NULL);
+#else
+ /* Grab the command line */
+ bufp = GetCommandLine();
+ nLen = SDL_strlen(bufp)+1;
+ cmdline = SDL_stack_alloc(char, nLen);
+ if ( cmdline == NULL ) {
+ return OutOfMemory();
+ }
+ SDL_strlcpy(cmdline, bufp, nLen);
+#endif
+
+ /* Parse it into argv and argc */
+ argc = ParseCommandLine(cmdline, NULL);
+ argv = SDL_stack_alloc(char*, argc+1);
+ if ( argv == NULL ) {
+ return OutOfMemory();
+ }
+ ParseCommandLine(cmdline, argv);
+
+ /* Run the main program (after a little SDL initialization) */
+ console_main(argc, argv);
+
+ /* Hush little compiler, don't you cry... */
+ return 0;
+}
+#endif
93 src/a2colorsobserved.cpp
View
@@ -0,0 +1,93 @@
+/*
+ epple2
+ Copyright (C) 2008 by Chris Mosher <chris@mosher.mine.nu>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY, without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "a2colorsobserved.h"
+
+static unsigned char tobyt(float x)
+{
+ x *= 256.0f;
+ x += 0.0001f;
+ int xi = (int)x;
+
+ if (xi > 255)
+ xi = 255;
+
+ return (unsigned char)xi;
+}
+
+// 0 <= h < 360 degrees; 0 <= s,v <= 1
+static int HSVtoRGB(const int h, const float s, const float v)
+{
+ const float f = (h % 60) / 60.0;
+
+ float r, g, b;
+ switch (h / 60)
+ {
+ case 0:
+ r = v;
+ g = v * (1 - s * (1 - f));
+ b = v * (1 - s);
+ break;
+ case 1:
+ r = v * (1 - s * f);
+ g = v;
+ b = v * (1 - s);
+ break;
+ case 2:
+ r = v * (1 - s);
+ g = v;
+ b = v * (1 - s * (1 - f));
+ break;
+ case 3:
+ r = v * (1 - s);
+ g = v * (1 - s * f);
+ b = v;
+ break;
+ case 4:
+ r = v * (1 - s * (1 - f));
+ g = v * (1 - s);
+ b = v;
+ break;
+ case 5:
+ r = v;
+ g = v * (1 - s);
+ b = v * (1 - s * f);
+ break;
+ }
+
+ return (tobyt(r) << 16) | (tobyt(g) << 8) | (tobyt(b));
+}
+
+A2ColorsObserved::A2ColorsObserved():
+ COLOR(0x10)
+{
+// const unsigned int clr[] = { 0x1, 0xB, 0x3, 0x2, 0x7, 0x6, 0x4, 0xE, 0xC, 0x8, 0xD, 0x9, 0x5, 0xA, 0xF, 0x0 };
+ const unsigned int map[] = { 0xF, 0x0, 0x3, 0x2, 0x6, 0xC, 0x5, 0x4, 0x9, 0xB, 0xD, 0x1, 0x8, 0xA, 0x7, 0xE };
+ const unsigned int hue[] = { 342, 342, 277, 233, 233, 213, 160, 160, 75, 33, 52, 24, 0, 0, 0, 0 };
+ const unsigned int sat[] = { 100, 50, 75, 100, 50, 100, 100, 100, 100, 100, 100, 100, 0, 0, 0, 0 };
+ const unsigned int val[] = { 67, 100, 100, 75, 100, 100, 33, 100, 75, 50, 100, 100, 50, 50, 100, 0 };
+
+ for (unsigned int i(0); i < COLOR.size(); ++i)
+ {
+ COLOR[i] = HSVtoRGB(hue[map[i]],sat[map[i]]/100.0f,val[map[i]]/100.0f);
+ }
+
+}
+
+A2ColorsObserved::~A2ColorsObserved()
+{
+}
55 src/a2colorsobserved.h
View
@@ -0,0 +1,55 @@
+/*
+ epple2
+ Copyright (C) 2008 by Chris Mosher <chris@mosher.mine.nu>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY, without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef A2COLORSOBSERVED_H
+#define A2COLORSOBSERVED_H
+
+#include <vector>
+
+class A2ColorsObserved
+{
+private:
+ std::vector<unsigned int> COLOR;
+
+public:
+ A2ColorsObserved();
+ ~A2ColorsObserved();
+
+ const std::vector<unsigned int>& c() { return this->COLOR; }
+
+ enum
+ {
+ BLACK,
+ DARK_MAGENTA,
+ DARK_BLUE,
+ HIRES_VIOLET,
+ DARK_BLUE_GREEN,
+ GREY,
+ HIRES_BLUE,
+ LIGHT_BLUE,
+ DARK_BROWN,
+ HIRES_ORANGE,
+ GREY_ALTERNATE,
+ LIGHT_MAGENTA,
+ HIRES_GREEN,
+ LIGHT_BROWN,
+ LIGHT_BLUE_GREEN,
+ WHITE,
+ };
+};
+
+#endif
229 src/addressbus.cpp
View
@@ -0,0 +1,229 @@
+/*
+ epple2
+ Copyright (C) 2008 by Chris Mosher <chris@mosher.mine.nu>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY, without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "addressbus.h"
+#include "memory.h"
+#include "keyboard.h"
+#include "videomode.h"
+#include "paddles.h"
+#include "paddlebuttonstates.h"
+#include "speakerclicker.h"
+#include "cassette.h"
+#include "slots.h"
+
+AddressBus::AddressBus(Memory& ram, Memory& rom, Keyboard& kbd, VideoMode& vid, Paddles& paddles, PaddleButtonStates& paddleButtonStates, SpeakerClicker& speaker, Cassette& cassette, Slots& slts):
+ ram(ram), rom(rom), kbd(kbd), vid(vid), paddles(paddles), paddleButtonStates(paddleButtonStates), speaker(speaker), cassette(cassette), slts(slts)
+{
+}
+
+
+AddressBus::~AddressBus()
+{
+}
+
+
+
+
+
+
+
+
+
+unsigned char AddressBus::read(const unsigned short address)
+{
+ if ((address >> 14 == 3)) // >= $C000
+ {
+ if ((address >> 12) == 0xC)
+ {
+ // 11007sssxxxxxxxx
+ const bool seventh = address & 0x0800;
+ const int slot = (address >> 8) & 7;
+ if (seventh)
+ {
+ this->data = this->slts.readSeventhRom(address & 0x07FF, this->data);
+ }
+ else if (slot == 0)
+ {
+ this->data = readSwitch(address & 0x00FF);
+ }
+ else
+ {
+ this->data = this->slts.readRom(slot,address & 0x00FF, this->data);
+ }
+ }
+ else
+ {
+ this->data = this->slts.ioBankRom(address - 0xD000,this->data,false);
+ if (!this->slts.inhibitMotherboardRom())
+ {
+ this->data = this->rom.read(address - 0xD000);
+ }
+ }
+ }
+ else // < $C000
+ {
+ this->data = this->ram.read(address);
+ }
+
+ return this->data;
+}
+
+void AddressBus::write(const unsigned short address, const unsigned char d)
+{
+ this->data = d;
+
+ if ((address >> 14 == 3)) // >= $C000
+ {
+ if ((address >> 12) == 0xC)
+ {
+ // 11007sssxxxxxxxx
+ const bool seventh = address & 0x0800;
+ const int slot = (address >> 8) & 7;
+ if (!seventh && slot == 0)
+ {
+ writeSwitch(address & 0x00FF);
+ }
+ }
+ else
+ {
+ this->slts.ioBankRom(address - 0xD000,this->data,true);
+ }
+ }
+ else // < $C000
+ {
+ this->ram.write(address,this->data);
+ }
+}
+
+
+
+
+
+
+
+
+unsigned char AddressBus::readSwitch(unsigned short address)
+{
+ if (address < 0x80)
+ {
+ const int islot = (address >> 4) & 0xF;
+ const int iswch = (address & 0xF);
+ if (islot == 0x0)
+ {
+ this->data = this->kbd.get();
+ }
+ else if (islot == 0x1)
+ {
+ this->kbd.clear();
+ }
+ else if (islot == 0x2)
+ {
+ this->cassette.output();
+ }
+ else if (islot == 0x3)
+ {
+ this->speaker.click();
+ }
+ else if (islot == 0x4)
+ {
+ // ignore utility strobe
+ }
+ else if (islot == 0x5)
+ {
+ if (iswch < 0x8)
+ {
+ this->data = this->vid.io(address,this->data);
+ }
+ else
+ {
+ // ignore annunciator outputs
+ }
+ }
+ else if (islot == 0x6)
+ {
+ int sw2 = iswch & 0x7;
+ if (sw2 == 0)
+ {
+ setD7(this->cassette.input());
+ }
+ else if (sw2 < 4)
+ {
+ setD7(this->paddleButtonStates.isDown(sw2-1));
+ }
+ else
+ {
+ sw2 &= 3;
+ setD7(!this->paddles.isTimedOut(sw2));
+ }
+ }
+ else if (islot == 0x7)
+ {
+ this->paddles.startTimers();
+ setD7(true);
+ }
+ }
+ else
+ {
+ // slot I/O switches
+ address &= 0x7F;
+ const int islot = (address >> 4) & 0xF;
+ const int iswch = (address & 0xF);
+ this->data = this->slts.io(islot,iswch,this->data,false);
+ }
+
+ return this->data;
+}
+
+void AddressBus::setD7(const bool set)
+{
+ if (set)
+ {
+ this->data |= 0x80;
+ }
+ else
+ {
+ this->data &= 0x7F;
+ }
+}
+
+void AddressBus::writeSwitch(unsigned short address)
+{
+ if (address < 0x80)
+ {
+ const int islot = (address >> 4) & 0xF;
+ const int iswch = (address & 0xF);
+
+ if (islot == 0x1)
+ {
+ this->kbd.clear();
+ }
+ else if (islot == 0x5)
+ {
+ if (iswch < 0x8)
+ this->vid.io(address,this->data);
+ }
+ // ignore all other switch writes
+ }
+ else
+ {
+ // slot I/O switches
+ address &= 0x7F;
+ const int islot = (address >> 4) & 0xF;
+ const int iswch = (address & 0xF);
+ this->slts.io(islot,iswch,this->data,true);
+ }
+}
62 src/addressbus.h
View
@@ -0,0 +1,62 @@
+/*