Difference between revisions of "AMX Mouse"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
m
(Technical)
Line 13: Line 13:
 
== Technical ==
 
== Technical ==
  
The AMX Art software uses the CPC's 300Hz interrupt to read the joystick port (at least it tries to do that, while moving the mouse pointer, the software accidently disables IRQs, and so, misses some interrupts). This is giving it a relative low resolution of max 300 mickeys per second (or actually less, due to the missed IRQs).
+
The AMX Art software uses the CPC's 300Hz interrupt to read joystick port 0 (at least it tries to do that, while moving the mouse pointer, the software accidently disables IRQs, and so, misses some interrupts). This is giving it a relative low resolution of max 300 mickeys per second (or actually less, due to the missed IRQs).
  
The AMX Interface hardware basically converts the incoming mouse signals to joystick signals, issuing LOW pulses (per mickey) on the corresponding direction lines. The protocol is thus very simple (unlike modern RS232 and PS/2 mice, the hardware doesn't contain any motion counters).
+
The AMX Interface hardware basically converts the incoming mouse signals to joystick 0 signals, issuing LOW pulses on the corresponding direction lines. The interface doesn't report anything for joystick 1 when connected to the CPC's joystick port (which provides both joystick 0 and joystick 1 input).
  
   Row9.Bit0 Joy1up    LOW for 1/300s per mickey, when mouse moved up
+
In addition the AMX mouse doesn't appear to clash with the keyboard.
   Row9.Bit1 Joy1down  LOW for 1/300s per mickey, when mouse moved down
+
 
   Row9.Bit2 Joy1left  LOW for 1/300s per mickey, when mouse moved left
+
The protocol is thus very simple (unlike modern RS232 and PS/2 mice, the hardware doesn't contain any motion counters).
   Row9.Bit3 Joy1right LOW for 1/300s per mickey, when mouse moved right
+
 
 +
   Row9.Bit0 Joy1up    LOW for 1 mickey, when mouse moved up
 +
   Row9.Bit1 Joy1down  LOW for 1 mickey, when mouse moved down
 +
   Row9.Bit2 Joy1left  LOW for 1 mickey, when mouse moved left
 +
   Row9.Bit3 Joy1right LOW for 1 mickey, when mouse moved right
 
   Row9.Bit5 Joy1fire1 LOW when Right mouse button pressed
 
   Row9.Bit5 Joy1fire1 LOW when Right mouse button pressed
 
   Row9.Bit4 Joy1fire2 LOW when Left mouse button pressed
 
   Row9.Bit4 Joy1fire2 LOW when Left mouse button pressed
Line 27: Line 31:
 
Note: The exact hardware timings are '''unknown''', the values "1/300s" in the above description assume that the AMX '''hardware''' timings were designed to match up with the 300Hz AMX '''software''' timings.
 
Note: The exact hardware timings are '''unknown''', the values "1/300s" in the above description assume that the AMX '''hardware''' timings were designed to match up with the 300Hz AMX '''software''' timings.
  
Note II: Looking at the photos, it seems that /joystick1 (keyb row 9 select) is wired to the multivibrator, so the mickey timings may be software controlled; accordingly, software would be required to deselect keyb row 9 between each read.
+
Note II: Looking at the photos, it seems that /joystick1 (keyb row 9 select) is wired to the multivibrator, so the mickey timings may be software controlled; accordingly, software would be required to deselect keyboard row 9 between each read.  
 +
 
 +
Confirmed: Software MUST deselect keyboard row 9 to read the mouse correctly.
 +
 
 +
For example, the loop here doesn't work:
 +
 
 +
[code]
 +
ld bc,&f40e    ;; PSG register 14 (keyboard)           
 +
out (c),c
 +
 
 +
ld bc,&f6c0
 +
out (c),c
 +
 
 +
ld bc,&f600
 +
out (c),c                 
 +
 
 +
ld bc,&f792    ;; PPI port A input
 +
out (c),c
 +
 
 +
update_loop:
 +
ld b,&f4                 
 +
in a,(c)                                 
 +
jp update_loop
 +
[/code]
 +
 
 +
whereas the following does work:
 +
 
 +
[code]
 +
ld bc,&f40e                ;; PSG register 14 (keyboard)
 +
out (c),c
 +
 
 +
ld bc,&f6c0
 +
out (c),c
 +
 
 +
ld bc,&f600
 +
out (c),c                 
 +
 
 +
ld bc,&f792              ;; PPI port A input
 +
out (c),c
 +
 
 +
update_loop:
 +
 
 +
ld bc,&f649
 +
out (c),c               
 +
 
 +
ld b,&f4               
 +
in a,(c)               
 +
 
 +
ld bc,&f640
 +
out (c),c             
 +
jp update_loop
 +
[/code]
 +
 
  
 
Contains the following ICs:
 
Contains the following ICs:

Revision as of 08:14, 23 August 2015

The original mouse with red buttons and a logo

A mouse by the British company Advanced Memory Systems.

The mouse was connected to the joystick port of the CPC.

An additional lead plugged between the 5V power connector coming from the monitor and the 5V-socket of the CPC.

There were three versions in all.

The tape software is : AMX Art.

Technical

The AMX Art software uses the CPC's 300Hz interrupt to read joystick port 0 (at least it tries to do that, while moving the mouse pointer, the software accidently disables IRQs, and so, misses some interrupts). This is giving it a relative low resolution of max 300 mickeys per second (or actually less, due to the missed IRQs).

The AMX Interface hardware basically converts the incoming mouse signals to joystick 0 signals, issuing LOW pulses on the corresponding direction lines. The interface doesn't report anything for joystick 1 when connected to the CPC's joystick port (which provides both joystick 0 and joystick 1 input).

In addition the AMX mouse doesn't appear to clash with the keyboard.

The protocol is thus very simple (unlike modern RS232 and PS/2 mice, the hardware doesn't contain any motion counters).

 Row9.Bit0 Joy1up    LOW for 1 mickey, when mouse moved up
 Row9.Bit1 Joy1down  LOW for 1 mickey, when mouse moved down
 Row9.Bit2 Joy1left  LOW for 1 mickey, when mouse moved left
 Row9.Bit3 Joy1right LOW for 1 mickey, when mouse moved right
 Row9.Bit5 Joy1fire1 LOW when Right mouse button pressed
 Row9.Bit4 Joy1fire2 LOW when Left mouse button pressed
 Row9.Bit6 Joy1fire3 LOW when Middle mouse button pressed

Note: The exact hardware timings are unknown, the values "1/300s" in the above description assume that the AMX hardware timings were designed to match up with the 300Hz AMX software timings.

Note II: Looking at the photos, it seems that /joystick1 (keyb row 9 select) is wired to the multivibrator, so the mickey timings may be software controlled; accordingly, software would be required to deselect keyboard row 9 between each read.

Confirmed: Software MUST deselect keyboard row 9 to read the mouse correctly.

For example, the loop here doesn't work:

[code] ld bc,&f40e  ;; PSG register 14 (keyboard) out (c),c

ld bc,&f6c0 out (c),c

ld bc,&f600 out (c),c

ld bc,&f792  ;; PPI port A input out (c),c

update_loop: ld b,&f4 in a,(c) jp update_loop [/code]

whereas the following does work:

[code] ld bc,&f40e  ;; PSG register 14 (keyboard) out (c),c

ld bc,&f6c0 out (c),c

ld bc,&f600 out (c),c

ld bc,&f792  ;; PPI port A input out (c),c

update_loop:

ld bc,&f649 out (c),c

ld b,&f4 in a,(c)

ld bc,&f640 out (c),c jp update_loop [/code]


Contains the following ICs:

  • 1x CD4047BE - Low Power Monostable/Astable Multivibrator
  • 2x MC14013B - Dual Type D Flip-Flops
  • 1x SN74LS244N - Octal Buffers And Line Drivers With 3-State Outputs

The mouse used on the Amstrad appears to be the same as the mouse used on the BBC. But this is not confirmed. The connection to the interface is essentially the same.

AMX Mouse Hardware Clones

Moreover, the Dk'tronics Mouse Interface seems to be AMX compatible, too. (Not confirmed if it is really compatible, but the circuit looks very similar.) (though dk'tronics seems to support only one button, not three buttons.) (Tested 24.9.14 by user Spookspring does not appear to work at all)

Other ways to connect a mouse to the CPC

See Peripherals

Covers

Covertape

Disc & Tape

Pictures

Software

Download

Manuals

Reviews

Links