-
Content Count
1,781 -
Joined
-
Last visited
Content Type
Profiles
Member Map
Forums
Blogs
Gallery
Calendar
Store
Everything posted by hloberg
-
The main campus is at the intersection of Interstate 635 (the LBJ freeway) and state hiway 75 (which is know as the North Dallas hiway) in Dallas proper. We live across on the other side of 75. When I was a kid my Dad worked for the DoD and did a lot of business with TI in that building. In fact that is where I got my 1st TI-99 was from the company store.
-
Also, it looks like about 1/2 of the complex is dedicated to manufacturing with windowless buildings. There is also another smaller complex in Plano (10 miles north) that seems to be just manufacturing.
-
Fun fact; the streets are named Drive A through Drive Z. Don't know if that was a lack of imagination or a salute to the old TI PC?
-
Recent someone asked me to post a picture of the TI home office since I live down the street from it. The complex covers several blocks with many buildings. Oddly not one of the many builds is over five stories, not sure why. The buildings are a mix of architectural forms from the 70s on. The picture is of the main building at the main gate where there is a stop light. Didn't want to be too obvious about taking the picture since TI is a big Defense contractor. I didn't want a knock from the NSA on my door.
-
Learned Fortran in college and never used it after that. Be fun to play with it.
-
I actually copied the files to another disk for my CF7+ and the program runs fine. I don't remember a file called that so it may not need it. Note: be sure to call the system disk FORTCOMP or the boot program won't work.
-
will do and add to my blog
-
restarted the blog http://atariage.com/forums/blog/528/entry-11894-from-c99-getting-started/ as I do more I'll add to it.
-
I'm going to transfer this to a blog soon and describe in more detail what is going on but here is a short program I wrote that's like the 'lines' demo program from the (If I remember right) Mini-Memory module. It uses the bit-map mode and works fairly well. However there is a bug in the 'line' routine that makes a bit of a mess after you rewrite over the same area too many times but to fix (it looks to me) would require a rewrite of the 'line' routine in assembler and I'm not there yet. below the program is the some docs from GRF1 graphics lib and bitmap lib to show what C99 can do. Here it is: Concept: draw 5 lines in a row then write over the sixth with blank line. continue so that it looks like only 5 lines trailing around the screen. when at edge bounce the other direction. randomly change the color. #include "DSK1.BITRTN" /* This is the bitmap lib. Note: I put all my libs on DSK1 with the funnelweb to simplify thing */ #include "DSK1.RANDOM;C" /* random # lib */ #include "DSK1.GRF1RF" /* graphic package. only need here for key() */ #include "DSK1.STDIO" /* standard I/O, I probably didn't need this */ /* LOADERS DSK1.CSUP,GRF1 */ main() { int x1,y1,x2,y2,lc,k,s; /* declarations area */ int my1,my2,mx1,mx2,cnt; int maxy,maxx,mn; int ay1[100],ay2[100],ax1[100],ax2[100]; /* this is arrays */ maxy=170; maxx=230; mn=22; ay1[0]=ax1[0]=ay2[0]=ax2[0]=1; /* you can define several variables at the same time this way */ randomize(); /*set rnd loc & clr*/ x1=(rnd(090)+40); x2=(rnd(080)+50); y1=(rnd(30)+20); y2=(rnd(80)+100); lc=(rnd(14)+2); /*set rnd move*/ my1=(rnd(20)+1); my2=(rnd(20)+1); mx1=(rnd(20)+1); mx2=(rnd(20)+1); bitmap(16, 5); /* this turns on bitmap */ bitclr(); /* chk key to end & main loop*/ s=0;cnt=1; while (s==0 || cnt<=99) /* check if key pressed or have looped 99 times to end */ { k=key(0,&s); line(x1, y1, x2, y2, lc); y1=my1+y1; y2=my2+y2; x1=mx1+x1; x2=mx2+x2; if (x1>=maxx || x1<=mn) /* is line > maxx or less mn*/ mx1=-mx1; if (x2>=maxx || x2<=mn) mx2=-mx2; if (y1>=maxy || y1<=mn) my1=-my1; if (y2>=maxy || y2<=mn) my2=-my2; if (rnd(10) >= 8 ) /* randomly change color and slightly change maxx, mn so that don't go over same territory again and again */ { lc=(rnd(14)+2); mn=(rnd(5)+20); maxy=(rnd(10)+160); maxx=(rnd(10)+230); } ay1[cnt]=y1; ax1[cnt]=x1; ay2[cnt]=y2; ax2[cnt]=x2; cnt++; if (cnt >= 6) /* look to see if drawn 6th line then from there on write over lines > 5 with blank */ { line(ax1[cnt-5],ay1[cnt-5], ax2[cnt-5],ay2[cnt-5],5); } } grf1(); /* on exit reset to char mode and standard char set or get real mess */ chrset(); exit(0); } Functions available in GRF1 :. grf1();. Set to graphics 1 mode (24x32 characters). Load standard character patterns. Character colors set to black/transparent, backdrop set to cyan.. text();. Set to text mode (24x40 characters, no sprites). Load standard character patterns. Screen set to black/cyan.. screen( c );. Set screen (backdrop) color to c.. color(cs,f,b);. Change colors for char set cs to f/b.. chrdef(ch,str);. Define character pattern(s) starting at character ch. Up to 4 characters may be defined with one call. str is either a quoted string or a pointer to a string consisting of 1-64 hex (0-9, A-F) digits. Incomplete patterns are zero-filled.. chrset();. Load standard character patterns.. patcpy(a,b);. Copy the pattern for character a to the pattern space for character b. This function is provided instead of Ex Basic's CHARPAT.. clear();. Clear the screen.. hchar(r,c,ch,n);. Place character ch at row r, col c and repeat n times horizontally.. vchar(r,c,ch,n);. Place character ch at row r, col c and repeat n times vertically.. c=gchar(r,c);. Return the value (int) of the character at row r, col c.. s=joyst(u,&x,&y);. Read joystick u (1 or 2) and return the x and y values (0 , +4, or -4). s is true if x or y != 0.. c=key(u,&s);. Read keyboard u (0-5) and return char value c and status s (-1, 0, or 1).. sprite(spn,ch,col,dr,dc);. Define sprite number spn with char ch, color col, located at dr,dc.. spdel(spn);. Delete sprite spn.. spdall();. Delete all sprites and clear automotion table.. spcolr(spn,col);. Set sprite spn to color col.. sppat(spn,ch);. Set pattern for sprite spn to char ch.. sploct(spn,dr,dc);. Locate sprite spn at row dr, col dc.. spmag(f);. Set sprite magnification to f (1-4).. spmotn(spn,rv,cv);. Set row velocity rv and col velocity cv for sprite spn.. spmct(n);. Enable automotion for the first n sprites (numbers 0 to n-1).. spposn(spn,&rp,&cp);. Return row position rp and col position cp for sprite spn.. dsq=spdist(spn1,spn2);. Return the square of the distance between sprites spn1 and spn2.. dsq=spdrc(spn,dr,dc);. Return the square of the distance between sprite spn and location dr,dc.. flg=spcnc(spn1,spn2,tol);. Returns true if the distance between sprites spn1 and spn2 is <= tol.. flg=spcrc(spn,dr,dc);. Returns true if the distance between sprite spn and location dr,dc is <= tol.. flg=spcall();. Returns true if any sprites are in coincidence.. INCLUDED IN THE BITRTN FILE: bitmap(fore,back)--must be called first to change the screen configuration from text mode (used by c) to bitmapped mode. The arguments are respectively the fore and background colors selected for the screen default. bitclr() clears the entire screen, but does not change any color defaults. If you wish to modify screen color defaults, the bitmap() call can be repeated. plot(x,y,color)--will turn 'on' a single pixel at the screen location indicated. line(x1,y1,x2,y2,color)--draws a line of the specified color between the points indicated. rect(x1,y1,x2,y2,color)--draws a rectangle with opposite corners at the points indicated. INCLUDED IN THE BITWRT FILE: bitxt()--call this function once, before calling bitmap(); this function copies all ascii character definitions into a buffer in CPU ram. bputch(ascii,row,column,color)--places the character at location indicated bputs(row,column,color,str)--places text on the screen in 24x32 format (works similar to 'puts()' in normal c).
-
Every time I've looked at C code it just looks like a bunch of IF - THEN jibberish, gazoo Oh yes, If ... Else if... Else if... going on for several levels, It can be a bit of a challenge to keep straight. Don't even get me started about pointers, unions and the like. Still, I'm starting to like it.
-
The code compiles to Assembler. It an extra step to compile object but makes debugging much easier.
-
Anybody wanting to play with C99 here's a quick "how to compile". First, get a copy of the C99 with funnelweb. It makes life much easier. Start the funnelweb under XB or E/A and choose the Assembler portion. Cut/Paste my code in to the editor and save as SPRITES/C. I've also seen people use ;C and -C for the extension. now choose the 'C-compler' from the main menu. your input file 'SPRITES/C' will automatically be filed in. But be sure to change the output file to SPRITES/S for the assembler source code. If no errors (there shouldn't be if you cut and pasted correctly) start the assembler. The input (source) file will filed in with SPRITES/S and output (object) SPRITES/O. change the (option) switches to just C from RC then compile. Again no errors you choose Loaders and then Load/Run. The name of the object file SPRITES/O is already entered so press Enter. Now you add the libraries which (in my case) are on DSK1 so type DSK1.CSUP Enter (this is the library that has all the basic run time directives), and DSK1.GRF1 Enter. Now Alt+3 to exit. All the subroutines will be listed on the screen. Arrow over to START and press Alt+6. The program should start. Q exits then Alt+9 that's it.
-
I just caught that, your right. Still getting used to the difference between " and ' in C
-
changing jobs, but as soon as things calm down Ill start putting a blog of the creation of megamania in C99 as a tutorial. creating the game will cover all the basic from graphics to sprites to sound.
-
fixed it! 1.) should read the docs closer needed spmct(2); this tells the program which sprites are allowed motion 0>x-1 2.) This part doesn't make sense but you have to also define the size of the spites or no motion spmag(2); . 3.) Fixed the error with the embedded assembler. forget the space before LIMI. 4.) Also changed the 'if' commands to compare int i.e. c==89. I got the other way c=="X" from one of the tutorials. It looked fishy to me but I thought I would try it. also going to stay away from cast, outcome too unpredictable. Corrected program below. Note on C99. Starting to like it. With the funnelweb integration it easy to compile. It's also very powerful for such a simple version of 'C'. It is quirky though. #include "DSK1.GRF1RF" /*loaders CSUP,GRF1*/ #define sng -10 #define spo 10 main() { int c,s; c=0; grf1(); clear(); spmag(2); sprite (0,88,5,100,125); spmct(2); inon(); spmotn(0,10,10); while (c!=81) { c=key(0,&s); if (c==69) up(); if (c==88) down(); if (c==83) left(); if (c==68) right(); inon(); } } up() { spmotn(0,sng,0); } down() { spmotn(0,spo,0); } left() { spmotn(0,0,sng); } right() { spmotn(0,0,spo); } inon() { #asm LIMI 2 LIMI 0 #endasm }
-
FYI: I tried in non-cast with the char numbers c==89, c==67 etc.. still didn't work. I tried it this way from an example in on the the C99 tutorials. I'll try the interrupts coding and see if I can't figure out the error. thanks
-
Still learning C99 and ran into a problem. I can get the sprite to show but it won't move. I have a key() in there that supposed to invoke the interrupt but no.motion. Here is the code. #include "DSK1.GRF1RF" /*loaders CSUP,GRF1*/ #define sng -10 #define spo 10 main() { int c,s; c=0; grf1(); clear(); sprite (0,88,5,100,125); spmotn(0,10,10); /* even this doesn't seem to make them move*/ while (c!=81) { c=key(0,&s); if (c=="E") up(); if (c=="X") down(); if (c=="S") left(); if (c=="D") right(); /*inon();*/ } } up() { spmotn(0,sng,0); } down() { spmotn(0,spo,0); } left() { spmotn(0,0,sng); } right() { spmotn(0,0,spo); } /* tried below also, but no go* - it gives a compile error of duplicate code*/ /* inon() { #asm LIMI 2 LIMI 0 #endasm } */ what am I doing wrong?
-
Finally back to the projects I started two years ago. Anyway, I'm writing a version of 'Megamania' for the TI. Should be a good program to get my feet wet in both C99 and Assembler. Megamania porting to TI has been fairly straightforward except for the screens that have 2 sets of 5 sprites in a row. On another tread Tursi suggested an E/A routine embedded in C99 to cycle the sprites at the vertical blank. From what I understand the VBI on the TI is 1/30 of a second (faster than the eye) and flicker should be minimal. Therefore, would the best way to cycle be: 1,2,3,4,5 2,3,4,5,1 3,4,5,1,2 etc... (around in a circle) Would I be putting them in a table and just calling the next in a loop or is there a more efficient way. Anyone got some code I could look at, I'm still (re-)learning Assembler so a little fuzzy. Thanks.
-
Multi-Layer Sprites, where to go for info?
hloberg replied to jdgabbard's topic in TI-99/4A Development
mentioned`rotating sprites. I need two sets of 5 sprites on the screen simultaneously. I take it this can only be done in assembler. would something like C99 or compiled XB might be too slow? -
sold
-
Tried to sell a E/A manual with no cartridge on eBay with no success. SO, if anyone wants an E/A manual with disk and no cartridge, I'll sell it for just the cost of shipping. In the US should be about $11.00 (it's kinda heavy). Outside US, whatever it cost. Just send me a note if you want it.
-
thanks Tursi, that had it. I either deleted it or the version I downloaded didn't have it.
-
Sold the Supercart stuff.
-
Anyone have the source for GRF1 (or a document description of the functions)? Going to start programming is C99 but don't have a good idea of GRF1 library functions apart from figuring them out by looking at old programs,
-
Got a couple of interesting things for sale that will be going up on eBay. Before I post it on eBay I thought I would let the forum take a stab at it. I am selling a NANOPEB v.1 with a Lantronics device for $45.00 , price includes shipping. (DOES NOT include CF card). Next, almost everything you need to create a SUPERCART except a couple resisters and the E/A GROM. Includes 2 Supercart boards from arcade shopper and the memory from Mouser, various resisters, switches and a cart. Throwing in TEII (complete in box) and another Lantronics. $25.00 , price includes shipping. I just don't have the time or expertise to complete this project. Also will be selling a spare TI-99/4a in box (minus power supply), TI tape drive with blank tapes, E/A manual with Beginner's BASIC and a box of carts Sunday on eBay. just clearing out spares before we move. Send me a note if you want it and pay through PayPal. If no one wants it I will post to eBay Sunday.
