Jump to content
IGNORED

AspeQt: Yet another SIO2PC/APE clone


Recommended Posts

APE provides several additional SIO commands, for example one to read the time from the PC (using a small program called APETIME on the Atari). These commands aren't officially documented, so I had to reverse-engineer APETIME to implement it into AtariSIO.

 

The SIO time/date support was officially documented in the past, back then when I registered my APE-DOS copy. In the beginning it wasn't compatible with redirected "D:" I/O hooks (like the Black Box does) so he updated his code (both APE and APETIME) to be more compatible.

 

Also, the working of APETIME is no secret either as Steven sent me the source code a long time ago. Can't imagine I'm the only one who received this source. I'll have to admit I still had to reverse-engineer APETIME to make a driver for my BBS as I lost his source code :-)

The SIO time/date support was officially documented in the past, back then when I registered my APE-DOS copy. In the beginning it wasn't compatible with redirected "D:" I/O hooks (like the Black Box does) so he updated his code (both APE and APETIME) to be more compatible.

Where were they documented? I can't remember finding any official docs on the website, or in the APE for DOS zip-file.

 

I was able to gather some information and source code from the 'net, including some descriptions about the $F0 and $F1 sub-commands (get image filename and get version), which I then implemented in AtariSIO. But since none of the stuff I found seemed to be official I reverse-engineered apetime (which was no big deal) to be sure this information was correct.

 

so long,

 

Hias

Where were they documented? I can't remember finding any official docs on the website, or in the APE for DOS zip-file.

 

I think the info is in a text file in an ATR supplied with the earlier version of APE-DOS (don't know about the "newer" versions). Since I haven't a working PC floppy drive right now to read the original 3.5" disk I can't check.

 

I was able to gather some information and source code from the 'net, including some descriptions about the $F0 and $F1 sub-commands (get image filename and get version),

 

You probably already know this but anyhow: there are several other sub-commands available like loading/swapping ATR's and running macro's in APE, all initiated from the A8-bit. This is the way I exchanged email between PC and A8 Pro!-BBS. Too long ago to remember how or what.

Steve added a few functions awhile back that I requested as well. Since writing documentation always seems to be one of those things you never get to, and for a coder/developer usually the most boring part of a project, maybe we can do Steve a favor and start to document the commands that we all know about? Either a thread over at AtariMax or here (or both).

 

I know about these commands that I'm using (this is original information from Steve):

 

SIO Command Format for all commands

0xXX 0x93 0xYY 0xZZ 0xCC

 

0xXX = SIO Drive ID (0x31 = Drive 1, 0x38 = Drive

0x93 = Remote Control Command (Always 0x93)

0xYY = Remote Control Function

0xZZ = Remote Control Sub-Function

0xCC = Command Checksum (Generated by OS)

 

Load Existing Disk Image

(0xXX = Target Drive ID, 0xYY = 0xF8, 0xZZ = Doesn't matter, 256 Byte Write Payload)

 

Write 256 bytes with command, filename should be a null terminated ascii string starting at position zero, up to 254 characters in length.

Image name may contain an absolute or relative path.

If the image name contains an absolute path, for example E:\mydisk.atr then that file will be loaded in drive 0xXX if it exists.

If the image name contains a relative path, the image name will be appended to the APE Temporary Image Files directory, which is located in the APE installation directory.

For example, if you pass the filename 'BACKUPS\DISK.ATR' with no path, and APE is installed in 'C:\Program Files\APE For Windows' then APE will look for the file in 'C:\Program Files\APE For Windows\Temporary Image Files\BACKUPS\DISK.ATR'

Check the Y register after making your SIO call to determine if the command succeeded as with any SIO call.

 

Note: You may also use this command to unload a drive by passing a null string (0x00 @ position 0) for the filename.

 

--

 

Set PC-Mirror

(0xXX = Target Drive ID, 0xYY = 0xF9, 0xZZ = Doesn't matter, 256 Byte Write Payload)

 

Write 256 bytes with command. PC-MIRROR path should be a null terminated ascii string starting at position zero, up to 254 characters in length.

The path should be a complete absolute path including a filespec, typically '*.*'. For example 'C:\MYFILES\*.*' is valid if the directory 'C:\MYFILES' exists, but 'C:\MYFILES\' is invalid because it does not contain a filespec.

If the path is a null string (0x00 @ position 0) then the default PC-MIRROR path will be loaded, the same result as if you pressed the 'PC-MIRROR' button beside the drive number in APE.

 

--

 

Create and optionally load a new ATR image

(0xXX = Doesn't matter [Any of 0x31..0x38], 0xYY = 0xFA, 0xZZ = Doesn't matter, 256 byte write payload)

 

Write 256 bytes with command, creation data should be a null terminated ascii string starting at position zero, up to 254 characters in length.

 

Creation data MUST be in this format, separated by the '|' character.

 

PATH_TO_ATR|SECTORS|DENSITY|MOUNT_DRIVE<NULL>

 

Where PATH_TO_ATR may be a absolute or relative reference to the location to create a new ATR image.

To prevent overwriting non-ATR files, this filename MUST end in .ATR or the operation will fail.

If the image name contains an absolute path, for example E:\mydisk.atr then that file will be created.

If the image name contains a relative path, the image name will be appended to the APE Temporary Image Files directory, which is located in the APE installation directory.

For example, if you pass the filename 'BACKUPS\DISK.ATR' with no path, and APE is installed in 'C:\Program Files\APE For Windows' then APE will create the file in 'C:\Program Files\APE For Windows\Temporary Image Files\BACKUPS\DISK.ATR'

 

If you are using a relative path, APE will create any directories required to create the image. For example if you pass the filename 'X\Y\Z\TEST.ATR' APE will transparently create directories X, Y and Z inside the temporary image space to sucessfully create TEST.ATR.

 

If you specify an absolute path, for example 'E:\MYDIR\FILE.ATR' then APE will NOT attempt to create any directories to satisfy the request and if the path does not exist then the command will fail.

 

SECTORS is the size of the image to create in sectors, this must be an ASCII integer in the range of 4..65535 or the operation will fail.

 

DENSITY is the number of bytes per sector to use for the new image, this must be '128' or '256' in ASCII. Other values will cause the operation to fail.

 

MOUNT_DRIVE is the drive number to mount the drive in after creation. This must be a single ASCII digit in the range of 0..8. If zero is specified then the image will be created, but will not be loaded.

 

The string must be NULL terminated (Character 0x00)

 

Check the Y register after making your SIO call to determine if the command succeeded as with any SIO call.

 

--

 

Read mounted image location

(0xXX = Target drive [Any of 0x31..0x38], 0xYY = 0xF0, 0xZZ = Doesn't matter, 256 byte read payload)

 

Data returned is a null terminated ASCII string containing either the full path and filename of the image, or the currently loaded PC-MIRROR path and filespec.

Byte 256 of the payload is always a character representing the type of drive in use, check this byte before parsing the ASCII string.

If Byte 256 is a null character (0x00) then the drive is empty.

if Byte 256 is the character 'A' then the drive is loaded with an ATR image. Image specifics can be obtained by reading the Percom configuration block.

If Byte 256 is the character 'P' then the drive is loaded with a PRO image. Image specifics can be obtained by reading the Percom configuration block.

If Byte 256 is the character 'M' then the drive is a PC-MIRROR drive and the string is the current path+filespec.

Edited by Shawn Jefferson
  • 3 weeks later...

Hi,

 

two weeks ago at the Fujiama convention I first got to see AspeQt live and in action and I almost got crazy: Finally there the perfect match to combine my WUDSN IDE with my real Ataris via the folder images - no reload, no restart just LOAD. Absolutely excellent, I have been looking for this for years, Thanks!

 

So after I was back I ordered one of the Digitus USB2SERIAL converters and digged out my old 25pol SIO2PC cable, added a 25pin to 9pin adapter cable, the Digitus converter and the USB cable. After playing around with the handshake method it turned out to work with "RI" and I am very happy.

 

Now I have some questions:

- What is the difference between the handshake methods and what do they depend on? On Fujiama "DTS" worked with Marcins interface, but here only "RI" is working. Is there an dis/adavantage?

- Currently SIO transfer sometimes stops for about 0,5-1,0s before it continues. Can I expect this to disapper and high speed to work realiably if a make the cables shorter? (my PC is a Dual Core IBM T60, so it should be fast enough)

 

Transfer ok i made USB Cable inside SIO plug for this:

 

Home made pcb/Fitted in SIO plug:

8695a3c11cca279cm.jpg 29938c78e99ee930m.jpg

 

 

Do I get this right: This is a home made USB2SIO cable without an USB2SERIAL-SERIAL2SIO combination?

That cable would likely have a 9-pin RS-232 plug at the other end... alternatively you could drill a hole in the top shell cover and have the RS-232 cable coming out of it, and still be able to use it in a standard fashion.

 

I'm thinking about making an alternate type of APE interface... you could just contain it within the PC and power it from there too.

 

At the Atari side, I was thinking of using an RJ type plug (as per phone, network cables). APE/SIO2PC needs Data in, out, Command, GND - so you could get away with using just a small 4-pin plug either soldered internal to the Atari or grafted onto a SIO cable.

Hi!

 

Now I have some questions:

- What is the difference between the handshake methods and what do they depend on? On Fujiama "DTS" worked with Marcins interface, but here only "RI" is working. Is there an dis/adavantage?

It only depends on the SIO2PC interface. The "command" line on the SIO bus is connected to one of the RS232 control inputs. Most SIO2PC interfaces use RI, some DTR (CTS would also be possible). Although there were some myths floating around in the past, all input lines work equally well - just configure your software to match your interface.

 

- Currently SIO transfer sometimes stops for about 0,5-1,0s before it continues. Can I expect this to disapper and high speed to work realiably if a make the cables shorter? (my PC is a Dual Core IBM T60, so it should be fast enough)

Does this happen at normal or at high speed, how long is your cable, do you have any other SIO devices connected?

 

Concerning length the critical part is the connection between the SIO2PC interface and the Atari (since this operates at TTL level). Some 1-2m are fine, even at 126kbit/sec (this is what I'm using here). The connection between the SIO2PC interface and your PC (or USB2serial adapter) is somewhat less critical but still you should keep it as short as possible and use high quality cables.

 

Do I get this right: This is a home made USB2SIO cable without an USB2SERIAL-SERIAL2SIO combination?

A usb-serial adapter usually contains 2 parts: an USB chip that outputs serial data at TTL level plus a RS232 line transceiver (like MAX232) to convert between TTL and RS232 levels. A SIO2PC interface basically is nothing more than a RS232 line transceiver (SIO on the Atari uses TTL level).

 

The simple idea behind this interface is: skip the TTL to RS232 and then back to TTL conversion and connect the USB chip (which already outputs TTL level signals) directly to the SIO bus. Saves some parts and can result in a very small interface :-)

 

so long,

 

Hias

It only depends on the SIO2PC interface. The "command" line on the SIO bus is connected to one of the RS232 control inputs. Most SIO2PC interfaces use RI, some DTR (CTS would also be possible). Although there were some myths floating around in the past, all input lines work equally well - just configure your software to match your interface.

 

In my experience, DTR is more reliable. The load .xex option of Aspect didn't work in high-speed (normal speed was OK) with candle's IO board using RI, but it worked without problems with DTR.

 

Robert

I'm suddenly finding folder imaging very useful with Aspeqt as I set up my SDX hard drive - or I would, but for a problem with folder imaging and the SDX ATARIDOS.SYS driver. SDX can access mounted folders and list directories OK, but when reading files, the first four secors are constantly re-read in a loop. Must be a subtle difference in the way the sector links are implemented which the SDX driver doesn't like.

Hmmm.... that might make sense. I'm pretty certain the ATARIDOS driver will read sector 1. However, I would have thought it will also read sector 1 prior to listing the directory, which it accomplishes without problems.

 

EDIT: works OK using APE.

Edited by flashjazzcat

I'm suddenly finding folder imaging very useful with Aspeqt as I set up my SDX hard drive - or I would, but for a problem with folder imaging and the SDX ATARIDOS.SYS driver. SDX can access mounted folders and list directories OK, but when reading files, the first four secors are constantly re-read in a loop. Must be a subtle difference in the way the sector links are implemented which the SDX driver doesn't like.

This is caused by the special handling of AspeQt's folder images. When reading a file the sector numbers repeat every 4 sectors but with different (correct) contents, except the first sector. E.g. if the first sector is 440, the following sectors are 441,442,443,444,441,442,443,444 and so on.

 

And ApseQt has a bug here: If I mount a folder on D1 and load an XEX from D1 using a file loader that reads the first sector of the file twice, AspeQt delivers the first sector when the loader tries to read the second sector:

 

read sector 440 = first sector of file

read sector 440 again = first sector of file

read sector 441 = first sector of file (should be second)

read sector 442 = second sector of file (should be third)

etc.

 

This might even happen with other file loaders when the loader gets an error when reading the first sector and retries. I modified my file loader to avoid this problem.

 

But AspeQt is my favorite SIO2PC tool. It works fantastic - even at pokey divisor 0 (with APE I had a lot of problems even with low speed).

 

Stefan

Presumably the SDX driver gets upset when directed to read the same sector number twice, then, since it actually delivers the same sector contents repeatedly. I wonder if it caches the sectors and is pulling them from an internal buffer?

Please Help, Problem with AspeQt!

 

Hi, i am using AspeQt with a USB 2 Serial Adapter (FTDI latest Driver ) under Vista SP2 (32Bit)

and a Homemade Nick Kennedy Max232 Sio2PC Interface.

 

I can mount and boot ATR images (even in Highspeed).

 

But every time i want to stop the simulation, close the program or try to change the prefferences AspeQt crashes!!!

 

Only, when i disconnect the USB2Serial Adapter i can use above mentioned functions ...

 

Whats wrong????

 

Greetings TOM:-)

  • 4 weeks later...

Any chance of getting the PC folder mounting to work with SpartaDOS X's ATARIDOS.SYS driver? It doesn't seem to like the circular sector # arrangement Aspeqt implements. The mirroring feature is one of the most useful things in APE; I'd love to do the same with Aspeqt.

I'd be happy to try and mod the folder imaging myself. However, I have no idea how to set up a compiler environment for Aspeqt on Windows. Can someone recommend a C compiler and offer advice on how to set up the QT library? I could really use folder imaging with SDX right at this moment in time... I've tried to set it up in Eclipse with MingW and the QT library but I'm getting nowhere.

Edited by flashjazzcat

Hi!

 

I'm back! (don't ask, it's complicated :P)

 

Give me a couple of days so that I can remember the inner workings of the (poorly documented) AspeQt code and I'll try to address all the reported issues (folder imaging under SDX being the top priority) and put out a new release before this weekend.

 

Thank you all for comments, bug reports and suggestions!

 

@flashjazzcat: I use Qt Creator, it's a very nice IDE and works out of the box under both Windows and Linux.

...folder imaging under SDX being the top priority...

 

@flashjazzcat: I use Qt Creator, it's a very nice IDE and works out of the box under both Windows and Linux.

That's great to hear. Tools like Aspeqt, together will all the mouth-watering hardware we have these days... it all makes the Atari even more pleasurable.

 

I'll have another go with QT Creator later on when I get this MyIDE stuff finished. I did try before but I wasn't sure how to import the source code into the environment (i.e. where to put stuff). When I tried a build, it said it couldn't find "*.TS", which I understand is a multi-language file. I've uninstalled QT and will reinstall the whole kit and kaboodle when I get a chance. It would be fun to mess around with this (I like to keep my hand in with C) even if you get the folder imaging sorted.

When I tried a build, it said it couldn't find "*.TS", which I understand is a multi-language file.

 

Just hit the build button again and all should be fine. It builds the *.ts files as a first step and aborts with an error. Next time it builds the rest. I believe it's a known qmake problem.

 

If you can succeed in building it (or wait until the next release) you'll find that Krzysztof has added preliminary .pro image support sometime ago. Most images I've tried seem to work. So it will be a free bonus for the next release :)

Thank you all for comments, bug reports and suggestions!

 

Thanks for your efforts. I've been using AspeQt with this board. I'm getting solid results with 3X speed.

I'm getting mixed, but decent, results with the "high speed executable loader" option.

 

An option to hide the "message box" would be good.

I managed a successful build with the QT IDE, but I get this when trying to run the executable:

 

post-21964-128566838823_thumb.png

 

At first I assumed this was because the EXE was in a different folder, but even copying the new EXE into the Program Files folder from which the release version normally launches (and which contains the DLL) doesn't get rid of the error.

I managed a successful build with the QT IDE, but I get this when trying to run the executable:

 

...

 

At first I assumed this was because the EXE was in a different folder, but even copying the new EXE into the Program Files folder from which the release version normally launches (and which contains the DLL) doesn't get rid of the error.

 

That's probably because you have a newer Qt than the last AspeQt release. Just search the identically named DLLs in your Qt install folder and replace the older ones with them. If you encounter more than one version of the DLLs in the Qt installation, use the smaller ones, the larger ones are for debugging.

Thanks for your efforts. I've been using AspeQt with this board. I'm getting solid results with 3X speed.

 

Glad to hear :)

 

I'm getting mixed, but decent, results with the "high speed executable loader" option.

 

That's to be expected. It's an experimental feature. Long NMIs in the loader screens and other incompatibilities makes it near impossible to load every conceivable executable in high speed. Even low speed loader has some problems with some files.

 

An option to hide the "message box" would be good.

 

Will be in the next release.

 

Thanks for your comments!

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.

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...