Trionoids - Columns Clone for the Falcon - RELEASED!

All about games on the Falcon, TT & clones

Moderators: Mug UK, [ProToS], lp, moondog/.tSCc., Moderator Team

User avatar
christos
Fuji Shaped Bastard
Fuji Shaped Bastard
Posts: 2479
Joined: Tue Apr 13, 2004 8:24 pm
Location: Greece

Re: Trionoids - Columns Clone for the Falcon - RELEASED!

Post by christos »

I just had the chance to test Trionoids. For the good parts, I really liked the graphics and the motion. On the bad part I'd say I'd prefer a different control scheme. So think about it for the next game. Jagpad support would also be nice.
In short, I really liked it even though the control scheme needs a bit getting used to.
User avatar
LaceySnr
Captain Atari
Captain Atari
Posts: 184
Joined: Wed Jun 26, 2013 5:00 am
Contact:

Re: Trionoids - Columns Clone for the Falcon - RELEASED!

Post by LaceySnr »

christos wrote:I just had the chance to test Trionoids. For the good parts, I really liked the graphics and the motion. On the bad part I'd say I'd prefer a different control scheme. So think about it for the next game. Jagpad support would also be nice.
In short, I really liked it even though the control scheme needs a bit getting used to.
Thanks Christos! I did want to add Jagpad support but just never got around to it, maybe I'll dig my jag pads out and do an update soon. The fire button would likely feel more 'natural' for rotating the colours through, but I wanted you to be able to rotate up and down so went with the stick movements.
EstTeeEfEm
Captain Atari
Captain Atari
Posts: 299
Joined: Mon May 04, 2015 9:02 pm

Re: Trionoids - Columns Clone for the Falcon - RELEASED!

Post by EstTeeEfEm »

I've some code for the Jagpads, word of warning though... its not at all reliable on any emu i've tested, its either one button or screws with the keyboard or some other brand of wickedness... bear with ;)
EstTeeEfEm
Captain Atari
Captain Atari
Posts: 299
Joined: Mon May 04, 2015 9:02 pm

Re: Trionoids - Columns Clone for the Falcon - RELEASED!

Post by EstTeeEfEm »

And here is the famed Jag Code.. straight out of Frogger... I've included the actual bit representations too for your convenience... sorry for the lack of comments tho :P

Code: Select all

;******************************************************************************
;
;	Jaguar PowerPad Code
;
;******************************************************************************


	even
jagpad_A
	;break
;group4 clearance
	move.b	#0,jagpad_a_up
	move.b	#0,jagpad_a_down
	move.b	#0,jagpad_a_left
	move.b	#0,jagpad_a_right
	move.b	#0,jagpad_a_fire_a


	bsr	jagpad_A_group_4


	rts




*******************************************************************************
jagpad_A_group_4
;Group 4 Selections
	move.w	#$FFFE,$ffff9202		;Select group 4 of Joypad A
	move.w	$FFFF9200,d0
	move.w	$FFFF9202,d1
	;cmp.l	#-1,player_moving
	;bgt	no_pad_movement

;test_padA_controls
	btst	#8,d1			;Test bit #8 for a ZERO
	bne	.no_pad_up		;No, the UP NOT being pressed 1=off 0=on
	move.b	#1,jagpad_a_up
.no_pad_up
	btst	#9,d1			;Test bit #9 for a ZERO
	bne	.no_pad_down		;No, the DOWN NOT being pressed 1=off 0=on
	move.b	#1,jagpad_a_down
.no_pad_down
	btst	#10,d1			;Test bit #10 for a ZERO
	bne	.no_pad_left		;No, the LEFT NOT being pressed 1=off 0=on
	move.b	#1,jagpad_a_left
.no_pad_left
	btst	#11,d1			;Test bit #11 for a ZERO
	bne	.no_pad_right		;No, the RIGHT NOT being pressed 1=off 0=on
	move.b	#1,jagpad_a_right
.no_pad_right


;9200 Test, FIRE and PAUSE

	btst	#1,d0			;Test bit #1 in FF9000 for FIRE (A) Pad A
	bne	.no_fire_a
	move.b	#1,jagpad_a_fire_a
.no_fire_a

no_pad_movement
	rts

;******************************************************************************
;Steps to programming Atari Jaguar Controller - ALL Buttons

;Write to address $FF9202 - Set the type of control line (Or Group) you wish to test

;READ from address $FFFF9200 and $ff9202 
;	0xFFFE	Selects group 4, joypad A - PAUSE  - FIRE_A - UP - DOWN - LEFT - RIGHT
;	0xFFFD	Selects group 3, joypad A -          FIRE_B - * - 7 - 4 - 1
;	0xFFFB	Selects group 2, joypad A -          FIRE_C - 0 - 8 - 5 - 2
;	0xFFF7	Selects group 1, joypad A -          OPTION - # - 9 - 6 - 3 

;group4




jag_bitmask_a	ds.l	1
jag_bitmask_b	ds.l	1
	even
jagpad_a_up		ds.b	1
jagpad_a_down		ds.b	1
jagpad_a_left		ds.b	1
jagpad_a_right		ds.b	1
jagpad_a_fire_a		ds.b	1
	even


;*****************************************************************************
;	Group 4		Group 3		Group 2 	Group 1
;	=======		=======		=======		=======
;
;0xFF9200
;========
;
;Bit 0	A PAUSE		  N/A		  N/A		  N/A
;
;Bit 1	A FIRE A	A FIRE B	A FIRE C	A OPTION
;
;Bit 2	B PAUSE		  N/A		  N/A		  N/A
;
;Bit 3	B FIRE A	B FIRE B	B FIRE C	B OPTION
;
;
;0xFF9202
;========
;
;Bit 8	A UP		  A *		  A 0		  A #
;
;Bit 9	A DOWN		  A 7		  A 8		  A 9
;
;Bit 10	A LEFT		  A 4		  A 5		  A 6
;
;Bit 11	A RIGHT		  A 1		  A 2		  A 3
;
;Bit 12	B UP		  B *		  B 0		  B #
;
;Bit 13	B DOWN		  B 7		  B 8		  B 9
;
;Bit 14	B LEFT		  B 4		  B 5		  B 6
;
;Bit 15	B RIGHT		  B 1		  B 2		  B 3
EstTeeEfEm
Captain Atari
Captain Atari
Posts: 299
Joined: Mon May 04, 2015 9:02 pm

Re: Trionoids - Columns Clone for the Falcon - RELEASED!

Post by EstTeeEfEm »

And some rather nifty TEXT displaying TEST program written by XiA ;)

Im sure he wont mind me spreading this, but whether he owns upto it or not is another matter :P

Code: Select all

NUMBER_OF_VBLS_BETWEEN_UPDATES equ 5

JAGPAD_SELECT_GROUP_1 equ $fff7
JAGPAD_SELECT_GROUP_2 equ $fffb
JAGPAD_SELECT_GROUP_3 equ $fffd
JAGPAD_SELECT_GROUP_4 equ $fffe

; $ffff9200
JAGPAD_BIT_A_PAUSE  equ 0
JAGPAD_BIT_A_FIRE_A equ 1
JAGPAD_BIT_A_FIRE_B equ 1
JAGPAD_BIT_A_FIRE_C equ 1
JAGPAD_BIT_A_OPTION equ 1

; $ffff9202
JAGPAD_BIT_A_UP       equ 0
JAGPAD_BIT_A_ASTERISK equ 0
JAGPAD_BIT_A_0        equ 0
JAGPAD_BIT_A_HASH     equ 0
JAGPAD_BIT_A_DOWN     equ 1
JAGPAD_BIT_A_7        equ 1
JAGPAD_BIT_A_8        equ 1
JAGPAD_BIT_A_9        equ 1
JAGPAD_BIT_A_LEFT     equ 2
JAGPAD_BIT_A_4        equ 2
JAGPAD_BIT_A_5        equ 2
JAGPAD_BIT_A_6        equ 2
JAGPAD_BIT_A_RIGHT    equ 3
JAGPAD_BIT_A_1        equ 3
JAGPAD_BIT_A_2        equ 3
JAGPAD_BIT_A_3        equ 3


start:
  pea code
  move.w #$26,-(sp)
  trap #14
  addq.l #6,sp

code:
  lea str_clear_screen,a6
  bsr print_string
  lea output,a0
  ; group 1
  move.w #JAGPAD_SELECT_GROUP_1,$ffff9202
  move.w $ffff9200,(a0)+
  move.w $ffff9202,(a0)+
  ; group 2
  move.w #JAGPAD_SELECT_GROUP_2,$ffff9202
  move.w $ffff9200,(a0)+
  move.w $ffff9202,(a0)+
  ; group 3
  move.w #JAGPAD_SELECT_GROUP_3,$ffff9202
  move.w $ffff9200,(a0)+
  move.w $ffff9202,(a0)+
  ; group 4
  move.w #JAGPAD_SELECT_GROUP_4,$ffff9202
  move.w $ffff9200,(a0)+
  move.w $ffff9202,(a0)+


  ; output texts
  lea output,a0
  ; -- GROUP 1

  ; option
  btst.b #JAGPAD_BIT_A_OPTION,(a0)
  bne .nooption
  lea str_option,a6
  bsr print_string
.nooption:

  add.w #2,a0

  ; hash
  btst.b #JAGPAD_BIT_A_HASH,(a0)
  bne .nohash
  lea str_hash,a6
  bsr print_string
.nohash:

  ; 9
  btst.b #JAGPAD_BIT_A_9,(a0)
  bne .no9
  lea str_9,a6
  bsr print_string
.no9:

  ; 6
  btst.b #JAGPAD_BIT_A_6,(a0)
  bne .no6
  lea str_6,a6
  bsr print_string
.no6:

  ; 3
  btst.b #JAGPAD_BIT_A_3,(a0)
  bne .no3
  lea str_3,a6
  bsr print_string
.no3:

  add.w #2,a0

  ; -- GROUP 2

  ; fire c
  btst.b #JAGPAD_BIT_A_FIRE_C,(a0)
  bne .nofire_c
  lea str_fire_c,a6
  bsr print_string
.nofire_c:

  add.w #2,a0

  ; 0
  btst.b #JAGPAD_BIT_A_0,(a0)
  bne .no0
  lea str_0,a6
  bsr print_string
.no0:

  ; 8
  btst.b #JAGPAD_BIT_A_8,(a0)
  bne .no8
  lea str_8,a6
  bsr print_string
.no8:

  ; 5
  btst.b #JAGPAD_BIT_A_5,(a0)
  bne .no5
  lea str_5,a6
  bsr print_string
.no5:

  ; 2
  btst.b #JAGPAD_BIT_A_2,(a0)
  bne .no2
  lea str_2,a6
  bsr print_string
.no2:

  add.w #2,a0

  ; -- GROUP 3

  ; fire b
  btst.b #JAGPAD_BIT_A_FIRE_B,(a0)
  bne .nofire_b
  lea str_fire_b,a6
  bsr print_string
.nofire_b:

  add.w #2,a0

  ; *
  btst.b #JAGPAD_BIT_A_ASTERISK,(a0)
  bne .noasterisk
  lea str_asterisk,a6
  bsr print_string
.noasterisk:

  ; 7
  btst.b #JAGPAD_BIT_A_7,(a0)
  bne .no7
  lea str_7,a6
  bsr print_string
.no7:

  ; 4
  btst.b #JAGPAD_BIT_A_4,(a0)
  bne .no4
  lea str_4,a6
  bsr print_string
.no4:

  ; 1
  btst.b #JAGPAD_BIT_A_1,(a0)
  bne .no1
  lea str_1,a6
  bsr print_string
.no1:

  add.w #2,a0

  ; -- GROUP 4

  ; fire a
  btst.b #JAGPAD_BIT_A_FIRE_A,(a0)
  bne .nofire_a
  lea str_fire_a,a6
  bsr print_string
.nofire_a:

  add.w #2,a0

  ; up
  btst.b #JAGPAD_BIT_A_UP,(a0)
  bne .noup
  lea str_up,a6
  bsr print_string
.noup:

  ; down
  btst.b #JAGPAD_BIT_A_DOWN,(a0)
  bne .nodown
  lea str_down,a6
  bsr print_string
.nodown:

  ; left
  btst.b #JAGPAD_BIT_A_LEFT,(a0)
  bne .noleft
  lea str_left,a6
  bsr print_string
.noleft:

  ; right
  btst.b #JAGPAD_BIT_A_RIGHT,(a0)
  bne .noright
  lea str_right,a6
  bsr print_string
.noright:  

  move.l #NUMBER_OF_VBLS_BETWEEN_UPDATES-1,d7
.wait:
    move.w #$25,-(sp)
    trap #14
    add.l #2,sp
  dbra d7,.wait
  bra code

  lea output,a0
  clr.b $ffffc123


print_string:
; In: a6: pointer to null-terminated string
  movem.l d0-d7/a0-a6,-(sp)
  move.l a6,-(sp)
  move.w #9,-(sp)
  trap #1
  add.l #6,sp
  movem.l (sp)+,d0-d7/a0-a6
  rts



bye:
  bra bye

str_clear_screen:
  dc.b 27,"E",0
  even

str_pause:  dc.b "pause",13,10,0
  even
str_fire_a:  dc.b "fire A",13,10,0
  even
str_fire_b:  dc.b "fire B",13,10,0
  even
str_fire_c:  dc.b "fire C",13,10,0
  even
str_option:  dc.b "option",13,10,0
  even

str_up:     dc.b "up",13,10,0
  even
str_asterisk:     dc.b "asterisk",13,10,0
  even
str_0:     dc.b "0",13,10,0
  even
str_hash:     dc.b "hash",13,10,0
  even
str_down:     dc.b "down",13,10,0
  even
str_7:     dc.b "7",13,10,0
  even
str_8:     dc.b "8",13,10,0
  even
str_9:     dc.b "9",13,10,0
  even
str_left:     dc.b "left",13,10,0
  even
str_4:     dc.b "4",13,10,0
  even
str_5:     dc.b "5",13,10,0
  even
str_6:     dc.b "6",13,10,0
  even
str_right:     dc.b "right",13,10,0
  even
str_1:     dc.b "1",13,10,0
  even
str_2:     dc.b "2",13,10,0
  even
str_3:     dc.b "3",13,10,0
  even
  

output:
  ds.w 8
User avatar
LaceySnr
Captain Atari
Captain Atari
Posts: 184
Joined: Wed Jun 26, 2013 5:00 am
Contact:

Re: Trionoids - Columns Clone for the Falcon - RELEASED!

Post by LaceySnr »

Nice one, I'll have a play sometime. What's this line for?

move.w #$FFFE,$ffff9202 ;Select group 4 of Joypad A

Seems a little odd to write some values there before reading, what's in those lower bits?
EstTeeEfEm
Captain Atari
Captain Atari
Posts: 299
Joined: Mon May 04, 2015 9:02 pm

Re: Trionoids - Columns Clone for the Falcon - RELEASED!

Post by EstTeeEfEm »

In multiplexing, you need to select one of the four groups first, before reading them because the same bits represent different values, this is what screws the emulators ;)
1) Write a value to address 0xFF9202. This sets the
control lines on the multiplexers.

2) Read the values at 0xFF9200 and/or 0xFF9202. These
will have certain bits cleared (set to LOW) to
indicate which switches in a group are being pressed.


The value that you write in step one is made up as follows: it is a
long, whose lower four bits represent the control inputs of joypad A,
and whose next four bits (5-7) represent the control inputs of joypad
B. For example:-

0xFFFE Selects group 4, joypad A for reading
0xFFFD Selects group 3, joypad A
0xFFFB Selects group 2, joypad A
0xFFF7 Selects group 1, joypad A

0xFFEF Selects group 4, joypad B for reading
0xFFDF Selects group 3, joypad B
0xFFBF Selects group 2, joypad B
0XFF7F Selects group 1, joypad B


Once you have written the requisite mask to 0xFF9202, you can read
back the state of the joypad(s) from 0xFF9200 and 0xFF9202. Since the
joypad works on NEGATIVE LOGIC, a bit is CLEARED whenever a button is
pressed. In the table below, the first letter indicates the port that
is being read, so A FIRE B represents fire button B on the joypad
attached to port A. The exact bit that is cleared determines which
button has been pressed as follows:-

Okay, so having probably confused everyone now, here's the summary. To
read a joypad, simply write a value to 0xFF9202 with bit 0, 1, 2 or 3
low (and/or 4, 5, 6 or 7 for port B) depending on which group you want
to read. Next read from 0xFF9200 and/or 0xFF9202 to obtain a bitmask
giving the buttons in that group that were pressed, as in the table
above. Clear as Guinness or what!!?!?
This is taken from the following guide which is ESSENTIAL to better understanding the Jagpads...

http://www.gamesx.com/controldata/ejp_faq.htm

The guide URL abpve is really the only way its explained in great detail.. please read it ;)

I hope i've been a little bit helpful lol, its a real nightmare, BUT, once you've written some jagpad code, mine above in the previous thread will make a LOT more sense lol
Post Reply

Return to “Games”