Herramientas de usuario

Herramientas del sitio


en:hardware:perifericos:kempston_joystick_clones

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
en:hardware:perifericos:kempston_joystick_clones [2026/05/15 06:27] jesusen:hardware:perifericos:kempston_joystick_clones [2026/05/25 16:11] (actual) jesus
Línea 3: Línea 3:
 <html> <html>
 <style> <style>
-  /* --- RETRO CRT VISUAL ENGINE --- */+  /* --- CRT RETRO VISUAL ENGINE --- */
   .pcw-monitor-ultra { background-color: #000b00; border: 12px solid #2a2a2a; border-radius: 15px; padding: 25px; margin: 25px 0; font-family: 'Courier New', Courier, monospace; position: relative; overflow: hidden; box-shadow: inset 0 0 60px rgba(0,255,0,0.15), 0 10px 30px rgba(0,0,0,0.7); }   .pcw-monitor-ultra { background-color: #000b00; border: 12px solid #2a2a2a; border-radius: 15px; padding: 25px; margin: 25px 0; font-family: 'Courier New', Courier, monospace; position: relative; overflow: hidden; box-shadow: inset 0 0 60px rgba(0,255,0,0.15), 0 10px 30px rgba(0,0,0,0.7); }
   .pcw-monitor-ultra::after { content: " "; position: absolute; top: 0; left: 0; bottom: 0; right: 0; background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.15) 50%), linear-gradient(90deg, rgba(255, 0, 0, 0.03), rgba(0, 255, 0, 0.01), rgba(0, 0, 255, 0.03)); background-size: 100% 3px, 2px 100%; z-index: 2; pointer-events: none; animation: flickering 0.15s infinite; }   .pcw-monitor-ultra::after { content: " "; position: absolute; top: 0; left: 0; bottom: 0; right: 0; background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.15) 50%), linear-gradient(90deg, rgba(255, 0, 0, 0.03), rgba(0, 255, 0, 0.01), rgba(0, 0, 255, 0.03)); background-size: 100% 3px, 2px 100%; z-index: 2; pointer-events: none; animation: flickering 0.15s infinite; }
Línea 13: Línea 13:
   .content-body { position: relative; z-index: 3; color: #00ff00; line-height: 1.6; text-align: justify; }   .content-body { position: relative; z-index: 3; color: #00ff00; line-height: 1.6; text-align: justify; }
   .content-body b, .content-body strong { color: #00ff00; font-weight: bold; }   .content-body b, .content-body strong { color: #00ff00; font-weight: bold; }
 +  .content-body ul { list-style: square; margin-top: 10px; padding-left: 20px; }
 +  .content-body ul li { color: #00ff00; }
   .pcw-subtitle-box { background-color: #00ff00; color: #000b00 !important; padding: 5px 12px; font-weight: bold; display: inline-block; margin: 20px 0 15px 0; text-transform: uppercase; position: relative; z-index: 3; font-family: 'Courier New', Courier, monospace; }   .pcw-subtitle-box { background-color: #00ff00; color: #000b00 !important; padding: 5px 12px; font-weight: bold; display: inline-block; margin: 20px 0 15px 0; text-transform: uppercase; position: relative; z-index: 3; font-family: 'Courier New', Courier, monospace; }
      
   /* --- GALLERIES AND CARDS --- */   /* --- GALLERIES AND CARDS --- */
-  .drive-grid-container { display: flex; flex-direction: column; gap: 20px; margin: 25px 0; position: relative; z-index: 3; align-items: center; justify-content: center; width: 100%; }+  .drive-grid-container { display: flex; flex-direction: column; gap: 20px; margin: 25px 0; position: relative; z-index: 3; align-items: center; justify-content: center; }
   .drive-card { border: 1px solid #004400; background: rgba(0, 15, 0, 0.6); padding: 20px; display: flex; flex-direction: column; gap: 15px; transition: 0.2s; align-items: center; width: 100%; max-width: 900px; box-sizing: border-box; }   .drive-card { border: 1px solid #004400; background: rgba(0, 15, 0, 0.6); padding: 20px; display: flex; flex-direction: column; gap: 15px; transition: 0.2s; align-items: center; width: 100%; max-width: 900px; box-sizing: border-box; }
   .drive-card:hover { border-color: #00ff00; background: rgba(0, 30, 0, 0.8); }   .drive-card:hover { border-color: #00ff00; background: rgba(0, 30, 0, 0.8); }
      
-  /* --- FORCED 4 IMAGES IN A SINGLE HORIZONTAL ROW --- */+  /* --- FOUR-INLINE IMAGES ALIGNMENT --- */
   .gallery-four-inline { display: flex; gap: 12px; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; width: 100%; }   .gallery-four-inline { display: flex; gap: 12px; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; width: 100%; }
   .gallery-four-inline .img-frame { flex: 1; min-width: 0; }   .gallery-four-inline .img-frame { flex: 1; min-width: 0; }
   .gallery-four-inline .img-frame img { max-width: 100%; height: auto; max-height: 160px; }   .gallery-four-inline .img-frame img { max-width: 100%; height: auto; max-height: 160px; }
  
-  /* --- GENERAL IMAGE FRAMES --- */+  /* --- GENERAL FRAMES --- */
   .img-frame { border: 2px solid #00ff00; padding: 6px; background: #000; text-align: center; display: inline-flex; flex-direction: column; align-items: center; box-sizing: border-box; transition: 0.3s ease; }   .img-frame { border: 2px solid #00ff00; padding: 6px; background: #000; text-align: center; display: inline-flex; flex-direction: column; align-items: center; box-sizing: border-box; transition: 0.3s ease; }
   .img-frame:hover { transform: scale(1.05); border-color: #00ff00; box-shadow: 0 0 15px rgba(0, 255, 0, 0.4); }   .img-frame:hover { transform: scale(1.05); border-color: #00ff00; box-shadow: 0 0 15px rgba(0, 255, 0, 0.4); }
Línea 31: Línea 33:
   .img-label { font-size: 0.72em; color: #00aa00; margin-top: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 0.5px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; width: 100%; }   .img-label { font-size: 0.72em; color: #00aa00; margin-top: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 0.5px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; width: 100%; }
      
-  /* --- LIGHTBOX MODAL SETUP: STRICT NATIVE REAL SIZE --- */+  /* --- LIGHTBOX MODAL WITH OVERLAY BOUNDARY BYPASS FOR REAL SIZE --- */
   .modal-pcw { display: none; position: fixed; z-index: 9999; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 10, 0, 0.95); overflow: auto; }   .modal-pcw { display: none; position: fixed; z-index: 9999; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 10, 0, 0.95); overflow: auto; }
   .modal-pcw:target { display: block; text-align: center; }   .modal-pcw:target { display: block; text-align: center; }
   .close-overlay { display: inline-block; min-width: 100%; min-height: 100%; padding: 40px; box-sizing: border-box; text-decoration: none !important; cursor: zoom-out; vertical-align: middle; }   .close-overlay { display: inline-block; min-width: 100%; min-height: 100%; padding: 40px; box-sizing: border-box; text-decoration: none !important; cursor: zoom-out; vertical-align: middle; }
   .modal-content { border: 4px solid #00ff00; box-shadow: 0 0 50px rgba(0, 255, 0, 0.5); margin: 5vh auto; display: inline-block; max-width: none !important; max-height: none !important; height: auto !important; }   .modal-content { border: 4px solid #00ff00; box-shadow: 0 0 50px rgba(0, 255, 0, 0.5); margin: 5vh auto; display: inline-block; max-width: none !important; max-height: none !important; height: auto !important; }
 +
 +  /* Technical tables */
 +  .tech-table { width: 100%; border-collapse: collapse; margin: 15px 0; background: rgba(0, 20, 0, 0.4); z-index: 3; position: relative; }
 +  .tech-table th, .tech-table td { border: 1px solid #004400; padding: 8px; text-align: left; font-family: 'Courier New', Courier, monospace; font-size: 0.9em; color: #00ff00; }
 +  .tech-table th { background: rgba(0, 60, 0, 0.6); color: #00ff00; font-weight: bold; text-transform: uppercase; }
 </style> </style>
  
-<!-- INTERACTIVE MODAL LIGHTBOX LAYERS -->+<!-- INTERACTIVE LIGHTBOX LAYERS -->
 <div id="c1" class="modal-pcw"><a href="#close" class="close-overlay"><img class="modal-content" src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Top.jpg"></a></div> <div id="c1" class="modal-pcw"><a href="#close" class="close-overlay"><img class="modal-content" src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Top.jpg"></a></div>
 <div id="c2" class="modal-pcw"><a href="#close" class="close-overlay"><img class="modal-content" src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Bottom.jpg"></a></div> <div id="c2" class="modal-pcw"><a href="#close" class="close-overlay"><img class="modal-content" src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Bottom.jpg"></a></div>
Línea 48: Línea 55:
      
   <div class="content-body">   <div class="content-body">
-    <p>Copies or clones of the official </html>[[en:Kempston Joystick]]<html> interface.</p>+    <p>Copies or clones of the official interface </html>[[en:hardware:perifericos:kempston_joystick]]<html>.</p>
   </div>   </div>
  
Línea 55: Línea 62:
   <div class="content-body" style="margin-bottom: -10px;">   <div class="content-body" style="margin-bottom: -10px;">
     <ul>     <ul>
-      <li><strong>Manufacturer / Origin:</strong> Unknown</li>+      <li><strong>Manufacturer / Origin:</strong> Siren Software (Manchester, United Kingdom) [Identified via hardware PCB preservation analysis]</li>
     </ul>     </ul>
   </div>   </div>
Línea 61: Línea 68:
   <div class="drive-grid-container">   <div class="drive-grid-container">
     <div class="drive-card">     <div class="drive-card">
 +      <!-- FOUR IMAGES ALIGNED IN A SINGLE LINE UNTIL LIGHTBOX EXPANSION -->
       <div class="gallery-four-inline">       <div class="gallery-four-inline">
-        <div class="img-frame"><a href="#c1"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Top.jpg"></a><span class="img-label">Case Top</span></div> +        <div class="img-frame"><a href="#c1"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Top.jpg"></a><span class="img-label">Top Case</span></div> 
-        <div class="img-frame"><a href="#c2"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Bottom.jpg"></a><span class="img-label">Case Bottom</span></div> +        <div class="img-frame"><a href="#c2"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_Bottom.jpg"></a><span class="img-label">Bottom Case</span></div> 
-        <div class="img-frame"><a href="#c3"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_PCB_Bottom.jpg"></a><span class="img-label">PCB Solder Side</span></div> +        <div class="img-frame"><a href="#c3"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_PCB_Bottom.jpg"></a><span class="img-label">PCB Bottom</span></div> 
-        <div class="img-frame"><a href="#c4"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_PCB_Top.jpg"></a><span class="img-label">PCB Component Side</span></div>+        <div class="img-frame"><a href="#c4"><img src="/lib/exe/fetch.php?media=hardware:perifericos:KempstonJoystickInterfaceClone_01_PCB_Top.jpg"></a><span class="img-label">PCB Top</span></div>
       </div>       </div>
     </div>     </div>
 +  </div>
 +  <div class="pcw-subtitle-box">Description, Context and Preservation History</div>
 +  <div class="content-body">
 +    <p>The clone unit illustrated on this page corresponds exactly to the **"Siren Software Joystick Interface"**, actively marketed during the late 1980s in the United Kingdom by the Manchester-based hardware and utility house **Siren Software** (run by Philip and Michael Davenport). The peripheral was highly popular at the time due to being originally distributed in a striking bright green packaging with white lettering, making it the most widespread Kempston-compatible clone for the Amstrad PCW 8256 and 8512 range.</p>
 +    <p>Since Amstrad omitted game controller ports out of the factory to lower professional costs, Siren Software filled this niche by designing a cheap and robust interface that plugged directly into the 50-pin lateral expansion bus. Its great competitive advantage was its purely electronic <em>Plug and Play</em> design: it required no software or resident drivers within the CP/M operating system. Furthermore, the manufacturer implemented an ingenious physical hardware hack by incorporating <strong>two parallel DE-9 ports wired in a mirror configuration</strong> into the casing. This allowed two joysticks to be connected simultaneously for cooperative multiplayer games (such as <em>Match Day II</em>), electrically sharing the same data bus address in parallel.</p>
   </div>   </div>
  
 +  <div class="pcw-subtitle-box">Electronic Architecture and I/O Port 09Fh Mapping</div>
 +  . <div class="content-body">
 +    <p>At the level of traditional logic integrated circuits from the TTL series (74xx) visible on the top and bottom PCB, the board operates as a direct electronic gateway to the Zilog Z80 microprocessor:</p>
 +    <ul>
 +      <li><strong>I/O Port Mapping:</strong> The digital logic of the address decoder monitors the PCW control lines and activates exclusively when it reads the standard fixed Kempston Input/Output address: <code>09Fh</code> (equivalent to <code>159</code> in decimal format).</li>
 +      <li><strong>Active-High Logic (1):</strong> Unlike other joystick standards on the platform (such as Cascade or Spectravideo, which operate with active-low inverse logic), the Kempston standard and this Siren Software clone return a <strong>binary '1'</strong> when a physical action is executed. In an idle state, port <code>09Fh</code> returns a clean <code>00h</code> byte. The board's tri-state buffer opens the channel and dumps the status of the mechanical switches directly onto the PCW data bus when the software executes the <code>IN A, (09Fh)</code> read instruction.</li>
 +    </ul>
 +
 +    <p><strong>Bit Mapping Matrix on Port 09Fh:</strong></p>
 +    <table class="tech-table">
 +      <thead>
 +        <tr>
 +          <th>Bus Bit</th>
 +          <th>Physical Active-High State (1)</th>
 +          <th>Assigned Joystick Function (Atari Standard)</th>
 +          <th>DE-9 Connector Physical Pin</th>
 +        </tr>
 +      </thead>
 +      <tbody>
 +        <tr>
 +          <td><strong>Bit 7</strong></td>
 +          <td>0 (Fixed)</td>
 +          <td>Unused line / Reserved</td>
 +          <td>—</td>
 +        </tr>
 +        <tr>
 +          <td><strong>Bit 6</strong></td>
 +          <td>0 (Fixed)</td>
 +          <td>Unused line / Reserved</td>
 +          <td>—</td>
 +        </tr>
 +        <tr>
 +          <td><strong>Bit 5</strong></td>
 +          <td>0 (Fixed)</td>
 +          <td>Unused line / Reserved</td>
 +          <td>—</td>
 +        </tr>
 +        <tr>
 +          <td><strong>Bit 4</strong></td>
 +          <td>1</td>
 +          <td>Primary action button (<strong>FIRE</strong>) pressed</td>
 +          <td>Pin 6</td>
 +        </tr>
 +        <tr>
 +          <td><strong>Bit 3</strong></td>
 +          <td>1</td>
 +          <td>Joystick stick <strong>UP</strong> direction active</td>
 +          <td>Pin 1</td>
 +        </tr>
 +        <tr>
 +          <td><strong>Bit 2</strong></td>
 +          <td>1</td>
 +          <td>Joystick stick <strong>DOWN</strong> direction active</td>
 +          <td>Pin 2</td>
 +        </tr>
 +        <tr>
 +          <td><strong>Bit 1</strong></td>
 +          <td>1</td>
 +          <td>Joystick stick <strong>LEFT</strong> direction active</td>
 +          <td>Pin 3</td>
 +        </tr>
 +        <tr>
 +          <td><strong>Bit 0</strong></td>
 +          <td>1</td>
 +          <td>Joystick stick <strong>RIGHT</strong> direction active</td>
 +          <td>Pin 4</td>
 +        </tr>
 +      </tbody>
 +    </table>
 +  </div>
 +
 +  <div class="pcw-subtitle-box">Software Support and Preservation Emulation</div>
 +  <div class="content-body">
 +    <p>Being the most widespread stick control standard, virtually all commercial action video games written for the PCW's CP/M Plus included a native routine to read directly from the port <code>09Fh</code> register within their peripheral control selectors. Today, this hardware behavior is fully supported virtually in digital preservation emulators such as <strong>CP/M Box (Habisoft)</strong> and <strong>Joyce (John Elliott)</strong>, as well as faithfully reproduced using hardware logic gates in the official Amstrad PCW Core of the <strong>MiSTer FPGA</strong> platform.</p>
 +  </div>
 </div> </div>
 </html> </html>
  
en/hardware/perifericos/kempston_joystick_clones.1778826460.txt.gz · Última modificación: por jesus