Difference between revisions of "EnterMice"

From Enterprise Wiki
Jump to: navigation, search
m
Line 59: Line 59:
 
The interface board should be connected at the same time to 3 edge connectors on the back of your Enterprise: Control 1, Control 2 and Serial.
 
The interface board should be connected at the same time to 3 edge connectors on the back of your Enterprise: Control 1, Control 2 and Serial.
  
It can be plugged only on one way, but it may happen that the contact pins do not centered on edge connectors and contact between them is not stable.
+
It can be plugged only on one way, but it may happen that the contact pins do not rest centred on the fingers of the edge connectors. If so, contact between them can be unstable.
  
 
Then, the computer and/or the interface may not work properly.
 
Then, the computer and/or the interface may not work properly.
Line 65: Line 65:
 
Properly connected, the interface works right after turning on the power.
 
Properly connected, the interface works right after turning on the power.
  
After turning  on a self-test is performed, during which both LEDs flash 3 times (regardless of the state of dip-switch 3).
+
After turning  on a self-test is performed, during which both red and green LEDs will flash 3 times (regardless of the state of dip-switch 3).
  
 
==Features==
 
==Features==
The interface can operate in several modes. To configure it a five sectional dip-switch is used.
+
The interface can operate in several modes. To configure it a five sectional dip-switch is provided.
  
 
The configuration settings can be changed during operation of the interface. You do not have to restart your computer.
 
The configuration settings can be changed during operation of the interface. You do not have to restart your computer.
Line 86: Line 86:
 
|-
 
|-
 
!scope="col"|OFF||scope="col"|OFF
 
!scope="col"|OFF||scope="col"|OFF
|EnterMice joystick mode (instead of Joystick 1)
+
|EnterMice joystick mode (Movement made to the mouse is redirected to the input of Joystick 1, and that port is disabled)
 
|-
 
|-
 
!scope="col"|ON||scope="col"|OFF
 
!scope="col"|ON||scope="col"|OFF
|not used (exactly EnterMice as joystick on KB K column)
+
|not used (in fact EnterMice as joystick on KB K column)
 
|}
 
|}
 
Joystick 2 always works the same regardless of the interface operating mode selected.
 
Joystick 2 always works the same regardless of the interface operating mode selected.
Line 135: Line 135:
 
[[File:KbdIssue3.jpg|thumb|200px|Figure 3]]
 
[[File:KbdIssue3.jpg|thumb|200px|Figure 3]]
 
[[File:KbdFixer.jpg|thumb|200px|Keyboard fixer (visualisation)]]
 
[[File:KbdFixer.jpg|thumb|200px|Keyboard fixer (visualisation)]]
During creating the EnterMice, accidentally we discovered a fairly serious error in the design of the Enterprise.
+
During creating of the EnterMice, was accidentally discovered a fairly serious error in the design of the Enterprise.
  
Totally do not mind, if nothing is connected to the ports Control 1 and Control 2.
+
It stays totally unnoticed if nothing is connected to the ports Control 1 and Control 2. However, the EnterMice uses them.
  
However, that EnterMice uses them.
+
It's about interferences on KB0..KB9 ports from keyboard, that are also utilised by the control ports.
  
It's about interferences on KB0..KB9 ports from keyboard.
+
If only one key is pressed at the keyboard, then nothing wrong happens (first figure).
  
If at one time is pressed only one key, then there is nothing wrong with (first figure).
+
However, if you press two keys simultaneously in the same column, the signal from the selected line will be transferred also to the line of the second key (figure two).
  
However, if you press two keys simultaneously in the same column, the signal from the selected line will be transferred also to the line of second key (figure two).
+
The Enterprise lacks blocking return diodes to separate the rows of the keyboard !
 
 
In the Enterprise missing diodes to separating the rows of the keyboard !
 
  
 
Electrically nothing will happen (inside LS145 decoder has open collector outputs), but causes errors when reading from the external ports Control 1 and Control 2.
 
Electrically nothing will happen (inside LS145 decoder has open collector outputs), but causes errors when reading from the external ports Control 1 and Control 2.
  
In order to eliminate the cause should be add diodes to each row of keys the Enterprise, to press more than one key does not cause "collisions" (third figure).
+
In order to eliminate the cause diodes should be added to each row of keys on the Enterprise, to avoid that pressing more than one key does not cause "collisions" (third figure).
  
I prepared a draft of the PCB-fixing, but has not been tested.
+
Pear has prepared a draft of a PCB to fix it , but still it has not been tested. Meanwhile, in order to avoid errors, the keyboard should not be operated while joysticks or mouse are in use.
  
 
===Microsoft Optical Mouse===
 
===Microsoft Optical Mouse===
MS Optical Mouse, in opposite to other mouses, works with EnterMice, but in its case, you can not use hot-plug feature.
+
The PS/2 Microsoft Optical Mouse is a special case, it works with EnterMice if connected before power on, but in its case, you can not use the hot-plug feature.
  
After connecting the mouse to EnterMice during operation, you need momentarily short the RESET pin-header on the interface (it resets only interface, does not the computer).
+
Entermice can be forced to recognise the Microsoft mouse during operation, you only need to momentarily short the RESET pin-header on the interface (it resets only the interface, not the computer).
  
 
==Technical specification==
 
==Technical specification==

Revision as of 09:07, 26 November 2015

EnterMice

Joysticks & PS/2 Mouse Interface
for Enterprise 64 & 128 computer

Introduction

The interface is designed for the Enterprise 64/128 series computer.

It enables direct connection of two joysticks in Atari standard without additional adapters. In addition, you can use a PS/2 mouse.

EnterMice is based on solutions used in the BoxSoft interface, which came with a Neos mouse(MSX protocol).

In one of the EnterMice operating modes it is fully compatible with BoxSoft. Also another of the operating modes converts the mouse movement to joystick pulsations.

A little story about Enterprise and mice

Putting a mouse to control the Enterprise is not a new and eccentric idea of a freaky retro-computing group, it was already planned by the designers of the machine. The problem was that the project was subcontracted to a modest English company named Aztec Software Ltd., that produced a disappointing job. For two main reasons: the first, it was ugly, nothing near the rounded shape of the Enterprise, and the second, it was not a real proportional mouse, it emulated the joystick movement. Also at that time Enterprise Computing Ltd. was disappearing.

But the following years the user base in United Kingdom remained very active. Some little companies where founded by Enterprise enthusiasts. New products where offered, memory expansions, tailored cables, games, utilities, Spectrum emulator, IDE controller, Eprom, expansion motherboards, serial modems, etc.

The most prolific company was Boxsoft, founded by a developer named Tim Box. They offered most of the products listed here. Bundled with a paint program named Paintbox, they marketed an adapter plus a Neos mouse with a driver included. The Neos, internally a MSX mouse, had already been successfully adapted to other 8-bit computers like the Commodore 64.

At that time only a few of 8-bit computers had a working mouse with some form of GUI. It was very difficult to sell something new of unknown use and not integrated completely on the computer. Seen from today's perspective it is very clear the advantage of managing a computer with a mouse, more valuable just when it stops working...

Only about a hundred of the Paintbox bundles where sold...

The Paintbox program arrived to Hungary separately. Hungarians bought the Enterprise computers knowing that they came from U.K., but not much more... and when all the Enterprises where sold the user base was abandoned like in the country of origin. Again new companies surfaced offering new products. Then a company named "A studio" begun to market the Boxsoft catalogue of products but masking them as their own and made in Hungary. One of the programs was a Paintbox version without the mouse option. It still needed the driver, but a capped version. At the other side of the Iron Curtain nobody know ever about the Neos mouse.

Later on Hungary it was offered a serial card expansion for the Enterprise, thanks to the genius of a team of Hungarian developers, Gyula Mészáros for the hardware, and László Haluska (HSOFT) for the software. HSOFT took the capped "A studio" mouse driver and modified it to suit the serial interface with a Mouse Systems mouse, later they wrote the built-in driver of the EPDOS 2.x system.

This was old history, but in recent years with WWW, Internet and globalization, some of the old artefacts Boxsoft+Neos where found and all the pieces of the puzzle begun to fit.

A real proportional mouse fitted to an Enterprise could be possible at last, from the old promises on the adverts of Enterprise Computers Ltd.


The new Entermice interface that is presented here is based on the works of the Boxsoft team, but adapted to new times and added more new options. Is a miracle what Tim Box achieved with only a few logical gates and diodes. And over the hardware, the driver was very well written by D. Rabson, Andrew Fitter and Andrew Richards. With little modifications is the same driver that will be used with the Entermice adapter.

The principal problem interfacing the Enterprise is that connectors and signals are far from being a joystick-mouse standard. Little edge connectors that can be accidentally plugged upside down, commons pulled to +5v for the buttons when normally 0 volts is used, lack of protection of the return of the signal when two or more buttons are pressed, no way to send information or state to the controller, and probably some more issues.

What they did with cheap components now has been redesigned and improved with two programmable chips and other modern details. One of the chips, a Xilinx, is in charge of the pinout and signals conversion to the Atari standard of game connectors. The original Boxsoft only standardized the first controller port, that was used to connect the Neos mouse or a standard joystick, but not both at the same time. On the present project two joystick ports have been provided and they don't interfere with the mouse port.

The Neos/MSX mouse is not widely found today so, a PS/2 to MSX conversion adapter has been implemented. It is driven by a powerful 12 MHz Atmel AT89C4051, able to adapt itself to the frequency of the Z80 processor installed on the Enterprise. With this chip and the proper coding it has inside, the Entermice can work the same on a 4 MHz EP than on a supercharged 10 MHz one.

Also the mouse reading protocol has been expanded following Prodatron and NYYRIKKI's new extended MSX protocol so it can send information about an up to five buttons wheel mouse, if present. It will be soon completely compatible with SymbOS (Actually only in Boxsoft mode, see the features section about how to set this mode)

General description

EnterMice front
EnterMice back

Important

Do not connect the interface to the computer when the power is on !
If when you connect the interface your computer does not start up properly or behaves abnormally, it must be switched off immediately !

Check whether the interface is connected correctly and try again.

Mouse and joysticks can be connected and disconnected while the computer is power on, but this is not recommended. It is safer to perform any connection with the power disconnected.

Connecting to a computer

The interface board should be connected at the same time to 3 edge connectors on the back of your Enterprise: Control 1, Control 2 and Serial.

It can be plugged only on one way, but it may happen that the contact pins do not rest centred on the fingers of the edge connectors. If so, contact between them can be unstable.

Then, the computer and/or the interface may not work properly.

Properly connected, the interface works right after turning on the power.

After turning on a self-test is performed, during which both red and green LEDs will flash 3 times (regardless of the state of dip-switch 3).

Features

The interface can operate in several modes. To configure it a five sectional dip-switch is provided.

The configuration settings can be changed during operation of the interface. You do not have to restart your computer.

Below is the description of all possible settings.

DS1 DS2 Work mode
ON ON EnterMice native mouse mode
OFF ON BoxSoft compatible mouse mode
OFF OFF EnterMice joystick mode (Movement made to the mouse is redirected to the input of Joystick 1, and that port is disabled)
ON OFF not used (in fact EnterMice as joystick on KB K column)

Joystick 2 always works the same regardless of the interface operating mode selected.


DS3 LED status
OFF LED status disabled
ON LED status enabled


Joystick emulation mode configuration

DS4 Sensitivity
OFF Normal
ON High
DS5 Diagonal correction
OFF Disable
ON Enable

Diagonal correction improves the precision of joystick simulation diagonal movements, at the expense of a slight decrease in speed.

Troubleshooting

Keyboard issue

Figure 1
Figure 2
Figure 3
Keyboard fixer (visualisation)

During creating of the EnterMice, was accidentally discovered a fairly serious error in the design of the Enterprise.

It stays totally unnoticed if nothing is connected to the ports Control 1 and Control 2. However, the EnterMice uses them.

It's about interferences on KB0..KB9 ports from keyboard, that are also utilised by the control ports.

If only one key is pressed at the keyboard, then nothing wrong happens (first figure).

However, if you press two keys simultaneously in the same column, the signal from the selected line will be transferred also to the line of the second key (figure two).

The Enterprise lacks blocking return diodes to separate the rows of the keyboard !

Electrically nothing will happen (inside LS145 decoder has open collector outputs), but causes errors when reading from the external ports Control 1 and Control 2.

In order to eliminate the cause diodes should be added to each row of keys on the Enterprise, to avoid that pressing more than one key does not cause "collisions" (third figure).

Pear has prepared a draft of a PCB to fix it , but still it has not been tested. Meanwhile, in order to avoid errors, the keyboard should not be operated while joysticks or mouse are in use.

Microsoft Optical Mouse

The PS/2 Microsoft Optical Mouse is a special case, it works with EnterMice if connected before power on, but in its case, you can not use the hot-plug feature.

Entermice can be forced to recognise the Microsoft mouse during operation, you only need to momentarily short the RESET pin-header on the interface (it resets only the interface, not the computer).

Technical specification

Joystick port pinout

pin signal
1 Up
2 Down
3 Left
4 Right
5 Fire 3
6 Fire 1
7 +5 V
8 GND
9 Fire 2

Control Map

J column (bit 0) K column (bit 1) L column (bit 2)
JM=0* JM=1* JM=0 JM=1 JM=0 JM=1
Control 1 Row 0 Fire Joy 1 Fire 1 Mice Left Btn Mice Left Btn or Joy 1 Fire 2* Joy 1 Fire 2 Mice Right Btn or Joy 1 Fire 3*
Row 1 Up Joy 1 Up Mice D0 Mice D0 spare spare spare
Row 2 Down Joy 1 Down Mice D1 Mice D1 spare spare spare
Row 3 Left Joy 1 Left Mice D2 Mice D2 spare spare spare
Row 4 Right Joy 1 Right Mice D3 Mice D3 spare spare spare
Control 2 Row 5 Fire Joy 2 Fire 1 Joy 2 Fire 2 Joy 2 Fire 3
Row 6 Up Joy 2 Up spare spare spare spare
Row 7 Down Joy 2 Down spare spare spare spare
Row 8 Left Joy 2 Left spare spare spare spare
Row 9 Right Joy 2 Right spare spare spare spare
* Mouse buttons have higher priority
* JM=0 (DS1 ON)  native EnterMice mouse mode
  JM=1 (DS1 OFF) joystick emulation & BoxSoft compatible mode

Sega twister

Diagram
Prototype
EnterMice with adapter

for connect the Sega six-button pad

Sega Six Button Controller Hardware Info

Interface Protocol of SEGA MegaDrive's 6-Button-Controller

Sega pad pinout
pin Select = Low Select = High Select = pulse-3
1 Up Up Button Z
2 Down Down Button Y
3 GND Left Button X
4 GND Right not used
5 +5V
6 Button A Button B not used
7 Select
8 GND
9 Start Button C not used

Information for developers

EnterMice timings

The firmware of EnterMice is optimized for the cyclic reading with 50 Hz frequency (video IRQ).

Default reading cycle 20 ms
Waiting time to perform self-test the PS/2 mouse (timeout) ca. 2000 ms
Time of collecting the PS/2 mouse data max. 12 ms
Time from change state of RTS signal to issue data (nibble) for reading 25 μs
Standby time for the next reading (counting from data issue) 14 μs
Time from read the last nibble of data to reset the nibble counter (timeout)* 1500 μs
Default mouse polling time in joystick emulation mode 30 ms
Mouse polling time in joystick emulation mode when mouse doesn't move (minimize polling delay) 12,5 ms
* After this time is performed another mouse data polling.

Data buffer

Data buffer in EnterMice has a size of 16 bytes.

Currently is used only half. The remainder may be used in the future.

Byte High nibble Low nibble Content
Bit 7 6 5 4 3 2 1 0
0 X value signed int (positive is moved left) BoxSoft protocol
1 Y value signed int (positive is moved up)
2 0 0 0 1 0 Btn5 Btn4 Btn3 Protocol identyfication & buttons 3,4,5 state Extended MSX protocol
3 Z value signed int (positive is wheel moved up)
4 ExCnt Mouse ID Extra bytes available to read (include this) & PS/2 mouse ID EnterMice extension protocol
5 Hw ver. mj. Hw ver. mn. Hardware version (major.minor)
6 Fw ver. mj. Fw ver. mn. Firmware version (major.minor)
7 Device ID EnterMice ID is 5Dh

You do not need to read all the data from the buffer.

Reading can be interrupted at any time. There will be the timeout and interface performs another read data from mice, then once again be ready to send data.

Last state of RTS signal also not matter. EnterMice reacts to the change state, not on the signal level.

Mouse reading

; Here begin the Neos mouse reading
ld hl,X_REL ; first byte
ld a,2 ; RTS low
out (0B7h),a
ld b,8 ; long delay
call WAIT
call READ_4BIT ; read four higher bits
rld ; push them in (HL)
xor a ; RTS high
out (0B7h),a
ld b,5 ; short delay
call WAIT
call READ_4BIT ; read four lower bits
rld ; push them in (HL)
ld hl,Y_REL ; second byte
ld a,2 ; RTS low
out (0B7h),a
ld b,5 ; short delay
call WAIT
call READ_4BIT ; read four higher bits
rld ; push them in (HL)
xor a ; RTS high
out (0B7h),a
ld b,5 ; short delay
call WAIT
call READ_4BIT ; read four lower bits
rld ; push them in (HL)
;<======Here will be added the future Wheel and three spare buttons reading. SECOND TENTATIVE
ld hl,SW_Z_STATUS
ld a,2 ; RTS low
out (0B7h),a
ld b,5 ; short delay
call WAIT
call READ_4BIT ; read four higher bits
and 15
cp 1 ; IF THIS NIBBLE=0001 THEN THE MOUSE IS IN EXTENDED PROTOCOL
jr z,CONTINUE_READ
xor a ; RTS high
out (0B7h),a ;IGNORE THAT NIBBLE
ld (hl),0 ; we don't need old values
jr STOP_READ
CONTINUE_READ:
xor a ; RTS high
out (0B7h),a
ld b,5 ; short delay
call WAIT
call READ_4BIT ; read four higher bits, the three lower bits are the buttons. They come ready to store
push af ; push them in stack. they are in the lower nibble.
ld a,(hl) ;
push af ;save the Z counter for later.
ld a,2 ; RTS low
out (0B7h),a
ld b,5 ; short delay
call WAIT
call READ_4BIT ; read four bits
rld ;we need z displacement in 8 bit
xor a ; RTS high
out (0B7h),a
ld b,5 ; short delay
call WAIT
call READ_4BIT ; read four lower bits. Z displacement
rld ; push them in (HL) ;NOW WE HAVE Z displacement in (hl)
pop af ; restored Z counter to "a", but we have garbage on high nibble
and 00Fh
bit 3,a
jr z,SIGN_DONE
or 0F0h
SIGN_DONE: ; now we have the sign extended to 8 bits on "a"
add a,(hl)
cp 128 ; positive or negative?
jr c,POSITIVE
cp 248 ; lower than -8?
jr nc,FINISHED ;
ld a,248 ; -8 is the bottom
jr FINISHED
POSITIVE:
cp 8 ; higher than 7?
jr c,FINISHED
ld a,7 ; 7 is the top
FINISHED: ; the excess of 7 or -8 has been wiped
ld c,a ; save Z addition on c
pop af ; retrieve the buttons status. They are now on first nibble of a
rld ; buttons stored
ld a,c ; we only need the first nibble of Z counter addition
rld ; the spare buttons status and the Z counter are now in SW_Z_STATUS
STOP_READ:
xor a ; recall buttons on row 0
out (0B5h),a
in a,(0B6h) ; read Mouse buttons
and 7 ; mask
xor 7 ; flip them all as on Enterprise a pressed key is 1 and released 0
rl (hl) ; Get ready the bit 7 of "hl" register pair. Inside is SW_Z_STATUS, variable number 190
srl a ; This is the very FIRST "srl a". The button status is now in the carry flag
; secondary button of Boxsoft is read on J column. Primary button of Entermice is read on K column
push af
ld a,(INPUT_DEVICE)
cp 3 ; Boxsoft interface mode buttons
jr nz,L_BUTTON
pop af ; We need the value of "a" and "f" registers. Carry flag still stores the value of secondary button
rr (hl) ; secondary button goes to bit 7 of SW_Z_STATUS, variable number 190
srl a ; Primary button of Boxsoft is on J column. This is the second "srl a"
JR MAIN_BUTTON
L_BUTTON: ; Entermice interface mode buttons
pop af ; retrieve the value of register "a". "f" is disposable, soon we will load the button on carry flag
push af ; I still will need later the register "a" value
srl a ; two "srl a" because the secondary button of Entermice is read on L column
srl a ; the proper button status is now in the carry flag
rr (hl) ; secondary button goes to bit 7 of SW_Z_STATUS, variable number 190
pop af ; retrieve the value of register "a" just after the FIRST "srl a"
MAIN_BUTTON:
and 1
ld (FIRE_STATUS),a ; EXOS Variable 188. K column if Boxsoft or L column if Entermice
call sub_C3A6 ; this is the "corrections and drawing" routine where the "velocity" 1.1 modification was made
ld a,(X_REL)
ld c,a
ld a,(Y_REL)
or c
ret
WAIT:
nop
nop
nop
dec b
jr nz,WAIT
ret
READ_4BIT: ; I split the routine in two to not put more processor time
ld b,4
ld d,0
ld a,(INPUT_DEVICE)
cp 3
jr z,L_COLUMN
K_COLUMN:
ld a,b
;inc c ; this is not necessary
out (0B5h),a
in a,(0B6h)
;ld c,a ; this is not necessary
rra ; data read from K column
rra
rl d
djnz K_COLUMN
jr CONTINUE
L_COLUMN:
ld a,b
;inc c ; this is not necessary
out (0B5h),a
in a,(0B6h)
;ld c,a ; this is not necessary
rra ; data read from L column
rl d
djnz L_COLUMN
CONTINUE:
ld a,d
ret