Subject: New test code

From: Owen Brand <[email-masked]>
Date: Mon, 1 Feb 2010 01:00:36 -0500

I have a bit of test code here... I am interested to hear what you all  
think about the new updates to the code.  It is far from a playable  
game... It is still in testing/coding mode.  But I added some sound FX  
for when the bee is killed, and also for when the bee hits the  
"Honeycomb" which (at this point) is just a red asterisk with a white  
background.  I have also added a rudimentary and preliminary scoring  
engine... It simply adds 100 points to your score each time you reach  
the Honeycomb. if you touch the honeycomb 5 times, the screen goes red  
and program operation freezes... This is the "boss stage" so to speak,  
and I have not merged that in to this program yet.  Happy honey  
hunting.  Hope to hear comments.

100 CALL INIT
110 CALL CLEAR :: CALL SCREEN(2)
120 CALL CHAR(97,"FFFFFFFFFFFFFFFF")
130 CALL CHAR(98,"0103070F1F3F7FFF")
140 CALL CHAR(99,"80C0E0F0F8FCFEFF")
150 CALL CHAR(100,"FFFEFCF8F0E0C080")
160 CALL CHAR(101,"FF7F3F1F0F070301")
170 CALL CHAR(102,"E7C381000081C3E7")
180 CALL CHAR(103,"0081C3E7E7FFFFFF")
190 CALL CHAR(104,"FF7E3C18")
200 CALL CHAR 
(108,"000000783C1E4FE7E7FDFF03070F1E3C0000000000000181F15DF9C181000000")
210 CALL HCHAR(9,13,97,19) :: CALL VCHAR(3,3,97,7) :: CALL VCHAR 
(3,6,97,7) :: CALL VCHAR(3,29,97,6) :: CALL HCHAR(6,4,97,2)
220 CALL HCHAR(6,10,97,2) :: CALL VCHAR(5,13,97,4) :: CALL HCHAR 
(5,8,97) :: CALL VCHAR(6,7,97) :: CALL VCHAR(7,8,97) :: CALL VCHAR 
(6,9,97)
230 CALL HCHAR(7,10,97) :: CALL HCHAR(5,11,97) :: CALL HCHAR 
(5,14,97) :: CALL HCHAR(7,14,97) :: CALL VCHAR(6,17,97,3)
240 CALL VCHAR(6,25,97,2):: CALL VCHAR(6,27,97,2):: CALL HCHAR 
(7,30,97,2):: CALL HCHAR(8,31,97):: CALL HCHAR(4,15,97):: CALL HCHAR 
(4,19,97)
250 CALL VCHAR(5,23,97)
260 CALL HCHAR(5,16,97):: CALL HCHAR(5,18,97):: CALL HCHAR(6,20,97)::  
CALL HCHAR(5,21,97) :: CALL HCHAR(7,21,97) :: CALL HCHAR(7,23,97)
270 CALL HCHAR(7,23,97):: CALL HCHAR(9,23,97):: CALL HCHAR(6,22,97)::  
CALL HCHAR(6,24,97)
280 REM  **RAPTURE** CALL HCHAR(11,3,97,4)
290 CALL HCHAR(11,3,97,4):: CALL VCHAR(12,3,97,5):: CALL VCHAR 
(13,7,97,3):: CALL VCHAR(13,9,97,5) :: CALL VCHAR(12,8,97)
300 CALL VCHAR(14,8,97):: CALL VCHAR(12,5,97):: CALL VCHAR 
(13,4,97,2):: CALL VCHAR(15,5,97):: CALL VCHAR(16,6,97):: CALL VCHAR 
(11,11,97,6)
310 CALL HCHAR(11,12,97,2) :: CALL HCHAR(12,13,97,2):: CALL HCHAR 
(13,12,97,2) :: CALL HCHAR(11,15,97,5) :: CALL VCHAR(12,17,97,5)
320 CALL VCHAR(11,20,97,5) :: CALL VCHAR(11,22,97,5):: CALL VCHAR 
(16,21,97) :: CALL HCHAR(11,24,97,4) :: CALL VCHAR(12,24,97,5)
330 CALL VCHAR(14,25,97) :: CALL VCHAR(11,29,97,6):: CALL HCHAR 
(11,30,97,2) :: CALL VCHAR(13,30,97) :: CALL HCHAR(16,30,97,2)
340 CALL VCHAR(12,26,97) :: CALL VCHAR(13,25,97)
350 CALL VCHAR(15,26,97) :: CALL VCHAR(16,27,97)
360 CALL VCHAR(5,7,98) :: CALL VCHAR(4,18,98):: CALL VCHAR(12,4,98)::  
CALL VCHAR(12,25,98) :: CALL VCHAR(12,7,98) :: CALL VCHAR(9,2,98)
370 CALL VCHAR(9,5,98) :: CALL VCHAR(16,2,98):: CALL VCHAR(16,10,98)::  
CALL VCHAR(16,16,98)
380 CALL VCHAR(16,23,98) :: CALL VCHAR(5,20,98) :: CALL VCHAR 
(5,22,98):: CALL VCHAR(5,27,98)
390 CALL VCHAR(9,4,99) :: CALL VCHAR(9,7,99) :: CALL VCHAR(5,9,99)::  
CALL VCHAR(5,10,99) :: CALL VCHAR(4,16,99)
400 CALL VCHAR(5,25,99) :: CALL VCHAR(5,24,99) :: CALL VCHAR 
(16,4,99) :: CALL VCHAR(16,7,99) :: CALL VCHAR(12,9,99)
410 CALL VCHAR(15,6,99) :: CALL VCHAR(14,5,99) :: CALL VCHAR 
(16,25,99):: CALL VCHAR(16,28,99):: CALL VCHAR(15,27,99):: CALL VCHAR 
(14,26,99)
420 CALL VCHAR(16,12,99) :: CALL VCHAR(16,18,99):: CALL VCHAR(11,14,99)
430 CALL VCHAR(3,4,100) :: CALL VCHAR(3,7,100):: CALL VCHAR(7,9,100)::  
CALL VCHAR(5,19,100):: CALL VCHAR(6,18,100):: CALL VCHAR(7,24,100)
440 CALL VCHAR(11,7,100) :: CALL VCHAR(12,6,100):: CALL VCHAR 
(13,5,100):: CALL VCHAR(13,14,100):: CALL VCHAR(12,15,100)
450 CALL VCHAR(16,22,100) :: CALL VCHAR(13,26,100) :: CALL VCHAR 
(12,27,100) :: CALL VCHAR(11,28,100)
460 CALL VCHAR(3,2,101):: CALL VCHAR(3,5,101):: CALL VCHAR(7,7,101) ::  
CALL VCHAR(7,11,101):: CALL VCHAR(5,15,101):: CALL VCHAR(6,16,101)
470 CALL VCHAR(7,20,101):: CALL VCHAR(7,22,101):: CALL VCHAR 
(11,2,101):: CALL VCHAR(15,4,101):: CALL VCHAR(16,5,101):: CALL VCHAR 
(11,10,101)
480 CALL VCHAR(12,19,101):: CALL VCHAR(16,20,101):: CALL VCHAR 
(11,23,101) :: CALL VCHAR(15,25,101) :: CALL VCHAR(16,26,101)
490 CALL VCHAR(6,8,102) :: CALL VCHAR(6,23,102)
500 CALL VCHAR(5,17,103) :: CALL VCHAR(6,26,103) :: CALL VCHAR(7,26,104)
510 DISPLAY AT(20,9):"PRESS ANY KEY TO" :: DISPLAY AT(21,13):"CONTINUE"
520 CALL SCREEN(11)
530 CALL SPRITE(#2,108,2,150,10,0,15) :: CALL MAGNIFY(3)
540 FOR I=9 TO 12 :: CALL COLOR(I,2,1) :: NEXT I
550 CALL KEY(0,K,S) :: IF S=0 THEN 550 :: IF K>-1 THEN GOTO 560
560 CALL CLEAR :: CALL SCREEN(2) :: CALL CHARSET :: CALL DELSPRITE(ALL)
570 REM  **INIT VARIABLES**
580 Q=3 :: LEV=1 :: DSPD=10 :: D=6 :: SCO=0 :: LC=0
590 REM  ** INIT CUSTOM CHARACTERS **
600 FTL$="0000001E1F1F1F0F"
610 FT$="173C3C7E7E3C18BD"
620 FTR$="00000078F8F8F8F0"
630 FL$="01187DFFFF7D1801"
640 FC$="3C4EBEFFFFFF7E3C"
650 FR$="8018BEFFFFBE1880"
660 FBL$="0F1F1F1F1E"
670 FB$="BD183C7E7E3C3C18"
680 FBR$="F0F8F8F878"
690 ST$="1818181818181818"
700 CALL CHAR(33,ST$,88,FTL$,89,FT$,90,FTR$,91,FL$,92,FR$,93,FBL$,94,FB 
$,95,FBR$,40,FC$)
710 CALL CHAR(136,"FFFFFFFFFFFFFFFF")
720 A$=CHR$(88)&CHR$(89)&CHR$(90)&CHR$(33) :: B$=CHR$(91)&CHR$(40)&CHR$ 
(92)&CHR$(33)
730 C$=CHR$(93)&CHR$(94)&CHR$(95)&CHR$(33)
740 FOR R=0 TO 1 :: FOR C=0 TO 5
750 CALL HCHAR(1,1,136,224)
760 DISPLAY AT(R*3+19,C*4-R*2+5):SEG$(A$,1,3+R);
770 DISPLAY AT(R*3+20,C*4-R*2+5):SEG$(B$,1,3+R);
780 DISPLAY AT(R*3+21,C*4-R*2+5):SEG$(C$,1,3+R);
790 NEXT C :: NEXT R
800 RESTORE 1270
810 FOR SP=96 TO 132 STEP 4 :: READ SP$ :: CALL CHAR(SP,SP$) :: NEXT SP
820 CALL HCHAR(1,1,136,224) :: CALL COLOR 
(3,2,8,4,2,8,5,2,8,6,2,8,7,2,8,14,8,1,8,16,1,2,9,16) :: CALL SCREEN(11)
830 CALL SPRITE(#1,100,2,170,5) :: CALL SPRITE(#2,112,7,99,150,0,-15)
840 CALL SPRITE(#4,112,7,75,125,0,-15)
850 CALL SPRITE(#3,96,2,10,5,0,20)
860 CALL MAGNIFY(3)
870 DISPLAY AT(3,21):STR$(Q);
880 DISPLAY AT(1,16):"LEVEL"&STR$(LEV);
890 DISPLAY AT(2,2):STR$(SCO); :: DISPLAY AT(8,26):"*";
900 CALL POSITION(#1,XPOS,YPOS)
910 IF XPOS>185 THEN GOSUB 1200
920 IF YPOS<10 THEN GOSUB 1250
930 IF XPOS<58 THEN GOSUB 1210
940 CALL JOYST(1,X,Y)
950 CALL KEY(1,KKK,SSS) :: IF KKK=18 THEN FG=1
960 CALL MOTION(#1,-Y*2.5,X*2.5)
970 CALL PATTERN(#1,Y*3+X+116)
980 CALL COINC(#1,64,208,8,C) :: IF C=-1 THEN GOTO 1220
990 CALL PEEK(-31877,C) :: IF C AND 32 THEN GOTO 1010 ELSE GOTO 900
1000 970O 890
1010 REM  ** SPIN BEE & FLASH SCREEN **
1020 CALL DELSPRITE(ALL) :: CALL SPRITE(#1,100,2,90,120) :: CALL MOTION 
(#1,0,0) :: RESTORE 1380
1030 I=880
1040 FOR DEAD=1 TO 8 :: CALL SOUND(10,I,1) :: I=I-30
1050 READ SPIN :: CALL PATTERN(#1,SPIN)
1060 CALL SCREEN(7) :: CALL SOUND(10,I,1) :: I=I-30
1070 READ SPIN :: CALL PATTERN(#1,SPIN)
1080 CALL SCREEN(8) :: CALL SOUND(10,I,1) :: I=I-30
1090 NEXT DEAD
1100 Q=Q-1 :: IF Q<0 THEN GOTO 1170
1110 CALL SCREEN(7) :: DISPLAY AT(6,8):"OOPS"; :: DISPLAY AT 
(6,13):"BE"; :: DISPLAY AT(6,16):"CAREFUL";
1120 FOR X=1 TO 400 :: NEXT X
1130 CALL SCREEN(2) :: DISPLAY AT(7,10):"HERE"; :: DISPLAY AT 
(7,15):"WE"; :: DISPLAY AT(7,18):"GO"; :: CALL SCREEN(7)
1140 FOR X=1 TO 400 :: NEXT X
1150 CALL SCREEN(2)
1160 GOTO 820
1170 CALL CLEAR
1180 FOR L=1 TO 16
1190 FOR X=1 TO 30 :: NEXT X :: PRINT "GAME OVER":: CALL SCREEN(L)::  
NEXT L:: CALL CHARSET:: CALL CLEAR:: CALL DELSPRITE(ALL):: GOTO 110
1200 CALL LOCATE(#1,185,YPOS) :: RETURN
1210 CALL LOCATE(#1,58,YPOS) :: RETURN
1220 CALL SOUND(50,440,3,554,3,659,1) :: CALL SOUND 
(50,440,3,554,3,880,1) :: CALL SOUND(50,988,1)
1230 CALL SOUND(200,440,3,554,3,1109,1)
1240 SCO=SCO+100 :: LC=LC+1 :: IF LC=5 THEN GOTO 1410 ELSE GOTO 830
1250 CALL LOCATE(#1,XPOS,10) :: RETURN
1260 REM  ** CHARACTER INIT DATA **
1270 DATA  
"000000783C1E4FE7E7FDFF03070F1E3C0000000000000181F15DF9C181000000"
1280 DATA  
"0F7840404140406221281452AC1308108080C82410884427118101030282FE00"
1290 DATA  
"31488780874023100B040100010204048C12E101E102C408F020800080402020"
1300 DATA  
"01011324081122E4888180C040417F00F01E0202820202468414284A35C81008"
1310 DATA  
"0000000001C221151521C301000000001C22418102145455555414028141221C"
1320 DATA  
"040402010001040B102340878087483120204080008020D008C402E101E1128C"
1330 DATA  
"3844828140282AAAAA2A2840818244380000000080C384A8A884438000000000"
1340 DATA  
"100813AC52142821624040414040780F00FE8202030181112744881024C88080"
1350 DATA  
"040402010001040B102340878087483120204080008020D008C402E101E1128C"
1360 DATA  
"007F4140C0808188E4221108241301010810C8354A2814844602028202021EF0"
1370 REM  ** SPRITE SPIN DATA **
1380 DATA 120,108,104,100,112,124,128,132
1390 DATA 120,108,104,100,112,124,128,132
1400 RETURN
1410 CALL SCREEN(9) :: CALL DELSPRITE(ALL) :: FOR I=1 TO 14 :: CALL  
COLOR(I,9,9) :: NEXT I
1420 GOTO 1420
1500 CALL SPRITE(#1,100,2,170,5)

Owen Brand
**Oprysoft**
Opry99er.com

---

From: alekin garavia <[email-masked]>
Date: Mon, 1 Feb 2010 14:07:42 +0000 (GMT)

Hello .. i try a put this listate on classic 99 with function copy and paste but more more errors.. i wrong in use?? i don't understand but write no in correct mode ... ???

--- Lun 1/2/10, Owen Brand <[email-masked]> ha scritto:

Da: Owen Brand <[email-masked]>
Oggetto: [TI994A] New test code
A: [email-masked]
Data: Lunedì 1 febbraio 2010, 07:00

  

      I have a bit of test code here... I am interested to hear what you all think about the new updates to the code.  It is far from a playable game... It is still in testing/coding mode.  But I added some sound FX for when the bee is killed, and also for when the bee hits the "Honeycomb" which (at this point) is just a red asterisk with a white background.  I have also added a rudimentary and preliminary scoring engine... It simply adds 100 points to your score each time you reach the Honeycomb. if you touch the honeycomb 5 times, the screen goes red and program operation freezes... This is the "boss stage" so to speak, and I have not merged that in to this program yet.  Happy honey hunting.  Hope to hear comments.

100 CALL INIT
110 CALL CLEAR :: CALL SCREEN(2)
120 CALL CHAR(97,"FFFFFFFFFF FFFFFF")
130 CALL CHAR(98,"0103070F1F 3F7FFF")
140 CALL CHAR(99,"80C0E0F0F8 FCFEFF")
150 CALL CHAR(100,"FFFEFCF8F 0E0C080")
160 CALL CHAR(101,"FF7F3F1F0 F070301")
170 CALL CHAR(102,"E7C381000 081C3E7")
180 CALL CHAR(103,"0081C3E7E 7FFFFFF")
190 CALL CHAR(104,"FF7E3C18" )
200 CALL CHAR(108,"000000783 C1E4FE7E7FDFF030 70F1E3C000000000 0000181F15DF9C18 1000000")
210 CALL HCHAR(9,13,97, 19) :: CALL VCHAR(3,3,97, 7) :: CALL VCHAR(3,6,97, 7) :: CALL VCHAR(3,29,97, 6) :: CALL HCHAR(6,4,97, 2)
220 CALL HCHAR(6,10,97, 2) :: CALL VCHAR(5,13,97, 4) :: CALL HCHAR(5,8,97) :: CALL VCHAR(6,7,97) :: CALL VCHAR(7,8,97) :: CALL VCHAR(6,9,97)
230 CALL HCHAR(7,10,97) :: CALL HCHAR(5,11,97) :: CALL HCHAR(5,14,97) :: CALL HCHAR(7,14,97) :: CALL VCHAR(6,17,97, 3)
240 CALL VCHAR(6,25,97, 2):: CALL VCHAR(6,27,97, 2):: CALL HCHAR(7,30,97, 2):: CALL HCHAR(8,31,97) :: CALL HCHAR(4,15,97) :: CALL HCHAR(4,19,97)
250 CALL VCHAR(5,23,97)
260 CALL HCHAR(5,16,97) :: CALL HCHAR(5,18,97) :: CALL HCHAR(6,20,97) :: CALL HCHAR(5,21,97) :: CALL HCHAR(7,21,97) :: CALL HCHAR(7,23,97)
270 CALL HCHAR(7,23,97) :: CALL HCHAR(9,23,97) :: CALL HCHAR(6,22,97) :: CALL HCHAR(6,24,97)
280 REM  **RAPTURE** CALL HCHAR(11,3,97, 4)
290 CALL HCHAR(11,3,97, 4):: CALL VCHAR(12,3,97, 5):: CALL VCHAR(13,7,97, 3):: CALL VCHAR(13,9,97, 5) :: CALL VCHAR(12,8,97)
300 CALL VCHAR(14,8,97) :: CALL VCHAR(12,5,97) :: CALL VCHAR(13,4,97, 2):: CALL VCHAR(15,5,97) :: CALL VCHAR(16,6,97) :: CALL VCHAR(11,11, 97,6)
310 CALL HCHAR(11,12, 97,2) :: CALL HCHAR(12,13, 97,2):: CALL HCHAR(13,12, 97,2) :: CALL HCHAR(11,15, 97,5) :: CALL VCHAR(12,17, 97,5)
320 CALL VCHAR(11,20, 97,5) :: CALL VCHAR(11,22, 97,5):: CALL VCHAR(16,21, 97) :: CALL HCHAR(11,24, 97,4) :: CALL VCHAR(12,24, 97,5)
330 CALL VCHAR(14,25, 97) :: CALL VCHAR(11,29, 97,6):: CALL HCHAR(11,30, 97,2) :: CALL VCHAR(13,30, 97) :: CALL HCHAR(16,30, 97,2)
340 CALL VCHAR(12,26, 97) :: CALL VCHAR(13,25, 97)
350 CALL VCHAR(15,26, 97) :: CALL VCHAR(16,27, 97)
360 CALL VCHAR(5,7,98) :: CALL VCHAR(4,18,98) :: CALL VCHAR(12,4,98) :: CALL VCHAR(12,25, 98) :: CALL VCHAR(12,7,98) :: CALL VCHAR(9,2,98)
370 CALL VCHAR(9,5,98) :: CALL VCHAR(16,2,98) :: CALL VCHAR(16,10, 98):: CALL VCHAR(16,16, 98)
380 CALL VCHAR(16,23, 98) :: CALL VCHAR(5,20,98) :: CALL VCHAR(5,22,98) :: CALL VCHAR(5,27,98)
390 CALL VCHAR(9,4,99) :: CALL VCHAR(9,7,99) :: CALL VCHAR(5,9,99) :: CALL VCHAR(5,10,99) :: CALL VCHAR(4,16,99)
400 CALL VCHAR(5,25,99) :: CALL VCHAR(5,24,99) :: CALL VCHAR(16,4,99) :: CALL VCHAR(16,7,99) :: CALL VCHAR(12,9,99)
410 CALL VCHAR(15,6,99) :: CALL VCHAR(14,5,99) :: CALL VCHAR(16,25, 99):: CALL VCHAR(16,28, 99):: CALL VCHAR(15,27, 99):: CALL VCHAR(14,26, 99)
420 CALL VCHAR(16,12, 99) :: CALL VCHAR(16,18, 99):: CALL VCHAR(11,14, 99)
430 CALL VCHAR(3,4,100) :: CALL VCHAR(3,7,100) :: CALL VCHAR(7,9,100) :: CALL VCHAR(5,19,100) :: CALL VCHAR(6,18,100) :: CALL VCHAR(7,24,100)
440 CALL VCHAR(11,7,100) :: CALL VCHAR(12,6,100) :: CALL VCHAR(13,5,100) :: CALL VCHAR(13,14, 100):: CALL VCHAR(12,15, 100)
450 CALL VCHAR(16,22, 100) :: CALL VCHAR(13,26, 100) :: CALL VCHAR(12,27, 100) :: CALL VCHAR(11,28, 100)
460 CALL VCHAR(3,2,101) :: CALL VCHAR(3,5,101) :: CALL VCHAR(7,7,101) :: CALL VCHAR(7,11,101) :: CALL VCHAR(5,15,101) :: CALL VCHAR(6,16,101)
470 CALL VCHAR(7,20,101) :: CALL VCHAR(7,22,101) :: CALL VCHAR(11,2,101) :: CALL VCHAR(15,4,101) :: CALL VCHAR(16,5,101) :: CALL VCHAR(11,10, 101)
480 CALL VCHAR(12,19, 101):: CALL VCHAR(16,20, 101):: CALL VCHAR(11,23, 101) :: CALL VCHAR(15,25, 101) :: CALL VCHAR(16,26, 101)
490 CALL VCHAR(6,8,102) :: CALL VCHAR(6,23,102)
500 CALL VCHAR(5,17,103) :: CALL VCHAR(6,26,103) :: CALL VCHAR(7,26,104)
510 DISPLAY AT(20,9):"PRESS ANY KEY TO" :: DISPLAY AT(21,13):"CONTINUE "
520 CALL SCREEN(11)
530 CALL SPRITE(#2,108, 2,150,10, 0,15) :: CALL MAGNIFY(3)
540 FOR I=9 TO 12 :: CALL COLOR(I,2,1) :: NEXT I
550 CALL KEY(0,K,S) :: IF S=0 THEN 550 :: IF K>-1 THEN GOTO 560
560 CALL CLEAR :: CALL SCREEN(2) :: CALL CHARSET :: CALL DELSPRITE(ALL)
570 REM  **INIT VARIABLES**
580 Q=3 :: LEV=1 :: DSPD=10 :: D=6 :: SCO=0 :: LC=0
590 REM  ** INIT CUSTOM CHARACTERS **
600 FTL$="0000001E1F1F1 F0F"
610 FT$="173C3C7E7E3C18 BD"
620 FTR$="00000078F8F8F 8F0"
630 FL$="01187DFFFF7D18 01"
640 FC$="3C4EBEFFFFFF7E 3C"
650 FR$="8018BEFFFFBE18 80"
660 FBL$="0F1F1F1F1E"
670 FB$="BD183C7E7E3C3C 18"
680 FBR$="F0F8F8F878"
690 ST$="1818181818181818"
700 CALL CHAR(33,ST$, 88,FTL$,89, FT$,90,FTR$ ,91,FL$,92, FR$,93,FBL$ ,94,FB$,95, FBR$,40,FC$ )
710 CALL CHAR(136,"FFFFFFFFF FFFFFFF")
720 A$=CHR$(88)&CHR$(89)&CHR$(90)&CHR$(33) :: B$=CHR$(91)&CHR$(40)&CHR$(92)&CHR$(33)
730 C$=CHR$(93)&CHR$(94)&CHR$(95)&CHR$(33)
740 FOR R=0 TO 1 :: FOR C=0 TO 5
750 CALL HCHAR(1,1,136, 224)
760 DISPLAY AT(R*3+19,C* 4-R*2+5): SEG$(A$,1, 3+R);
770 DISPLAY AT(R*3+20,C* 4-R*2+5): SEG$(B$,1, 3+R);
780 DISPLAY AT(R*3+21,C* 4-R*2+5): SEG$(C$,1, 3+R);
790 NEXT C :: NEXT R
800 RESTORE 1270
810 FOR SP=96 TO 132 STEP 4 :: READ SP$ :: CALL CHAR(SP,SP$) :: NEXT SP
820 CALL HCHAR(1,1,136, 224) :: CALL COLOR(3,2,8, 4,2,8,5,2, 8,6,2,8,7, 2,8,14,8, 1,8,16,1, 2,9,16) :: CALL SCREEN(11)
830 CALL SPRITE(#1,100, 2,170,5) :: CALL SPRITE(#2,112, 7,99,150, 0,-15)
840 CALL SPRITE(#4,112, 7,75,125, 0,-15)
850 CALL SPRITE(#3,96, 2,10,5,0, 20)
860 CALL MAGNIFY(3)
870 DISPLAY AT(3,21):STR$ (Q);
880 DISPLAY AT(1,16):"LEVEL"&STR$(LEV);
890 DISPLAY AT(2,2):STR$ (SCO); :: DISPLAY AT(8,26):"*" ;
900 CALL POSITION(#1, XPOS,YPOS)
910 IF XPOS>185 THEN GOSUB 1200
920 IF YPOS<10 THEN GOSUB 1250
930 IF XPOS<58 THEN GOSUB 1210
940 CALL JOYST(1,X,Y)
950 CALL KEY(1,KKK,SSS) :: IF KKK=18 THEN FG=1
960 CALL MOTION(#1,-Y* 2.5,X*2.5)
970 CALL PATTERN(#1,Y* 3+X+116)
980 CALL COINC(#1,64, 208,8,C) :: IF C=-1 THEN GOTO 1220
990 CALL PEEK(-31877, C) :: IF C AND 32 THEN GOTO 1010 ELSE GOTO 900
1000 970O 890
1010 REM  ** SPIN BEE & FLASH SCREEN **
1020 CALL DELSPRITE(ALL) :: CALL SPRITE(#1,100, 2,90,120) :: CALL MOTION(#1,0, 0) :: RESTORE 1380
1030 I=880
1040 FOR DEAD=1 TO 8 :: CALL SOUND(10,I,1) :: I=I-30
1050 READ SPIN :: CALL PATTERN(#1,SPIN)
1060 CALL SCREEN(7) :: CALL SOUND(10,I,1) :: I=I-30
1070 READ SPIN :: CALL PATTERN(#1,SPIN)
1080 CALL SCREEN(8) :: CALL SOUND(10,I,1) :: I=I-30
1090 NEXT DEAD
1100 Q=Q-1 :: IF Q<0 THEN GOTO 1170
1110 CALL SCREEN(7) :: DISPLAY AT(6,8):"OOPS" ; :: DISPLAY AT(6,13):"BE" ; :: DISPLAY AT(6,16):"CAREFUL" ;
1120 FOR X=1 TO 400 :: NEXT X
1130 CALL SCREEN(2) :: DISPLAY AT(7,10):"HERE" ; :: DISPLAY AT(7,15):"WE" ; :: DISPLAY AT(7,18):"GO" ; :: CALL SCREEN(7)
1140 FOR X=1 TO 400 :: NEXT X
1150 CALL SCREEN(2)
1160 GOTO 820
1170 CALL CLEAR
1180 FOR L=1 TO 16
1190 FOR X=1 TO 30 :: NEXT X :: PRINT "GAME OVER":: CALL SCREEN(L):: NEXT L:: CALL CHARSET:: CALL CLEAR:: CALL DELSPRITE(ALL) :: GOTO 110
1200 CALL LOCATE(#1,185, YPOS) :: RETURN
1210 CALL LOCATE(#1,58, YPOS) :: RETURN
1220 CALL SOUND(50,440, 3,554,3,659, 1) :: CALL SOUND(50,440, 3,554,3,880, 1) :: CALL SOUND(50,988, 1)
1230 CALL SOUND(200,440, 3,554,3,1109, 1)
1240 SCO=SCO+100 :: LC=LC+1 :: IF LC=5 THEN GOTO 1410 ELSE GOTO 830
1250 CALL LOCATE(#1,XPOS, 10) :: RETURN
1260 REM  ** CHARACTER INIT DATA **
1270 DATA "000000783C1E4FE7E7 FDFF03070F1E3C00 00000000000181F1 5DF9C181000000"
1280 DATA "0F7840404140406221 281452AC13081080 80C8241088442711 8101030282FE00"
1290 DATA "31488780874023100B 040100010204048C 12E101E102C408F0 20800080402020"
1300 DATA "01011324081122E488 8180C040417F00F0 1E02028202024684 14284A35C81008"
1310 DATA "0000000001C2211515 21C301000000001C 2241810214545555 5414028141221C"
1320 DATA "040402010001040B10 2340878087483120 204080008020D008 C402E101E1128C"
1330 DATA "3844828140282AAAAA 2A28408182443800 00000080C384A8A8 84438000000000"
1340 DATA "100813AC5214282162 4040414040780F00 FE82020301811127 44881024C88080"
1350 DATA "040402010001040B10 2340878087483120 204080008020D008 C402E101E1128C"
1360 DATA "007F4140C0808188E4 2211082413010108 10C8354A28148446 02028202021EF0"
1370 REM  ** SPRITE SPIN DATA **
1380 DATA 120,108,104, 100,112,124, 128,132
1390 DATA 120,108,104, 100,112,124, 128,132
1400 RETURN
1410 CALL SCREEN(9) :: CALL DELSPRITE(ALL) :: FOR I=1 TO 14 :: CALL COLOR(I,9,9) :: NEXT I
1420 GOTO 1420
1500 CALL SPRITE(#1,100, 2,170,5)

Owen Brand**Oprysoft**Opry99er.com

---

From: Owen Brand <[email-masked]>
Date: Mon, 1 Feb 2010 09:24:38 -0500

As long as you are in Extended BASIC and not TI BASIC, it should work  
just fine...

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 1, 2010, at 9:07 AM, alekin garavia <[email-masked]>  
wrote:

> Hello .. i try a put this listate on classic 99 with function copy  
> and paste but more more errors.. i wrong in use?? i don't understand  
> but write no in correct mode ... ???
>
> I have a bit of test code here... I am interested to hear what you  
> all think about the new updates to the code.  It is far from a  
> playable game... It is still in testing/coding mode.  But I added  
> some sound FX for when the bee is killed, and also for when the bee  
> hits the "Honeycomb" which (at this point) is just a red asterisk  
> with a white background.  I have also added a rudimentary and  
> preliminary scoring engine... It simply adds 100 points to your  
> score each time you reach the Honeycomb. if you touch the honeycomb  
> 5 times, the screen goes red and program operation freezes... This  
> is the "boss stage" so to speak, and I have not merged that in to  
> this program yet.  Happy honey hunting.  Hope to hear comments.
>
>
> 100 CALL INIT
> 210 CALL HCHAR(9,13,97, 19) :: CALL VCHAR(3,3,97, 7) :: CALL VCHAR 
> (3,6,97, 7) :: CALL VCHAR(3,29,97, 6) :: CALL HCHAR(6,4,97, 2)
> 220 CALL HCHAR(6,10,97, 2) :: CALL VCHAR(5,13,97, 4) :: CALL HCHAR 
> (5,14,97) :: CALL HCHAR(7,14,97) :: CALL VCHAR(6,17,97, 3)
> 240 CALL VCHAR(6,25,97, 2):: CALL VCHAR(6,27,97, 2):: CALL HCHAR 
> (7,30,97, 2):: CALL HCHAR(8,31,97) :: CALL HCHAR(4,15,97) :: CALL  
> HCHAR(4,19,97)
> 250 CALL VCHAR(5,23,97)
> 260 CALL HCHAR(5,16,97) :: CALL HCHAR(5,18,97) :: CALL HCHAR 
> (6,20,97) :: CALL HCHAR(5,21,97) :: CALL HCHAR(7,21,97) :: CALL HCHAR 
> (7,23,97)
> 290 CALL HCHAR(11,3,97, 4):: CALL VCHAR(12,3,97, 5):: CALL VCHAR 
> (13,7,97, 3):: CALL VCHAR(13,9,97, 5) :: CALL VCHAR(12,8,97)
> 300 CALL VCHAR(14,8,97) :: CALL VCHAR(12,5,97) :: CALL VCHAR 
> (13,4,97, 2):: CALL VCHAR(15,5,97) :: CALL VCHAR(16,6,97) :: CALL  
> VCHAR(11,11, 97,6)
> 310 CALL HCHAR(11,12, 97,2) :: CALL HCHAR(12,13, 97,2):: CALL HCHAR 
> (13,12, 97,2) :: CALL HCHAR(11,15, 97,5) :: CALL VCHAR(12,17, 97,5)
> 320 CALL VCHAR(11,20, 97,5) :: CALL VCHAR(11,22, 97,5):: CALL VCHAR 
> (16,21, 97) :: CALL HCHAR(11,24, 97,4) :: CALL VCHAR(12,24, 97,5)
> 330 CALL VCHAR(14,25, 97) :: CALL VCHAR(11,29, 97,6):: CALL HCHAR 
> (11,30, 97,2) :: CALL VCHAR(13,30, 97) :: CALL HCHAR(16,30, 97,2)
> 360 CALL VCHAR(5,7,98) :: CALL VCHAR(4,18,98) :: CALL VCHAR 
> (12,4,98) :: CALL VCHAR(12,25, 98) :: CALL VCHAR(12,7,98) :: CALL  
> VCHAR(9,2,98)
> 390 CALL VCHAR(9,4,99) :: CALL VCHAR(9,7,99) :: CALL VCHAR 
> (5,9,99) :: CALL VCHAR(5,10,99) :: CALL VCHAR(4,16,99)
> 410 CALL VCHAR(15,6,99) :: CALL VCHAR(14,5,99) :: CALL VCHAR(16,25,  
> 99):: CALL VCHAR(16,28, 99):: CALL VCHAR(15,27, 99):: CALL VCHAR 
> (14,26, 99)
> 430 CALL VCHAR(3,4,100) :: CALL VCHAR(3,7,100) :: CALL VCHAR 
> (7,9,100) :: CALL VCHAR(5,19,100) :: CALL VCHAR(6,18,100) :: CALL  
> VCHAR(7,24,100)
> 440 CALL VCHAR(11,7,100) :: CALL VCHAR(12,6,100) :: CALL VCHAR 
> (13,5,100) :: CALL VCHAR(13,14, 100):: CALL VCHAR(12,15, 100)
> 460 CALL VCHAR(3,2,101) :: CALL VCHAR(3,5,101) :: CALL VCHAR 
> (7,7,101) :: CALL VCHAR(7,11,101) :: CALL VCHAR(5,15,101) :: CALL  
> VCHAR(6,16,101)
> 470 CALL VCHAR(7,20,101) :: CALL VCHAR(7,22,101) :: CALL VCHAR 
> (11,2,101) :: CALL VCHAR(15,4,101) :: CALL VCHAR(16,5,101) :: CALL  
> VCHAR(11,10, 101)
> 480 CALL VCHAR(12,19, 101):: CALL VCHAR(16,20, 101):: CALL VCHAR 
> (11,23, 101) :: CALL VCHAR(15,25, 101) :: CALL VCHAR(16,26, 101)
> 820 CALL HCHAR(1,1,136, 224) :: CALL COLOR(3,2,8, 4,2,8,5,2,  
> 8,6,2,8,7, 2,8,14,8, 1,8,16,1, 2,9,16) :: CALL SCREEN(11)
> 1110 CALL SCREEN(7) :: DISPLAY AT(6,8):"OOPS" ; :: DISPLAY AT 
> (6,13):"BE" ; :: DISPLAY AT(6,16):"CAREFUL" ;
> 1130 CALL SCREEN(2) :: DISPLAY AT(7,10):"HERE" ; :: DISPLAY AT 
> (7,15):"WE" ; :: DISPLAY AT(7,18):"GO" ; :: CALL SCREEN(7)
> NEXT L:: CALL CHARSET:: CALL CLEAR:: CALL DELSPRITE(ALL) :: GOTO 110

---

From: Owen Brand <[email-masked]>
Date: Mon, 1 Feb 2010 09:43:02 -0500

If you would like, I would be happy to email you the game in FIAD  
format for easy drop into DSK1 of Classic99.  Let me know.  Thanks.

Owen Brand
**Oprysoft**
Opry99er.com

---

From: Gregory McGill <[email-masked]>
Date: Mon, 1 Feb 2010 10:02:27 -0800

Worked for me first try in classic99  so wish i had a linux port of that..

On Sun, Jan 31, 2010 at 10:00 PM, Owen Brand <[email-masked]> wrote:

> think about the new updates to the code.  It is far from a playable game...
> It is still in testing/coding mode.  But I added some sound FX for when the
> bee is killed, and also for when the bee hits the "Honeycomb" which (at this
> point) is just a red asterisk with a white background.  I have also added a
> rudimentary and preliminary scoring engine... It simply adds 100 points to
> your score each time you reach the Honeycomb. if you touch the honeycomb 5
> times, the screen goes red and program operation freezes... This is the
> "boss stage" so to speak, and I have not merged that in to this program yet.
>  Happy honey hunting.  Hope to hear comments.
>
>
> 100 CALL INIT
> 200 CALL
> CHAR(108,"000000783C1E4FE7E7FDFF03070F1E3C0000000000000181F15DF9C181000000")
> 210 CALL HCHAR(9,13,97,19) :: CALL VCHAR(3,3,97,7) :: CALL VCHAR(3,6,97,7)
> :: CALL VCHAR(3,29,97,6) :: CALL HCHAR(6,4,97,2)
> 220 CALL HCHAR(6,10,97,2) :: CALL VCHAR(5,13,97,4) :: CALL HCHAR(5,8,97) ::
> CALL VCHAR(6,7,97) :: CALL VCHAR(7,8,97) :: CALL VCHAR(6,9,97)
> 230 CALL HCHAR(7,10,97) :: CALL HCHAR(5,11,97) :: CALL HCHAR(5,14,97) ::
> CALL HCHAR(7,14,97) :: CALL VCHAR(6,17,97,3)
> 240 CALL VCHAR(6,25,97,2):: CALL VCHAR(6,27,97,2):: CALL HCHAR(7,30,97,2)::
> CALL HCHAR(8,31,97):: CALL HCHAR(4,15,97):: CALL HCHAR(4,19,97)
> 250 CALL VCHAR(5,23,97)
> 260 CALL HCHAR(5,16,97):: CALL HCHAR(5,18,97):: CALL HCHAR(6,20,97):: CALL
> HCHAR(5,21,97) :: CALL HCHAR(7,21,97) :: CALL HCHAR(7,23,97)
> 270 CALL HCHAR(7,23,97):: CALL HCHAR(9,23,97):: CALL HCHAR(6,22,97):: CALL
> HCHAR(6,24,97)
> 290 CALL HCHAR(11,3,97,4):: CALL VCHAR(12,3,97,5):: CALL VCHAR(13,7,97,3)::
> CALL VCHAR(13,9,97,5) :: CALL VCHAR(12,8,97)
> 300 CALL VCHAR(14,8,97):: CALL VCHAR(12,5,97):: CALL VCHAR(13,4,97,2)::
> CALL VCHAR(15,5,97):: CALL VCHAR(16,6,97):: CALL VCHAR(11,11,97,6)
> 310 CALL HCHAR(11,12,97,2) :: CALL HCHAR(12,13,97,2):: CALL
> HCHAR(13,12,97,2) :: CALL HCHAR(11,15,97,5) :: CALL VCHAR(12,17,97,5)
> 320 CALL VCHAR(11,20,97,5) :: CALL VCHAR(11,22,97,5):: CALL VCHAR(16,21,97)
> :: CALL HCHAR(11,24,97,4) :: CALL VCHAR(12,24,97,5)
> 330 CALL VCHAR(14,25,97) :: CALL VCHAR(11,29,97,6):: CALL HCHAR(11,30,97,2)
> :: CALL VCHAR(13,30,97) :: CALL HCHAR(16,30,97,2)
> 360 CALL VCHAR(5,7,98) :: CALL VCHAR(4,18,98):: CALL VCHAR(12,4,98):: CALL
> VCHAR(12,25,98) :: CALL VCHAR(12,7,98) :: CALL VCHAR(9,2,98)
> 370 CALL VCHAR(9,5,98) :: CALL VCHAR(16,2,98):: CALL VCHAR(16,10,98):: CALL
> VCHAR(16,16,98)
> 380 CALL VCHAR(16,23,98) :: CALL VCHAR(5,20,98) :: CALL VCHAR(5,22,98)::
> CALL VCHAR(5,27,98)
> 390 CALL VCHAR(9,4,99) :: CALL VCHAR(9,7,99) :: CALL VCHAR(5,9,99):: CALL
> VCHAR(5,10,99) :: CALL VCHAR(4,16,99)
> 400 CALL VCHAR(5,25,99) :: CALL VCHAR(5,24,99) :: CALL VCHAR(16,4,99) ::
> CALL VCHAR(16,7,99) :: CALL VCHAR(12,9,99)
> 410 CALL VCHAR(15,6,99) :: CALL VCHAR(14,5,99) :: CALL VCHAR(16,25,99)::
> CALL VCHAR(16,28,99):: CALL VCHAR(15,27,99):: CALL VCHAR(14,26,99)
> 430 CALL VCHAR(3,4,100) :: CALL VCHAR(3,7,100):: CALL VCHAR(7,9,100):: CALL
> VCHAR(5,19,100):: CALL VCHAR(6,18,100):: CALL VCHAR(7,24,100)
> 440 CALL VCHAR(11,7,100) :: CALL VCHAR(12,6,100):: CALL VCHAR(13,5,100)::
> CALL VCHAR(13,14,100):: CALL VCHAR(12,15,100)
> 450 CALL VCHAR(16,22,100) :: CALL VCHAR(13,26,100) :: CALL VCHAR(12,27,100)
> :: CALL VCHAR(11,28,100)
> 460 CALL VCHAR(3,2,101):: CALL VCHAR(3,5,101):: CALL VCHAR(7,7,101) :: CALL
> VCHAR(7,11,101):: CALL VCHAR(5,15,101):: CALL VCHAR(6,16,101)
> 470 CALL VCHAR(7,20,101):: CALL VCHAR(7,22,101):: CALL VCHAR(11,2,101)::
> CALL VCHAR(15,4,101):: CALL VCHAR(16,5,101):: CALL VCHAR(11,10,101)
> 480 CALL VCHAR(12,19,101):: CALL VCHAR(16,20,101):: CALL VCHAR(11,23,101)
> :: CALL VCHAR(15,25,101) :: CALL VCHAR(16,26,101)
> 700 CALL
> CHAR(33,ST$,88,FTL$,89,FT$,90,FTR$,91,FL$,92,FR$,93,FBL$,94,FB$,95,FBR$,40,FC$)
> 820 CALL HCHAR(1,1,136,224) :: CALL
> COLOR(3,2,8,4,2,8,5,2,8,6,2,8,7,2,8,14,8,1,8,16,1,2,9,16) :: CALL SCREEN(11)
> 1020 CALL DELSPRITE(ALL) :: CALL SPRITE(#1,100,2,90,120) :: CALL
> MOTION(#1,0,0) :: RESTORE 1380
> 1030 I=880
> 1110 CALL SCREEN(7) :: DISPLAY AT(6,8):"OOPS"; :: DISPLAY AT(6,13):"BE"; ::
> DISPLAY AT(6,16):"CAREFUL";
> 1130 CALL SCREEN(2) :: DISPLAY AT(7,10):"HERE"; :: DISPLAY AT(7,15):"WE";
> :: DISPLAY AT(7,18):"GO"; :: CALL SCREEN(7)
> 1190 FOR X=1 TO 30 :: NEXT X :: PRINT "GAME OVER":: CALL SCREEN(L):: NEXT
> L:: CALL CHARSET:: CALL CLEAR:: CALL DELSPRITE(ALL):: GOTO 110
> 1220 CALL SOUND(50,440,3,554,3,659,1) :: CALL SOUND(50,440,3,554,3,880,1)
> :: CALL SOUND(50,988,1)

---

From: mark wills <[email-masked]>
Date: Mon, 1 Feb 2010 11:00:35 -0800 (PST)

Can I be the first to say, it 
 
ROCKS!!!!!
 
Thank you.

---

From: tursi <[email-masked]>
Date: Mon, 1 Feb 2010 11:29:01 -0800 (PST)

> top" style="font: inherit;">Hello .. i try a put this listate on classic 99 with function copy and paste but more
> more errors.. i wrong in use?? i don't understand but write no in correct mode ... ???

Make sure you manually correct the line wrap before pasting.

(Some of these following errors may be local to me since I have a very 
aggressive virus filter that may have altered the text).

The following lines seem to have experienced text errors and are 
concatenated:
380-390
480-490
620-630
1260-1270
1340-1350
1390-1400

The following lines are too long to enter as-is - need to remove spaces 
before pasting:
240
300
380
410
430
460
470

Oddly.. most of the call chars have spaces in them for me... this also 
causes problems (CALL CHAR and the DATAs)

After fixing all that, it runs for me. :) It looks pretty slick so far! :)

This is kind of like fixing problems after typing them in from a book, 
hehe. Except easier since you can use a text editor to search and replace. 
;) Though, Owen, I might suggest you lean towards shorter lines to make it 
easier for people who copy and paste your code. :)

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 02:09:31 -0800 (PST)

Owen,

Regarding your requirement to speed up the drawing the title screen, I took your HCHAR and VCHAR XB code that you posted yesterday, and coded it in assembler. Tried it just now. Think it works. Faster than a fast thing!

I *might* have made some errors in the HCHAR/VCHAR data though, so see how you get on.

Things to note: In BASIC, the repeat count on HCHAR and VCHAR is optional. In my code, it's not!

Your game can just do a:

10 CALL CLEAR :: CALL INIT :: PRINT "Loading"
20 CALL LOAD("DSK3.OWEN/O")

to load the assembly code

Define your characters and colours in XB as normal.

When you want to display the screen, do a CALL CLEAR :: CALL LINK("DRAW")

That's it. (Errors in the HCHAR and VCHAR notwithstanding!)

Now go at it.

Attached is:

OWEN/S the assembly source code, fully commented. It assembles with TIs standard Editor/Assembler
OWEN/O the assembled source code - your XB code should load this file
OWEN/XB - small XB demo to try it out - not sure if I made errors in the HCHAR/VCHAR data, as I said...

If you have to correct the HCHAR/VCHAR (I used multiple runs of Search and Replace in notepad!) then just correct them in the source file, save, assemble (use the R option) and you're done. You'll see how it works in an instant when you open the source code.

BTW: In the editor of the Editor Assembler package:
F4=Page down
F6=Page up
F8=Insert line
F3=Delete line

Enjoy, and good luck in the RGPC ;-)

Mark.

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 02:11:00 -0800 (PST)

In case anyone is interested, here's the source code:

       DEF DRAW
 
HCHAR  EQU 0        * flag for HCHAR
VCHAR  EQU 1        * flag for VCHAR
ENDDAT EQU 255      * flag for end of data
 
VDPW   EQU >8C00    * vdp write register
VDPA   EQU >8C02    * vdp address register
 
DRAW   MOV R11,R10  * save return address to XB
       LI R3,DLIST  * beginning of data list
DRAW1  CLR R0
       MOVB *R3+,R0 * get command code
       CI R0,>FF00  * is it END code?
       JEQ QUIT     * if yes, take the jump
       MOV R0,R0    * compare R0 to 0 (HCHAR)
       JEQ HCHR     * it's a HCHAR command
* otherwise, it's a VCHAR command...
       BL @GETDAT   * get the VCHAR data
       BL @VSBWMV   * write to the screen
       JMP DRAW1    * repeat
 
HCHR   BL @GETDAT   * get the HCHAR data
       BL @VSBWMH   * write to the screen
       JMP DRAW1    * repeat
 
GETDAT CLR R0       * used for single byte operations
       CLR R1       * used for single byte operations
       CLR R2       * used for single byte operations
       MOVB *R3+,R0 * get Y
       SWPB R0      * move to low byte
       DEC R0       * correct BASIC offset
       SLA R0,5     * multiply by 32
       MOVB *R3+,R1 * get x
       SWPB R1      * move to low byte
       DEC R1       * correct BASIC offset
       A R1,R0      * add to y. R0=screen address
       MOVB *R3+,R1 * get ascii code
       AI R1,>6000  * add BASIC offset
       MOVB *R3+,R2 * get repeat count
       SWPB R2      * put in low byte
       RT           * return to caller
 
* VDP Single Byte Write Many Vertical (VSBWMV)
VSBWMV  ORI R0,>4000    * this is a vdp write command
        SWPB R0         * low byte first
        MOVB R0,@VDPA   * load low byte into address register
        SWPB R0         * get high byte
        MOVB R0,@VDPA   * write high byte
V2      MOVB R1,@VDPW   * write msb of r1 to vdp write register
        AI R0,32        * move down to next line
        DEC R2          * decrement count
        JNE V2          * loop if not finished
        RT              * return to caller
 
* VDP Single Byte Write Many Horizontal (VSBWMH)
VSBWMH  ORI R0,>4000    * this is a vdp write command
        SWPB R0         * low byte first
        MOVB R0,@VDPA   * load low byte into address register
        SWPB R0         * get high byte
        MOVB R0,@VDPA   * write high byte
V1      MOVB R1,@VDPW   * write msb of r1 to vdp write register
        DEC R2          * decrement count
        JNE V1          * loop if not finished
        RT              * return to caller
 
QUIT    CLR @>837C      * clear GPL status
        B *R10          * return to XB
 
* beginning of data list
DLIST   BYTE HCHAR,9,13,97,19
        BYTE VCHAR,3,3,97,7
        BYTE VCHAR,3,6,97,7
        BYTE VCHAR,3,29,97,6
        BYTE HCHAR,6,4,97,2
        BYTE HCHAR,6,10,97,2
        BYTE VCHAR,5,13,97,4
        BYTE HCHAR,5,8,97,1
        BYTE VCHAR,6,7,97,1
        BYTE VCHAR,7,8,97,1
        BYTE VCHAR,6,9,97,1
        BYTE HCHAR,7,10,97,1
        BYTE HCHAR,5,11,97,1
        BYTE HCHAR,5,14,97,1
        BYTE HCHAR,7,14,97,1
        BYTE VCHAR,6,17,97,3
        BYTE VCHAR,6,25,97,2
        BYTE VCHAR,6,27,97,2
        BYTE HCHAR,7,30,97,2
        BYTE HCHAR,8,31,97,1
        BYTE HCHAR,4,15,97,1
        BYTE HCHAR,4,19,97,1
        BYTE VCHAR,5,23,97,1
        BYTE HCHAR,5,16,97,1
        BYTE HCHAR,5,18,97,1
        BYTE HCHAR,6,20,97,1
        BYTE HCHAR,5,21,97,1
        BYTE HCHAR,7,21,97,1
        BYTE HCHAR,7,23,97,1
        BYTE HCHAR,7,23,97,1
        BYTE HCHAR,9,23,97,1
        BYTE HCHAR,6,22,97,1
        BYTE HCHAR,6,24,97,1
        BYTE HCHAR,11,3,97,4
        BYTE VCHAR,12,3,97,5
        BYTE VCHAR,13,7,97,3
        BYTE VCHAR,13,9,97,5
        BYTE VCHAR,12,8,97,1
        BYTE VCHAR,14,8,97,1
        BYTE VCHAR,12,5,97,1
        BYTE VCHAR,13,4,97,2
        BYTE VCHAR,15,5,97,1
        BYTE VCHAR,16,6,97,1
        BYTE VCHAR,11,11,97,6
        BYTE HCHAR,11,12,97,2
        BYTE HCHAR,12,13,97,2
        BYTE HCHAR,13,12,97,2
        BYTE HCHAR,11,15,97,5
        BYTE VCHAR,12,17,97,5
        BYTE VCHAR,11,20,97,5
        BYTE VCHAR,11,22,97,5
        BYTE VCHAR,16,21,97,1
        BYTE HCHAR,11,24,97,4
        BYTE VCHAR,12,24,97,5
        BYTE VCHAR,14,25,97,1
        BYTE VCHAR,11,29,97,6
        BYTE HCHAR,11,30,97,2
        BYTE VCHAR,13,30,97,1
        BYTE HCHAR,16,30,97,2
        BYTE VCHAR,12,26,97,1
        BYTE VCHAR,13,25,97,1
        BYTE VCHAR,15,26,97,1
        BYTE VCHAR,16,27,97,1
        BYTE VCHAR,5,7,98,1
        BYTE VCHAR,4,18,98,1
        BYTE VCHAR,12,4,98,1
        BYTE VCHAR,12,25,98,1
        BYTE VCHAR,12,7,98,1
        BYTE VCHAR,9,2,98,1
        BYTE VCHAR,9,5,98,1
        BYTE VCHAR,16,2,98,1
        BYTE VCHAR,16,10,98,1
        BYTE VCHAR,16,16,98,1
        BYTE VCHAR,16,23,98,1
        BYTE VCHAR,5,20,98,1
        BYTE VCHAR,5,22,98,1
        BYTE VCHAR,5,27,98,1
        BYTE VCHAR,9,4,99,1
        BYTE VCHAR,9,7,99,1
        BYTE VCHAR,5,9,99,1
        BYTE VCHAR,5,10,99,1
        BYTE VCHAR,4,16,99,1
        BYTE VCHAR,5,25,99,1
        BYTE VCHAR,5,24,99,1
        BYTE VCHAR,16,4,99,1
        BYTE VCHAR,16,7,99,1
        BYTE VCHAR,12,9,99,1
        BYTE VCHAR,15,6,99,1
        BYTE VCHAR,14,5,99,1
        BYTE VCHAR,16,25,99,1
        BYTE VCHAR,16,28,99,1
        BYTE VCHAR,15,27,99,1
        BYTE VCHAR,14,26,99,1
        BYTE VCHAR,16,12,99,1
        BYTE VCHAR,16,18,99,1
        BYTE VCHAR,11,14,99,1
        BYTE VCHAR,3,4,100,1
        BYTE VCHAR,3,7,100,1
        BYTE VCHAR,7,9,100,1
        BYTE VCHAR,5,19,100,1
        BYTE VCHAR,6,18,100,1
        BYTE VCHAR,7,24,100,1
        BYTE VCHAR,11,7,100,1
        BYTE VCHAR,12,6,100,1
        BYTE VCHAR,13,5,100,1
        BYTE VCHAR,13,14,100,1
        BYTE VCHAR,12,15,100,1
        BYTE VCHAR,16,22,100,1
        BYTE VCHAR,13,26,100,1
        BYTE VCHAR,12,27,100,1
        BYTE VCHAR,11,28,100,1
        BYTE VCHAR,3,2,101,1
        BYTE VCHAR,3,5,101,1
        BYTE VCHAR,7,7,101,1
        BYTE VCHAR,7,11,101,1
        BYTE VCHAR,5,15,101,1
        BYTE VCHAR,6,16,101,1
        BYTE VCHAR,7,20,101,1
        BYTE VCHAR,7,22,101,1
        BYTE VCHAR,11,2,101,1
        BYTE VCHAR,15,4,101,1
        BYTE VCHAR,16,5,101,1
        BYTE VCHAR,11,10,101,1
        BYTE VCHAR,12,19,101,1
        BYTE VCHAR,16,20,101,1
        BYTE VCHAR,11,23,101,1
        BYTE VCHAR,15,25,101,1
        BYTE VCHAR,16,26,101,1
        BYTE VCHAR,6,8,102,1
        BYTE VCHAR,6,23,102,1
        BYTE VCHAR,5,17,103,1
        BYTE VCHAR,6,26,103,1
        BYTE VCHAR,7,26,104,1
        BYTE 255,0
        END

---

From: Owen Brand <[email-masked]>
Date: Tue, 2 Feb 2010 06:45:34 -0500

Damn, Mark!!! That's great, man!  Now why the hell do I not know how  
to do that?!?  ;).

I have GOT to do work from this point on in assembly.... It is so much  
faster... Almost like you're on a different computer---  so---once the  
characters are defined in my XB program (all the CALL CHARs) then the  
routine you wrote in AL simply places values at locations.... And DRAW  
is essentially how that works..... I'm studying your code now...  
TMS9900 code just freakin LOOKS slick, doesn't it?  :). Damn.....  
Well, i'll be studying this all morning, so I'll be getting back to  
you with some questions later, I'm sure.  :). Thanks again man

Owen Brand
**Oprysoft**
Opry99er.com

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 03:55:42 -0800 (PST)

No problem. I have attached (to this email) the source code in 'PC' format (.txt) - it might be easier for you to study it. Yahoo always breaks the formatting. It's my only complaint about Yahoo's otherwise excellent facilities.

Any questions, I'm sure I or others can answer.

You might want to look up:
* Indirect addressing (this is how the program reads the BYTEs to do the drawing)
* VDP access - the program directly writes data to the VDP chip - the fastest way.

A quick breakdown of how the program works:

The program points R3 at the start of the data
It reads a byte of data
It determines if it is a HCHAR or VCHAR
It reads the Y screen coordinate
Subtracts 1 from it (because BASIC starts it coordinates from 1)
It multiplies the Y by 32
It reads x
It adds it to Y (R0). Y now points at the correct screen address to start at
It reads the ascii code
It adds 96 (>60 hex) to it because BASIC requires it (location of VDP tables)
It reads how many repeats to do
Draws it to the screen

The key is MOVB *R3+,xx

This neat little instruction reads the BYTE *pointed to* by R3 (NOT the value in R3, but reads from the *address* stored in R3) and moves it to a register. It then adds one to R3, so that it is pointing to next address for you. Most processors have this type of instruction.

Hope this helps.

Mark.

>
>From: Owen Brand <[email-masked]>
>To: "[email-masked]" <[email-masked]>
>Sent: Tue, 2 February, 2010 12:45:34
>Subject: Re: [TI994A] Honeycomb rapture source....
>
> >
>
>
>
>
>  >
>>      
> 
>Damn, Mark!!! That's great, man!  Now why the hell do I not know how to do that?!?  ;).
>
>
>I have GOT to do work from this point on in assembly.... It is so much faster... Almost like you're on a different computer---  so---once the characters are defined in my XB program (all the CALL CHARs) then the routine you wrote in AL simply places values at locations... . And DRAW is essentially how that works..... I'm studying your code now... TMS9900 code just freakin LOOKS slick, doesn't it?  :). Damn..... Well, i'll be studying this all morning, so I'll be getting back to you with some questions later, I'm sure.  :). Thanks again man  
>
>Owen Brand
>**Oprysoft**
>Opry99er.com
>
>On Feb 2, 2010, at 5:11 AM, mark wills <markrobertwills@ yahoo.co. uk> wrote:
>
>
>>>
>>
>>
>>  >>
>>
>> 
>>>>      
>> 
>>>>DLIST   BYTE HCHAR,9,13,97, 19
>>>>        BYTE VCHAR,3,3,97, 7
>>>>        BYTE VCHAR,3,6,97, 7
>>>>        BYTE VCHAR,3,29,97, 6
>>>>        BYTE HCHAR,6,4,97, 2
>>>>        BYTE HCHAR,6,10,97, 2
>>>>        BYTE VCHAR,5,13,97, 4
>>>>        BYTE HCHAR,5,8,97, 1
>>>>        BYTE VCHAR,6,7,97, 1
>>>>        BYTE VCHAR,7,8,97, 1
>>>>        BYTE VCHAR,6,9,97, 1
>>>>        BYTE HCHAR,7,10,97, 1
>>>>        BYTE HCHAR,5,11,97, 1
>>>>        BYTE HCHAR,5,14,97, 1
>>>>        BYTE HCHAR,7,14,97, 1
>>>>        BYTE VCHAR,6,17,97, 3
>>>>        BYTE VCHAR,6,25,97, 2
>>>>        BYTE VCHAR,6,27,97, 2
>>>>        BYTE HCHAR,7,30,97, 2
>>>>        BYTE HCHAR,8,31,97, 1
>>>>        BYTE HCHAR,4,15,97, 1
>>>>        BYTE HCHAR,4,19,97, 1
>>>>        BYTE VCHAR,5,23,97, 1
>>>>        BYTE HCHAR,5,16,97, 1
>>>>        BYTE HCHAR,5,18,97, 1
>>>>        BYTE HCHAR,6,20,97, 1
>>>>        BYTE HCHAR,5,21,97, 1
>>>>        BYTE HCHAR,7,21,97, 1
>>>>        BYTE HCHAR,7,23,97, 1
>>>>        BYTE HCHAR,7,23,97, 1
>>>>        BYTE HCHAR,9,23,97, 1
>>>>        BYTE HCHAR,6,22,97, 1
>>>>        BYTE HCHAR,6,24,97, 1
>>>>        BYTE HCHAR,11,3,97, 4
>>>>        BYTE VCHAR,12,3,97, 5
>>>>        BYTE VCHAR,13,7,97, 3
>>>>        BYTE VCHAR,13,9,97, 5
>>>>        BYTE VCHAR,12,8,97, 1
>>>>        BYTE VCHAR,14,8,97, 1
>>>>        BYTE VCHAR,12,5,97, 1
>>>>        BYTE VCHAR,13,4,97, 2
>>>>        BYTE VCHAR,15,5,97, 1
>>>>        BYTE VCHAR,16,6,97, 1
>>>>        BYTE VCHAR,11,11, 97,6
>>>>        BYTE HCHAR,11,12, 97,2
>>>>        BYTE HCHAR,12,13, 97,2
>>>>        BYTE HCHAR,13,12, 97,2
>>>>        BYTE HCHAR,11,15, 97,5
>>>>        BYTE VCHAR,12,17, 97,5
>>>>        BYTE VCHAR,11,20, 97,5
>>>>        BYTE VCHAR,11,22, 97,5
>>>>        BYTE VCHAR,16,21, 97,1
>>>>        BYTE HCHAR,11,24, 97,4
>>>>        BYTE VCHAR,12,24, 97,5
>>>>        BYTE VCHAR,14,25, 97,1
>>>>        BYTE VCHAR,11,29, 97,6
>>>>        BYTE HCHAR,11,30, 97,2
>>>>        BYTE VCHAR,13,30, 97,1
>>>>        BYTE HCHAR,16,30, 97,2
>>>>        BYTE VCHAR,12,26, 97,1
>>>>        BYTE VCHAR,13,25, 97,1
>>>>        BYTE VCHAR,15,26, 97,1
>>>>        BYTE VCHAR,16,27, 97,1
>>>>        BYTE VCHAR,5,7,98, 1
>>>>        BYTE VCHAR,4,18,98, 1
>>>>        BYTE VCHAR,12,4,98, 1
>>>>        BYTE VCHAR,12,25, 98,1
>>>>        BYTE VCHAR,12,7,98, 1
>>>>        BYTE VCHAR,9,2,98, 1
>>>>        BYTE VCHAR,9,5,98, 1
>>>>        BYTE VCHAR,16,2,98, 1
>>>>        BYTE VCHAR,16,10, 98,1
>>>>        BYTE VCHAR,16,16, 98,1
>>>>        BYTE VCHAR,16,23, 98,1
>>>>        BYTE VCHAR,5,20,98, 1
>>>>        BYTE VCHAR,5,22,98, 1
>>>>        BYTE VCHAR,5,27,98, 1
>>>>        BYTE VCHAR,9,4,99, 1
>>>>        BYTE VCHAR,9,7,99, 1
>>>>        BYTE VCHAR,5,9,99, 1
>>>>        BYTE VCHAR,5,10,99, 1
>>>>        BYTE VCHAR,4,16,99, 1
>>>>        BYTE VCHAR,5,25,99, 1
>>>>        BYTE VCHAR,5,24,99, 1
>>>>        BYTE VCHAR,16,4,99, 1
>>>>        BYTE VCHAR,16,7,99, 1
>>>>        BYTE VCHAR,12,9,99, 1
>>>>        BYTE VCHAR,15,6,99, 1
>>>>        BYTE VCHAR,14,5,99, 1
>>>>        BYTE VCHAR,16,25, 99,1
>>>>        BYTE VCHAR,16,28, 99,1
>>>>        BYTE VCHAR,15,27, 99,1
>>>>        BYTE VCHAR,14,26, 99,1
>>>>        BYTE VCHAR,16,12, 99,1
>>>>        BYTE VCHAR,16,18, 99,1
>>>>        BYTE VCHAR,11,14, 99,1
>>>>        BYTE VCHAR,3,4,100, 1
>>>>        BYTE VCHAR,3,7,100, 1
>>>>        BYTE VCHAR,7,9,100, 1
>>>>        BYTE VCHAR,5,19,100, 1
>>>>        BYTE VCHAR,6,18,100, 1
>>>>        BYTE VCHAR,7,24,100, 1
>>>>        BYTE VCHAR,11,7,100, 1
>>>>        BYTE VCHAR,12,6,100, 1
>>>>        BYTE VCHAR,13,5,100, 1
>>>>        BYTE VCHAR,13,14, 100,1
>>>>        BYTE VCHAR,12,15, 100,1
>>>>        BYTE VCHAR,16,22, 100,1
>>>>        BYTE VCHAR,13,26, 100,1
>>>>        BYTE VCHAR,12,27, 100,1
>>>>        BYTE VCHAR,11,28, 100,1
>>>>        BYTE VCHAR,3,2,101, 1
>>>>        BYTE VCHAR,3,5,101, 1
>>>>        BYTE VCHAR,7,7,101, 1
>>>>        BYTE VCHAR,7,11,101, 1
>>>>        BYTE VCHAR,5,15,101, 1
>>>>        BYTE VCHAR,6,16,101, 1
>>>>        BYTE VCHAR,7,20,101, 1
>>>>        BYTE VCHAR,7,22,101, 1
>>>>        BYTE VCHAR,11,2,101, 1
>>>>        BYTE VCHAR,15,4,101, 1
>>>>        BYTE VCHAR,16,5,101, 1
>>>>        BYTE VCHAR,11,10, 101,1
>>>>        BYTE VCHAR,12,19, 101,1
>>>>        BYTE VCHAR,16,20, 101,1
>>>>        BYTE VCHAR,11,23, 101,1
>>>>        BYTE VCHAR,15,25, 101,1
>>>>        BYTE VCHAR,16,26, 101,1
>>>>        BYTE VCHAR,6,8,102, 1
>>>>        BYTE VCHAR,6,23,102, 1
>>>>        BYTE VCHAR,5,17,103, 1
>>>>        BYTE VCHAR,6,26,103, 1
>>>>        BYTE VCHAR,7,26,104, 1
>>>>        BYTE 255,0
>>>>        END
>>
>

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 03:59:23 -0800 (PST)

>once the characters are defined in my XB program (all the CALL CHARs)
then the routine you wrote in AL simply places values at locations... .

Yes. It draws characters one character at a time, but very quickly... ;-) Just shows how slow GPL is... What a shame... We could have a had a real fast machine back in the day, really really fast... If it wasn't for that stupid GPL idea...

M

---

From: Owen Brand <[email-masked]>
Date: Tue, 2 Feb 2010 07:07:34 -0500

The more I look at this stuff, the more I realize that it's really not  
all that difficult to decipher.... Source I mean... I understand  
assembly syntax pretty well from reading Lottrups book and Morley's  
book and Molesworths book...  But I can also understand Spanish a  
little bit if it's spoken slowly enough... German too.  Doesn't mean I  
can write a short story in either of those languages.  :).  Thank you  
for doing this on my behalf, Mark.  Really, it helps to see the  
assembly equivalent to an XB listing, as it teaches me more and more  
how to understand (and eventually write) subroutines and whole  
programs in the language... I have seen the blazing speed (compared to  
console BASIC and XB) and it makes me hungry!!!

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 2, 2010, at 6:55 AM, mark wills <[email-masked]>  
wrote:

> [Attachment(s) from mark wills included below]
> No problem. I have attached (to this email) the source code in 'PC'  
> format (.txt) - it might be easier for you to study it. Yahoo always  
> breaks the formatting. It's my only complaint about Yahoo's  
> otherwise excellent facilities.
>
> This neat little instruction reads the BYTE *pointed to* by R3 (NOT  
> the value in R3, but reads from the *address* stored in R3) and  
> moves it to a register. It then adds one to R3, so that it is  
> pointing to next address for you. Most processors have this type of  
> instruction.
>
> Hope this helps.
>
> Mark.
>
>
>
>
>
>
> I have GOT to do work from this point on in assembly.... It is so  
> much faster... Almost like you're on a different computer---  so--- 
> once the characters are defined in my XB program (all the CALL  
> CHARs) then the routine you wrote in AL simply places values at  
> locations... . And DRAW is essentially how that works..... I'm  
> studying your code now... TMS9900 code just freakin LOOKS slick,  
> doesn't it?  :). Damn..... Well, i'll be studying this all morning,  
> so I'll be getting back to you with some questions later, I'm  
> sure.  :). Thanks again man
>
> Owen Brand
> **Oprysoft**
> Opry99er.com
>

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 04:18:00 -0800 (PST)

That's good. That exactly what I was hoping for. 9900 Assembly code is VERY nice. VERY simple. And with it's 16 registers and orthoganal instruction set, easy to program too. Other chips (e.g. z80) have more powerful instructions, but are also harder to program with (IMHO). The 9900 really is simple.

And assembly code, if properly commented, is easy to understand. I have developed the habit of commenting every line.

Some instructions might confuse you in the code, e.g.

MOV R0,R0

Why do that? Well, because it forces the processor to compare R0 to 0. If it IS 0, the Zero flag will be set in the status register. All MOV instructions *automagically* do a compare to 0. So we might as well use that to our benefit...

I could do this, which is more readable:

CI R0,0  (compare R0 to 0)

(And indeed, early code that I wrote in the 90's had it all over the place!)

So why didn't I? Because CI R0,0 needs 4 bytes, whereas MOV R0,R0 needs two. And the MOV is a lot faster than CI... Just tricks...

Also, to muliply by 32 (or any power of 2), it is MUCH faster to shift a register left by 5 bit positions, than it is to use the MPY (multiply) instruction. Similarly, to divide by a power of two, shift to the right...

Mark.

>Sent: Tue, 2 February, 2010 13:07:34
>The more I look at this stuff, the more I realize that it's really not all that difficult to decipher.... Source I mean... I understand assembly syntax pretty well from reading Lottrups book and Morley's book and Molesworths book...  But I can also understand Spanish a little bit if it's spoken slowly enough... German too.  Doesn't mean I can write a short story in either of those languages.  :).  Thank you for doing this on my behalf, Mark.  Really, it helps to see the assembly equivalent to an XB listing, as it teaches me more and more how to understand (and eventually write) subroutines and whole programs in the language... I have seen the blazing speed (compared to console BASIC and XB) and it makes me hungry!!! 
>
>Owen Brand
>**Oprysoft**
>Opry99er.com
>
>
>
>___

---

From: Owen Brand <[email-masked]>
Date: Tue, 2 Feb 2010 07:30:17 -0500

Fascinating stuff... You know, once Honeycomb Rapture is finished, I  
fully intend on putting XB away for a while... I might seriously send  
the cartridge to Nepal or Uzbekistan.... Just to force myself to work  
in 9900.  It's so easy to sit down and hack out a 15 line demo that  
looks and sounds cool, just being bored.  Then I'll start tinkering  
with it and before you know it, I have another game project on my  
hands.  XB is a lovely language.... But it's too MFing slow to do  
anything really spectacular with.  I can optimize XB code, I can add  
assembly support.... But that's kinda like trying to find the "best  
way" to make a "boot sandwich," and then deciding that a little  
Tabasco sauce might make the boot taste more like pastrami.  It's  
early, and that example might make NO sense whatsoever, but it clicks  
for me.  :). I hope you will be awake for a couple hours, Mark... I  
don't know what time it is in Uzbek, but I will be sending you some  
questions via email concerning the code you attached.  :) Thanks.   
(It's 7:30 AM here now)

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 2, 2010, at 7:18 AM, mark wills <[email-masked]>  
wrote:

> That's good. That exactly what I was hoping for. 9900 Assembly code  
> is VERY nice. VERY simple. And with it's 16 registers and orthoganal  
> instruction set, easy to program too. Other chips (e.g. z80) have  
> more powerful instructions, but are also harder to program with  
> (IMHO). The 9900 really is simple.
>
> And assembly code, if properly commented, is easy to understand. I  
> have developed the habit of commenting every line.
>
> Why do that? Well, because it forces the processor to compare R0 to  
> 0. If it IS 0, the Zero flag will be set in the status register. All  
> MOV instructions *automagically* do a compare to 0. So we might as  
> well use that to our benefit...
>
> So why didn't I? Because CI R0,0 needs 4 bytes, whereas MOV R0,R0  
> needs two. And the MOV is a lot faster than CI... Just tricks...
>
> Also, to muliply by 32 (or any power of 2), it is MUCH faster to  
> shift a register left by 5 bit positions, than it is to use the MPY  
> (multiply) instruction. Similarly, to divide by a power of two,  
> shift to the right...
>
> Mark.
>
>
>
> The more I look at this stuff, the more I realize that it's really  
> not all that difficult to decipher.... Source I mean... I understand  
> little bit if it's spoken slowly enough... German too.  Doesn't mean  
> I can write a short story in either of those languages.  :).  Thank  
> you for doing this on my behalf, Mark.  Really, it helps to see the  
> programs in the language... I have seen the blazing speed (compared  
> to console BASIC and XB) and it makes me hungry!!!
>
> Owen Brand
> **Oprysoft**
> Opry99er.com
>
>
> ___
>

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 04:46:16 -0800 (PST)

Hi Owen, it's currently 17:40hrs here.

Well, once you have a library of routines in assembly, it's almost as quick to write as XB. And certainly runs a lot quicker ;-)

I would suggest giving Spectra a serious look. It has many routines built in, de-bugged, ready to go. You just call them and they do the work for you. And you only have to include the routines you need, so it doesn't gobble memory. It's a slick peice of work: http://sourceforge.net/projects/spectra99/

I haven't used it myself yet, because both of my 'live' projects, Forth and Manic Miner are too far in to re-engineer now. Next time I think I'll use it though...

Mark.

>Sent: Tue, 2 February, 2010 13:30:17
>Fascinating stuff... You know, once Honeycomb Rapture is finished, I fully intend on putting XB away for a while... I might seriously send the cartridge to Nepal or Uzbekistan.. .. Just to force myself to work in 9900.  It's so easy to sit down and hack out a 15 line demo that looks and sounds cool, just being bored.  Then I'll start tinkering with it and before you know it, I have another game project on my hands.  XB is a lovely language.... But it's too MFing slow to do anything really spectacular with.  I can optimize XB code, I can add assembly support.... But that's kinda like trying to find the "best way" to make a "boot sandwich," and then deciding that a little Tabasco sauce might make the boot taste more like pastrami.  It's early, and that example might make NO sense whatsoever, but it clicks for me.  :). I hope you will be awake for a couple hours, Mark... I don't know what time it is in Uzbek, but I will be sending you some questions via
 email concerning the code you attached.  :) Thanks.  (It's 7:30 AM here now)  
>
>Owen Brand
>**Oprysoft**
>Opry99er.com
>
>On Feb 2, 2010, at 7:18 AM, mark wills <markrobertwills@ yahoo.co. uk> wrote:
>
>
>>>
>>
>>
>>  >>
>>
>> 
>>>>      
>> 
>>>From: Owen Brand <owenbrand@opry99er. com>
>>>To: "TI994A@yahoogroups .com" <TI994A@yahoogroups. com>

---

From: Owen Brand <[email-masked]>
Date: Tue, 2 Feb 2010 08:02:57 -0500

I've had a look at it... But just a look.  :). I'll get more into it  
as I finish Honeycomb.  Thx!!

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 2, 2010, at 7:46 AM, mark wills <[email-masked]>  
wrote:

> Well, once you have a library of routines in assembly, it's almost  
> as quick to write as XB. And certainly runs a lot quicker ;-)
>
> I would suggest giving Spectra a serious look. It has many routines  
> built in, de-bugged, ready to go. You just call them and they do the  
> work for you. And you only have to include the routines you need, so  
> it doesn't gobble memory. It's a slick peice of work: http://sourceforge.net/projects/spectra99/
>
> I haven't used it myself yet, because both of my 'live' projects,  
> Forth and Manic Miner are too far in to re-engineer now. Next time I  
> think I'll use it though...
>
> Mark.
>
>
> fully intend on putting XB away for a while... I might seriously  
> send the cartridge to Nepal or Uzbekistan.. .. Just to force myself  
> to work in 9900.  It's so easy to sit down and hack out a 15 line  
> demo that looks and sounds cool, just being bored.  Then I'll start  
> tinkering with it and before you know it, I have another game  
> project on my hands.  XB is a lovely language.... But it's too MFing  
> slow to do anything really spectacular with.  I can optimize XB  
> code, I can add assembly support.... But that's kinda like trying to  
> find the "best way" to make a "boot sandwich," and then deciding  
> that a little Tabasco sauce might make the boot taste more like  
> pastrami.  It's early, and that example might make NO sense  
> whatsoever, but it clicks for me.  :). I hope you will be awake for  
> a couple hours, Mark... I don't know what time it is in Uzbek, but I  
> will be sending you some questions via email concerning the code you  
> attached.  :) Thanks.  (It's 7:30 AM here now)
>
> Owen Brand
> **Oprysoft**
> Opry99er.com
>
>> is VERY nice. VERY simple. And with it's 16 registers and  
>> orthoganal instruction set, easy to program too. Other chips (e.g.  
>> z80) have more powerful instructions, but are also harder to  
>> program with (IMHO). The 9900 really is simple.
>>
>> 0. If it IS 0, the Zero flag will be set in the status register.  
>> All MOV instructions *automagically* do a compare to 0. So we might  
>> as well use that to our benefit...
>>
>> not all that difficult to decipher.... Source I mean... I  
>> understand assembly syntax pretty well from reading Lottrups book  
>> and Morley's book and Molesworths book...  But I can also  
>> understand Spanish a little bit if it's spoken slowly enough...  
>> German too.  Doesn't mean I can write a short story in either of  
>> those languages.  :).  Thank you for doing this on my behalf,  
>> Mark.  Really, it helps to see the assembly equivalent to an XB  
>> listing, as it teaches me more and more how to understand (and  
>> eventually write) subroutines and whole programs in the language...  
>> I have seen the blazing speed (compared to console BASIC and XB)  
>> and it makes me hungry!!!
>>
>> Owen Brand
>> **Oprysoft**
>> Opry99er.com
>>
>>
>> ___
>
>

---

From: Owen Brand <[email-masked]>
Date: Tue, 2 Feb 2010 11:51:26 -0500

By the way Mark... The graphics you've done on Manic Miner are  
excellent.  I was looking through the YouTube videos the other day,  
and it occurred to me that much of what you have developed graphically  
is similar to what I am going to be looking at for "Beryl" (Im going  
to refer to the game as "Beryl" from here on out.... Long name). In  
working to develop the graphics, how did you put screens together?  I  
have used graph paper since I started and kinda worked from that  
angle... But it seems that with all the freaking tools out there for  
game design and CG graphics that there would be some nice PC  
applications that cam handle a 32x24 grid and have subs for all the  
characters on the screen.  I know Karsten has some cool toys he uses  
in his dev work....  And secondly, thinking of a release date?   
Release year?  Decade?  Hehehehe

Owen Brand
**Oprysoft**
Opry99er.com

---

From: Owen Brand <[email-masked]>
Date: Tue, 2 Feb 2010 12:45:57 -0500

Filip has told me a little bit about SPECTRA.  I will be DLing the  
docs today and putting them into my "Beryl" binder.... Right now that  
3 ring binder contains all my graphics renderings, a printout of the  
back-story-line, programming outline (which is still in XB form), and  
some scanned printouts of a series of MICROpendium articles on  
Assembly.  When I get down to it, I want to be organized.  :)

Owen Brand
**Oprysoft**
Opry99er.com

---

From: Owen Brand <[email-masked]>
Date: Tue, 2 Feb 2010 22:42:57 -0500

Hey Mark,
    Yea, you really fouled up the VCHARs and HCHARs...  :). It doesn't  
matter what order they are in I assume in the BYTE list (data)---just  
that they are all there and accurate, correct?

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 2, 2010, at 6:59 AM, mark wills <[email-masked]>  
wrote:

> locations... .
> Yes. It draws characters one character at a time, but very  
> quickly... ;-) Just shows how slow GPL is... What a shame... We  
> could have a had a real fast machine back in the day, really really  
> fast... If it wasn't for that stupid GPL idea...
>
> M
>
>

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 20:08:04 -0800 (PST)

Yeah, any order, it will just blast through the list and draw them... Don't forget to add

BYTE ENDDAT,0

at the end of the data - this tell the routine to stop drawing!

:-)

>Sent: Wed, 3 February, 2010 4:42:57
>   Yea, you really fouled up the VCHARs and HCHARs...  :). It doesn't matter what order they are in I assume in the BYTE list (data)---just that they are all there and accurate, correct?
>
>Owen Brand
>**Oprysoft**
>Opry99er.com
>
>On Feb 2, 2010, at 6:59 AM, mark wills <markrobertwills@ yahoo.co. uk> wrote:
>
>
>>>
>>
>>
>>  >>
>>
>> 
>>>>      
>>

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 21:59:02 -0800 (PST)

Well, I tried an experiment: Have an ISR check for a sprite collision:

.......DEF.COINC.......program.entry.point

ISR....EQU.>83C4
VDPSTA.EQU.>8802

COINC..LI.R0,SCOINC....address.of.sprite.coinc.routine
.......MOV.R0,@ISR.....place.address.in.ISR.vector
.......CLR.@>837C......clear.GPL.status.byte
.......RT..............return

SCOINC.MOVB.@VDPSTA,R1.get.VDP.status
.......ANDI.R1,>2000...get.coincidence.flag
.......JNE.HIT.........if.R1>0.then.something.is.detected
.......CLR.@>fffe......else.nothing.hit,.zero.our.flag
.......RT..............return.from.the.ISR
HIT....SETO.@>fffe.....something.hit,.set.our.flag.to.non.zero
.......RT..............return.from.the.ISR
.......END

You start it with CALL LINK("COINC") and can switch it off with CALL LINK("OFF")

Results were very disappointing. I think the problem is that the console ISR has already cleared the VDP status register before my ISR reads it (thus clearing it again).

Unzip the attached to the DSK3 folder in classic99, and, from XB do a OLD DSK3.COINC/XB and try it.

Not very good.

This means the only way to do it effectively in assembly is to walk the sprite attribute list, and compare the XY positions.

Looking at Honeycomb, we're only interested if sprite #1 collides with something.

I'll see if I can put something together that does this on an ISR. The idea is you will do a CALL PEEK(-2,HIT) and if HIT comes back > 0 then sprite 1 hit *something* - you don't care what, you just know it hit something and can call the game over/lose a life routine.

It will certainly work, but is CALL PEEK any quicker than CALL COINC? That's the question!

Mark

---

From: ti99_forever <[email-masked]>
Date: Tue, 2 Feb 2010 22:05:02 -0800 (PST)

Try again!

Yes, the console ISR reads that bit, but it STORES it in CPU RAM - read that byte instead!

I figured that out with Hit & Missile, since I enabled interrupts for sprite motion.

Sorry, brain matter can't remember what address it moves it to...

--- On Wed, 2/3/10, mark wills <[email-masked]> wrote:

From: mark wills <[email-masked]>
Subject: Re: [TI994A] Honeycomb rapture sprite collisions [1 Attachment]
To: [email-masked]
Date: Wednesday, February 3, 2010, 12:59 AM

ISR....EQU.>83C4
VDPSTA.EQU.>8802

You start it with CALL
 LINK("COINC") and can switch it off with CALL LINK("OFF")

Not very good.

It will certainly work, but is CALL PEEK any quicker than CALL COINC? That's the
 question!

Mark

       Attachment(s) from mark wills  
    
           1 of 1 File(s) 

     coinc.zip

---

From: ti99_forever <[email-masked]>
Date: Tue, 2 Feb 2010 22:06:55 -0800 (PST)

>837B

--- On Wed, 2/3/10, ti99_forever <[email-masked]> wrote:

From: ti99_forever <[email-masked]>
Subject: Re: [TI994A] Honeycomb rapture sprite collisions
To: [email-masked]
Date: Wednesday, February 3, 2010, 1:05 AM

 

Try again!

ISR....EQU.>83C4
VDPSTA.EQU.>8802

You start it with CALL

Not very good.

Mark

           1 of 1 File(s) 

     coinc.zip

---

From: ti99_forever <[email-masked]>
Date: Tue, 2 Feb 2010 22:11:19 -0800 (PST)

question!

Why not go ahead and assign it directly to a Basic variable, using ASSGNV (think that is the correct EQU in the EA manual). You'll need to make it a float is all. That way, Basic only needs to check the value of a preassigned variable. This was done in some of the 40-column utilities, they designated a termchar variable...

---

From: Owen Brand <[email-masked]>
Date: Wed, 3 Feb 2010 01:16:00 -0500

Mark.... Thank you very much for your efforts!!!  I have started work  
on a similar routine that I was planning to take me several days to  
complete, you have done what I was hoping to maybe accomplish...  
Looking at your code, though, it would have taken me much longer to do  
that.... I am in over my head.  :). But I love it!!  Anyway, I am  
currently Working in CALL LOAD and LINKing some of the music I  
composed into the game now.  I have a pretty firm understanding how  
music works in AL, thanks to a kickass tutorial by Tursi.... If this  
ends up being possible... Creating a "CALL COINC(#1, ALL)" routine, it  
will make this game much more fun.... If not, I have planned to  
separate the enemy sprites by level... (Level 1--bees...Level 2--plane  
drops...Level 3--bees, etc...). We shall see how things go... It's all  
down to speed now... What can I do in XB that won't be slow as  
dirt??  :). I really appreciate your help, good buddy...  :)

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 3, 2010, at 12:59 AM, mark wills <[email-masked]>  
wrote:

> Results were very disappointing. I think the problem is that the  
> console ISR has already cleared the VDP status register before my  
> ISR reads it (thus clearing it again).
>
> This means the only way to do it effectively in assembly is to walk  
> the sprite attribute list, and compare the XY positions.
>
> I'll see if I can put something together that does this on an ISR.  
> The idea is you will do a CALL PEEK(-2,HIT) and if HIT comes back >  
> 0 then sprite 1 hit *something* - you don't care what, you just know  
> it hit something and can call the game over/lose a life routine.
>

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 22:19:33 -0800 (PST)

WHOA! YOU ROCK!!!!!! :-)

I'll give that a go!

M

>Sent: Wed, 3 February, 2010 7:06:55
>--- On Wed, 2/3/10, ti99_forever <ti99_forever@ yahoo.com> wrote:
>
>
>>From: ti99_forever <ti99_forever@ yahoo.com>
>>To: TI994A@yahoogroups. com
>>--- On Wed, 2/3/10, mark wills <markrobertwills@ yahoo.co. uk> wrote:
>>
>>
>>>From: mark wills <markrobertwills@ yahoo.co. uk>
>>>To: TI994A@yahoogroups. com
>>>.......DEF.COINC. ......program. entry.point
>>>
>>>ISR....EQU.>83C4
>>>VDPSTA.EQU.>8802
>>>
>>>COINC..LI.R0, SCOINC... .address. of.sprite. coinc.routine
>>>.......MOV.R0, @ISR..... place.address. in.ISR.vector
>>>.......CLR.@>837C......clear. GPL.status. byte
>>>.......RT... ......... ..return
>>>
>>>SCOINC.MOVB. @VDPSTA,R1. get.VDP.status
>>>.......ANDI. R1,>2000...get.coincide nce.flag
>>>.......JNE.HIT. ........if. R1>0.then.something. is.detected
>>>.......CLR.@>fffe......else. nothing.hit, .zero.our. flag
>>>.......RT... ......... ..return. from.the. ISR
>>>HIT....SETO. @>fffe.....something. hit,.set. our.flag. to.non.zero
>>>.......RT... ......... ..return. from.the. ISR
>>>.......END
>>>
>>>You start it with CALL
>>> LINK("COINC" ) and can switch it off with CALL LINK("OFF")
>>>
>>>Attachment(s) from mark wills   >>> 
>>>1 of 1 File(s)  
>>>coinc.zip
>>> 
>>
>>
>> 
>
>

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 22:20:59 -0800 (PST)

I would do that, if I knew the address in XB for NUMASG and the XMLLNK and CIF codes ;-)

It's easy in TI Basic with ED/AS, you just REF them... But the XB loader doesn't do REFs :-(

Mark

>Sent: Wed, 3 February, 2010 7:11:19

---

From: Owen Brand <[email-masked]>
Date: Wed, 3 Feb 2010 01:21:50 -0500

Ben... If the routine "CALL COINC(#1,ALL)" can be manufactured, would  
the lag time in CALL LINK make it as effective as "CALL COINC(ALL)?   
Close to as fast?  If I break my levels up into vertical and  
horizontal enemies (as I described in my last post) then CALL COINC 
(ALL) works fine... It just takes alot of the fun and challenge away  
from gameplay...

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 3, 2010, at 1:11 AM, ti99_forever <[email-masked]> wrote:

> Why not go ahead and assign it directly to a Basic variable, using  
> ASSGNV (think that is the correct EQU in the EA manual). You'll need  
> to make it a float is all. That way, Basic only needs to check the  
> value of a preassigned variable. This was done in some of the 40- 
> column utilities, they designated a termchar variable...
>
>

---

From: ti99_forever <[email-masked]>
Date: Tue, 2 Feb 2010 22:37:21 -0800 (PST)

If it is an ISR, you start it once... and if Mark assigns the value to a Basic variable, it is a simple IF..THEN check.

--- On Wed, 2/3/10, Owen Brand <[email-masked]> wrote:

From: Owen Brand <[email-masked]>
Subject: Re: [TI994A] Honeycomb rapture sprite collisions
To: "[email-masked]" <[email-masked]>
Date: Wednesday, February 3, 2010, 1:21 AM

Ben... If the routine "CALL COINC(#1,ALL)" can be manufactured, would the lag time in CALL LINK make it as effective as "CALL COINC(ALL)?  Close to as fast?  If I break my levels up into vertical and horizontal enemies (as I described in my last post) then CALL COINC(ALL) works fine... It just takes alot of the fun and challenge away from gameplay... 

 

 question!

---

From: Owen Brand <[email-masked]>
Date: Wed, 3 Feb 2010 01:37:51 -0500

One more question to those out there who know way more than I do....  
Can the VDP interrupt timer be used to set a "clock" of sorts... It  
seemed to me initially like this would be a good way to erase falling  
DDT sprites from the plane when they hit the bottom of the screen...

CALL SPRITE(.....)::CALL PEEK(-31879,A)

CALL PEEK(-31879,X):: IF X-A>160 THEN DELSPRITE(DDT)

However in implementation, it doesn't work very reliably.... Thoughts?

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 3, 2010, at 1:19 AM, mark wills <[email-masked]>  
wrote:

> You start it with CALL LINK("COINC" ) and can switch it off with  
> CALL LINK("OFF")
>

---

From: "Tursi" <[email-masked]>
Date: Tue, 2 Feb 2010 22:39:19 -0800

> Results were very disappointing. I think the problem is that the console 
> ISR has already cleared the VDP status register before my ISR reads it 
> (thus clearing it again).
>

This is the case... but the ISR has also copied the VDP status register into 
scratchpad RAM. Though in that case this example code isn't doing any more 
than we already had. :) (I realize it's just an experiment).

> This means the only way to do it effectively in assembly is to walk the 
> sprite attribute list, and compare the XY positions.

Owen wanted to compare sprite 1 to others anyway, so you have to walk the 
list. Not sure what checking the collision bit would give you towards that, 
but if interrupts are on anyway, it's better to just check the scratchpad. 
:)

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 22:40:29 -0800 (PST)

Yes! That's MUCH better! Thank you very much :-)

Owen, please try the attached.

Unzip into the DSK3 folder in Classic99 and OLD DSK3.COINC/XB

Run that bad boy. You'll see how it works.

Mark.

---

From: ti99_forever <[email-masked]>
Date: Tue, 2 Feb 2010 22:44:25 -0800 (PST)

NUMASG EQU >2008
XMLLNK EQU >2018
CIF EQU >20

But what values will you return? If they are fixed, you could just build a table of pre-fixed float values and index into them, move them into FAC and then assign them to the variable.

ASSGNV EQU >18

Question is how to use ASSGNV, it isn't documented that I am aware of. This is different than returning a variable via a parameter list, you are actually assigning a value to a Basic variable. (If you are using an ISR, you don't normally have a variable-list to assign back to. Don't have a clue what happens if you try, try it!) But I think if you have a copy of TI Intern you might could figure out the format, even though this is XB. Perhaps. Someone who has created something like a version of XB with his initials pre-pended to "XB" might be able to help... 

From: mark wills <[email-masked]>
Subject: Re: [TI994A] Honeycomb rapture sprite collisions
To: [email-masked]
Date: Wednesday, February 3, 2010, 1:20 AM

Mark

 

 question!

---

From: "Tursi" <[email-masked]>
Date: Tue, 2 Feb 2010 22:50:46 -0800

> It's easy in TI Basic with ED/AS, you just REF them... But the XB loader 

No, but the Editor/Assembler manual lists them all for XB starting on page 
415 (section 24.4.8 TI Extended BASIC Equates) ;)

---

From: mark wills <[email-masked]>
Date: Tue, 2 Feb 2010 23:11:25 -0800 (PST)

<face, meet palm>

:-)

>
>From: Tursi <[email-masked]>
>Sent: Wed, 3 February, 2010 7:50:46

---

From: ti99_forever <[email-masked]>
Date: Tue, 2 Feb 2010 23:22:52 -0800 (PST)

I just figured you weren't allowed to carry such sensitive documents into Uzbekistan. That's why I looked them up for ya. ;)

From: mark wills <[email-masked]>
Subject: Re: [TI994A] Honeycomb rapture sprite collisions
To: [email-masked]
Date: Wednesday, February 3, 2010, 2:11 AM

<face, meet palm>

:-)

From: Tursi <[email-masked]>
To: [email-masked]
Sent: Wed, 3 February, 2010 7:50:46
Subject: Re: [TI994A] Honeycomb rapture
 sprite collisions

    

      > I would do that, if I knew the address in XB for NUMASG and the XMLLNK and 

> CIF codes ;-)

> It's easy in TI Basic with ED/AS, you just REF them... But the XB loader 

> doesn't do REFs :-(

---

From: Owen Brand <[email-masked]>
Date: Wed, 3 Feb 2010 09:18:07 -0500

Mark.... Just woke up... I'll be trying your new code in about an hour  
or so.... When the wife wakes up and takes over kid-duty.  You rock  
man!!  :). I'll be able to finish up some development work today, as  
I'm broke and have no money to go blow.  :). Haha!!  Wills 4 President

Owen Brand
**Oprysoft**
Opry99er.com

---

From: "LARRY CORREA" <[email-masked]>
Date: Wed, 3 Feb 2010 06:24:24 -0800

Owen,

What is a Sprite? I thought it was a soft Drink. Are you awake yet?

Larry

  ----- Original Message ----- 
  From: Owen Brand<mailto:[email-masked]> 
  To: [email-masked]<mailto:[email-masked]> 
  Sent: Wednesday, February 03, 2010 6:18 AM
  Subject: Re: [TI994A] Honeycomb rapture sprite collisions

  Mark.... Just woke up... I'll be trying your new code in about an hour or so.... When the wife wakes up and takes over kid-duty.  You rock man!!  :). I'll be able to finish up some development work today, as I'm broke and have no money to go blow.  :). Haha!!  Wills 4 President

  Owen Brand 
  **Oprysoft**
  Opry99er.com<http://opry99er.com/>

  On Feb 3, 2010, at 2:11 AM, mark wills <[email-masked]<mailto:[email-masked]>> wrote:

    <face, meet palm>

    :-)

      From: Tursi <[email-masked]<http://lion.com/>>
      To: [email-masked]
      Sent: Wed, 3 February, 2010 7:50:46
      Subject: Re: [TI994A] Honeycomb rapture sprite collisions

---

From: Owen Brand <[email-masked]>
Date: Wed, 3 Feb 2010 09:36:21 -0500

I'm always awake.  SPRITE---single or series of characters that can be  
defined by the user and set into smooth motion.... In BASIC,  
characters can move one screenspace at a time, in XB... A SPRITE can  
be made to move across the screen smoothly with joystick or keyboard  
or can be set into motion by the user and it will move automatically  
in a pre-specified direction at a pre-specified speed. See the  
Honeycomb Rapture videos.  :)

Owen Brand
**Oprysoft**
Opry99er.com

On Feb 3, 2010, at 9:24 AM, "LARRY CORREA" <[email-masked]> wrote:

> From: Owen Brand
> Mark.... Just woke up... I'll be trying your new code in about an  
> hour or so.... When the wife wakes up and takes over kid-duty.  You  
> rock man!!  :). I'll be able to finish up some development work  
> today, as I'm broke and have no money to go blow.  :). Haha!!  Wills  
> 4 President
>
> Owen Brand
> **Oprysoft**
> Opry99er.com
>

---

From: fdos <[email-masked]>
Date: Wed, 03 Feb 2010 11:26:17 -0700

Mark,

Do you want a copy of the disk image I offered to Owen?  Lot of XB equates.

Bill S

mark wills wrote:
>     *From:* ti99_forever <[email-masked]>
>     *To:* [email-masked]
>     *Sent:* Wed, 3 February, 2010 7:11:19
>     *Subject:* Re: [TI994A] Honeycomb rapture sprite c ollisions
> 
>      
> 
>     value of a preassigned variable. This was done in some of the
>     40-column utilities, they designated a termchar variable...
> 
> 
>

---

From: "LARRY CORREA" <[email-masked]>
Date: Wed, 3 Feb 2010 12:54:42 -0800

Owen,

Thank you for the info. Everyday I learn something new.

Larry C

  ----- Original Message ----- 
  From: Owen Brand<mailto:[email-masked]> 
  To: [email-masked]<mailto:[email-masked]> 
  Sent: Wednesday, February 03, 2010 6:36 AM
  Subject: Re: [TI994A] Honeycomb rapture sprite collisions

  I'm always awake.  SPRITE---single or series of characters that can be defined by the user and set into smooth motion.... In BASIC, characters can move one screenspace at a time, in XB... A SPRITE can be made to move across the screen smoothly with joystick or keyboard or can be set into motion by the user and it will move automatically in a pre-specified direction at a pre-specified speed. See the Honeycomb Rapture videos.  :) 

  Owen Brand 
  **Oprysoft**

  On Feb 3, 2010, at 9:24 AM, "LARRY CORREA" <[email-masked]<mailto:[email-masked]>> wrote:

    Owen,

    Larry

      ----- Original Message ----- 
      From: Owen Brand<mailto:[email-masked]> 
      To: [email-masked]<mailto:[email-masked]> 
      Sent: Wednesday, February 03, 2010 6:18 AM
      Subject: Re: [TI994A] Honeycomb rapture sprite collisions

      Owen Brand 
      **Oprysoft**

          

        <face, meet palm>

        :-)