Jump to content

Willsy

Members
  • Content Count

    3,144
  • Joined

  • Last visited

Posts posted by Willsy


  1. 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.

     

    :D 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!


  2. 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


  3. 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

    ;)


  4. 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.


  5. 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? ;)


  6. 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.


  7. 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?


  8. 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. :)


  9. 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!


  10. ...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
    


  11. 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
    


  12. 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.

×
×
  • Create New...