-
Content Count
3,144 -
Joined
-
Last visited
Posts posted by Willsy
-
-
Indoor soccer. I was so ashamed of that game, I wouldn't let my friends see it!
-
Seriously what I'm trying to say is that it's a lot more efficient to code in a high-level language. Myself I just can't dig Forth, I know its a great system and am very interested in seeing what Mark developed, but I guess I'll never be a forth programmer.
That makes me laugh! Why? Because I remember being shown TI Forth in (I think) 1989 at a TI meeting, by Alan Rutherford and the legendary Stephen Shaw. They were trying to get me to "see the light". I thought it was the most ridiculous thing I had *ever* seen on a computer! An absolutely stupid idea! Reverse Polish Notation? What *idiot* thought that would be a good idea?
20 years later, I told myself I'd finally sit down and figure out what this "Forth thing is all about...". I was so impressed that I sat down and developed my own Forth system!
-
A couple of weeks guys and I should have another batch of cartridges on eBay. I've been quite ill the last couple of weeks and am only just now getting back on my feet

Mark
-
hi everyobdy,
I checked in forum but didn't found the answer.
I need to use real PC99 or V9T9 image ( for Hxc2001 ).
So what program can create PC99 or V9T9 image file ? Is TIdir use V9T9 format ? When i create a .DSK and convert in HFE, it's not reconized.
I think TI99-PC will take a disk image file and convert it to PC-99 but don't quote me on it. I would ping the Y-group(s) for answers or EM Ernest Pergram. He will know the answer.
The TI99DIR Tools menu has the following options (I'm using version 5.2k, there might be a more up to date version on Fred's web site)
- Convert TI file to PC file
- Convert PC file to TI file
- Convert TIFILES file to V9T9 file
- Convert V9T9 file to TIFILES file
- Convert PC99 Disk Image to V9T9 Disk Image
- Show PC99 disk image track and sector layout
- Backup TI formatted SCS / IDE / WDS / or CF7A+ disk image
- Restore TI formatted SCS / IDE / WDS / or CF7A+ disk image
- Convert TI file to PC file
-
Just a quick edit... TF has the words 1+ and 2+ for adding 1 and 2 to the value on the stack. This is faster than doing 1 + and 2 +
0 VALUE SEED $8379 [email protected] TO SEED
: RND SEED 31421 * 6927 @ + DUP TO SEED ;
VARIABLE HE
: CHART
1 GMODE 1 SCREEN 4 5 0 COLOR 5 15 0 COLOR
DATA 4 $0000 $0000 $0000 $007E 33 DCHAR
DATA 4 $0000 $0000 $007E $007E 34 DCHAR
DATA 4 $0000 $007E $007E $007E 35 DCHAR
DATA 4 $007E $007E $007E $007E 36 DCHAR
DATA 4 $040E $1F04 $0404 $0C04 40 DCHAR
DATA 4 $0404 $1C04 $0404 $0C04 41 DCHAR
DATA 4 $0404 $1F04 $0400 $0000 42 DCHAR
DATA 4 $0000 $FF44 $0400 $0000 43 DCHAR
DATA 4 $0406 $FF46 $0400 $0000 44 DCHAR
40 0 V! 1 0 41 22 VCHAR 42 736 V! 23 1 43 30 HCHAR 44 767 V!
BEGIN
31 1 DO
RND 19 MOD 1+ HE !
1 I 32 HE @ VCHAR
HE @ 1+ I RND 4 MOD 32 + 1 VCHAR
HE @ 2+ I 36 21 HE @ - VCHAR
LOOP
AGAIN
;
CHART

-
Ha! Welcome to Forth

Mark
-
Regarding blocks:
Code in Forth is usually distributed in source form, in a blocks file. It is simply compiled as and when it is needed. Therefore a Forth application may consist of many consequtive compiled compiled blocks of code, or many disparate (perhaps optional) blocks of code.
When a block is loaded, it is kind of treated as if the stuff in the block is being typed really fast by the user at the keyboard! The compiler actually doesn't know where the data has come from - block or keyboard.
This means you can treat blocks just like batch and/or script files. TurboForth will faithfully execute whatever it finds in the block.
For example, create your blocks file like this:
MKBLK DSK1.BLOCKS 80
(creates a blocks file with enough room for 80 blocks (80K))
S" DSK1.BLOCKS" USE
(the space after S" is important!)
Now edit block 1:
1 EDIT
In block type:
.( Hello world!) CR
: TEST 100 0 DO I . LOOP ;
TEST
Now exit the editor (FCTN 9)
Now save the block you edited to disk with FLUSH
Now reboot with COLD
What do you see?
Regarding blocks and FLUSH: TF has a 6 block cache. If you edit a block, it will sit in ram until such time as the cache is full, at which point it gets FLUSHed to disk for you. This is to minimise round-trips to the disk drive unless necessary.
If you edit a block and wish you hadn't just press QUIT (FCTN =) to abandon your edits.
May the Forth be with you.
-
He he! Confusing eh? Forth will really screw with your brain, then you'll realise, it's actually really really easy, and there is no mystery.
The golden rule, as Lucien already said: There is no syntax. Only words seperated with spaces.
99.9% of the time, words 'communicate' via the stack. One word may leave something on the stack, to be consumed by the next word. In the case of the loop example:
: TEST 100 0 DO I . LOOP ;
Firstly, 100 and 0 are placed on the stack (0 at the top). DO is then called. He is pre-programmed to pop the top two numbers off the stack. He knows that the top number (0) is the loop start point. He knows that the next number on the stack (100) is the loop termination point. He stores this data somewhere (we don't need to know where) so that he and his friends (I and LOOP) can use it later.
I is then called. I is not a variable. It is a word, just like everything else. I knows where DO keeps his stashed data (the 0 and the 100) and pushes the current loop value (0) to the stack.
. is just another word. It takes the top most value off the stack, and displays it.
LOOP takes the 0 stashed by DO, and adds 1 to it. It compares it to the loop termination value (100) and if less than, sets the PC back to the word just after DO.
That's it.
Even : and ; are words. ":" turns on the compiler, and ";" turns it off again.
Even variables are implemented as words:
VARIABLE FRED
Now type FRED at the keyboard. You get OK:1
Huh??????? We just *executed* a variable?? How is that even possible? Well, the word VARIABLE created a word *for us* in the dictionary, who is pre-programmed to return a pointer to his 'storage space' when executed. So the value you got on the stack after typing FRED is an address. A pointer. You can use this address with the words @ (fetch) and ! (store) to read and write data:
99 FRED !
(store 99 'in' FRED)
FRED @ .
(displays 99).
Head hurt yet?

-
Matthew
If you want something more interesting on the screen, type this in:
: CSET 2 GMODE 8 0 DO 256 0 DO I EMIT LOOP LOOP ;
Then just type CSET and press enter

Just tried it, but all I get is a blank screen. Am I doing something wrong?
EDIT: I tried this in classic99. Do I need some kind of 80 columns device?
Classic99 doesn't support 80 column mode at the moment. Fred Kaal's emulator does, and there is a version of a TurboForth available for it on the the TurboForth website.
As an aside, Fred's emulator also emulates the other hardware functions on the 9938 such as hardware line draw and rectangles etc.
-
Matthew
If you want something more interesting on the screen, type this in:
: CSET 2 GMODE 8 0 DO 256 0 DO I EMIT LOOP LOOP ;
Then just type CSET and press enter

-
I think I just pee'd in my pants a little. Yep.
I WANT ONE OF THESE NOW!!
-
Yeah I noticed that too!
-
Six million dollar question then... How do you change from 40 to 80 (and back to 40) in TF? :-)
For 40 column type 0 GMODE
For 32 column type 1 GMODE
For 80 column type 2 GMODE
-
I still think the answer is the CRU selection method as once you try to acccess the wrong chip it locks the system.
On the other had using CRU means you detect the correct chip then run the correct program, would never crash this way.
Besides the code to detect a CRU bit is one heck of a lot smaller then accessing a chip you are looking for.
LI R12,CRUBIT address
TB 7
The value returned would be the VDP chip you are using, this is about as easy and compact as you can get.
how does a single bit tell you anything?
-
I have 80 column working just fine. The whole system adapts iteself itself if you go into 80 column mode. Thats been working (and is included) in TF V1.0 - however, I would like the system to auto-detect and just enable 80 column at start-up if the 38/50 is detected. For that though, a reliable detection mechanism is critical. Can't have it trying to sdelect 80 column mode on a 40 column system!
Mark
How are you setting the mode? Register direct, or are you using the bulk-load indirect method through R17? If the former, then TF on the 99/4A with an F18A can use 80-columns; and that would be a good reason to support it. :-) I can also make a definite way to detect the F18A.
I'm using the former method.

-
What's the arcade game that looks almost exactly like this?
Buck Rogers?
-
-
Other than that, this is an impressive little game!!
Agreed! Did you have "type-ins" in the States? I know you had 99er, but were there any others? Had this appeared in C&VG here in Blighty it would have knocked peoples socks off!
-
The vertical movement of the ground. I remember you did something in assembly a few years back. I'd like to see something in XB if possible.
-
-
...In a Buck Rogers Stylee.... Lovely... I think he must be using strings to do this?
100 CALL CLEAR :: CALL SCREEN(2):: LEV=1 :: CALL MAGNIFY(3):: RANDOMIZE :: DIM B$(7) 110 CALL COLOR(3,16,1,4,16,1,9,16,1,10,16,1,11,16,1,12,16,1,13,6,1):: GOTO 620 120 DATA 40,0000010387CFDFBF,41,80C0E0E1F3FFFBFD,42,00010387CDEDDDBE,43,C0E0F0F8DC5E5F3E 130 DATA 44,0000041E337575F3,45,000001071F7FBFDF,46,48DCEEF7FBFDFEFF 140 DATA 64,0,65,0028542854101038,66,0000000000020502,67,05010103,68,000000000080408 150 DATA 69,4000008,70,54AA54AA541038FE,71,00000000050A050A,72,0501030F,73,0000000040A040A 160 DATA 74,400080E,75,AAAAAAAAAAAAAAAA,35,0000387CAA7C,47,00000001,58,8,59,00000000001,33,FFFFFFFFFFFFFFFF 170 DATA 120,000201070102,121,0,122,004080E0804,123,0,128,845A773D0CBF7715,129,0E9F770E0B0C102,130,06193053B6FEFEDC 180 DATA 132,0D000119E7271B,133,0,134,B0008098E7E4D8,135,0,136,0106182201030F13,137,337C8,138,0001067CC8C8F0C,139,8 190 DATA 140,0080603E13130F03,141,01,142,8060184480C0F0C8,143,CC3E01,36,0,37,0103070F1F7FFF0C,38,0,39,80C0E0F0F8FEFF3 200 DATA 60,0101010305050001,61,0002000500020001,62,00000080404,63,00800040008,131,E9FAFE4C38CC4244 210 DATA 76,0619F60F,77,0,78,0080F,79,0 220 DATA 76,004020150E1F0E15,77,204,78,00408,79,804 230 DATA 76,030E3CE71C0E,77,0,78,8008C290C4,79,0 240 DATA 76,183CE75A3C18,77,0,78,0,79,0 250 DATA 76,BDDB3C42,77,0,78,0,79,0 260 DATA 76,031CFF1C03,77,0,78,0,79,0 270 DATA 76,01030E0301,77,0,78,80C070C08,79,0,80,0103071D070301,81,0,82,80C0E0B8E0C08,83,0 280 DATA 84,01030F390F0301,85,0,86,80C0F09CF0C08,87,0,88,01071F791F0701,89,0,90,80E0F89EF8E08,91,0 290 DATA 92,01030F3FF93F0F03,93,01,94,80C0F0FC9FFCF0C,95,8 300 DATA 76,001866FF3C,77,0,78,0,79,0,80,001E2DF37F1E,81,0,82,000000C08,83,0 310 DATA 84,000F3FEFF07F1F,85,0,86,0000C070F0E08,87,0,88,00070F7FF7D87F3B,89,0F,90,0080C0F8BC6CF870,91,C 320 DATA 92,03073F77FBDCFF3B,93,0F,94,C0E0FCEEDF3BFEDC,95,F 330 DATA 76,0000000000000103,77,02,78,00000000000080C,79,4,80,0000000000030607,81,0606 340 DATA 82,0000000000C060E,83,606 350 DATA 84,0000000000071D16,85,17141C,86,0000000000E0B868,87,E82838,88,000000000F393E27 360 DATA 89,2C2C243C,90,00000000F09C7CE4,91,3434243C 370 DATA 92,0000000F39393E27,93,2C2C2C2C243C,94,000000F09C9C7CE4,95,34343434243C 380 DATA 76,0001030D0301,77,0,78,0080C070C08,79,0,80,0003071A0703,81,0,82,00C0E0B8E0C,83,0 390 DATA 84,00030F35350F03,85,0,86,00C0F05C5CF0C,87,0,88,00030F75750F03,89,0,90,00C0F05E5EF0C,91,0 400 DATA 92,00071FEAEA1F07,93,0,94,00E0F8AFAFF8E,95,0 410 B$(1)="@[email protected]@@[email protected]@@[email protected]@@[email protected]@@[email protected]@@[email protected]@@A"&RPT$("@",32)&"[email protected]@@[email protected]@@[email protected]@@@[email protected]@@[email protected]@@A"&RPT$("@",31) 420 B$(2)="@[email protected]@@[email protected]@@[email protected]@@@@@@@[email protected]@@[email protected]@@F"&RPT$("@",32)&"[email protected]@@[email protected]@@@@@@@@@@@[email protected]@@F"&RPT$("@",31):: B$(1)=B$(1)&B$(2) 430 B$(2)="[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@@@[email protected]@[email protected]@[email protected]@" 440 B$(3)="[email protected]@[email protected]@[email protected]@@@@@@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@@@@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@@@@@@@@@[email protected]@[email protected]@@@[email protected]@[email protected]@@@@@@@@@@@[email protected]@[email protected]@" :: B$(2)=B$(2)&B$(3) 450 B$(3)=RPT$("@",28)&"[email protected]@@[email protected]@@[email protected]@@[email protected]@[email protected]@@[email protected]@@[email protected]@@A"&RPT$("@",30)&"[email protected]@@[email protected]@@[email protected]@@@@@[email protected]@@[email protected]@@[email protected]@" 460 B$(4)=RPT$("@",28)&"[email protected]@@[email protected]@@[email protected]@@@@@@@@@[email protected]@@[email protected]@@F"&RPT$("@",30)&"[email protected]@@[email protected]@@@@@@@@@@@@@[email protected]@@[email protected]@" :: B$(3)=B$(3)&B$(4) 470 B$(4)="@[email protected]@[email protected]@[email protected]@@@@@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@@@@@[email protected]@[email protected]@[email protected]" 480 B$(5)="@[email protected]@[email protected]@[email protected]@@@@@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@@@@@@@@@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@@@@@@@@[email protected]@[email protected]@[email protected]@@[email protected]@@@@@@@@@@@@@[email protected]@[email protected]" :: B$(4)=B$(4)&B$(5) 490 B$(5)=": /: ; / :/ ; / ; / : /:/; score 000000 : fuel left /:; / ; / / ; /:KKKKKKKKKKKKK " 500 B$(6)=" „†„†„† /; /: ;/: : ; :/ ; / ; ;/ :; /: / : / ; / ;/ : ; / ; / : / ; : / / :/ : ;; / / ; / ;/ : / : / ; ;/ ; " 510 B$(7)=":; : /; /: : ;; / : /: ;/ ; ; :/ : / : ; : / ; /; :; / : ; / ;: / : ; ; / ;/: /;/;;: / ; / ; :/ ; ; /: ; /: /" :: RETURN 520 DATA 9,6,3,10,1,9,1,2,6,2,5,13,12,6,13,12 530 DATA 14,5,3,12,1,14,1,2,6,2,5,13,12,6,13,12 540 DATA 13,4,4,14,1,13,1,2,14,2,5,9,15,6,9,15 550 DATA 14,4,4,14,1,14,1,2,5,2,5,13,12,6,13,12 560 DATA 7,3,5,16,1,7,1,2,11,2,5,14,8,6,14,8 570 DATA 5,3,5,16,1,5,1,2,8,2,5,7,15,6,7,15 580 DATA 5,2,6,18,1,5,1,2,11,2,5,14,8,6,14,8 590 DATA 13,2,6,18,1,13,1,2,7,2,5,14,12,6,14,12 600 DATA 7,1,7,20,1,7,1,2,14,2,5,9,15,6,9,15 610 DATA 14,1,7,20,1,14,1,2,6,2,5,13,12,6,13,12 620 CALL COLOR(1,14,1,2,6,2,5,13,12,6,13,12):: FOR I=1 TO 52 :: READ A,C$ :: CALL CHAR(A,C$):: NEXT I :: GOSUB 410 :: AN=10 630 CALL HCHAR(23,1,33,128):: CALL VCHAR(1,31,33,96) 640 DISPLAY AT(14,1):RPT$("()*+,-.",4) 650 DISPLAY AT(3,1):B$(5)&B$(6):B$(7):: DISPLAY AT(15,1):B$(1):: DISPLAY AT(13,5)SIZE(19):"press fire to begin" 660 DISPLAY AT(2,7)SIZE(15):"s t a r d u s t" :: CALL SPRITE(#1,132,5,157,120,#2,36,2,159,120):: DISPLAY AT(24,5)SIZE(20):"c1985 willi doeltsch" 670 CALL POSITION(#1,Y,X):: GOSUB 1580 :: SP=X-95 :: ZE=Y-125 :: GOSUB 1580 :: CALL KEY(1,T,S):: IF T=18 THEN 800 680 A=-14*SGN(SP)+RND*7 :: GOSUB 1580 :: FA=-2*SGN(ZE)+RND*2 :: GOSUB 1580 :: CALL SOUND(-1000,110,30,800,30,850+(X*2),30,-8,10) 690 CALL MOTION(#1,FA,A,#2,FA,A):: GOSUB 1580 :: CALL KEY(1,T,S):: IF T<>18 THEN 670 ELSE 800 700 RESTORE 300 :: GOSUB 1540 :: RESTORE 520 :: GOSUB 1550 :: RETURN 710 RESTORE 270 :: GOSUB 1540 :: RESTORE 530 :: GOSUB 1550 :: RETURN 720 RESTORE 330 :: GOSUB 1540 :: RESTORE 540 :: GOSUB 1550 :: RETURN 730 RESTORE 380 :: GOSUB 1540 :: RESTORE 550 :: GOSUB 1550 :: RETURN 740 RESTORE 300 :: GOSUB 1540 :: RESTORE 560 :: GOSUB 1550 :: RETURN 750 RESTORE 270 :: GOSUB 1540 :: RESTORE 570 :: GOSUB 1550 :: RETURN 760 RESTORE 330 :: GOSUB 1540 :: RESTORE 580 :: GOSUB 1550 :: RETURN 770 RESTORE 380 :: GOSUB 1540 :: RESTORE 590 :: GOSUB 1550 :: RETURN 780 RESTORE 300 :: GOSUB 1540 :: RESTORE 600 :: GOSUB 1550 :: RETURN 790 RESTORE 270 :: GOSUB 1540 :: RESTORE 610 :: GOSUB 1550 :: RETURN 800 CALL DELSPRITE(ALL):: DISPLAY AT(13,5)SIZE(19):": /;; : /;/ ; : /:;" :: GOSUB 1580 810 DISPLAY AT(24,5)SIZE(20):"prepare for level";LEV :: ON LEV GOSUB 700,710,720,730,740,750,760,770,780,790 820 CALL SOUND(200,600,0,700,0,-2,0):: LA=224 :: CALL HCHAR(6,30-H,35,H):: CALL HCHAR(24,5,33,23):: HH=H 830 CALL SPRITE(#1,132,5,157,120,#2,36,2,159,120,#23,36,2,27,LA) 840 LA=LA-1 :: IF LA<123 THEN GOSUB 1050 :: GOTO 830 :: ELSE CALL LOCATE(#23,27,LA):: IF H=0 THEN 1090 850 CALL MOTION(#1,0,0,#2,0,0):: CALL SPRITE(#4,76,FA,104,INT(RND*(176-64))+64,SPE,SPE*SGN(RND-.5)):: GOSUB 1580 860 FOR I=80 TO 92 STEP 4 :: CALL PATTERN(#4,I):: CALL SOUND(-2350,110,30,800,30,1000,30,-8,18):: FOR A=1 TO LP 870 CALL JOYST(1,X,Y):: IF X=4 THEN CALL PATTERN(#1,140):: GOTO 910 ELSE IF X=-4 THEN CALL PATTERN(#1,136):: GOTO 940 ELSE IF FL THEN 890 880 CALL MOTION(#1,0,0,#2,0,0):: CALL PATTERN(#1,132):: FL=-1 :: CALL POSITION(#1,ZE,SP):: IF (SP<20)+(SP>228)THEN GOSUB 1050 :: GOTO 830 890 CALL KEY(1,T,S):: IF T<>18 THEN 970 ELSE CALL POSITION(#1,ZE,SP) 900 CALL SPRITE(#3,120,7,ZE,SP,-17,0):: GOSUB 1560 :: IF HIT THEN 840 ELSE 980 910 CALL POSITION(#1,ZE,SP):: IF SP>220 THEN GOSUB 1050 :: GOTO 830 ELSE FL=0 920 CALL MOTION(#1,0,18,#2,0,18):: CALL KEY(1,T,S):: IF T<>18 THEN 970 ELSE CALL MOTION(#1,0,0,#2,0,0) 930 CALL POSITION(#1,ZE,SP):: CALL SPRITE(#3,120,7,ZE-5,SP+4,-17,17):: GOSUB 1560 :: IF HIT THEN CALL PATTERN(#1,132):: FL=0 :: GOTO 840 ELSE 980 940 CALL POSITION(#1,ZE,SP):: IF SP<32 THEN GOSUB 1050 :: GOTO 830 ELSE FL=0 950 CALL MOTION(#1,0,-18,#2,0,-18):: CALL KEY(1,T,S):: IF T<>18 THEN 970 ELSE CALL MOTION(#1,0,0,#2,0,0) 960 CALL POSITION(#1,ZE,SP):: CALL SPRITE(#3,120,7,ZE-5,SP-6,-17,-17):: GOSUB 1560 :: IF HIT THEN CALL PATTERN(#1,132):: FL=0 :: GOTO 840 ELSE 980 970 GOSUB 1580 :: NEXT A :: LA=LA-1 :: CALL LOCATE(#23,27,LA) 980 GOSUB 1580 :: NEXT I :: CALL DELSPRITE(#4):: LA=LA-1 :: CALL LOCATE(#23,27,LA):: GOTO 840 990 CALL DELSPRITE(#4):: CALL HCHAR(5,19,75,11):: GOTO 810 1000 CALL DELSPRITE(#3):: CALL PATTERN(#4,128):: CALL SOUND(-400,-7,0):: CALL MOTION(#4,3,3):: CALL SOUND(-400,-6,6):: CALL PATTERN(#1,132) 1010 GOSUB 1580 :: CALL POSITION(#4,ZE,SP):: CALL SPRITE(#5,128,7,ZE,SP,3,-3):: GOSUB 1580 :: CALL POSITION(#1,ZE,SP):: CALL LOCATE(#2,159,SP) 1020 CALL SOUND(-400,-6,12):: GOSUB 1580 :: CALL SOUND(-600,-6,16):: CALL DELSPRITE(#4,#5) 1030 GOSUB 1580 :: CALL HCHAR(6,30-H,32):: H=H-1 1040 SCORE=SCORE+(LEV*50):: DISPLAY AT(4,7)SIZE(7):SCORE :: RETURN 1050 CALL MOTION(#1,-1,1,#2,-1,-1):: CALL SOUND(-400,-7,0):: CALL PATTERN(#1,128,#2,128) 1060 CALL HCHAR(6,AN,32,2):: AN=AN-2 :: IF AN=2 THEN 1490 ELSE CALL HCHAR(6,AN,32,2):: CALL DELSPRITE(ALL) 1070 LA=224 :: CALL LOCATE(#23,27,LA):: CALL HCHAR(6,30-HH,35,HH):: H=HH 1080 RETURN 1090 CALL DELSPRITE(ALL):: DISPLAY AT(11,1):B$(7)&B$(7):B$(7) 1100 DISPLAY AT(24,3)SIZE(24):"prepare for special game" 1110 RESTORE 200 :: FOR I=1 TO 16 :: READ A,C$ :: CALL CHAR(A,C$):: NEXT I 1120 A=64 :: FOR I=17 TO 22 :: CALL SPRITE(#I,132,1,A,245):: A=A+16 :: NEXT I :: A=64 :: FOR I=23 TO 28 :: CALL SPRITE(#I,132,1,A,:: A=A+16 :: NEXT I 1130 ON LEV GOTO 1190,1150,1160,1170,1180,1190,1200,1190,1150,1160 1140 RESTORE 210 :: GOTO 1210 1150 RESTORE 300 :: GOTO 1210 1160 RESTORE 230 :: GOTO 1210 1170 RESTORE 270 :: GOTO 1210 1180 RESTORE 250 :: GOTO 1210 1190 RESTORE 240 :: GOTO 1210 1200 RESTORE 220 1210 FOR I=1 TO 4 :: READ A,C$ :: CALL CHAR(A,C$):: NEXT I 1220 A=64 :: FOR I=4 TO 9 :: CALL SPRITE(#I,76,INT(RND*13)+3,A,230,0,INT(RND*-3)+-1):: A=A+16 :: NEXT I :: CALL HCHAR(24,3,33,26) 1230 CALL SPRITE(#1,132,5,163,120):: CALL SOUND(100,1400,0) 1240 FOR I=1 TO 10+(LEV*3) 1250 CALL COINC(ALL,HIT):: IF HIT THEN 1430 1260 CALL JOYST(1,X,Y):: IF X=4 THEN 1290 ELSE IF X=-4 THEN 1270 ELSE CALL MOTION(#1,0,0):: GOTO 1310 1270 CALL COINC(ALL,HIT):: IF HIT THEN 1430 1280 CALL POSITION(#1,ZE,SP):: IF SP<32 THEN CALL MOTION(#1,0,0):: GOTO 1310 ELSE CALL MOTION(#1,0,-20):: GOTO 1310 1290 CALL COINC(ALL,HIT):: IF HIT THEN 1430 1300 CALL POSITION(#1,ZE,SP):: IF SP>214 THEN CALL MOTION(#1,0,0):: GOTO 1310 ELSE CALL MOTION(#1,0,20) 1310 CALL KEY(1,T,S):: IF T<>18 THEN 1250 ELSE CALL MOTION(#1,0,0):: CALL POSITION(#1,ZE,SP):: CALL SOUND(-1570,800,30,800,30,2500,30,-8,12) 1320 CALL SPRITE(#2,60,16,ZE-6,SP,-20,0) 1330 FOR H=1 TO 16 :: CALL KEY(1,T,S):: IF T=18 THEN 1350 ELSE CALL JOYST(1,X,Y):: CALL MOTION(#2,-20,X) 1340 NEXT H :: CALL DELSPRITE(#2):: CALL DELSPRITE(#2):: CALL COINC(ALL,HIT):: IF HIT THEN 1370 ELSE 1260 1350 CALL SOUND(-250,-6,:: CALL POSITION(#2,ZE,SP):: A=INT((ZE/8)/2):: CALL COINC(#2,#A,8,HIT):: CALL PATTERN(#2,128) 1360 IF HIT THEN 1370 ELSE CALL DELSPRITE(#2):: CALL DELSPRITE(#2):: GOTO 1250 1370 CALL LOCATE(#A,(A**2,230):: CALL DELSPRITE(#2):: CALL SOUND(300,-7,5):: GOSUB 1040 1380 NEXT I 1390 CALL MOTION(#1,0,0):: FOR I=9 TO 4 STEP -1 :: CALL SOUND(-280,-7,I*2-7):: CALL PATTERN(#I,128):: CALL MOTION(#I,0,0):: FOR A=1 TO 55 1400 NEXT A :: CALL DELSPRITE(#I):: NEXT I :: LEV=LEV+1 :: IF LEV>10 THEN 1490 1410 CALL SOUND(900,195,0,246,0,349,0):: CALL SOUND(4250,261,0,329,0,391,0) 1420 CALL DELSPRITE(ALL):: DISPLAY AT(14,1):RPT$("()*+,-.",4):: DISPLAY AT(15,1):B$(1):: GOTO 810 1430 CALL MOTION(#1,0,0):: FOR I=1 TO 5 :: CALL COLOR(1,INT(RND*13)+3,2):: NEXT I :: CALL COLOR(1,FA,2) 1440 CALL POSITION(#1,A,FA):: FOR I=4 TO 9 :: CALL MOTION(#I,0,0):: CALL POSITION(#I,ZE,SP):: CALL PATTERN(#I,84):: CALL MOTION(#I,(A-ZE)/2,(FA-SP)/2) 1450 CALL COINC(#I,#1,8,HIT):: IF HIT THEN 1460 ELSE 1450 1460 CALL DELSPRITE(#I):: CALL PATTERN(#1,128):: CALL SOUND(100,-7,0):: CALL PATTERN(#1,132) 1470 FOR X=1 TO 5 :: CALL COLOR(#1,16,#1,5):: NEXT X :: NEXT I :: CALL PATTERN(#1,128) 1480 FOR I=2 TO 5 :: CALL SOUND(-900,-7,I):: CALL SPRITE(#I,128,INT(RND*13)+1,A,FA,INT(RND*-2)+-2,INT(RND*2)+2*SGN(RND-.5)):: NEXT I :: GOSUB 1050 :: GOTO 1420 1490 CALL DELSPRITE(ALL):: IF SCORE<=HIC THEN 1500 ELSE HIC=SCORE 1500 CALL SPRITE(#1,132,5,157,120,#2,36,2,159,120) 1510 DISPLAY AT(8,4)SIZE(22):"highscore ";HIC :: DISPLAY AT(10,4)SIZE(22):"spielpunkte ";SCORE 1520 DISPLAY AT(12,4)SIZE(22):"neues spiel j n" :: DISPLAY AT(14,1):RPT$("()*+,-.",4):: GOSUB 1580 1530 CALL KEY(3,T,S):: IF T=74 THEN SCORE=0 :: AN=10 :: LEV=1 :: GOTO 650 ELSE IF T=78 THEN CALL CLEAR :: END ELSE GOSUB 1580 :: GOTO 1530 1540 FOR I=1 TO 20 :: READ A,C$ :: CALL CHAR(A,C$):: GOSUB 1580 :: NEXT I :: HH=H :: RETURN 1550 READ FA,LP,SPE,H :: FOR I=1 TO 4 :: READ X,Y,SP :: CALL COLOR(X,Y,SP):: GOSUB 1580 :: NEXT I :: RETURN 1560 FOR X=1 TO 4 :: CALL COINC(#3,#4,10,HIT):: IF HIT THEN 1000 1570 GOSUB 1580 :: NEXT X :: CALL DELSPRITE(#3):: RETURN 1580 DISPLAY AT(15,1):B$(F):: F=F+1 :: IF F=5 THEN F=1 1590 RETURN
-
Those old guys certainly knew how to squeeze XB... I wonder if the Buck Rogers style of land movement could be done in XB by rotating the color sets?
10 CALL CLEAR :: CALL SCREEN(4):: PRINT " DEVASTATOR" :: PRINT :: PRINT 20 PRINT " by David R. Arnold" :: PRINT :: PRINT " translated for the TI by Patrick Parrish" 30 PRINT :: PRINT " adapted and programmed for the Win994a Simulator by Guy Matthew Babin" 40 PRINT :: PRINT 45 PRINT " requires a joystick." :: PRINT 60 PRINT " please select 'Map Keyboard/Joystick'" 70 PRINT " under FILE-PREFERENCES." 75 PRINT 77 PRINT " use NUMERIC KEYPAD to use JOYSTICK." 80 PRINT 89 INPUT "PRESS <ENTER> TO CONTINUE..":GUY$ 90 REM TI EXTENDED BASIC 99 REM DEVASTATOR 100 GOTO 150 110 FOR F=12 TO 14 :: CALL COLOR(F,2,1):: NEXT F :: RETURN 120 FOR F=10 TO 16 :: CALL SCREEN(F):: NEXT F :: CALL SCREEN(2):: RETURN 130 FOR V=1 TO 30 :: CALL SOUND(D1,F1,V,F2,V):: NEXT V :: RETURN 140 FOR ROW=2 TO 7 :: CALL HCHAR(ROW,22,32,7):: NEXT ROW :: RETURN 150 RANDOMIZE 160 DIM E$(13) 170 CALL CLEAR :: CALL SCREEN(2) 180 GOSUB 530 190 GOSUB 1030 :: CALL CLEAR :: CALL SCREEN(2) 200 FOR H=2 TO 14 :: CALL COLOR(H,2,2):: NEXT H 210 FOR J=1 TO 4 :: FOR I=1 TO 11 :: CALL HCHAR(I,INT(RND*28)+3,46):: NEXT I :: NEXT J 220 DISPLAY AT(13,1):"``````````a b``````````" 230 DISPLAY AT(14,1):"hhhhhhhhhi` `jhhhhhhhhh" 240 DISPLAY AT(15,1):"ppppppppqh` `hrpppppppp" 250 DISPLAY AT(16,1):"pppppppqpha``````bhprppppppp" 260 DISPLAY AT(17,1):"``````appihhhhhhhhjppb``````" 270 DISPLAY AT(18,1):"`````a`pqpppppppppprp`b`````" 280 DISPLAY AT(19,1):"hhhhi``qppppppppppppr``jhhhh" 290 DISPLAY AT(20,1):"hhhih`a``````````````b`hjhhh" 300 DISPLAY AT(21,1):"hhihha````````````````bhhjhh" 310 DISPLAY AT(22,1):"pqhhihhhhhhhhhhhhhhhhhhjhhrp" 320 DISPLAY AT(23,1):"qphihhhhhhhhhhhhhhhhhhhhjhpr" :: DISPLAY AT(24,1):"ppihhhhhhhhhhhhhhhhhhhhhhjpp" 330 FOR J=1 TO 2 :: FOR I=12 TO 14 :: CALL HCHAR(I,INT(RND*6)+14,46):: NEXT I :: NEXT J 340 DISPLAY AT(2,24):CHR$(120)&CHR$(121):: DISPLAY AT(3,23):CHR$(122)&CHR$(136)&CHR$(137)&CHR$(123) 350 DISPLAY AT(4,22):CHR$(124)&CHR$(125)&CHR$(138)&CHR$(139)&CHR$(125)&CHR$(126) 360 DISPLAY AT(5,22):CHR$(127)&CHR$(125)&CHR$(140)&CHR$(141)&CHR$(125)&CHR$(128) 370 DISPLAY AT(6,23):CHR$(129)&CHR$(142)&CHR$(143)&CHR$(130) 380 DISPLAY AT(7,24):CHR$(131)&CHR$(132) 390 CALL COLOR(12,6,1):: CALL COLOR(13,6,1):: CALL COLOR(14,3,6) 400 FOR F=2 TO 8 :: CALL COLOR(F,16,1):: NEXT F 410 CALL SPRITE(#2,108,11,80,80) 420 CALL MAGNIFY(LEVEL):: SPEED=8 :: TOL=30 :: IF LEVEL=3 THEN TOL=15 430 CALL SPRITE(#1,100,16,100,110) 440 A=9 :: B=10 :: C=11 450 T=A :: A=B :: B=C :: C=T 460 CALL COLOR(A,2,5):: CALL COLOR(5,2,14):: CALL COLOR(C,2,7) 470 CALL MOTION(#2,INT(RND*40-20),INT(RND*40-20)) 480 CALL JOYST(1,X1,Y1):: CALL MOTION(#1,-Y1*SPEED,X1*SPEED) 490 CALL COINC(#1,#2,TOL,G):: IF G THEN GOSUB 700 500 W=W+1 :: IF W>150 THEN 770 510 GOTO 450 520 REM DEFINE CHARS 530 A$="" :: B$="0102040810204080" :: C$="8040201008040201" 540 CALL CHAR(95,B$) 550 FOR I=96 TO 112 STEP 8 :: CALL CHAR(I,A$):: CALL CHAR(I+1,B$) 560 CALL CHAR(I+2,C$):: NEXT I 570 FOR I=0 TO 13 :: READ E$(I):: CALL CHAR(120+I,E$(I)):: NEXT I 580 FOR I=0 TO 7 :: READ E$(I):: CALL CHAR(I+136,E$(I)):: NEXT I 590 DATA 0000000000000F7F,000000000000F0FE,01030F1F3F7FFFFF 600 DATA 80C0F0F8FCFEFFFF,0001010103030303,FFFFFFFFFFFFFFFF 610 DATA 00808080C0C0C0C0,0303030301010100,C0C0C0C080808000 620 DATA FF7F3F3F1F0F0703,FFFEFCFCF8F0E0C0,7F0F000000000000 630 DATA FEF0000000000000,0800667C18666810 640 DATA E0F07F7F7FFFFFFF,0818F8F8F0F8F0F0,7F7F7F3D1C0E0201 650 DATA F0F0908800180000,03070F0F0F070703,F0FFFFFEFCFCF8F0 660 DATA 0303010101010101,E0C0C0C080808000 670 CALL CHAR(108,"00073FE2E2E2FFFF667F0C1C0000000000E0FC474747FFFF66FE303800000000") 680 CALL CHAR(100,"0000000003040808FF0808040300000080808080E0908888FF888890E0808080") 690 RETURN 700 REM ALIEN SHIP DESTROYED 710 CALL DELSPRITE(#2):: CALL MOTION(#1,0,0) 720 CALL SCREEN(15):: CALL SCREEN(10) 730 CALL SCREEN(2):: FOR DVOL=1 TO 24 STEP 4 :: CALL SOUND(100,-7,DVOL):: NEXT DVOL 740 CALL SCREEN(2) 750 D=D+1 :: CALL SPRITE(#2,108,11,INT(RND*192)+1,INT(RND*256)+1) 760 RETURN 770 IF D<20 THEN 810 775 FOR GUY=2 TO 8 :: CALL COLOR(GUY,11,1):: NEXT GUY 780 GOTO 950 790 FOR I=30 TO 1 STEP -2 :: CALL SOUND(-1000,-5,I):: NEXT I :: RETURN 800 REM EARTH DESTROYED 810 GOSUB 790 :: FOR I=8 TO 0 STEP -1 :: CALL HCHAR(7+I,25-I,95):: CALL COLOR(8,INT(RND*+9,1):: NEXT I 820 FOR J=1 TO 40 :: NEXT J 830 FOR I=8 TO 0 STEP -1 :: CALL HCHAR(7+I,25-I,32):: NEXT I 840 GOSUB 120 :: D1=-100 :: F1=-6 :: F2=110 :: GOSUB 130 :: GOSUB 120 :: GOSUB 110 :: GOSUB 140 850 J=0 :: I=0 860 DISPLAY AT(1,23+I):CHR$(133):: DISPLAY AT(1,26+J):CHR$(133) 870 DISPLAY AT(2,22+I):CHR$(133)&CHR$(133):: DISPLAY AT(2,26+J):CHR$(133)&CHR$(133) 880 DISPLAY AT(3,21+I):CHR$(133)&CHR$(133)&CHR$(133):: DISPLAY AT(4,25+J):CHR$(133)&CHR$(133)&CHR$(133) 890 DISPLAY AT(5,22+I):CHR$(133)&CHR$(133):: DISPLAY AT(5,25+J):CHR$(133)&CHR$(133)&CHR$(133):: GOSUB 120 900 DISPLAY AT(6,25+J):CHR$(133):: DISPLAY AT(7,23+I):CHR$(133):: DISPLAY AT(7,27+J):CHR$(133) 910 DISPLAY AT(8,22+I):CHR$(133)&CHR$(133):: DISPLAY AT(9+J,24):CHR$(133)&CHR$(133) 920 CALL COLOR(13,9,1):: GOSUB 120 :: D1=30 :: F1=-6 :: F2=110 :: GOSUB 130 :: IF J=1 THEN 940 930 I=-1 :: J=1 :: GOSUB 110 :: GOSUB 120 :: GOTO 860 940 FOR F=1 TO 100 :: NEXT F 945 FOR GUY=2 TO 8 :: CALL COLOR(GUY,7,1):: NEXT GUY 950 CALL DELSPRITE(ALL):: W=0 960 CALL CLEAR :: CALL SCREEN(2):: DISPLAY AT(8,1):"ALIEN SHIPS DESTROYED: ";D 970 IF D>HD THEN HD=D 980 DISPLAY AT(13,6):"BEST ROUND: ";HD 990 D=0 :: DISPLAY AT(17,1):"PLAY AGAIN, CAPTAIN (Y/N)?" 1000 CALL KEY(0,KEY,ST):: IF ST=0 THEN 1000 1010 IF (KEY=89)+(KEY=121)THEN CALL CLEAR :: GOTO 200 1015 IF (KEY=78)+(KEY=110)THEN 1020 1017 GOTO 1000 1020 DISPLAY AT(21,6):"SO LONG" :: FOR I=1 TO 500 :: NEXT I :: STOP 1030 FOR J=2 TO 8 :: CALL COLOR(J,1,1):: NEXT J 1040 PRINT " D E V A S T A T O R" :: PRINT :: PRINT 1050 PRINT "YOUR MISSION IS TO PROTECT" :: PRINT "EARTH FROM THE APPROACHING" 1060 PRINT "DEVASTATOR. SHOOT DOWN AT" :: PRINT "LEAST 20 GUARDIAN SHIPS TO" 1070 PRINT "ENABLE YOUR COMRADES TO" :: PRINT "DESTROY THE DEVASTATOR." 1080 PRINT :: PRINT "YOU HAVE ONLY LIMITED TIME" :: PRINT "IN WHICH TO COMPLETE YOUR" 1090 PRINT "MISSION. POSITION YOUR" :: PRINT "CROSSHAIR WITH THE JOYSTICK." 1100 FOR J=2 TO 8 :: CALL COLOR(J,15,1):: NEXT J 1110 PRINT :: PRINT "ENTER YOUR SKILL LEVEL" :: PRINT 1113 PRINT " EASY (1) OR NORMAL (2)" :: PRINT :: PRINT "CAPTAIN?" 1115 ACCEPT AT(23,10)BEEP VALIDATE("12")SIZE(1):LEVEL$ 1120 LEVEL=5-VAL(LEVEL$) 1130 GOSUB 790 1140 PRINT :: PRINT :: PRINT "THE DEVASTATOR IS APPROACH-" 1150 PRINT "ING. GRAB YOUR JOYSTICK," :: PRINT "AND PREPARE TO DO BATTLE." 1160 FOR I=1 TO 750 :: NEXT I 1170 RETURN -
Marc, I just logged in and checked and your posts were not double-echoed, they appeared normal. When I use the native DOS telnet client I get the same thing, so I don't use it. I have use the native XP comm client (HyperTerminal) with no issues, and I also tried NetTerm (shareware) without issues.
That being said I think there are still some issues with my serial/ethernet adapter which I still need to tweak.
Setting local echo in DOS Telnet Client (XP):
1) Click Start, click Run, and then type telnet.exe to start the telnet program. For example, type telnet pop.microsoft.com 110
2) Type Ctrl+]
3) Type the following command:
set localecho
4) Press Enter on a blank line.
-
Suspect 9901? Guys, is the keyboard buffered at all before it hits the 9901?

3 new games (classic99)
in TI-99/4A Development
Posted
You can use directories/sub-directories in classic99. Just use a .
OLD DSK1.SUB.DIRECTORY.FRED
Would load dsk1/sub/directory/fred