Jump to content
senior_falcon

Extended BASIC G.E.M.

Recommended Posts

Hmmm! I wonder if I could load it into my HSGPL card?
 
Does it support not inverted roms of that size?

Sent from my LM-G820 using Tapatalk

  • Thanks 1

Share this post


Link to post
Share on other sites

Still wrestling with adding The Missing Link, but making good progress. Meanwhile, here is a teaser preview showing the 30 fonts.

 

30FONTS.thumb.gif.e172b08526105d88267a0fcb74252d79.gif

Edited by senior_falcon
  • Like 1

Share this post


Link to post
Share on other sites
21 minutes ago, senior_falcon said:

Still wrestling with adding The Missing Link, but making good progress. Meanwhile, here is a teaser preview showing the 30 fonts.

 

30FONTS.thumb.gif.e172b08526105d88267a0fcb74252d79.gif

Very very nice.

Are the fonts loading here in real time?

Are they binary files or source code?

Are the files available to the public... :) 

 

Share this post


Link to post
Share on other sites
3 hours ago, TheBF said:

Very very nice.

Are the fonts loading here in real time?

Are they binary files or source code?

Are the files available to the public... :) 

 

CALL FONT(N) uses XMLLNK to move the font from cartridge rom into VDP. I set up a loop and found that it takes about .04 seconds to load a font, and this doesn't take into account the overhead of the loop. So essentially it is instantaneous, at least by XB standards. At some point, hopefully soon, this will be released as a cartridge. Right now it is a work in progress.

  • Like 1

Share this post


Link to post
Share on other sites
4 hours ago, senior_falcon said:

CALL FONT(N) uses XMLLNK to move the font from cartridge rom into VDP. I set up a loop and found that it takes about .04 seconds to load a font, and this doesn't take into account the overhead of the loop. So essentially it is instantaneous, at least by XB standards. At some point, hopefully soon, this will be released as a cartridge. Right now it is a work in progress.

OK thanks  That is similar to my results, but I am not using XMLLNK. I used a DSR call to the LOAD operation.

I have not actually timed it but the results appear to be instantaneous from the Forth command line as well.

Those are very nice looking fonts.  I am going to download the missing link zip file and look at it.

 

Share this post


Link to post
Share on other sites

If you are interested, I can send the binaries for the three 8K pages that contain the fonts. You would have to remove the first >200 bytes, then each file has 10 fonts using >300 bytes per font. The cursor is in the definition for ascii 127.

Sounds like you are reading fron disk and putting the fonts directly into VDP ram.

 

I would really like to see some different fonts in there that have true lower case letters. Also, most of these use the standard patterns for ASCII 32 to 47

Edited by senior_falcon

Share this post


Link to post
Share on other sites
7 hours ago, LASooner said:

How does CALL FONT work when it's compiled? Or can it compile?

In theory it could be added to the compiler, but only if you had the XB 2.8 G.E.M. cartridge. (which is not yet complete.) There are a bunch of additional CALLs in XB2.7 that would be nice to add to the compiler, but since there is no place to put them this will almost certainly not happen. 

  • Like 1

Share this post


Link to post
Share on other sites
1 hour ago, senior_falcon said:

In theory it could be added to the compiler, but only if you had the XB 2.8 G.E.M. cartridge. (which is not yet complete.) There are a bunch of additional CALLs in XB2.7 that would be nice to add to the compiler, but since there is no place to put them this will almost certainly not happen. 

Would it be possible to make these calls run from cartridge space and add  multiple banks?

Share this post


Link to post
Share on other sites
7 hours ago, retroclouds said:

Would it be possible to make these calls run from cartridge space and add  multiple banks?

Yes, but then the ability to run the compiled program would be dependent on having that particular cartridge in the slot. 

Share this post


Link to post
Share on other sites
22 hours ago, senior_falcon said:

If you are interested, I can send the binaries for the three 8K pages that contain the fonts. You would have to remove the first >200 bytes, then each file has 10 fonts using >300 bytes per font. The cursor is in the definition for ascii 127.

Sounds like you are reading fron disk and putting the fonts directly into VDP ram.

 

I would really like to see some different fonts in there that have true lower case letters. Also, most of these use the standard patterns for ASCII 32 to 47

Yes please. I would be interested in the files. 

 

I have made some tools to help me do that.  It's a little convoluted however.

 

  1. Use GIF fonts, put them in Magellan
  2. export them out as Assembly Language files
  3. remove the unneeded source code, keep the data statements
  4. Edit the data statements to be Forth compilable
  5. Compile the Forth font file with Forth
  6. Save the font as a binary to TI-99 disk

 

Not easy but it got me some new fonts. :)

 

The Font source code looks like this so it's a fair bit of editing.  If I was good at this I would write a program to do the reformatting. :) 

 

The hidden content is a Font that I massaged a little for my own use.

 

 
\ SANS Serif SOURCE code. For 32col and 40 col modes
NEEDS CALLCHAR   FROM DSK1.CALLCHAR
NEEDS SAVE-FONT  FROM DSK1.LOADSAVE
CR .( Compiling Font data)
DECIMAL
 30 S" 007C7C7C7C7C7C00" CALLCHAR  30 EMIT
 31 S" 00000000007C7C00" CALLCHAR  31 EMIT
 32 S" 0000000000000000" CALLCHAR  .(  )
 33 S" 1010101000001000" CALLCHAR  .( !)
 34 S" 2828280000000000" CALLCHAR  .( ")
 35 S" 28287C287C282800" CALLCHAR  .( #)
 36 S" 103C503814781000" CALLCHAR  .( $)
 37 S" 64640810204C4C00" CALLCHAR  .( %)
 38 S" 2050502054483400" CALLCHAR  .( &)
 39 S" 3010200000000000" CALLCHAR  .( ')
 40 S" 0810202020100800" CALLCHAR  ." ("
 41 S" 2010080808102000" CALLCHAR  ." )"
 42 S" 000028107C102800" CALLCHAR  .( *)
 43 S" 0010107C10100000" CALLCHAR  .( +)
 44 S" 0000003030102000" CALLCHAR  .( ,)
 45 S" 0000007C00000000" CALLCHAR  .( —)
 46 S" 0000000030300000" CALLCHAR  .( .)
 47 S" 0002040810204000" CALLCHAR  .( /)
 48 S" 38444C5464443800" CALLCHAR  .( 0)
 49 S" 1030101010103800" CALLCHAR  .( 1)
 50 S" 3844041820407C00" CALLCHAR  .( 2)
 51 S" 7C08100804443800" CALLCHAR  .( 3)
 52 S" 081828487C080800" CALLCHAR  .( 4)
 53 S" 7C40780404443800" CALLCHAR  .( 5)
 54 S" 3840407844443800" CALLCHAR  .( 6)
 55 S" 7C04081020202000" CALLCHAR  .( 7)
 56 S" 3844443844443800" CALLCHAR  .( 8)
 57 S" 3844443C04043800" CALLCHAR  .( 9)
 58 S" 0000303000303000" CALLCHAR  .( :)
 59 S" 0030300030301020" CALLCHAR  .( ;)
 60 S" 0810204020100800" CALLCHAR  .( <)
 61 S" 00007C007C000000" CALLCHAR  .( =)
 62 S" 2010080408102000" CALLCHAR  .( >)
 63 S" 3844040810001000" CALLCHAR  .( ?)
 64 S" 38445C545C403C00" CALLCHAR  .( @)
 65 S" 3844447C44444400" CALLCHAR  .( A)
 66 S" 7844447844447800" CALLCHAR  .( B)
 67 S" 3844404040443800" CALLCHAR  .( C)
 68 S" 7844444444447800" CALLCHAR  .( D)
 69 S" 7C40407840407C00" CALLCHAR  .( E)
 70 S" 7C40407840404000" CALLCHAR  .( F)
 71 S" 3844405C44443800" CALLCHAR  .( G)
 72 S" 4444447C44444400" CALLCHAR  .( H)
 73 S" 3810101010103800" CALLCHAR  .( I)
 74 S" 3C08080848483000" CALLCHAR  .( J)
 75 S" 4448506050484400" CALLCHAR  .( K)
 76 S" 4040404040407C00" CALLCHAR  .( L)
 77 S" 446C545444444400" CALLCHAR  .( M)
 78 S" 444464544C444400" CALLCHAR  .( N)
 79 S" 3844444444443800" CALLCHAR  .( 0)
 80 S" 7844447840404000" CALLCHAR  .( P)
 81 S" 3844444454483400" CALLCHAR  .( Q)
 82 S" 7844447850484400" CALLCHAR  .( R)
 83 S" 3844403804443800" CALLCHAR  .( S)
 84 S" 7C10101010101000" CALLCHAR  .( T)
 85 S" 4444444444443800" CALLCHAR  .( U)
 86 S" 4444444428281000" CALLCHAR  .( V)
 87 S" 4444445454542800" CALLCHAR  .( W)
 88 S" 4444281028444400" CALLCHAR  .( X)
 89 S" 4444281010101000" CALLCHAR  .( Y)
 90 S" 7C04081020407C00" CALLCHAR  .( Z)
 91 S" 3820202020203800" CALLCHAR  .( [)
 92 S" 0040201008040200" CALLCHAR  .( .)
 93 S" 3808080808083800" CALLCHAR  .( ])
 94 S" 1028440000000000" CALLCHAR  .( ^)
 95 S" 0000000000007C00" CALLCHAR  .( _)
 96 S" 1810080000000000" CALLCHAR  .( ')
 97 S" 0000300838483C00" CALLCHAR  .( a)
 98 S" 4040704848487000" CALLCHAR  .( b)
 99 S" 0000384040403800" CALLCHAR  .( c)
100 S" 0808384848483800" CALLCHAR  .( d)
101 S" 000038447C403C00" CALLCHAR  .( e)
102 S" 0010282070202000" CALLCHAR  .( f)
103 S" 00003844443C0438" CALLCHAR  .( g)
104 S" 4040704848484800" CALLCHAR  .( h)
105 S" 0010001010101000" CALLCHAR  .( i)
106 S" 0008000808084830" CALLCHAR  .( j)
107 S" 4040485060504800" CALLCHAR  .( k)
108 S" 0010101010101000" CALLCHAR  .( l)
109 S" 0000685454545400" CALLCHAR  .( m)
110 S" 0000704848484800" CALLCHAR  .( n)
111 S" 0000384444443800" CALLCHAR  .( o)
112 S" 0000704848704040" CALLCHAR  .( p)
113 S" 0000384848380808" CALLCHAR  .( q)
114 S" 0000586040404000" CALLCHAR  .( r)
115 S" 0000384038047800" CALLCHAR  .( s)
116 S" 2020782020201800" CALLCHAR  .( t)
117 S" 0000484848483400" CALLCHAR  .( u)
118 S" 0000444428101000" CALLCHAR  .( v)
119 S" 0000444454542800" CALLCHAR  .( w)
120 S" 0000442810284400" CALLCHAR  .( x)
121 S" 00002424241C0438" CALLCHAR  .( y)
122 S" 00007C0810207C00" CALLCHAR  .( z)
123 S" 0C10102010100C00" CALLCHAR  .( {)
124 S" 1010101010101010" CALLCHAR  .( |)
125 S" 6010100810106000" CALLCHAR  .( })
126 S" 2454480000000000" CALLCHAR  .( ~)

CR .( Saving binary font file...)
S" DSK3.BFFONT" SAVE-FONT

 

 

Edited by TheBF

Share this post


Link to post
Share on other sites
On 1/12/2020 at 1:11 PM, senior_falcon said:

CALL FONT(N) uses XMLLNK to move the font from cartridge rom into VDP. I set up a loop and found that it takes about .04 seconds to load a font, and this doesn't take into account the overhead of the loop. So essentially it is instantaneous, at least by XB standards. At some point, hopefully soon, this will be released as a cartridge. Right now it is a work in progress.

A trick Ron Walters taught me back in the 90's for fast multiple VDP writes or data MOVes, was to have multiple MOVB *R1+,@VDPPORT instructions in a row.  Then the DECrementer instruction have fewer loops.  I had a few tricks where I had 8, 16, or 32 such instructions in a row so that I spent more time moving cycles rather than spending extra time in DEC/JNE code.

 

At 0.04 seconds, it sounds pretty fast already.  I just brought it up as it was a neat trick when you have the extra memory to use.  I'm not familiar with XMLLNK to know how it is coded.

 

Beery

Share this post


Link to post
Share on other sites

Tests have shown that it takes about .02 seconds to simply execute a CALL , so the actual code that moves the font into VDP takes an additional .02 seconds. If the transfer happened instantly it would still take about .02 seconds to do the CALL. The XML code that I wrote for this is a standard assembly language loop. XMLLNK uses jump tables to know where to go. In this case the jump table starts at >6010, and there is one entry which points to >6012, where my code is. XML >70 starts up my assembly routine. The jump tables have to be in certain locations and it looks like there can be 16 entries per table. From Intern:

XMLLNK table 1st Nybble
0D1A Floating point routines (>0X)
12A0 „XTAB“ (>1X)
2000 Low memory expansion (>2X)
3FC0 Basic enhancement (>3X)
3FE0 Basic enhancement (>4X)
4010 Probably for GPL extension (>5X)
4030 Probably for GPL extension (>6X)
6010 ROM modul (>7X)
6030 ROM modul (>8X)

7000 ROM modul (>9X)
8000 Future expansion (>AX)
A000 (>BX)
B000 (>CX)
C000 (>DX)
D000 (>EX)
8300  Scratch PAD RAM(>FX)



 

 

  • Like 1

Share this post


Link to post
Share on other sites
12 hours ago, TheBF said:

Yes please. I would be interested in the files. 

 

  Reveal hidden contents

\ SANS Serif SOURCE code. For 32col and 40 col modes
NEEDS CALLCHAR   FROM DSK1.CALLCHAR
NEEDS SAVE-FONT  FROM DSK1.LOADSAVE
CR .( Compiling Font data)
DECIMAL
 30 S" 007C7C7C7C7C7C00" CALLCHAR  30 EMIT
 31 S" 00000000007C7C00" CALLCHAR  31 EMIT
 32 S" 0000000000000000" CALLCHAR  .(  )
 33 S" 1010101000001000" CALLCHAR  .( !)
 34 S" 2828280000000000" CALLCHAR  .( ")
 35 S" 28287C287C282800" CALLCHAR  .( #)
 36 S" 103C503814781000" CALLCHAR  .( $)
 37 S" 64640810204C4C00" CALLCHAR  .( %)
 38 S" 2050502054483400" CALLCHAR  .( &)
 39 S" 3010200000000000" CALLCHAR  .( ')
 40 S" 0810202020100800" CALLCHAR  ." ("
 41 S" 2010080808102000" CALLCHAR  ." )"
 42 S" 000028107C102800" CALLCHAR  .( *)
 43 S" 0010107C10100000" CALLCHAR  .( +)
 44 S" 0000003030102000" CALLCHAR  .( ,)
 45 S" 0000007C00000000" CALLCHAR  .( —)
 46 S" 0000000030300000" CALLCHAR  .( .)
 47 S" 0002040810204000" CALLCHAR  .( /)
 48 S" 38444C5464443800" CALLCHAR  .( 0)
 49 S" 1030101010103800" CALLCHAR  .( 1)
 50 S" 3844041820407C00" CALLCHAR  .( 2)
 51 S" 7C08100804443800" CALLCHAR  .( 3)
 52 S" 081828487C080800" CALLCHAR  .( 4)
 53 S" 7C40780404443800" CALLCHAR  .( 5)
 54 S" 3840407844443800" CALLCHAR  .( 6)
 55 S" 7C04081020202000" CALLCHAR  .( 7)
 56 S" 3844443844443800" CALLCHAR  .( 8)
 57 S" 3844443C04043800" CALLCHAR  .( 9)
 58 S" 0000303000303000" CALLCHAR  .( :)
 59 S" 0030300030301020" CALLCHAR  .( ;)
 60 S" 0810204020100800" CALLCHAR  .( <)
 61 S" 00007C007C000000" CALLCHAR  .( =)
 62 S" 2010080408102000" CALLCHAR  .( >)
 63 S" 3844040810001000" CALLCHAR  .( ?)
 64 S" 38445C545C403C00" CALLCHAR  .( @)
 65 S" 3844447C44444400" CALLCHAR  .( A)
 66 S" 7844447844447800" CALLCHAR  .( B)
 67 S" 3844404040443800" CALLCHAR  .( C)
 68 S" 7844444444447800" CALLCHAR  .( D)
 69 S" 7C40407840407C00" CALLCHAR  .( E)
 70 S" 7C40407840404000" CALLCHAR  .( F)
 71 S" 3844405C44443800" CALLCHAR  .( G)
 72 S" 4444447C44444400" CALLCHAR  .( H)
 73 S" 3810101010103800" CALLCHAR  .( I)
 74 S" 3C08080848483000" CALLCHAR  .( J)
 75 S" 4448506050484400" CALLCHAR  .( K)
 76 S" 4040404040407C00" CALLCHAR  .( L)
 77 S" 446C545444444400" CALLCHAR  .( M)
 78 S" 444464544C444400" CALLCHAR  .( N)
 79 S" 3844444444443800" CALLCHAR  .( 0)
 80 S" 7844447840404000" CALLCHAR  .( P)
 81 S" 3844444454483400" CALLCHAR  .( Q)
 82 S" 7844447850484400" CALLCHAR  .( R)
 83 S" 3844403804443800" CALLCHAR  .( S)
 84 S" 7C10101010101000" CALLCHAR  .( T)
 85 S" 4444444444443800" CALLCHAR  .( U)
 86 S" 4444444428281000" CALLCHAR  .( V)
 87 S" 4444445454542800" CALLCHAR  .( W)
 88 S" 4444281028444400" CALLCHAR  .( X)
 89 S" 4444281010101000" CALLCHAR  .( Y)
 90 S" 7C04081020407C00" CALLCHAR  .( Z)
 91 S" 3820202020203800" CALLCHAR  .( [)
 92 S" 0040201008040200" CALLCHAR  .( .)
 93 S" 3808080808083800" CALLCHAR  .( ])
 94 S" 1028440000000000" CALLCHAR  .( ^)
 95 S" 0000000000007C00" CALLCHAR  .( _)
 96 S" 1810080000000000" CALLCHAR  .( ')
 97 S" 0000300838483C00" CALLCHAR  .( a)
 98 S" 4040704848487000" CALLCHAR  .( b)
 99 S" 0000384040403800" CALLCHAR  .( c)
100 S" 0808384848483800" CALLCHAR  .( d)
101 S" 000038447C403C00" CALLCHAR  .( e)
102 S" 0010282070202000" CALLCHAR  .( f)
103 S" 00003844443C0438" CALLCHAR  .( g)
104 S" 4040704848484800" CALLCHAR  .( h)
105 S" 0010001010101000" CALLCHAR  .( i)
106 S" 0008000808084830" CALLCHAR  .( j)
107 S" 4040485060504800" CALLCHAR  .( k)
108 S" 0010101010101000" CALLCHAR  .( l)
109 S" 0000685454545400" CALLCHAR  .( m)
110 S" 0000704848484800" CALLCHAR  .( n)
111 S" 0000384444443800" CALLCHAR  .( o)
112 S" 0000704848704040" CALLCHAR  .( p)
113 S" 0000384848380808" CALLCHAR  .( q)
114 S" 0000586040404000" CALLCHAR  .( r)
115 S" 0000384038047800" CALLCHAR  .( s)
116 S" 2020782020201800" CALLCHAR  .( t)
117 S" 0000484848483400" CALLCHAR  .( u)
118 S" 0000444428101000" CALLCHAR  .( v)
119 S" 0000444454542800" CALLCHAR  .( w)
120 S" 0000442810284400" CALLCHAR  .( x)
121 S" 00002424241C0438" CALLCHAR  .( y)
122 S" 00007C0810207C00" CALLCHAR  .( z)
123 S" 0C10102010100C00" CALLCHAR  .( {)
124 S" 1010101010101010" CALLCHAR  .( |)
125 S" 6010100810106000" CALLCHAR  .( })
126 S" 2454480000000000" CALLCHAR  .( ~)

CR .( Saving binary font file...)
S" DSK3.BFFONT" SAVE-FONT

 

 

Here you go. These are the 3 8K banks that contain the 30 fonts. The fonts start at >200 and each one takes >300 bytes. The cursor is in the final position, ascii 127.

 

fontsx30.zip

  • Like 3
  • Thanks 1

Share this post


Link to post
Share on other sites
3 hours ago, sometimes99er said:

288 fonts are available at 

If you want any or all in any specific format, then that's probably also possible. ;)

Yes indeed. Thank you. These are the only other source that I was aware of. It's a gold mine!

Edited by TheBF
  • Like 1

Share this post


Link to post
Share on other sites
8 hours ago, sometimes99er said:

If you want any or all in any specific format, then that's probably also possible. ;)
 

There are some nice ones in there. I especially like the full fonts with true lower case. How do I convert from GIF to something the TI can understand? Ideal would be to go directly to 768 bytes of character patterns. Or CALL CHARs would be OK too.

Share this post


Link to post
Share on other sites
5 hours ago, senior_falcon said:

There are some nice ones in there. I especially like the full fonts with true lower case. How do I convert from GIF to something the TI can understand? Ideal would be to go directly to 768 bytes of character patterns. Or CALL CHARs would be OK too.

 

I am trying to get similar help in the Magellan thread. The binary image in the font files that TI Writer uses (CHARA1, etc.) start at ASCII 0, six bytes in from the beginning (probably from E/A SAVE utility) and are either 1024 bytes for ASCII 0 – 127 or 2048 bytes for ASCII 0 – 255. I suppose, though. you have no choice but to start at ASCII 32 in the Basic environments. If we can get an import/export solution in Magellan for such binary images for the Pattern Descriptor Table, it would be pretty simple to manage from that point on.

 

...lee

Share this post


Link to post
Share on other sites
10 hours ago, senior_falcon said:

There are some nice ones in there. I especially like the full fonts with true lower case. How do I convert from GIF to something the TI can understand? Ideal would be to go directly to 768 bytes of character patterns. Or CALL CHARs would be OK too.

I guess that means characters >20 thru to >7F as raw data in binary files ?

Share this post


Link to post
Share on other sites
6 hours ago, sometimes99er said:

I guess that means characters >20 thru to >7F as raw data in binary files ?

That would be perfect!

Share this post


Link to post
Share on other sites
30 minutes ago, sometimes99er said:

Try this out.
fonts.zip
 

My question is still the same. How do I go from GIF format to uncompressed binary or CALL CHAR statements?

Share this post


Link to post
Share on other sites
4 minutes ago, senior_falcon said:

My question is still the same. How do I go from GIF format to uncompressed binary or CALL CHAR statements?

I have added files to the zip (maybe you need to clear a download cache). It now also contains the specified binary files (each with 768 bytes). So font no. 0123 now has 2 files, one GIF and one BIN.

 

Share this post


Link to post
Share on other sites

All I see is GIF files. Unfortunately, I overwrote the original .zip file so I cannot compare the length of the new zipped file with the old one.But  I can do that when I get home tonight

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...