Difference between revisions of "Peripheral 1 Register"

From SpecNext official Wiki
Jump to: navigation, search
(core 3.1.3 changes/refresh)
(core 3.1.4 changes/refresh)
Line 40: Line 40:
 
|-
 
|-
 
| %110 || MD 2 (3 or 6 button joystick port {{PortNo|$xx37}})
 
| %110 || MD 2 (3 or 6 button joystick port {{PortNo|$xx37}})
 +
|-
 +
| %111 || I/O Mode (since core3.1.4 (but needs fixing))
 +
Affects both joysticks if any of them is set into I/O mode.
 
|}
 
|}
  
(core 2.0) Older version of this page warned about configuring at most one joystick as Kempston-1 and at most one as Cursor. The specnext.com refreshed documentation about ports does not warn about such limitation, but rather proceed with caution and avoid setting up both joysticks to the same type (unless somebody from core team clarifies this).
+
since core3.1.4:
 +
both joysticks are placed in I/O Mode if either is set to I/O Mode. The underlying
 +
joystick type is not changed and reads of this register will continue to return
 +
the last joystick type. Whether the joystick is in I/O mode or not is invisible
 +
but this state can be cleared either through reset or by re-writing the register
 +
with joystick type not equal to 111. Recovery time for a normal joystick read after
 +
leaving I/O Mode is at most 64 scan lines.
  
(core 3.0) both joysticks set to the same type is now confirmed as valid configuration. The result is combined readings from both joysticks to single output.
+
(since core 3.0) both joysticks set to the same type is now confirmed as valid configuration. The result is combined readings from both joysticks to single output.
  
"MD" above refers to controllers compatible with SEGA Mega Drive system. The 6 (and 3) button variant is mapped onto Kempston port this way (mirroring XYZ buttons on the ABC buttons, so only 4 distinct buttons are supported):
+
"MD" above refers to controllers compatible with SEGA Mega Drive system. The 6 (and 3) button variant is mapped onto Kempston port this way (<del>mirroring XYZ buttons on the ABC buttons, so</del> only 4 distinct buttons are supported) (new mapping since core3.1.4):
  
 
{| class="wikitable"
 
{| class="wikitable"
 
! Bit !! Joystick action
 
! Bit !! Joystick action
 
|-
 
|-
| 7 || "start" button
+
| 7 || "start" button (pin 9)
 
|-
 
|-
| 6 || A or X button
+
| 6 || A button (pin 6)
 
|-
 
|-
| 5 || C or Z button
+
| 5 || C button (pin 9)
 
|-
 
|-
| 4 || B or Y button
+
| 4 || B button (pin 6)
 
|-
 
|-
| 3 || Up
+
| 3 || Up (pin 1)
 
|-
 
|-
| 2 || Down
+
| 2 || Down (pin 2)
 
|-
 
|-
| 1 || Left
+
| 1 || Left (pin 3)
 
|-
 
|-
| 0 || Right
+
| 0 || Right (pin 4)
 
|}
 
|}
 +
The pin 6 and 9 reading depends on pin 7 being GND/+5V and it is driven by the FPGA internally (scanning both and building state), the Z80 SW reads final 8bit state from ports 0x1F and/or 0x37 (not driving the pin 7).
  
 
(core 3.1.1) the sinclair joystick modes are swapped, "sinclair 2" are keys 1,2,3,4,5 and "sinclair 1" are keys 6,7,8,9,0.
 
(core 3.1.1) the sinclair joystick modes are swapped, "sinclair 2" are keys 1,2,3,4,5 and "sinclair 1" are keys 6,7,8,9,0.

Revision as of 09:27, 15 April 2020

Number $05
Readable Yes
Writable Yes
Short Description Sets joystick mode, video frequency and Scandoubler.


Bit Function
7-6 Joystick 1 mode (LSB)
5-4 Joystick 2 mode (LSB)
3 Joystick 1 mode (MSB)
2 50/60 Hz mode (0 = 50Hz, 1 = 60Hz) (0 after a PoR or Hard-reset)
1 Joystick 2 mode (MSB)
0 Enable Scandoubler (1 = enabled) (1 after a PoR or Hard-reset)

Joystick modes are as follows:

Code Effect
%000 Sinclair Joystick 2 (maps to keys 1,2,3,4,5)
%001 Kempston Joystick 1 (uses port Kempston Joystick ($xx1F / 31))
%010 Cursor Joystick (maps to keys 5,6,7,8,0)
%011 Sinclair Joystick 1 (maps to keys 6,7,8,9,0)
%100 Kempston Joystick 2 (uses port Kempston Joystick 2, Joystick I/O ($xx37 / 55))
%101 MD 1 (3 or 6 button joystick port Kempston Joystick ($xx1F / 31))
%110 MD 2 (3 or 6 button joystick port Kempston Joystick 2, Joystick I/O ($xx37 / 55))
%111 I/O Mode (since core3.1.4 (but needs fixing))

Affects both joysticks if any of them is set into I/O mode.

since core3.1.4: both joysticks are placed in I/O Mode if either is set to I/O Mode. The underlying joystick type is not changed and reads of this register will continue to return the last joystick type. Whether the joystick is in I/O mode or not is invisible but this state can be cleared either through reset or by re-writing the register with joystick type not equal to 111. Recovery time for a normal joystick read after leaving I/O Mode is at most 64 scan lines.

(since core 3.0) both joysticks set to the same type is now confirmed as valid configuration. The result is combined readings from both joysticks to single output.

"MD" above refers to controllers compatible with SEGA Mega Drive system. The 6 (and 3) button variant is mapped onto Kempston port this way (mirroring XYZ buttons on the ABC buttons, so only 4 distinct buttons are supported) (new mapping since core3.1.4):

Bit Joystick action
7 "start" button (pin 9)
6 A button (pin 6)
5 C button (pin 9)
4 B button (pin 6)
3 Up (pin 1)
2 Down (pin 2)
1 Left (pin 3)
0 Right (pin 4)

The pin 6 and 9 reading depends on pin 7 being GND/+5V and it is driven by the FPGA internally (scanning both and building state), the Z80 SW reads final 8bit state from ports 0x1F and/or 0x37 (not driving the pin 7).

(core 3.1.1) the sinclair joystick modes are swapped, "sinclair 2" are keys 1,2,3,4,5 and "sinclair 1" are keys 6,7,8,9,0.