kl99 Posted May 17, 2015 Share Posted May 17, 2015 (edited) 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-99This 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 Web99_2015-12-28_v0.5_Beta_4.zip Version 0.5 Christmas Edition from 2015-12-25 (with a complete Index) http://www.ti99.eu/web99/Web99%20%5B2015-12-25%5D%20v0.5%20xmas%20edition.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 December 28, 2015 by kl99 5 Quote Link to comment Share on other sites More sharing options...
+Schmitzi Posted May 17, 2015 Share Posted May 17, 2015 ...so let the games begin I saw that tool in Birkenau, and some times before, a quite cool solution! 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted May 17, 2015 Share Posted May 17, 2015 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!! 1 Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 18, 2015 Author Share Posted May 18, 2015 (edited) Here is some more Documentation... Types of DocumentsRepresenting a single Ti Disk:DiskCloneDiskRepresenting a single Ti File:DiskFileRecordTiFileTiFileBinaryFields 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.apache.org/core/2_9_4/queryparsersyntax.htmlThe 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:8Range 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=9600or on the NanoPEB set the Baudrate in the tool to 19200 andOLD RS232.BA=19200Web99 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 withRUN "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 withOLD RS232.BA=9600or in Extended Basic withRUN "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 INITCALL 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 November 23, 2015 by kl99 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted May 18, 2015 Share Posted May 18, 2015 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. 1 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted May 18, 2015 Share Posted May 18, 2015 Bootstrapping, eh? Sounds like RSECTOR WSECTOR. Doea it function similarly? That would be pretty amazing. Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 18, 2015 Author Share Posted May 18, 2015 (edited) 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.com/ti99/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 May 18, 2015 by kl99 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted May 18, 2015 Share Posted May 18, 2015 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. . . Quote Link to comment Share on other sites More sharing options...
+Schmitzi Posted May 18, 2015 Share Posted May 18, 2015 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 Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 19, 2015 Author Share Posted May 19, 2015 I guess best would be a rewrite of CALL JOYST to retrieve the input for #2 from RS232. Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 22, 2015 Author Share Posted May 22, 2015 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 2 Quote Link to comment Share on other sites More sharing options...
humeur Posted May 22, 2015 Share Posted May 22, 2015 One question: if you have a archive file is possible to extract the file name of this archive in TiFile. Jean Louis Quote Link to comment Share on other sites More sharing options...
+Schmitzi Posted May 22, 2015 Share Posted May 22, 2015 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 ? Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 22, 2015 Author Share Posted May 22, 2015 (edited) 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 November 23, 2015 by kl99 1 Quote Link to comment Share on other sites More sharing options...
+RXB Posted May 22, 2015 Share Posted May 22, 2015 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. 2 Quote Link to comment Share on other sites More sharing options...
globeron Posted May 23, 2015 Share Posted May 23, 2015 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). 1 Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 23, 2015 Author Share Posted May 23, 2015 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. Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 23, 2015 Author Share Posted May 23, 2015 a new version v0.1b got released: check post #1 of current thread for the file. http://atariage.com/forums/topic/238433-web99-initial-public-release/?do=findComment&comment=3239442 Kl99 2 Quote Link to comment Share on other sites More sharing options...
+RXB Posted May 24, 2015 Share Posted May 24, 2015 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. Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 24, 2015 Author Share Posted May 24, 2015 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. 1 Quote Link to comment Share on other sites More sharing options...
Tursi Posted May 24, 2015 Share Posted May 24, 2015 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. 2 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted May 24, 2015 Share Posted May 24, 2015 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. 1 Quote Link to comment Share on other sites More sharing options...
kl99 Posted May 24, 2015 Author Share Posted May 24, 2015 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. Quote Link to comment Share on other sites More sharing options...
+mizapf Posted May 24, 2015 Share Posted May 24, 2015 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. Quote Link to comment Share on other sites More sharing options...
Tursi Posted May 24, 2015 Share Posted May 24, 2015 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.