Jump to content

pixelpedant

Members
  • Posts

    1,121
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by pixelpedant

  1. The floating point math in Hell's Halls is just too complex and pervasive to do an integer-only rewrite.  Stuff like the probability of a door being generated on any given as-yet-ungenerated wall:

     

    D(X)=-(RND<0.6^UE+0.4)

     

    Or the equations for deriving sound frequency from tokens in sound strings then generating relevant (tone and periodic noise) complementary frequencies:

     

    7435 A=(A*A*A/14400+25)*4
    7440 FOR V=11 TO I+15 STEP 50/I
    7445 CALL SOUND(-425*I,A,V,A+2,V,A*3.81,30,-4,V-I)
    7450 NEXT V

     

    Everything hinges on floating point math and the fact that all TI BASIC subprograms inherently treat floating point values as equivalent to their nearest integer value (so that for example CALL HCHAR(RND+1,RND+1,33) writes character 33 to 1,1 or 1,2 or 2,1 or 2,2 with equal probability, as the X and Y values will be floating point values ranging from 1 to 2).  An integer version would be a total ground-up rewrite.

     

    My recommendation for someone looking for a little bit of a speed boost would just be to run it in RXB as this will be a bit faster, but not so much as to be disruptive. 

    • Like 5
  2. I kind of doubt there's any surviving manufacturer documentation on the joystick interface, though someone may have worked it out by experimentation at some point.  However, otherwise of interest when it comes to documentation on the machine (as a computer per se), here's a product sheet for the GI SP1000 speech synth/recognition chip used by the MBX:

     

    sp1000-sheet.pdf

     

    Interfacing with the 6809 is addressed as an option there, and this is what is used on the MBX. 

     

    • Like 4
  3. Indeed, CALL SAY can take two different types of input.  Either a word contained in the default vocabulary (written in letters), or an LPC speech string (as binary data).  One third possibility is segmenting an existing LPC string in the default vocabulary acquired via CALL SPGET to speak an LPC substring.  But this is complex, as speech frames are of greatly varied size, and so targeting the start of a speech frame within a pattern (i.e., other than at its beginning) is not possible without fully decoding the pattern (or just getting really lucky). 

     

    Anyway, I go into a little more detail about what can be done with CALL SAY in this video here:

     

     

    • Like 11
  4. Not to my knowledge.  There are some newsletter items, but not a tonne.  To a large extent, advanced CC-40 BASIC programming is the same as advanced Extended BASIC programming, and the big difference is just 1) 6K of RAM on the most common model, so you've got to be even more memory conservative than in TI BASIC, and 2) character graphics follow similar conventions, but with the actual display being quite different, necessarily (with each tile being a 5x7 character and 5x1 underline, with 1 pixel column intervening between tiles, and one pixel row intervening between the character and underline).

    • Like 3
  5. It's definitely great to have the MAME implementation, especially for the folks out there without a fully functioning CC-40.  But even with a full functioning CC-40 and HexTIr on my desk, it's proving very handy for quick tests. 

     

    The only issue I have with that option at present is a relatively minor graphical one which can probably be resolved by tweaking MAME's screen filtering on my end.  Which is that the dot matrix is much more defined for me on the real CC-40, with dots having relatively well-defined edges, and there being space intervening between dots, so visually, the effect is quite different.  I'll probably have to look into MAME's screen filtering settings, accordingly, to see if something a bit more representative can be achieved.

    • Like 2
  6. And another 10 line variation on this one.  The arithmetic underlying this loop structure is so deeply tortured.  I'm quite fond of it.

     

     

     

     

     

    1 C$="0E040404000E04040E001F111B1B1F1F111B111F1B150E151B041104110404061F0604"
    2 FOR C=0 TO 28
    3 IF C<7 THEN CALL CHAR(C,"1500"&SEG$(C$,C*10+1,10)&"15")
    4 NEXT C
    5 Q=-(Q<=0)-Q-(Q=56)*54
    6 CALL CHAR(6,SEG$("1500040C1F0C0415150004061F060415",1-(ABS(Q)>C)*16,16))
    7 S$=CHR$(5)&CHR$(5)&CHR$((Q<0)*-2)&CHR$((Q<0)*-2+1)&CHR$(5)
    8 S$=RPT$(CHR$(5)&CHR$(4),13)&S$&RPT$(CHR$(5)&CHR$(4),13)
    9 PRINT CHR$(6)&SEG$(S$,ABS(Q)+(ABS(Q)>C)*(ABS(Q)-C)*2,C)&CHR$(6)
    10 GOTO 5

     

    • Like 4
  7. For some reason I decided this week I felt like doing another strict "10 Liner" demo for CC-40 which does something visually interesting.  With a technical constraint inherently imposed by the device being 80 character line length (or it would not be possible to type it, on original hardware).  And a further constraint imposed by the strict 10 liner format being that the program must contain only 10 discrete statements (with no statement separators). 

     

    Anyway, here's something I came up with, which runs an indefinite back and forth animation of sorts.

     

    The speed of the animation can be moderated in either direction by adding or removing -TAN(0) expressions on Line 8 (which exist only to impose a delay there). 

     

     

    1 DIM S$(2)
    2 C$="EE4E4E0EAAE0EEE4E4EE4EEE0EAAE0EEE4EE0E0E0E0EAAE0E0E0E0"
    3 FOR C=0 TO 5
    4 CALL CHAR(C,"15000"&SEG$(C$,C*9+1,9)&"15")
    5 NEXT C
    6 S$(0)=RPT$(CHR$(4)&CHR$(5),14)&CHR$(0)&CHR$(2)&RPT$(CHR$(4)&CHR$(5),14)
    7 S$(1)=RPT$(CHR$(5)&CHR$(4),14)&CHR$(1)&CHR$(3)&RPT$(CHR$(5)&CHR$(4),14)
    8 Q=-(Q<=0)-Q-(Q=56)*54-TAN(0)-TAN(0)-TAN(0)-TAN(0)-TAN(0)
    9 PRINT CHR$(127)&SEG$(S$(-(Q<0)),ABS(Q)+(ABS(Q)>29)*(ABS(Q)-29)*2,29)&CHR$(126)
    10 GOTO 8

     

     

    • Like 3
  8. If any of you use Autohotkey, well, here is an AHK macro for pasting the clipboard into MAME CC-40 BASIC in an automated fashion (which observes relevant keystroke combinations for the emulation). 

     

    Probably I am the only person on earth who finds this useful.  But in case anyone else does, here it is. 

     

    Simply press INSERT and code contained on the clipboard will be typed into the CC-40. 

     

    Like so:

     

     

     

     

    Some minor error checking is observed (duplicate lines, lines without a number, out-of-order lines which may be indicative of incorrect numbering). 

     

    Typing will terminate if the window is deselected.

     

    #IfWinActive MAME: Compact Computer 40 [cc40]
    {
    Insert::
    	lines:=[]
    	prev:=0
    	Loop, parse, clipboard,`n,`r ; split on LF, omit CR if present
    		{
    		content:=StrSplit(A_LoopField,A_Space,,2)
    		num:=content[1]
    		if (num="")    
    			{
    			continue
    			}		
    		else if num is not digit ; if no valid line number
    			{
    			mess:="No valid line number for line " A_Index ". in text. Line reads `n`n" Trim(A_Loopfield) "`n`nEnter anyway?"
    			MsgBox, 4, , %mess%
    			IfMsgBox No
    				{
    				return
    				}
    			continue
    			}
    		else if (lines[num]) ; if line number duplicated
    			{
    			mess:="Line number " num " used here:`n`n" num A_Space lines[num] "`n`nAlso found here:`n`n " num A_Space content[2] "`n`nEnter anyway?"
    			MsgBox, 4, , %mess%
    			ifMsgBox No
    				{
    				return
    				}
    			}
    		else if (num<prev)
    			{
    			mess:="Line number " prev " precedes line number " num " as follows:`n`n" prev A_Space lines[prev] "`n" num A_Space content[2] "`n`nEnter anyway?"
    			MsgBox, 4, , %mess%
    			ifMsgBox No
    				{
    				return
    				}			
    			}
    		lines[num]:=content[2]
    		prev:=num
    		}
    	SetKeyDelay, 40,50 ; pre-press delay and press duration in ms
    	Sleep, 300
    	Loop, parse, clipboard,,`r
    		{
    		IfWinNotActive, ahk_exe Mame64.exe
    			{
    			return
    			}
    		switch A_LoopField
    			{			
    			case Chr(34): Send +2
    			case "!": Send +1
    			case "(": Send +8
    			case ")": Send +9
    			case "'": Send +0
    			case "+": Send {NumpadAdd}
    			case "?": Send +{=}
    			case "*": Send {NumpadMult}
    			case "/": Send {NumpadDiv}
    			case Chr(10): 
    				{
    				Send {Enter}
    				Sleep, 750 ; newline delay in ms
    				}
    			default: Send %A_Loopfield%
    			}
    		}
    	Send {Enter} ; optionally, always enter final line even when newline absent
    return
    }

     

     

    • Like 4
  9. 13 minutes ago, OLD CS1 said:

    I assumed there was a front-end or some interface run by the Access database included.  I will have to check it out, later.  I gots no time, today.

     

    For me, placing the /TI99-4A/ folder contained within the archive in the GameBase folder (for the GameBase frontend as previously distributed) and simply running the GameBase frontend executable results in the option to select the GameBase v3.03 distribution:

     

    image.png.7db44caec8c8f4c85a5bbbb7e4d88e91.png

     

    And I can confirm that selecting that option, I do get the new games list, with a couple games released in the last year. 

     

    Great work on this, incidentally!  GameBase is an incredible resource!

     

    • Like 3
  10. 1 hour ago, retrodroid said:

    I recall taking a PASCAL course in high school that used the Apple II variant of this system. A few years later I got the opportunity to develop some educational video games using Borland's Objective Pascal (my choice at the time). Good memories. 

     

    My computers/programming course (can't recall what it was actually called) in high school was also based around Pascal, but under a relatively obscure Canadian mainly DOS-based Pascal environment known as Watcom Pascal which was used here in Ontario for quite some time. 

     

    I consequently have some nostalgia for it, myself. 

     

    image.thumb.png.9b388b116d5844d4b786ddcef7e4b88e.png

    It was seemingly also released for C64:

     

    image.png.2014494d469ddd046f7974dc59f4aa79.png

     

    • Like 1
  11. 1 hour ago, TVsHasselhoff said:

    Me jumping in months later...

    Why this Pascal book over some others.  This is a harder one to find, so I was curious as to what you liked about this one.

     

    Mainly, that it is focused on addressing the p-System as a cross-platform operating system, rather than simply interested in teaching you Pascal.

     

    Secondly, that it is well situated in history.  In 1983, at a time when p-System implementations had reached their point of greatest diversity.  Such that it can address this ecosystem fairly meaningfully:

     

    image.png.4fe16a19f068b76a20ed8fa80ceade32.png

     

     

    • Like 4
    • Thanks 1
  12. Really, the tools TI BASIC gave buyers on Day 1 in 1979 with the base machine - in terms of disk and file and record-level access conventions and file structures and commands for taking advantage of these in TI BASIC - they go far beyond anything its home computer competitors were building into ROM BASICs in its era. 

     

    You could build yourself a pretty full-featured file browser in pure TI ROM BASIC, with no additional software required. 

     

    I figure I wouldn't trade that for a CAT command in a million years. 

    • Like 2
  13. One idea I'd fooled around with was an Atom/RSS feed reader/grabber which pulls feed content via HexTIr RS-232 and ultimately via a Python RS-232 service script on my main system, which grabs that data and transmits in a stripped down format.  Not sure if I'll ever do the rest of the work on that, though.  I'll probably refocus on game possibilities. 

    • Like 2
  14. I had some degree of success LISTing and PRINTing to the RS-232 device via the onboard USB RS-232 controller (and hence Type-B connector).  Keeping in mind RS-232 configuration parameters ("B=1200,D=7,P=E,S=1" and so on) and device number (20) in this context are the same as for the original hexbus RS-232, and so that can be treated as a reference on the basics (but so can the source code on github).  Didn't get as far as looking in greater detail at the source and seeking fuller explanation of observed behaviour, as I didn't *really* have any useful purpose for it, at the time. 

     

    RS232manual.pdf

    • Like 1
×
×
  • Create New...