jchase1970
Members-
Posts
356 -
Joined
-
Last visited
Content Type
Profiles
Forums
Blogs
Gallery
Events
Store
Community Map
Everything posted by jchase1970
-
Merry Christmas friends, I have had a terrible year and have had this all but done for months. I have forced myself to finish tonight to give everyone here a little Christmas gift. I hope you enjoy and I hope its debugged!!!!! RUN QP/F in extended basic QP.zip Thanks, John
-
"Meteor Belt" hardware troubleshooting
jchase1970 replied to OLD CS1's topic in TI-99/4A Development
http://www.amazon.com/American-Microsemiconductor-MCM2114P20/dp/B001HFB43O AMAZON has them list $6.25. might be a bit high??? -
Back on the topic of speeding up XB. The first version of XB(100) updated all 28 sprites rather they where used or not, the later revised XB(110) corrected this by only updating to the highest sprite number you assigned. use CALL VERSION(A):: PRINT A to find out what version you have. it is a noticeable difference. So always use the lowest sprite numbers you can. Neat trick you can check the highest sprite number used with this peek -31878 in version XB(100) it always returns 28 Random numbers for a random number 0 to 99 RANDOMIZE :: CALL PEEK(-31880,A) is twice as fast as INT(RND*100) For a random number 0 to 255 RANDOMIZE :: CALL PEEK(-31808,A,B) again about twice as fast and generates 2 different random numbers About action game programming, Everything should be timer based in the main loop. There are 2 ways to go about this 1) create a variable called tick and increase it on every cycle though the main loop 2) use the VDP interrupt timer which updates every 60/sec, access with peek -31879 Problem with #2 is it takes about 7 secs to reset the integer, range is (0-255) A 7second timer is long in a game, but this method has its uses. A loop example for #1 10 TIMER1SET=50 20 TIMER2SET=100 30 TIMER3SET=150 REM GAME LOOP 40 TICK=TICK+1 50 IF TICK-TIMER1>TIMER1SET THEN PRINT "TIMER 1":: TIMER1=TICK 60 IF TICK-TIMER2>TIMER2SET THEN PRINT " TIMER 2":: TIMER2=TICK 70 IF TICK-TIMER3>TIMER3SET THEN PRINT " TIMER 3":: TIMER3=TICK 80 GOTO 40 You can check somethings every main loop cycle like sprite collisions for accuracy, somethings dont need to be checked every cycle like animation frames so you do these on a timer. Figure out what you need to do every cycle or not, You dont need to check input from the player every cycle. The main point is to have sprite collision checked as often as possible. The more often you check the faster they can move.
-
It's not just A-F it's a hex value 0-F, so the 16 character string is really a 8 byte data storage. 01,23,45,67,89,AB,CD,EF. So depending on your usage in the game, if variables are never higher the 255, I would store them has hex values, 8 per CHAR string. And depending on the decimal precision you can have hundredth value in hex from to. so per 2 FF sets you can have decimal values from 0 to 255.99. I think this is most efficient way. but if you have values out side of that range you can use 2 bytes, FFFF, sets which is 32767 and get a range to 32767.9999 The hard part is XB has no HEX conversion built in. But I found these DEF somewhere a long time ago, they convert 1 byte numbers so 0-255, 0-FF 10 HEX$="0123456789ABCDEF" 20 DEF HEX2DEC(X$)=(POS(HEX$,SEG$(X$,1,1),1)-1)*16+POS(HEX$,SEG$(X$,2,1),1)-1 30 DEF DEC2HEX$(X)=SEG$(HEX$,INT(X/16)+1,1)&SEG$(HEX$,X-INT(X/16)*16+1,1) 40 PRINT HEX2DEC("FE") 50 PRINT DEC2HEX$(256)
-
ProPlay - New 4 button gamepad for TI
jchase1970 replied to jchase1970's topic in TI-99/4A Development
I'm not so surprised, as even if rxb makes it into 1 statement there are still 2 calls to the joystick. so it's not that you are really doing any less work on the machine side of the code. You can only poll one joystick x,y axis at a time and same with the buttons, you can only poll one controller button at a time. I find it so interesting how TI managed to compact the joysticks into one port by adding diodes and using the same wires to return values for 2 different joysticks. It is a impressive way to do it, all other console just use 2 joystick ports but TI did the same thing with 50% less ports. Just the fact that someone thought that out back then impresses me, "We need 2 joystick ports , wait what if we can use one port and make it do double the work? Do we need a 15 pin connecter then? No we will use the same 9 pin connector and make the 7 wires work double time too." I wonder why double command lines with the :: are slower then single line. I would think the basic interpreter would sort it out exactly the same as single command lines? -
BASIC compiler section in Development Resources Thread
jchase1970 replied to retroclouds's topic in TI-99/4A Development
Harrison's is a XB compiler, although I find it very tedious to work with. -
"The principle being that characters 96 to 143 hold their definition between program runs." wow great idea
-
couldn't you save the varibles as one long string which would be only one record then. sure the program would have to break it out but that would be alot faster then disk access. I try to do as much as possible with strings cause they are the fastest way in basic and the lowest memory usage.
-
ProPlay - New 4 button gamepad for TI
jchase1970 replied to jchase1970's topic in TI-99/4A Development
This was filmed on the TV using my real TI and ProPlay game pad. I use CamStudio for my screen capture video. Although I have been looking for a video converter, Thx. -
ProPlay - New 4 button gamepad for TI
jchase1970 replied to jchase1970's topic in TI-99/4A Development
Wow, I like the compact way that works Just for kicks I timed it to see how much slower the extra polling was, 10 I=0 20 I=I+1 30 CALL JOYST(1,X,Y) 40 CALL KEY(1,B1,S) 50 IF I=100 THEN END 60 GOTO 20 SAME CODE WITH EXTRA POLLING INSERTED [code 35 CALL JOYST(2,B3,B2) 45 CALL KEY(2,B4,S) [/code] And the results Single poll 100 times in xb 6.4 seconds Double poll 100 times in xb 11.2 seconds It seems each call to KEY or JOYST adds about 2.5 seconds per 100, one is not faster or slower then the other, so if you dont need the pause key you can speed it up by 25% -
ProPlay - New 4 button gamepad for TI
jchase1970 replied to jchase1970's topic in TI-99/4A Development
Paypal, jchase1970@hotmail.com but be sure to email me, or even text me at 812-459-9970. I'll be ready to send them out by Friday. In the mean time, little demo program and a crappy little video. 7 CALL CLEAR 8 CALL CHAR(42,"183C3C9999FF9981") 9 CALL SPRITE(#1,42,2,20*8,16* 10 CALL CHAR(44,"00003C42813C4218",45,"104824A4A4244810",46,"0812242525241208") 100 CALL JOYST(1,JX,JY) 110 CALL JOYST(2,B3,B2) 120 CALL KEY(1,B1,S) 130 CALL KEY(2,PAUSE,S) 140 IF PAUSE=18 THEN 1000 150 IF(JX=0)*(JY=0)THEN 160 ELSE 500 160 IF B1=18 THEN 600 170 IF B2=4 THEN 700 180 IF B3=4 THEN 800 190 IF(S1=1)+(S2=1)+(S3=1)THEN 400 200 GOTO 100 400 IF S1=1 THEN CALL POSITION(#2,Y,X)ELSE 420 410 IF Y<10 THEN CALL DELSPRITE(#2) :: S1=0 420 IF S2=1 THEN CALL POSITION(#3,Y,X)ELSE 440 430 IF X<10 THEN CALL DELSPRITE(#3) :: S2=0 440 IF S3=1 THEN CALL POSITION(#4,Y,X)ELSE 100 450 IF X>246 THEN CALL DELSPRITE(#4) :: S3=0 460 GOTO 100 500 CALL MOTION(#1,-JY,JX)::GOTO 160 600 CALL POSITION(#1,Y,X)::CALL SPRITE(#2,44,2,Y-8,X,-8,0)::S1=1::GOTO 190 700 CALL POSITION(#1,Y,X)::CALL SPRITE(#3,46,2,Y,X-8,0,-::S2=1::GOTO 180 800 CALL POSITION(#1,Y,X)::CALL SPRITE(#4,45,2,Y,X+8,0,::S3=1::GOTO 190 1000 FOR DELAY=1 TO 10 1001 NEXT DELAY 1005 CALL KEY(2,PAUSE,S) 1006 IF S=0 THEN 1005 1010 IF PAUSE=18 THEN 1020 ELSE 1005 1020 FOR DELAY=1 TO 10 1030 NEXT DELAY 1040 GOTO 100 Using 3 buttons to shoot in different directions http://youtu.be/xL45QzqjVaY John -
ProPlay - New 4 button gamepad for TI
jchase1970 replied to jchase1970's topic in TI-99/4A Development
You can write a program in XB for this controller. 10 CALL JOYST(1,X,Y) 20 CALL JOYST(2,B2,B3) 30 CALL KEY(1,B1,S) 40 CALL KEY(2,B4,S) in that 4 lines of code you get access to all the buttons on the controller. X,Y return -4,4 for up,down,let,right B1 returns 18 for button 1 B2 returns 4 for button 2 B3 returns 4 for button 3 B4 returns 18 for button 4 X,Y,B1 are normal joystick 1 functions so pad works with any single player game that supports a joystick B2,B3,B4 are calls from joystick 2 -
ProPlay - New 4 button gamepad for TI
jchase1970 replied to jchase1970's topic in TI-99/4A Development
Hi, been gone for a long while and this project was so side tracked for nearly a year I guess. So sorry about that. Anyway the controllers are ready. Well a handful are ready. I'm making them now. I will be ready to start selling them next week. The price as listed above is $20 per controller. Please send me an email at jchase1970@hotmail.com and we will work out the paypal payment or you can send me money via snail mail. I've had a few problems early on but they all worked out for the controller now. I have reworked how I convert the old controller and I believe I have a very solid build. Again, sorry I have not been around, just so much real life going on this year. Thanks for waiting, John -
Before you go and de-solder the whole damn thing give this a try. Piggy back a known good DRAM onto each one in succession until the problem clears (all voltage and ASD measures respected, of course.) This is an old trick I have never tried but would like to see someone of your obviously superior intellect try. Now before you start arguing.... stop being a pussy and give it a go Paralleling chips? neat idea, I'm interested to know if it works to.
-
That's great, A new TI club! Can't wait to here about your response at the retro faire
-
Only 1 command so far, not sure it that is rolling or not and a buggy phraser to boot. but I can do this, Look ma, line number or not it doesn't matter 10 CALL CLEAR CALL CLEAR 20 CALL CLEAR output source DEF MAIN *VDP MEMORY MAP VDPRD EQU >8800 VDPSTA EQU >8802 VDPWD EQU >8C00 VDPWA EQU >8C02 *WORKSPACE WRKSP EQU >8300 R0LB EQU WRKSP+1 R1LB EQU WRKSP+3 R2LB EQU WRKSP+5 R3LB EQU WRKSP+7 R4LB EQU WRKSP+9 RSTACK BSS 32 MAIN LI R10,RSTACK L10 BL @CLEAR BL @CLEAR L20 BL @CLEAR *BASIC COMMANDS CLEAR MOV R10,R11 LI R0,0 LI R1,>2000 LI R2,768 BL @VSMW B @SUBRET *ASSEMBLE COMMANDS VSMW MOVB @R0LB,@VDPWA ORI R0,>4000 MOVB R0,@VDPWA VSMWLP MOVB R1,@VDPWD DEC R2 JNE VSMWLP B *R11 SUBRET DECT R10 B *R10 END MAIN
-
Well if you really want to know what is going on it looks like this, This is my basic compiler. Features are Program Tab Line numbers can be used or not, they become labels in the assembly source. Basic command tab The whole library of basic commands will be here with the corresponding assembly instructions assembly commands tab This tab is for needed assembly commands to support the basic command tab Assembly header tab The tab showing the header you are using, I think selectable multiple headers for ea3 or cartridge output Command index tab this is for debugging more then anything but as you build the basic command tab you need to make a command index which will tell the compiler what lines in what tabs are for what commands command includes tab this tab is a list of needed instructions for the current program, only needed code is added to the assembly source. variables tab a list of variable used in the program converted to assembly and linked to the source output assembly source is the output source file after you 'make source' The code you see is the first command made into a assemble source output. Now that I have it working I can add commands as I go to the Basic command tab and 'make index' then new commands are instantly known to the compiler. This is something way new to me, so I may be going about it wrong, I'll learn more as I add more complex commands and deal with their needs but I think I have a flexible enough system to make it workable.
-
This code is just clearing the screen but it leaves 1 scrambled character on the screen is there something anyone can see wrong with it? Could it be just cause the program is over and doesn't end? DEF MAIN *VDP MEMORY MAP VDPRD EQU >8800 VDPSTA EQU >8802 VDPWD EQU >8C00 VDPWA EQU >8C02 *WORKSPACE WRKSP EQU >8300 R0LB EQU WRKSP+1 R1LB EQU WRKSP+3 R2LB EQU WRKSP+5 R3LB EQU WRKSP+7 R4LB EQU WRKSP+9 RSTACK BSS 32 MAIN LI R10,RSTACK L10 BL @CLEAR *BASIC COMMANDS CLEAR MOV R11,R10 LI R0,0 LI R1,>2000 LI R2,768 BL @VSMW B @SUBRET *ASSEMBLY COMMANDS VSMW MOVB @R0LB,@VDPWA ORI R0,>4000 MOVB R0,@VDPWA VSMWLP MOVB R1,@VDPWD DEC R2 JNE VSMWLP B *R11 SUBRET DECT R10 B *R10 END MAIN
-
Adam wins the latest round of 'How to Fix What John Has Screwed Up This Time.' I'ld like to think all the contestants for there fine play in the latest round. Stay tuned for more exciting game play on 'How to Fix What John Has Screwed Up This Time.' Just got to get the stack added to the structure now.
-
think maybe is was a problem with CLS I renamed the label to CLEAR and the same error
-
Editor assembler is what I'm using. I'll check out how you stack up returns.
-
Two questions on the fallowing code piece. *VDP MEMORY MAP VDPRD EQU >8800 VDPSTA EQU >8802 VDPWD EQU >8C00 VDPWA EQU >8C02 *WORKSPACE WRKSP EQU >8300 R0LB EQU WRKSP+1 R1LB EQU WRKSP+3 R2LB EQU WRKSP+5 R3LB EQU WRKSP+7 R4LB EQU WRKSP+9 MAIN L10 BL @CLS END MAIN *BASIC COMMANDS CLS LI R0,0 LI R1,>2000 LI R2,768 BL @VMBW B *R11 *ASSEMBLE COMMANDS VMBW MOVB @R0LB,@VDPWA ORI R0,>4000 MOVB R0,@VDPWA VMBWLP MOVB *R1+,@VDPWD DEC R2 JNE VMBWLP B *R11 END this line L10 BL @CLS comes up with a undefined symbol error I don't know why. And 2 I guess this code wont work anyway because I'm BLing in a BLing, L10 BL @CLS <-----HERE END MAIN *BASIC COMMANDS CLS LI R0,0 LI R1,>2000 LI R2,768 BL @VMBW <----HERE B *R11 *ASSEMBLE COMMANDS VMBW MOVB @R0LB,@VDPWA ORI R0,>4000 MOVB R0,@VDPWA VMBWLP MOVB *R1+,@VDPWD DEC R2 JNE VMBWLP B *R11 So am I right now thinking you can't BL in a BL because it will store only 1 return address in R11?
-
Owen are you going to have scrolling maps, cause I don't think basic can pass 312bytes of map data to a assemble routine very fast. It might be ok for a map that is stationary so when you go off the left side it loads a new map. Have you tested how long it take to read 312 byte from data statements in basic cause that is going to be your bottle neck. I think to make this work you need a assemble routine at startup to load all the map data in to a set memory location then you need a draw assemble routine to draw the map from the preloaded data. maybe this is what you are doing, it's just not real clear.
-
I just looked up the game play of ZAXXON on the COLECO and there is also a MSX but the COLECO I think is a better port, it's smoother anyway.
-
I don't see an immediate reason why a "Zaxxon" cartridge wouldn't be possible on the TI. But it's a hell of job though. Basically you'd have to rewrite "Zaxxon" from scratch in TMS9900 language. Ofcourse you can "borrow" the colecovision graphics and sounds. But that's about it. Well...? Give me your address and I will send you the cart Of course, for that matter, I am sure a dump exists already for ColecoVision emulators. Maybe this can be a start of a new project for me. I would love to have a version of "Zaxxon" for the TI. Oh, and "Mr. Do!" as well. I always wanted to play zaxxon on the TI to. My best friend had it on the coleco and I remember playing it alot. This was one of those 'where the hell is it games' I saw it listed as coming for the TI in ads but never could find it and I was never in any TI groups so I never knew it was never made.
