Jump to content

Photo

Web99 - Search your TiFiles/Disks v0.5 Beta 4

DiskImages RS232 PcTool Serial Transfer Search

83 replies to this topic

#1 kl99 OFFLINE  

kl99

    Dragonstomper

  • 677 posts
  • Location:Vienna, Austria

Posted Sun May 17, 2015 11:05 AM

Web99
=====

This program is freeware.
Copyright by Klaus Lukaschek

 

2015-12-28 Version 0.5 Beta 4 *New

 

Introduction
============

The idea of this program is to help you in 3 different areas:
- get rid of duplicate Disk Images and Ti Files.
- make your Ti Files searchable, even from the TI-99
- access and manage your Ti File Collection from your TI-99

This Tool is programmed in Visual C#, it's .NET Framework 4 Client Profile based and therefore runs on Windows XP or later Windows Versions.
It is compiled to run on both x64 and x86 platforms. You will need to have .NET Framework 4 or later, it is sufficient to only have the 'Runtime' installed.
The index and search technology that got integrated into the project is the .NET port of Lucene. A serial port (or any USB2Serial solution) is required only if you want to communicate with your TI-99 or if you want to use the Search from your TI-99.

Why?
====
Whenever I am on a TI meeting or hitting a new website, it seems that I get tons of disk images, that I manually have to compare against my current collection.
I got tired of doing this over and over again. There must be an automatic way to check the new files for their uniqueness.

Imagine, having to find a certain Ti File - mostly a program - in your collection. How do you know on which Disk Image and in which Path it is stored?
The problem is, a Windows search tool can't look into your Disk Images and gives you a list of Ti Files with the name "ROS". Maybe you would even know the size in sectors, its Filetype, the Ti Diskname or some other Meta Data. However for your Pc your disk image is simply a Pc file with a Pc filename, a Pc filesize and some Date Information. Until now, most people started Ti99Dir or TiImageTool and opened one Disk Image after another until they hit the Ti File. How much cooler would it be if you have something like Google, customized for your TI-99 Disk Images? What if Google would know exactly all TI relevant information about your Disks, and it would let you search by Ti Filename, by Ti Diskname, by Ti Filetype, Size and more. Well, Web99 is trying to become exactly that search engine for you. It is even trying to become such a search engine usable from your TI machine.

Uniqueness
==========

For each stream of data you can calculate a Hashkey. I am using the MD5 128bit algorithm to generate those. This means the result is a 128bit length Key, usually this is written in hexadecimal form and therefore such a key looks like '88ec1168efbd75617d28fa3ade124dfa'. For our purpose this lenght should be more than enough to ensure uniqueness. Based on the same input, the same Hashkey is produced. So if you have two files, calculate their Hashkey and they are different means that those files are not identical. So comparing becomes a lot easier, we simply need to calculate Hashkeys once for everything and compare those with each other. The dupes will show up immediately because they have the same Hashkey.

The check for uniqueness can be done on all kind of levels.

So I started the idea to calculate an unique identifier for each Disk Image and every Ti File on my Pc, based on their binary content and meta data.
A program would be able to calculate these for a new set of Files and compare each against your collection.

 

Version 0.5 Beta 4 from 2015-12-28

Attached File  Web99_2015-12-28_v0.5_Beta_4.zip   4.03MB   33 downloads

 

Version 0.5 Christmas Edition from 2015-12-25 (with a complete Index)

http://www.ti99.eu/w...mas edition.zip

 

Other Versions:

2015-11-24 Version 0.5 Beta 2 [with Classic99 Export]

2015-11-22 Version 0.5 Beta

2015-11-12 Version 0.4d

2015-11-09 Version 0.4a

2015-11-09 Version 0.4

2015-06-04 Version 0.2

2015-05-24 Version 0.1c

2015-05-17 initial public release - Version 0.1


Edited by kl99, Mon Dec 28, 2015 10:19 AM.


#2 Schmitzi OFFLINE  

Schmitzi

    River Patroller

  • 3,912 posts
  • ToXiC
  • Location:Germany

Posted Sun May 17, 2015 2:21 PM

...so let the games begin :)

 

I saw that tool in Birkenau, and some times before, a quite cool solution!



#3 Opry99er OFFLINE  

Opry99er

    Quadrunner

  • 8,261 posts
  • Location:Cookeville, TN

Posted Sun May 17, 2015 5:49 PM

Interesting...

I primarily do everything in FIAD at the moment, so the Windows Search function works fine...

But when I can get a spare moment to pull my CF7 out and get back on real iron, this will likely come in very handy.

Thank you very much for the tool, and kudos on the work you put in!!

#4 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Mon May 18, 2015 12:37 AM

Here is some more Documentation...

 

Types of Documents

Representing a single Ti Disk:
DiskClone
Disk

Representing a single Ti File:
DiskFileRecord
TiFile
TiFileBinary

Fields of each Document Type

 

DiskClone:

References a Disk Document, stores additionally the Full Pc FilePath

DOCUMENTTYPE            "DISKCLONE"
DISKREFERENCE           HashKey of Referenced Disk [DISKHASH Field from DISK Document]
PATH                    Full Pc FilePath
DISKCLONEHASH           (reserved for next releases)
DISKNAME                Ti DiskName of Referenced Disk
DISKSIZE                Total Sector Size of Referenced Disk
SECTORSFREE             Free Sectors of Referenced Disk
SECTORSUSED             Used Sectors of Referenced Disk

Disk:

Represents a single Disk Image, will contain the same information for every User.

DOCUMENTTYPE            "DISK"
DISKNAME                Ti DiskName
DISKSIZE                Total Sector Size
SECTORSFREE             Free Sectors
SECTORSUSED             Used Sectors
CORRECTVIB              'true' if the Disk has a valid Volume Information Block
DISKHASH                HashKey of Pc File Binary

DiskFileRecord:
References a single TiFile on a specific Disk, therefore referencing a TiFile Document and a Disk Document.

DOCUMENTTYPE            "DISKFILERECORD"
DISKMEMBEROF            HashKey of Referenced Disk [DISKHASH Field from DISK Document]
TIFILEREFERENCE         HashKey of Referenced TiFile [TIFILEHASH Field from TIFILE Document]
FILEPROTECTION          'true' if the File is flagged protected on this Disk
DISKFILERECORDHASH      HashKey, uniqueness based on TiFileBinary + Ti FileName + Disk Binary
FILENAME                Ti FileName of Referenced TiFile
FILESIZE SECTORS        Size in Sectors of Referenced TiFileBinary
FORMAT TYPE             Ti FileType of Referenced TiFileBinary [PROGRAM, DIS/VAR 80,...]
DISKNAME                Ti DiskName of Referenced Disk
TIFILEBINARYREFERENCE   HashKey of Referenced TiFileBinary [TIFILEBINARYHASH Field from TIFILEBINARY Document]
BYTES FILESIZE          Size in Bytes of Referenced TiFileBinary

TiFile:
Represents a single Ti File, for which the binary content is stored in a referenced TiFileBinary Document.

DOCUMENTTYPE            "TIFILE"
TIFILEBINARYREFERENCE   HashKey of Referenced TiFileBinary [TIFILEBINARYHASH Field from TIFILEBINARY Document]
FILENAME                Ti FileName of Referenced TiFileBinary
FILESIZE SECTORS        Size in Sectors of Referenced TiFileBinary
FORMAT TYPE             Ti FileType of Referenced TiFile [PROGRAM, DIS/VAR 80,...]
TIFILEHASH              HashKey, uniqueness based on TiFileBinary + Ti FileName
BYTES FILESIZE          Size in Bytes of Referenced TiFileBinary
SOURCE                  Extracted Basic SourceCode / Text from Binary

TiFileBinary:
Contains the actual Ti Program/Ti File and some Meta Data that is based on a binary only.

DOCUMENTTYPE            "TIFILEBINARY"
BINARY                  Binary of TiFile [this contains the actual Program/File in complete form]
BYTES                   Size in Bytes
FILESIZE                Size in Sectors
FORMAT TYPE             Ti FileType [PROGRAM, DIS/VAR 80,...]
TIFILEBINARYHASH        HashKey of Binary representing one TiFile

How to Search:

The Index is based on Lucene, therefore the QueryParser Syntax is what can be entered in the Search.
For now I refer to this basics, although it's for a slightly older release of Lucene than used in the project:
https://lucene.apach...rsersyntax.html

The fields above (FILESIZE, TYPE, FILENAME, DIKSNAME,...) can be used in any combination.

The Web99 search automatically treats everything UPCASE, so you don't have to care how you enter your data.

Examples:
+DOCUMENTTYPE:DISKFILERECORD +FILENAME:LOAD
+DOCUMENTTYPE:DISKFILERECORD +FILENAME:AL* -TYPE:PROGRAM
+DOCUMENTTYPE:TIFILE +FILENAME:C* -TYPE:"DIS/VAR 80"
+DOCUMENTTYPE:DISKCLONE +DISKNAME:A*
+DOCUMENTTYPE:DISKCLONE +DISKNAME:B* +DISKSIZE:360
+DOCUMENTTYPE:DISKCLONE +DISKREFERENCE:abe884b1fba3a66cdff13d6679bb8745
+DOCUMENTTYPE:DISKCLONE +PATH:*EA*
+DOCUMENTTYPE:DISKCLONE +PATH:*GPL*
+DOCUMENTTYPE:TIFILE +FILENAME:LOAD +SECTORS:8

Range Queries don't work quit yet, but I am working on a solution for that for the next versions:
+DOCUMENTTYPE:TIFILE +FILENAME:LOAD +SECTORS:[1 TO 9]

How to Bootstrap a TI-99:

Well, there is this famous problem with chicken and eggs.
How to you get a communication program onto a computer without a communication program.

My solution is simple: use what TI-99 is coming with out of the box. No cartridges/software needed.

OLD RS232.BA=9600
or on the NanoPEB set the Baudrate in the tool to 19200 and
OLD RS232.BA=19200

Web99 automatically interacts with your TI-99 like a TI-99 would and replies to your wish and provides a program via serial interface.
(So if you want, think of Web99 being a TI-99 on the other end of the line who just entered SAVE RS232.BA=9600.)

If you have XB you can of course directly run the program with
RUN "RS232.BA=9600"

If you have a Disk Drive on your TI-99 (not needed actually), you can of course save the Bootstrap program and load it from there from now on.
But whenever it's inhandy, you now how to get it into RAM.

How to Search from TI-99:

This is still a proof of concept for now. You are limited to search via specifying a FILENAME or part of FILENAME.
And it makes sense only to search for Programs, not other Files.
 

Search: KONG*
Search: BURGENSCHL
...

When you search the search term is send over to Web99 which performs the search and sends over the search result to your TI-99 like a Disk Catalog would display the records of a Disk.

Select:

Now you have to choose the number you want to load.
If you hit Enter the program will exit.

Now you load the selected program with
OLD RS232.BA=9600
or in Extended Basic with
RUN "RS232.BA=9600"

You could probably even load Assembler programs like that, if you instead use these in Extended Basic or within Basic running a E/A cartridge.
CALL INIT
CALL LOAD("RS232.BA=9600")

You are free to play around with the bootstrap program and optimize it for your needs, it could very easily be modified to automatically load what got selected and things like that. For the start I wanted it to work even when running no cartridge. Feel free to share your solutions with others.

And as I said, this is only a proof of concept and I want to deep dive into this feature far more in the next versions.


Edited by kl99, Mon Nov 23, 2015 4:23 AM.


#5 mizapf OFFLINE  

mizapf

    River Patroller

  • 2,622 posts
  • Location:Germany

Posted Mon May 18, 2015 3:26 AM

Good work, Klaus ... although I'd first have to find a way to run .NET stuff (maybe via Mono)...

 

The idea with hash keys is what I also did in TIImageTool in the context of disassembly. Because I was tired to re-enter all parameters and I could not rely on a unique file name for a parameter set, I created a simple kind of hash code and saved that into the settings file, together with the parameters.



#6 Opry99er OFFLINE  

Opry99er

    Quadrunner

  • 8,261 posts
  • Location:Cookeville, TN

Posted Mon May 18, 2015 7:00 AM

Bootstrapping, eh?

Sounds like RSECTOR WSECTOR.

Doea it function similarly? That would be pretty amazing. :)

#7 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Mon May 18, 2015 8:16 AM

I am using the DSR functionality from the RS232, that comes with OLD/SAVE.

All I am doing is reacting the same as if you hook up a 2nd Texas Instruments Home Computer to your Home Computer.

 

See Page 18 from the pdf:

http://www.mainbyte....man/php1220.pdf

 

It transfers one sector a time into the VDP Buffer, then a CRC check is performed.

If the transmit of the sector was successful, a >16 is the response, and the next sector gets transmitted.

If the transmit of the sector was unsuccessful, a >15 is the response, and the same sector gets retransmitted.

 

You can find the definition of the whole protocol here:

ftp://ftp.whtech.com/datasheets%20and%20manuals/Specifications/TI-99_4%20Home%20Computer%20EIA%20RS232C%20Peripheral%20General%20Software%20Interface%20and%20Operational%20Specification%20V2.0%2003-28-1983.pdf

ftp://ftp.whtech.com/datasheets%20and%20manuals/Specifications/TI-99_4%20Home%20Computer%20EIA%20RS232C%20Peripheral%20Detailed%20Software%20Functional%20Specification%20V2.0%2003-28-1983.pdf


Edited by kl99, Mon May 18, 2015 11:40 AM.


#8 Ksarul OFFLINE  

Ksarul

    River Patroller

  • 4,235 posts

Posted Mon May 18, 2015 12:04 PM

I think the only TI software that was ever designed to use that functionality was the unreleased Battlestar Galactica cartridge--it was supposed to allow you to connect up a pair of /4As to each other to allow head-to-head battles. Unfortunately, the code for that one has never turned up. . .



#9 Schmitzi OFFLINE  

Schmitzi

    River Patroller

  • 3,912 posts
  • ToXiC
  • Location:Germany

Posted Mon May 18, 2015 12:52 PM

I would like to see games, using the RS232/UDS-10´s capabilities, connecting to other TI´s over the internet, for some online-gambling  :) :)

 

...or connecting to a Geneve-hosted multiplayer-game-server



#10 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Tue May 19, 2015 1:58 AM

I guess best would be a rewrite of CALL JOYST to retrieve the input for #2 from RS232.



#11 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Fri May 22, 2015 1:19 AM

here is a video on how to use Web99 from Windows. The other features will be covered in other videos:
http://screencast.com/t/jaoS8EOXDo



#12 humeur OFFLINE  

humeur

    Chopper Commander

  • 112 posts
  • Location:La roche sur yon France

Posted Fri May 22, 2015 5:02 AM

One question:  if you have a archive file is possible to extract the file name of this archive in TiFile.

 

Jean Louis



#13 Schmitzi OFFLINE  

Schmitzi

    River Patroller

  • 3,912 posts
  • ToXiC
  • Location:Germany

Posted Fri May 22, 2015 5:56 AM

here is a video on how to use Web99 from Windows. The other features will be covered in other videos:
http://screencast.com/t/jaoS8EOXDo

 

I missed a video like this. very good examples !   ♫♪ I can see clearly now ♪♫  :)

 

Is there a small, handy list with the possible filter-commands/syntax ?


 



#14 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Fri May 22, 2015 11:22 AM

One question:  if you have a archive file is possible to extract the file name of this archive in TiFile.

 

Jean Louis

 

It's not yet possible, but INT/FIX 128 TiFiles will be checked whether they are arc files and any TiFiles inside will be added into the Index in one of the next releases.

Maybe an ARC File becomes a dedicated DocumentType as well.

Let's see.

 

Is there a small, handy list with the possible filter-commands/syntax ?

 

Yes schmitzi.

Everything is uppercased automatically, so it's case insensitive.

An entry in the search result is always a Lucene Document.

In the current release there are 5 different types of Lucene Documents.

A Document is defined by containing a set of Lucene Fields and each of these Fields has a Value.

Mostly these Fields are of type string. Some are not of type string but numeric. Only one is of type Binary.

 

You should always search for a specific documenttype [of the 5 available].

 

Let's check out the definition of the DiskFileRecord document (the others are in the former posts in this thread). Each entry is a Field.

 

DiskFileRecord:

References a single TiFile on a specific Disk, therefore referencing a TiFile Document and a Disk Document.
DOCUMENTTYPE            "DISKFILERECORD"
DISKMEMBEROF            HashKey of Referenced Disk [DISKHASH Field from DISK Document]
TIFILEREFERENCE         HashKey of Referenced TiFile [TIFILEHASH Field from TIFILE Document]
FILEPROTECTION          'true' if the File is flagged protected on this Disk
DISKFILERECORDHASH      HashKey, uniqueness based on TiFileBinary + Ti FileName + Disk Binary
FILENAME                Ti FileName of Referenced TiFile
FILESIZE SECTORS        Size in Sectors of Referenced TiFileBinary
FORMAT TYPE             Ti FileType of Referenced TiFileBinary [PROGRAM, DIS/VAR 80,...]
DISKNAME                Ti DiskName of Referenced Disk
TIFILEBINARYREFERENCE   HashKey of Referenced TiFileBinary [TIFILEBINARYHASH Field from TIFILEBINARY Document]
BYTES FILESIZE          Size in Bytes of Referenced TiFileBinary 

The Lucene Queryparser syntax is working like this:

Syntax:
+FIELDA:FIELDVALUE1

--> give me all Documents that contain a FIELDA with the value FIELDVALUE1.

 

Multiple conditions:

 

Boolean AND:

Syntax:
+FIELDA:FIELDVALUE1 +FIELDB:FIELDVALUE2

Alternate:
FIELDA:FIELDVALUE1 AND FIELDB:FIELDVALUE2

--> give me all Documents that contain a FIELDA with the value FIELDVALUE1 AND contain a FIELDB:FIELDVALUE2.

 

Boolean NOT:

Syntax:
+FIELDA:FIELDVALUE1 -FIELDB:FIELDVALUE2

Alternate:
FIELDA:FIELDVALUE1 NOT FIELDB:FIELDVALUE2

--> give me all Documents that contain a FIELDA with the value FIELDVALUE1 but do NOT contain a FIELDB:FIELDVALUE2.

 

Boolean OR:

Syntax:
FIELDA:FIELDVALUE1 FIELDB:FIELDVALUE2

Alternate:
FIELDA:FIELDVALUE1 OR FIELDB:FIELDVALUE2

--> give me all Documents that either contain a FIELDA with the value FIELDVALUE1 OR contain a FIELDB:FIELDVALUE2 or both.

 

Let's move over to examples representing our Documents.

Which type of Document you target you specify by the field DOCUMENTTYPE. So each query should start with or contain one of these:

+DOCUMENTTYPE:DISKFILERECORD
+DOCUMENTTYPE:TIFILE
+DOCUMENTTYPE:DISK
+DOCUMENTTYPE:DISKCLONE
+DOCUMENTTYPE:TIFILEBINARY

It will return all documents of that type. If you miss to include such a condition then your search result will be a mess.

+DOCUMENTTYPE:DISKFILERECORD +FILENAME:GAME

--> return all DiskFIleRecord Documents where the Filename is "GAME". (again, it's case insensitive).

+DOCUMENTTYPE:DISKFILERECORD +TYPE:"dis/var 80"

--> return all DiskFIleRecord Documents where their type is "DIS/VAR 80". So use quotes when your fieldvalue contains spaces.

+DOCUMENTTYPE:DISKFILERECORD +FILENAME:L*

--> return all DiskFIleRecord Documents where the Filename starts with L. So use * as wildcard. Use ? as single-char wildcard.

+DOCUMENTTYPE:DISKFILERECORD +FILENAME:*RCHIV*

--> return all DiskFIleRecord Documents where the Filename contains RCHIV. You can use * as wildcard in the beginning as well.

+DOCUMENTTYPE:DISKFILERECORD +FILENAME:GEM10\*G?

--> return all DiskFIleRecord Documents where the Filename start with GEM10*G and have an additional character. Here * is not used as wildcard but rather as character of the filename. Therefore it has to be escaped with a "\". You have to escape these characters which are used for syntax: + - && || ! ( ) { } [ ] ^ " ~ * ? : \

The ? at the end is a single-char wildcard.

+DOCUMENTTYPE:DISKFILERECORD -FILENAME:[A TO LOAD] 

--> return all DiskFIleRecord Documents where the Filename does not match a certain range. Everything from A til letter L (sorted by Ascii Code) shall be excluded. I have set the end of exclusion to LOAD. Therefore a Document with Filename LOAD1 would be returned. Using [! TO B] will match the range of Ascii !,#,...,0,1,2,3,...,@,A,B.

+DOCUMENTTYPE:DISKFILERECORD +DISKNAME:CHI* +TYPE:PROGRAM

--> return all DiskFIleRecord Documents that belong to a Disk with the Diskname that starts with CHI and that are of type PROGRAM.

+DOCUMENTTYPE:DISKCLONE +DISKREFERENCE:ce73c56c005815125e13781ab827d08b

--> return all DiskClone Documents that match a certain DiskReference Hashkey. Use that to get the paths of a certain Disk.


Edited by kl99, Mon Nov 23, 2015 4:27 AM.


#15 RXB OFFLINE  

RXB

    River Patroller

  • 2,842 posts
  • Location:Vancouver, Washington, USA

Posted Fri May 22, 2015 3:32 PM

A feature in RXB is CALL IO that talks directly to the IO chip in the TI.

100 ! Turns OFF/ON/OFF each CARD from >1000 to >1F00 but will lock up from some cards.
110 FOR CRU=2048 TO 3968 STEP 128
120 CALL IO(3,8,CRU,0,3,8,CRU,255) ! OFF/ON a CARD
130 FOR A=1 TO 200 :: NEXT A ! Delay loop
140 CALL IO(3,8,CRU,0) ! Turn off CARD
150 NEXT CRU
160 END ! Done all cards found!

IO is a GPL command built into the GROM 0 and ROM 0 of the TI. 

I am amazed at how so few people take advantage of such a powerful routine.

 

CALL IO could be used to read bits directly from the RS232 card or send bits directly to that bus from memory.



#16 globeron OFFLINE  

globeron

    Dragonstomper

  • 640 posts

Posted Sat May 23, 2015 8:05 AM

 

I missed a video like this. very good examples !   ♫♪ I can see clearly now ♪♫  :)

 

Is there a small, handy list with the possible filter-commands/syntax ?


 

 

 

The video is very good and the WEB99 tool is good!

 

Exactly what is needed to catalog many disks/files

(during the real-TI days, I only could differentiate (group) using coloured diskettes  (blue, white, green, etc.)

but still you had to go one by one through the printed catalogs to figure out where the file was

(as at a certain stage....you never can find that program or file anymore).

This solves a lot !

 

* 1x requirement to add the comments field as well (from John Birdwell Utilities 4.2)

  (like Fred Kaal added it already to TIDIR) as there are some disks which use the comment

  field (e.g. how to start the program or what the file is).



#17 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Sat May 23, 2015 4:19 PM

A feature in RXB is CALL IO that talks directly to the IO chip in the TI.

100 ! Turns OFF/ON/OFF each CARD from >1000 to >1F00 but will lock up from some cards.
110 FOR CRU=2048 TO 3968 STEP 128
120 CALL IO(3,8,CRU,0,3,8,CRU,255) ! OFF/ON a CARD
130 FOR A=1 TO 200 :: NEXT A ! Delay loop
140 CALL IO(3,8,CRU,0) ! Turn off CARD
150 NEXT CRU
160 END ! Done all cards found!

IO is a GPL command built into the GROM 0 and ROM 0 of the TI. 

I am amazed at how so few people take advantage of such a powerful routine.

 

CALL IO could be used to read bits directly from the RS232 card or send bits directly to that bus from memory.

 

I am afraid of limiting the target audience too much if aiming for RXB. I have read about this command in the GPL manual, however I am still doing hard on how integrate GPL in standard XB or call it from Assembler. Is there a way to execute a GPL command from TI XB? I feel bad asking you since the information is probably right in your videos or in manuals already and I just haven't had the discipline to cover those.



#18 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Sat May 23, 2015 4:22 PM

a new version v0.1b got released:

check post #1 of current thread for the file.

http://atariage.com/...e/#entry3239442

 

Kl99



#19 RXB OFFLINE  

RXB

    River Patroller

  • 2,842 posts
  • Location:Vancouver, Washington, USA

Posted Sat May 23, 2015 8:19 PM

 

I am afraid of limiting the target audience too much if aiming for RXB. I have read about this command in the GPL manual, however I am still doing hard on how integrate GPL in standard XB or call it from Assembler. Is there a way to execute a GPL command from TI XB? I feel bad asking you since the information is probably right in your videos or in manuals already and I just haven't had the discipline to cover those.

I only mentioned RXB.

 

The GPL command IO is built into all TI99/4A computers in the ROM and GROM so no need for RXB at all.

 

I only mentioned it as I expected CRU in Assembly is painful and memory intensive so using GPL IO would be more compact and is more compatible with devices.



#20 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Sat May 23, 2015 10:24 PM

That is why i think that studying GPL is worth it. I am still checking all possibilities but I am aiming for creating a DSR within a Cartridge to have my rs232 related routines. Like the TEII cartridge does it with the Speech Synthesizer. There will be options for those without an Ubergrom cartrdige. I just have not found a good Development Environment to get working on a DSR started. Most emulators fake too much when it goes to DSR/PAB handling or miss proper debugging options.



#21 Tursi OFFLINE  

Tursi

    River Patroller

  • 4,848 posts
  • HarmlessLion
  • Location:BUR

Posted Sun May 24, 2015 12:38 AM

I don't think Classic99 or MESS fake the DSR/PAB handling... in Classic99, you can load a DSR ROM at the CRU of your choice, and it is mapped in/out and searched for perfectly normally, with full debug available. What fakery is blocking you?

 

In the Classic99.ini, just create a cartridge containing any cartridge ROMs you need (you can refer to built-in ones if you like), plus your DSR ROM. The only gotcha is I can't promise overwriting the disk DSR at >1100 is safe - do your development at a different CRU base.

 

For instance, this will give you your custom DSR mounted at CRU >1000 with Editor/Assembler also plugged in:

 

[usercart0]

name=DSR Test

rom0=O|0000|0002|Editor/Assembler (group0,item2)

rom1=D|1000|2000|c:\work\mydsr.bin

 

You can't talk to actual hardware, but the DSR code itself will work fine.



#22 mizapf OFFLINE  

mizapf

    River Patroller

  • 2,622 posts
  • Location:Germany

Posted Sun May 24, 2015 3:46 AM

Like the TEII cartridge does it with the Speech Synthesizer.

 

So there's not necessarily a CRU selection behind but just the access as a DSR.

 

 

Most emulators fake too much when it goes to DSR/PAB handling or miss proper debugging options.

 

Hmm ... tell me more what you consider to be "faked"; I'm not sure what you mean.

 

Thinking of MESS, you could try to work with the GRAMKracker. I'm sure you can implement your own DSR routine and upload it into the GK.

 

You can quite comfortably do some debugging in MESS on the CPU RAM level using the debugger, but you cannot set breakpoints in GROM, because this is a TI-specific concept.

 

If you plan to design new hardware with CRU access, MESS is probably not the easiest thing to choose. It would be feasible, though. You would have to conceive how the envisioned real piece of hardware should work, then create an emulation of that hardware in your own MESS source tree, and add the new hardware as an option to the PEB slots, or as a new type of cartridge.



#23 kl99 OFFLINE  

kl99

    Dragonstomper

  • Topic Starter
  • 677 posts
  • Location:Vienna, Austria

Posted Sun May 24, 2015 7:09 AM

You can't talk to actual hardware, but the DSR code itself will work fine.

 

I guess this is what I meant. When we talk about RS232, at some point you want to parse what is communicated via CRU to the Pc Serial or Parallel Port.

When we talk about Disk DSR, at some point you pass in a Pc File or a Pc Directory. It is the problem that you don't see the original DSR running and can step by step start to understand what is happening, but a fake DSR. Classic99 doesn't support the RS232, PIO devices right now, so i can't use it to understand the ongoing things between DSR/CRU/PAB/Monitor. Please don't take this as critic, your program is fantastic and is running daily on my machine. And we can't thank you enough for this tool.

 

One example I was thinking of when writing this was where I have tried to change the PAB for an opened file. I tried to set Device Filename from DSK1.TEST to DSK2.TEST. I had the file in both pc directories. As far as I remember I changed it in Scratch Pad Ram and Vdp. I got frustrated because it didn't work.

 

Hmm ... tell me more what you consider to be "faked"; I'm not sure what you mean.

 

I guess you are right, that Mess includes a very complete RS232, CRU, 9902, 9901 emulation and even connects to the outside world via this writing to the file.

It's probably simply because I don't know how to properly debug Mess beyond having a CPU debugger. Since it's a complicated topic I have always found other things todo for Web99.

 

What kept me from doing it on the real device until now? I have heard horror stories from fried 9901 chips (or 9902?) from Marc Hull, by nothing more than setting wrong CRU. :)



#24 mizapf OFFLINE  

mizapf

    River Patroller

  • 2,622 posts
  • Location:Germany

Posted Sun May 24, 2015 7:34 AM

It's probably simply because I don't know how to properly debug Mess beyond having a CPU debugger.

 

Yes, as I said, as long as you stay with CPU RAM debugging, the MESS debugger is pretty useful, with memory inspection, disassembly, breakpoints, and watchpoints which can be used to detect any kind of memory access (e.g. when writing to a memory location).

 

On the downside, there is no good way to debug GPL, since the whole GPL processing happens in software, and the GROMs are specific circuits.



#25 Tursi OFFLINE  

Tursi

    River Patroller

  • 4,848 posts
  • HarmlessLion
  • Location:BUR

Posted Sun May 24, 2015 7:39 AM

 

I guess this is what I meant. When we talk about RS232, at some point you want to parse what is communicated via CRU to the Pc Serial or Parallel Port.

When we talk about Disk DSR, at some point you pass in a Pc File or a Pc Directory. It is the problem that you don't see the original DSR running and can step by step start to understand what is happening, but a fake DSR. Classic99 doesn't support the RS232, PIO devices right now, so i can't use it to understand the ongoing things between DSR/CRU/PAB/Monitor. Please don't take this as critic, your program is fantastic and is running daily on my machine. And we can't thank you enough for this tool.

 

One example I was thinking of when writing this was where I have tried to change the PAB for an opened file. I tried to set Device Filename from DSK1.TEST to DSK2.TEST. I had the file in both pc directories. As far as I remember I changed it in Scratch Pad Ram and Vdp. I got frustrated because it didn't work.

 

Well.. we're talking a little bit vague now.. but the operation of the built-in devices should not affect the development of software for new hardware. And just like in real life, if you want to test against new hardware, you have to build that hardware. So in emulation, you have to write the code for the hardware. :)

 

Classic99's disk emulation - the DSR /itself/ is written in C, yes, but the entire interaction with the console and the CRU and the DSR ROM all happens before it's allowed to take over (and you can also map in the real TI Disk controller and step through that code - in fact I have numerous times in order to troubleshoot issues.)

 

the frustration you're talking about is why the real controller is supported in Classic99 -- but don't forget there's a lot of higher level disk help in there too. Turn on the debug options and read the log, and a lot of tips are emitted if it detects things that won't work on the TI controller. ;)







Also tagged with one or more of these keywords: DiskImages, RS232, PcTool, Serial, Transfer, Search

0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users