Changes

MultiPlay

2,671 bytes added, 10 April
/* Links */
The MultiPlay allows to add two controllers on the expansion port.
It is easy to use them from BASIC, with the [[Locomotive_BASIC#INP_.28.E2.80.B9port_number.E2.80.BA.29|INP()]] command.
 
[[File:MultiPlay.jpg]]
Each controller port can be set with two inputs modes:
</pre>
== Manual ==About usages:
* Any manual exists?- Reading from BASIC with 50Hz interrupt is fine to handle a fast char pointer with acceleration.
- Reading from ASM with 300Hz interrupt is fine to handle a fast pixel pointer with acceleration.
 
== I/O ports ==
 
Port &F990 = Port A Actions bits
 
Port &F991 = Port B Actions bits
 
Port &F992 = Port A Mouse POS-X value
 
Port &F993 = Port A Mouse POS-Y value
 
Port &F994 = Port B Mouse POS-X value
 
Port &F995 = Port B Mouse POS-Y value
 
Ports &F996 and &F997 are unused
 
=== Action bits ===
 
bit0: Up
 
bit1: Down
 
bit2: Left
 
bit3: Right
 
bit4: 1st fire or LMB
 
bit5: 2nd fire or RMB
 
bit6: 3rd fire or MMB
 
bit7: 0
 
=== Mouse position bits ===
 
bit0-2: value
 
bit3-7: sign (all 0 or 1)
 
 
Buttons 1, 2, 3 are the same for joystick and mouse input A/B.
 
Mouse register X/Y return the offset since the last read. These are 4 bit value with sign extension. The 4 values are sign extended to 8 bit, so negative value will have bit7-4 at one. In fact bit 7-4 = bit 3.
 
Note also that the X/Y value will saturate if not read for a long time (or if the movement is fast). It will never overflow or wrap.
 
From a software point of view, just read the port and add its value to your position variable.
 
== Text Cursor ==
 
<pre>
10 MODE 2:BORDER 0
20 s=1:'sensitivity can also be fractional
30 w=80:h=25
40 x=w*0.5:y=h*0.5
50 LOCATE x,y:PRINT"*":
60 xp=x:yp=y
70 xo=INP(&F994):yo=INP(&F995):a=INP(&F991)
80 IF xo>7 THEN xo=xo-255
90 IF yo>7 THEN yo=yo-255
100 x=x+xo*s
110 y=y+yo*s
120 LOCATE 1,1:IF a AND 16 THEN PRINT"LEFT " ELSE IF a AND 32 THEN PRINT"RIGHT " ELSE IF a AND 64 THEN PRINT"MIDDLE" ELSE PRINT" "
130 IF x<1 THEN x=1
140 IF x>w THEN x=w
150 IF y<1 THEN y=1
160 IF y>h THEN y=h
170 IF x<>xp OR y<>yp THEN FRAME:LOCATE xp,yp:PRINT" ";:LOCATE x,y:PRINT"*";
180 GOTO 60
</pre>
 
== Graphics Cursor ==
 
<pre>
10 MODE 2:BORDER 0
20 s=8:'sensitivity can also be fractional
30 w=640:h=400
40 x=w*0.5:y=h*0.5
50 TAG:MOVE x,h-y:PRINT"^";
60 xp=x:yp=y
70 xo=INP(&F994):yo=INP(&F995):a=INP(&F991)
80 IF xo>7 THEN xo=xo-255
90 IF yo>7 THEN yo=yo-255
100 x=x+xo*s
110 y=y+yo*s
120 TAGOFF:LOCATE 1,1:IF a AND 16 THEN PRINT"LEFT " ELSE IF a AND 32 THEN PRINT"RIGHT " ELSE IF a AND 64 THEN PRINT"MIDDLE" ELSE PRINT" "
130 IF x<1 THEN x=1
140 IF x>w THEN x=w
150 IF y<1 THEN y=1
160 IF y>h THEN y=h
170 IF x<>xp OR y<>yp THEN FRAME:TAG:MOVE xp,h-yp:PRINT" ";:MOVE x,h-y:PRINT"^";
180 GOTO 60
</pre>
== Downloads Links ==
* Any MultiPlay example or driver software exists[https://www.cpc-power.com/index.php?page=database&lemot=MultiPlay&r1=0&r2=1&r3=0&r4=1 All games using MultiPlay on CPC-Power]*[https://framagit.org/offset/multiplay-acepansion MultiPlay ACEpansion] on Framagit*[https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/multiplay-mx4-expansion MultiPlay topic on CPCWiki forum]
[[Category:Peripherals]] [[Category:Input Device]]
13,173
edits