Jump to content

adamantyr

+AtariAge Subscriber
  • Content Count

    1,852
  • Joined

  • Last visited

Everything posted by adamantyr

  1. A common problem in game design. Coming up with the right balance of difficulty!
  2. I do have an earlier version indeed. I'll be sure to upgrade. I only played it once, I'm technically at work. But yes, it IS very difficult. Unless someone has a very good eidetic memory, it's probably going to be difficult to win without cheating. A suggestion on how to bypass that is to have individual traps "flash" occasionally. That way even after both torches are expended you have a means of potentially seeing a trap before walking into one. Coding wise, you'd probably have to store the coordinates of all the traps (two string arrays for row and column would work) So you could do a quick flash, maybe when a counter value runs to zero on your main loop.
  3. Nicely done! I love the opening title screen, although if you got speed mode turned on in Classic99 it zips right by...
  4. I use Textpad myself, I like it because I can set it up with a syntax file so it highlights all my assembly operands. You can use Textpad for free pretty much indefinitely, it just pops up a registration reminder once in awhile, but I bought a license for $30 because it's a good product and I want them to make some money on it.
  5. My latest blog post covers random number generation in assembly language, the techniques described include most of the common variants.
  6. Well after getting my PEB TiPi, I'm definitely considering it! The big question is, what to put in that big empty space?
  7. Hey I'm still here. And I remember a young RXB at the Portland 1990 Faire so excited about everything. That's how you'll always be in my memories.
  8. What I like about this one? The author, Seth McEvoy, also wrote the junior fiction series "Not Quite Human" about an android boy at a middle school. It was later adapted into a couple Disney TV movies.
  9. Writing platform games is a technical challenge... and it's REALLY hard in Extended BASIC. The best platformers I've seen were R. Truman's Billy Ball games, and they are deceptively simple. You have to reduce calculations as much as possible in an XB loop. One way you MAY accomplish this is to always have a sprite under your player character, an invisible one. Then you just do a COINC to check if there is ANY hits anywhere and so long as there is you assume he's "on" a platform. Another check elsewhere will make sure you have a graphic "platform" underneath and continuously recreates the invisible sprite underneath your player. If it's missing, you assume he's "falling". That's how I managed to have sprite torpedoes using CALL MOTION in Space Trek; I just put an invisible "target" sprite on my end position and did a continuous COINC loop. COINC on position simply didn't move fast enough to catch it in boundaries.
  10. I found Zone Runner! And wow... I literally wrote it 30 years ago. 100 REM *************** 110 REM * * 120 REM * ZONE RUNNER * 130 REM * * 140 REM *************** 150 REM 160 REM COPYRIGHT 1988 170 REM BY ADAM HAASE 180 REM 190 REM 200 REM 210 CALL CLEAR 220 PRINT TAB(4);"Z O N E R U N N E R" 230 PRINT: : : : 240 PRINT "USE THE JOYSTICK TO MOVE": : 250 PRINT "THEN RUNNER AROUND.": : 260 PRINT "PICK UP ALL THE CARGO.": : 270 PRINT "PRESS FIRE BUTTON TO BLAST.": : 280 PRINT "WATCH FOR THE SENTRY!!!": : : 290 PRINT " PRESS ANY KEY TO BEGIN" 300 CALL KEY(0,K,S) 310 IF S=0 THEN 300 320 CALL CLEAR 330 CALL SCREEN(2) 340 DEF O=INT(RND*22)+2 350 DEF P=INT(RND*29)+2 360 CALL CHAR(96,"0000103854102828") 370 CALL CHAR(97,"000000103810") 380 CALL CHAR(104,"10107C101038387C") 390 CALL CHAR(112,"AA55AA55AA55AA55") 400 CALL COLOR(9,16,1) 410 CALL COLOR(10,7,1) 420 CALL COLOR(11,5,1) 430 CALL HCHAR(1,1,112,32) 440 CALL HCHAR(24,1,112,32) 450 CALL VCHAR(1,1,112,24) 460 CALL VCHAR(1,32,112,24) 470 FOR I=1 TO 35 480 RANDOMIZE 490 CALL HCHAR(O,P,112, 500 CALL VCHAR(O,P,112, 510 NEXT I 520 FOR I=1 TO 120 530 RANDOMIZE 540 CALL VCHAR(O,P,97) 550 NEXT I 560 A=INT(RND*22)+2 570 B=INT(RND*29)+2 580 CALL GCHAR(A,B,G) 590 IF G<>32 THEN 560 600 CALL VCHAR(A,B,104) 610 D=32 620 R=12 630 C=16 640 L=0 650 OR=12 660 OC=16 670 DIR=1 680 F1=R 690 F2=C 700 CALL VCHAR(R,C,96) 710 CALL KEY(3,K,S) 720 IF K=80 THEN 1680 730 CALL JOYST(1,X,Y) 740 CALL KEY(1,K,S) 750 IF K=18 THEN 1020 760 IF X=4 THEN 810 770 IF X=-4 THEN 830 780 IF Y=4 THEN 850 790 IF Y=-4 THEN 870 800 GOTO 1210 810 C=C+1 820 GOTO 880 830 C=C-1 840 GOTO 880 850 R=R-1 860 GOTO 880 870 R=R+1 880 CALL GCHAR(R,C,G) 890 IF G=112 THEN 1430 900 IF G=97 THEN 1470 910 IF G=104 THEN 1510 920 CALL VCHAR(OR,OC,32) 930 OR=R 940 OC=C 950 CALL VCHAR(R,C,96) 960 CALL CHAR(96,"0000103854102808") 970 CALL SOUND(5,300,0) 980 CALL CHAR(96,"0000103854102820") 990 CALL SOUND(5,300,0) 1000 CALL CHAR(96,"0000103854102828") 1010 GOTO 1210 1020 IF(R<3)+(R>22)+(C<3)+(C>30)THEN 710 1030 CALL CHAR(96,"0000107C10102828") 1040 FOR I=1 TO 4 1050 CALL SOUND(100,-5,0) 1060 NEXT I 1070 CALL GCHAR(R-1,C,G) 1080 IF G<>112 THEN 1100 1090 CALL VCHAR(R-1,C,32) 1100 CALL GCHAR(R,C+1,G) 1110 IF G<>112 THEN 1130 1120 CALL VCHAR(R,C+1,32) 1130 CALL GCHAR(R+1,C,G) 1140 IF G<>112 THEN 1180 1150 CALL VCHAR(R+1,C,32) 1160 CALL GCHAR(R,C-1,G) 1170 IF G<>112 THEN 1200 1180 CALL VCHAR(R,C-1,32) 1190 CALL CHAR(96,"0000103854102828") 1200 GOTO 760 1210 CALL VCHAR(A,B,D) 1220 RANDOMIZE 1230 Q=INT(RND*10)+1 1240 IF Q>5 THEN 1320 1250 J=INT(RND*3)-1 1260 K=INT(RND*3)-1 1270 A=A+J 1280 B=B+K 1290 M=A 1300 N=B 1310 GOTO 1340 1320 M=A-SGN(A-R) 1330 N=B-SGN(B-C) 1340 IF(M<2)+(M>23)THEN 1220 1350 IF(N<2)+(N>31)THEN 1220 1360 CALL GCHAR(M,N,G) 1370 IF G=96 THEN 1510 1380 A=M 1390 B=N 1400 D=G 1410 CALL VCHAR(A,B,104) 1420 GOTO 710 1430 CALL SOUND(-60,110,0) 1440 R=OR 1450 C=OC 1460 GOTO 950 1470 CALL SOUND(-60,700,0) 1480 L=L+1 1490 IF L=30 THEN 1600 1500 GOTO 920 1510 CALL CLEAR 1520 CALL SOUND(1000,110,0) 1530 CALL SCREEN(4) 1540 PRINT TAB(4);"THE SENTRY GOT YOU!": : : : 1550 PRINT TAB(9);"YOU GOT ";L 1560 PRINT TAB(6);"PIECES OF CARGO.": : : : : 1570 INPUT "TRY AGAIN? (Y/N) ":A$ 1580 IF(A$="Y")+(A$="y")THEN 320 ELSE 1590 1590 END 1600 CALL CLEAR 1610 CALL SCREEN(4) 1620 CALL SOUND(400,262,0) 1630 CALL SOUND(400,330,0) 1640 CALL SOUND(400,392,0) 1650 CALL SOUND(400,523,0) 1660 PRINT TAB(;"YOU DID IT!!": : : : : : 1670 GOTO 1550 1680 CALL COLOR(11,7,1) 1690 CALL KEY(0,K,S) 1700 IF S=0 THEN 1680 1710 CALL COLOR(11,5,1) 1720 GOTO 710
  11. The first program I definitely wrote myself was a simple BASIC game called "Zone Runner". I apparently didn't have it on any disks, but I may have it on cassette at home somewhere... It was clearly inspired by Lode Runner, as you had a white player, a red enemy, and blue bricks on a black background. It generated a maze in a hash way, just random HCHAR and VCHAR and your guy had a blaster he could use to clear the 4 cardinal blocks around him so he could move around to collect treasures. The enemy could move freely through walls (phasing) and had a pretty direct chase routine so if he got close you were pretty much a goner. I did, however, find a game written by my friend and fellow TI-owner at the time, Joe Hammer, a scrolling BASIC game called "Battlefield": 10 CALL CLEAR 20 AIR=0 30 TANK=0 40 RANDOMIZE 50 PP=1 60 PRINT "WHAT IS YOUR NAME" 70 INPUT Z$ 80 CALL CHAR(136,"0000FF42FF424242") 90 CALL COLOR(14,7,2) 100 CALL SCREEN(6) 110 PP=1 120 INPUT " TANK(T) OR JET(J)? ":A$ 130 IF A$="T" THEN 170 140 PP=PP+1 150 CALL CHAR(99,"000000FE7C283810") 160 GOTO 270 170 GOTO 390 180 GF=INT(5*RND)+1 190 IF GF<>3 THEN 260 200 FOR UI=1 TO 30 STEP 8 210 NEXT UI 220 FOR P=1 TO 4 230 RANDOMIZE 240 CALL HCHAR(23,28*RND+2,136) 250 NEXT P 260 RETURN 270 F=12 280 GOTO 380 290 FOR VOL=1 TO 30 STEP 10 300 F=12 310 CALL SOUND(-1000,-7,VOL) 320 CALL SCREEN(INT(VOL/2.5)+1) 330 F=19-F 340 CALL COLOR(9,F,1) 350 NEXT VOL 360 CALL COLOR(9,7,1) 370 RETURN 380 IF PP=2 THEN 400 390 CALL CHAR(99,"7F7F7F7F7F490808") 400 CALL CHAR(100,"447C54100A2E3F7F") 410 KILL=0 420 DUDE=0 430 CALL CHAR(101,"00080C1E1E3E3F7F") 440 CALL CHAR(104,"00181818183C3C00") 450 CALL CHAR(120,"FFFFFFFFFFFFFFFF") 460 CALL CHAR(128,"00FF00FF00FF00FF") 470 CALL COLOR(9,5,1) 480 CALL COLOR(10,16,1) 490 CALL COLOR(11,9,1) 500 CALL COLOR(12,2,1) 510 CALL COLOR(13,9,2) 520 CALL CLEAR 530 CALL SCREEN(15) 540 PRINT 550 PRINT TAB(6);"c B A T T L E F I E L D c" 560 FOR T=1 TO 6 570 PRINT 580 NEXT T 590 PRINT "STEER WITH THE < AND > KEYS" 600 PRINT 610 PRINT TAB(6);"OR USE JOYSTICKS" 620 FOR T=1 TO 5 630 PRINT 640 NEXT T 650 FOR I=110 TO 120 STEP .5 660 CALL SOUND(-150,I,2) 670 NEXT I 680 FOR I=120 TO 110 STEP-.3 690 CALL SOUND(-150,I,2) 700 NEXT I 710 FOR T=110 TO 120 STEP .8 720 CALL SOUND(-75,T,2) 730 NEXT T 740 GOSUB 290 750 CALL SCREEN(15) 760 CALL COLOR(9,5,1) 770 FOR T=1 TO 250 780 NEXT T 790 CALL CLEAR 800 CALL COLOR(9,8,2) 810 OSKILL=1 820 PRINT TAB(2);"ENTER YOUR SKILL LEVEL..." 830 FOR T=1 TO 3 840 PRINT 850 NEXT T 860 PRINT TAB(4);"ENTER :" 870 PRINT 880 PRINT 890 PRINT TAB(;"1 FOR NOVICE" 900 PRINT 910 PRINT TAB(;"2 FOR PRO" 920 PRINT 930 PRINT TAB(;"3 FOR EXPERT" 940 PRINT 950 PRINT TAB(;"4 FOR PERFECT" 960 PRINT 970 PRINT 980 PRINT 990 CALL KEY(1,K,S) 1000 RANDOMIZE 1010 IF S=0 THEN 990 1020 IF K<>18 THEN 1050 1030 SKILL=OSKILL 1040 GOTO 1070 1050 SKILL=-(K=19)-(K=7)*2-(K=*3-(K=9)*4 1060 IF SKILL=0 THEN 990 1070 OSKILL=SKILL 1080 PRINT " HOW MANY PEOPLE DO YOU WANT TO SAVE" 1090 INPUT AS 1100 IF AS>250 THEN 2590 1110 IF AS<25 THEN 1140 1120 PRINT " THINK AGAIN QUICKSILVER" 1130 GOTO 1080 1140 PRINT 1150 PRINT TAB(;"HERE WE GO!!!" 1160 PRINT 1170 PRINT 1180 FOR T=1 TO 400 1190 NEXT T 1200 CALL CLEAR 1210 CALL SCREEN(2) 1220 I=.1 1230 IF(SKILL<>2)*(SKILL<>4)THEN 1250 1240 I=.2 1250 N=24 1260 J=0 1270 OLDN=24 1280 B$="xxxxxxxx" 1290 FOR C=1 TO 4 1300 PRINT TAB(18);"h";B$;"h" 1310 NEXT C 1320 FOR Q=1 TO 900 1330 FOR C=9 TO 6 STEP-1 1340 IF C<>9 THEN 1360 1350 B$="xxxxxxxx" 1360 FOR A=0 TO 6.25 STEP I 1370 GOSUB 2230 1380 GOSUB 180 1390 GOSUB 2400 1400 Y=COS(A) 1410 J=J+1 1420 PRINT TAB(8*Y+10);"h";B$;"h" 1430 IF(RND>.5)+(SKILL=1)+(SKILL=2)THEN 1530 1440 IF J<25 THEN 1530 1450 GOSUB 2230 1460 GOSUB 180 1470 GOSUB 1490 1480 GOTO 1530 1490 FOR T=1 TO 3 1500 CALL HCHAR(23,28*RND+2,128) 1510 NEXT T 1520 RETURN 1530 CALL GCHAR(20,N,G) 1540 CALL HCHAR(19,OLDN,120) 1550 IF(G=128)THEN 1810 1560 GOSUB 2480 1570 IF G=153 THEN 2380 1580 CALL HCHAR(20,N,99) 1590 OLDN=N 1600 CALL KEY(0,K,S) 1610 IF S<>0 THEN 1630 1620 CALL JOYST(1,XR,YR) 1630 N=N+(K=44)-(K=46)+XR/4 1640 NEXT A 1650 B$=SEG$(B$,1,C-2) 1660 FOR D=110 TO 129-C STEP .5 1670 CALL SOUND(-150,D,2) 1680 NEXT D 1690 NEXT C 1700 NEXT Q 1710 CALL CLEAR 1720 CALL SCREEN(11) 1730 PRINT TAB(5);"YOU MADE IT ";Z$ 1740 FOR T=1 TO 10 1750 PRINT 1760 NEXT T 1770 CALL SOUND(2000,175,1,220,1,247,1) 1780 CALL SOUND(2000,349,1,440,1,494,1) 1790 CALL SOUND(2000,698,1,880,1,988,1) 1800 GOTO 1900 1810 CALL HCHAR(20-1,N,101) 1820 CALL HCHAR(20,N,100) 1830 GOSUB 290 1840 CALL SCREEN(3) 1850 FOR T=1 TO 500 1860 NEXT T 1870 CALL CLEAR 1880 CALL COLOR(9,8,2) 1890 GOTO 1930 1900 FOR I=1 TO 500 1910 NEXT I 1920 CALL CLEAR 1930 CALL SCREEN(15) 1940 GOOD=J*10*SKILL+(1000*KILL) 1950 PRINT TAB(6);"YOUR SCORE IS";GOOD 1960 IF GOOD<1500 THEN 2620 1970 IF GOOD<3500 THEN 2640 1980 IF GOOD<7000 THEN 2660 1990 IF GOOD<11000 THEN 2690 2000 IF GOOD<18000 THEN 2720 2010 IF GOOD>18000 THEN 2750 2020 FOR T=1 TO 5 2030 PRINT 2040 NEXT T 2050 GOSUB 2780 2060 PRINT TAB(;"? PLAY AGAIN ?" 2070 PRINT 2080 PRINT 2090 PRINT TAB(4);"<FIRE BUTTON> OR <S>" 2100 PRINT TAB(;"-FOR SAME LEVEL" 2110 DUDE=0 2120 KILL=0 2130 PRINT 2140 PRINT TAB(4);"<C> -CHANGE LEVEL" 2150 PRINT 2160 PRINT TAB(4);"<E> -TO END PROGRAM" 2170 CALL KEY(1,K,S) 2180 IF S=0 THEN 2170 2190 IF(K=18)+(K=2)THEN 1200 2200 IF(K<>5)*(K<>14)THEN 2170 2210 IF K=14 THEN 790 2220 END 2230 FF=INT(2*RND)+1 2240 CALL COLOR(16,9,1) 2250 CALL CHAR(152,"000000FEFFFE") 2260 CALL CHAR(153,"1899FF363C3C2424") 2270 IF FF=2 THEN 2290 2280 RETURN 2290 HH=INT(26*RND)+1 2300 REM *FIRE* 2310 CALL SOUND(15,-5,2) 2320 CALL HCHAR(23,HH,153) 2330 RETURN 2340 CALL SOUND(200,220,2,440,2,880,2) 2350 KILL=KILL+1 2360 IF KILL=AS THEN 1710 2370 RETURN 2380 GOSUB 2340 2390 GOTO 1580 2400 DUDE=DUDE+1 2410 IF DUDE>19 THEN 2430 2420 RETURN 2430 YOU=INT(2*RND)+1 2440 IF YOU=1 THEN 2460 2450 RETURN 2460 GOSUB 1490 2470 RETURN 2480 IF PP=2 THEN 2520 2490 IF G=136 THEN 1810 2500 IF G=104 THEN 2550 2510 GOTO 2580 2520 IF G=104 THEN 1810 2530 IF G=136 THEN 2550 2540 GOTO 2580 2550 FOR T=1 TO 30 STEP 6 2560 CALL SOUND(1,-5,T) 2570 NEXT T 2580 RETURN 2590 PRINT " WE HAVE A JOKER ON OUR HANDS, NIETHER TANKS NOR JETS CAN GO THAT FAST" 2600 PRINT " MERLIN! " 2610 GOTO 1120 2620 PRINT " BETTER LUCK NEXT TIME GRANNY!" 2630 GOTO 2020 2640 PRINT " O.K. DUDE ,CLEAN UP YOUR ACT ,OR WE WONT BE SEEIN' MUCHMORE OF YOU AROUND" 2650 GOTO 2020 2660 PRINT " GOOD WORK BUT ,YOU COULD DO BETTER" 2670 TANK=TANK+1 2680 GOTO 2020 2690 PRINT " GREAT WORK YOUR LOOKIN' GOOD" 2700 TANK=TANK+2 2710 GOTO 2020 2720 PRINT " YOUR LOOKIN' BETTER ALL THE TIME. I COMMEND YOU ON A MISSION WELL DONE" 2730 TANK=TANK+3 2740 GOTO 2020 2750 PRINT " GREAT JOB!I COULDN'T OF DONE BETTER IN 1,000,000 YEARS!" 2760 TANK=TANK+4 2770 GOTO 2020 2780 IF TANK=0 THEN 2880 2790 IF TANK=1 THEN 2900 2800 IF TANK=2 THEN 2920 2810 IF TANK=3 THEN 2940 2820 IF TANK=4 THEN 2960 2830 IF TANK=5 THEN 2980 2840 IF TANK=6 THEN 3000 2850 IF TANK=7 THEN 3020 2860 IF TANK=8 THEN 3040 2870 IF TANK>8 THEN 3060 2880 PRINT " RANK:ROOKIE" 2890 RETURN 2900 PRINT " RANK:PRIVATE" 2910 RETURN 2920 PRINT " RANK:CORPORAL" 2930 RETURN 2940 PRINT " RANK:SEARGEANT" 2950 RETURN 2960 PRINT " RANK:LIEUTENANT" 2970 RETURN 2980 PRINT " RANK:CAPTAIN" 2990 RETURN 3000 PRINT " RANK:MAJOR" 3010 RETURN 3020 PRINT " RANK:COLONAL" 3030 RETURN 3040 PRINT " RANK:GENERAL" 3050 RETURN 3060 PRINT " RANK:FILTHY RICH GENERAL RETIRED AND GLAD OF IT" 3070 FOR T=1 TO 4 3080 FOR F=1 TO 16 3090 CALL SCREEN(F) 3100 NEXT F 3110 NEXT T 3120 CALL SOUND(700,196,1,247,1,294,1) 3130 CALL SOUND(700,220,1,262,1,330,1) 3140 CALL SOUND(700,247,1,294,1,349,1) 3150 CALL SOUND(700,220,1,262,1,330,1) 3160 CALL SOUND(700,196,1,247,1,294,1) 3170 CALL SCREEN(12) 3180 FOR T=1 TO 1000 3190 NEXT T 3200 END
  12. Wizards Dominion was produced by American software.
  13. I like providing useful interface messages. Mind you, it's hard to beat Tunnels of Doom. "Select Movement Option" LOL I'm working to get it to a playable state! I got one more module to code up, and a TON of testing and content generation. There may be a big Christmas push this year...
  14. Some mock-screenshots of the monster statistic screen. Doing stat screens is so memory consumptive, I think I'll have just enough space to get it done!
  15. Well, here is an idea for a competition... How about an RXB competition? Using the latest version of RXB, write a game that utilizes all the fantastic tools that Rich has made available. Set a decent time limit on entries to limit scope, I'd say about eight weeks.
  16. Don't forget Koronis Rift and Rescue on Fractalus for the Coco3! Arguably, the Coco3 versions were the best produced.
  17. The E/A #5 loader is built around the disk system and loading 8K segments. Unfortunately the DSR's for the disk system are pretty much fixed to use the VDP for file buffering; the only way you can do direct to CPU is advanced options like the Corcomp controller with the Miller Graphics EPROMS which lets you do direct sector reads to CPU. Also, option 5 files aren't necessarily loaded into the upper 24K in a linear fashion, which means CASS24K may not work because it would expect the data to be a literal stream in order. You would need to look at the Option 5 files and see what structure they have. MOST of the time they are just linearly read into the upper 24K because the lower 8k is occupied by the loader code, but for example, Rock Runner has 4K segments and they are loaded out of order in weird places, and leave a large gap in the upper memory, probably for buffers.
  18. My brother (who apparently has zero nostalgia for vintage computing days) basically gave me his entire Color Computer system. So I have a Coco2 with 16K ram, an Coco3 with 128K ram, the multipak interface, a disk drive, and a ton of cassette, disk, and cartridge software as well as one of the high-end joysticks. I recently got one of the cloud-9 RGB cables so I could FINALLY after all these years hook up an RGB monitor to it. (Fortunately I owned such a monitor already, a Magnavox Professional series) and it looks very good indeed. In particular, it's nice to be able to see the 80 column mode. Most of his software is either Tandy/Radio Shack stuff or copies of games we got from his best friend at the time, who had a Coco1 upgraded to 64k and tons of pirated stuff on cassette/disk, including most of the Tom Mix games. I remember having a lot of fun playing them. That said, I'm not sure I'll be getting into it. I'm a TI-99/4a guy myself, and it's tough to find time to even devote to that. I'm considering if I want to sell the whole lot to someone who really wants a complete (fairly) deluxe system and will make good use of it.
  19. My tactic in the old days was ALWAYS to hug the edge and always have my guy be on one half of each edge. This gave you a bit more reaction time to dodge the falling objects by going left or right away from them. I personally suspect, though, that the code has the occasional "directly where the player is" action, because once I saw the rock falls come LITERALLY down the split in perfect alignment with my current position. Which is really unfair; there's NO way to dodge them, especially on higher levels when they're so fast. It's really too bad there were some poor game design choices made, because otherwise Alpiner really stands out as a unique arcade game title for the TI with a lot of great bells and whistles including above-average graphics, speech, and music. Also, the abominable snowman looks SO stupid, Like a kid's drawing.
  20. Awesome news! Definitely worth the wait. I recently acquired an RGB cable for my brothers old color computer 3 and I have to say, seeing a clear crisp image instead of a hazy NTSC screen is really nice. Looking forward to it on my TI!
  21. Did you do CALL FILES(1) and NEW prior to loading? The game must do some embedded assembly of some kind which occupies upper VRAM. I have to say, the European TI developers were very slick in overcoming the platform's limitations!
  22. The AMS system was definitely a squandered opportunity. I remember when it was released in 1993, and the excitement was... minimal. I recall some grognard types saying "Oh, you'd never need more than 32k for anything." Of course Asgard's sudden closure later didn't help things, but the general apathy towards "module coding" and the mistaken belief that the TI already had enough memory to do what it needed to was a huge letdown to me. It wasn't long after that when I moved to a PC and boxed up the TI for several years.
  23. Mostly correct! Except that in SAMS you actually map the entire address, not just the RAM sections. So it's like this: 4000: 0000-0FFF 4002: 1000-1FFF 4004: 2000-2FFF 4006: 3000-3FFF 4008: 4000-4FFF 400A: 5000-5FFF 400C: 6000-6FFF 400E: 7000-7FFF 4010: 8000-8FFF 4012: 9000-9FFF 4014: A000-AFFF 4016: B000-BFFF 4018: C000-CFFF 401A: D000-DFFF 401C: E000-EFFF 401F: F000-FFFF Obviously mapping to ROM areas has no effect in this instance.
  24. So here is what I do in my CRPG with the card, which I think should illustrate a 'hands on' approach: When you're in memory mapping mode, all your memory is in "pages" so it's actually pretty easy to accidentally break a program you just started in when turning it on. In the loader program, I set up pages 0-15 in the respective memory addresses, which appears to allow a smooth transition to mapping mode. I don't know how completely necessary this is, but it's best to assume the card is not initialized. * Set up AMS LI R12,>1E00 * Set CRU for AMS LI R0,>4000 CLR R1 LI R2,16 INIT1 SBO 0 * Turn on AMS card page mapping MOV R1,*R0+ * Copy page assignments (0-15) AI R1,>0100 * Add 1 to each page value DEC R2 JNE INIT1 * Are we at end of loop? SBZ 0 * Turn off memory page mode LI R12,>1E00 * Set CRU for AMS SBO 1 * Turn on mapping mode After loading all my program data into various pages in the loader, I set up half of the upper 24k to a fixed "root" module, which is always present, and the second half to a "start" module which has the title screen, music, character creation, etc. * Setup root segment, branch to start segment INIT3 LI R12,>1E00 * Access AMS card mapper SBO 0 LI R5,>0A0A * Set R5 to 10 (high byte) MOV R5,@>4014 * Set >A000 page for Root segment AI R5,>0100 * Add 1 to page MOV R5,@>4016 * Set >B000 page for next file AI R5,>0100 * Add 1 to page MOV R5,@>4018 * Set >C000 page for next file LI R5,>1600 * Set R5 to 22 (high byte) MOV R5,@>401A * Set >D000 page for Start segment AI R5,>0100 * Add 1 to page MOV R5,@>401C * Set >E000 page for next file AI R5,>0100 * Add 1 to page MOV R5,@>401E * Set >F000 page for next file AI R5,>0100 * Add 1 to page SBZ 0 B @>D000 * Branch to start segment In my actual program, I use the lower 8K as data pages, which are frequently switched. I wrote two calling routines called PAGE1 and PAGE2 which set the active page to the passed value. * Page swap routines. Page is stored in R3 * Page swap into >2000 PAGE1 DATA WS2,PAGE1A PAGE1A LI R0,>4004 * Set to >2000 page JMP PAGE PAGE2 DATA WS2,PAGE2A * Page swap into >3000 PAGE2A LI R0,>4006 * Set to >3000 page PAGE MOV @>0006(R13),R1 * Copy page value to bottom byte MOVB @>0007(R13),R1 * Copy page value to top byte LI R12,>1E00 SBO 0 * Access the mapper MOV R1,*R0 * Set the page number SBZ 0 RTWP The other part is the module switcher, which switches the high 12k page for travel, combat, and management modes. * Module swap. Current game mode in GSTATE SETMOD LI R12,>1E00 MOV @GSTATE,R0 JEQ SETTRV CI R0,1 JEQ SETMGR CI R0,2 JEQ SETCOM * Set start module LI R1,>1616 JMP SETMD2 * Set combat module SETCOM LI R1,>1313 JMP SETMD2 * Set travel module SETTRV LI R1,>0D0D JMP SETMD2 * Set manager module SETMGR LI R1,>1010 SETMD2 SBO 0 LI R0,>401A MOV R1,*R0+ AI R1,>0101 MOV R1,*R0+ AI R1,>0101 MOV R1,*R0+ SBZ 0 B @>D000 * Branch to start of module
  25. The TI Tech pages has some examples, but they aren't as clear and concise as they could be. I could write something up for it, since I had to hash my way through it.
×
×
  • Create New...