;*****  Gameport-Device-Demo: Joystick  6/87  S.D.  *****

ExecBase = 4
FindTask = -294
AddPort  = -354
RemPort  = -360
OpenLib  = -408
CloseLib = -414
OpenDev  = -444
CloseDev = -450
DoIo     = -456
SendIo   = -462

run:
     move.l execbase,a6       ;Pointer to EXEC library
     sub.l  a1,a1             ;Your own task
     jsr    FindTask(a6)      ;Search task
     move.l d0,readreply+$10  ;Set SigTask

     lea    readreply,a1
     jsr    AddPort(a6)       ;Add Reply-Port

     lea    devio,a1
     move.l #1,d0             ;Unit 1: Right port
     clr.l  d1
     lea    devicename,a0
     jsr    OpenDev(a6)       ;Open Gameport-Device
     tst.l  d0
     bne    error

;*** Set Port type ***

     move   #11,28(a1)        ;Command: SETCTYPE
     move.l #Event,40(a1)     ;Buffer
     move.l #1,36(a1)         ;Length
     move.b #3,NextEvent      ;ABSJOYSTICK
     lea    devio,a1
     move.l #readreply,14(a1) ;Set Reply Port
     move.l execbase,a6
     jsr    DoIo(a6)          ;Read joystick

;*** Define solution ***

     move   #13,28(a1)        ;Command: SETTRIGGER
     move.l #trigger,40(a1)   ;Buffer
     move.l #8,36(a1)         ;length

     move   #3,Keys           ;DOWN & UP
     move   #0,Timeout        ;Timeout
     move   #1,XDelta         ;XDelta
     move   #1,YDelta         ;YDelta

     lea    devio,a1
     move.l #readreply,14(a1) ;set Reply-Port
     move.l execbase,a6
     jsr    DoIo(a6)          ;Set code

;*** Start task ***

     move   #9,28(a1)         ;Command: READEVENT
     move.l #Event,40(a1)     ;Puffer
     move.l #22,36(a1)        ;Length of one event
     clr.b  30(a1)            ;Flags

     lea    devio,a1
     move.l #readreply,14(a1) ;set Reply-Port
     move.l execbase,a6
     jsr    DoIo(a6)          ;Wait for an event

;*** Return port control ***

     move   #11,28(a1)        ;Command: SETCTYPE
     move.l #Event,40(a1)     ;Buffer
     move.l #1,36(a1)         ;Length
     move.b #0,NextEvent      ;NOCONTROLLER
     lea    devio,a1
     move.l #readreply,14(a1) ;set Reply-Port
     move.l execbase,a6
     jsr    DoIo(a6)          ;Read joystick

ende:
     lea    readreply,a1
     jsr    RemPort(a6)       ;Remove port

     lea    devio,a1
     jsr    closedev(a6)      ;Close device

error:
     rts                      ;* End *


devicename: dc.b 'gameport.device',0
 align                        ;some assemblers use even
devio:
message:   blk.b 20,0
io:        blk.b 12,0
ioreq:     blk.b 16,0

readreply: blk.l 8,0

Event:
NextEvent: dc.l 0
Class:     dc.b 0
SubClass:  dc.b 0
acode:     dc.w 0
Qualifier: dc.w 0
ie_X:      dc.w 0
ie_Y:      dc.w 0
TimeStamp: dc.l 0,0

Trigger:
Keys:      dc.w 0
Timeout:   dc.w 0
XDelta:    dc.w 0
YDelta:    dc.w 0
 end
