• Please review our updated Terms and Rules here

Exidy Sorcerer II Questions

Some of these BASIC programs aren't working after all. Tempest, which version of BASIC are you using with these?

Just the standard Exidy Basic 1.0. I haven't tried a ton of these programs but Cybernetic Pool and Star Trek worked for sure.
 
Cybernetic pool does work but Super Star Trek quits with SN error at line 164.
 
I can try some over the holiday break and see what loads and what doesn't. Maybe we can meet up and have a 'Sorcerer Party'? :)

I know I had SST running at the VCF this year (I have a picture of it). All my files came from that archive that's out there, probably the same as yours.
 
Thanks but I tried calling LODBAS (thru the vector BASLOD at E02D) and the loaded BASIC programs would not run. Apparently CLOAD does some initialization before calling it. If I could call CLOAD in the BASIC ROM, it might work.

What emulator did you write?

This is what I have been fiddling with:

http://kgelabs.nl/?p=277


After loading the file I set these values and jump to warmstart:

Code:
ad=tape_info.load_address;

// set end of program if Basic space in locations 0x1B7 and 0x1B8
        if (tape_info.load_address==0x1d5) {
            wrmem(0x1b7,ad &0xff);
            wrmem(0x1b8, ad >>8);
            Z80_PC=0xdffa;

The tape info comes from this routine:

Code:
// read tape info from tape file
int get_tape_info( char *filename)
{
    FILE *fp;
    int t;
    unsigned char c;

    fp=fopen(filename,"r");
    if (fp) {
        t=0;
        // skip until zeroes found
        do {
            c=fgetc(fp);
            t++;
        } while (c);

        // skip zeroes until SOH found (0x01)
        do {
            c=fgetc(fp);
        } while (c==0);

        if (c != 0x01) {
            //printf("no SOH found\n\r");
            fclose(fp);
            return -1;
        }

        // read header
        if (t>1) {
            printf("%d garbage bytes found at start of file\n\r",t-1);
            tape_info.skip_length=219+t-1;
        } else {
            tape_info.skip_length=219;
        }
        // start with short filename (5 chars)
        for (t=0; t<5; t++) {
            tape_info.short_name[t]=fgetc(fp);
        }
        tape_info.short_name[5]=0;

        // file header ID (1 char)
        tape_info.header_id=fgetc(fp);
        //printf("File header ID: $%02x\n\r",header_id);

        // file type (if bit 7 is set file can not be auto executed after load)
        tape_info.file_type=fgetc(fp);
        //printf("File type: $%02x\n\r",file_type);
        if (tape_info.file_type & 0x80) tape_info.auto_run='A';
        else tape_info.auto_run=' ';

        // length of file (2 bytes, L/H)
        c=fgetc(fp);
        tape_info.file_size=c;
        c=fgetc(fp);
        tape_info.file_size |= (c<<8);
        //printf("File length: %d ($%04x)\n\r",file_size,file_size);

        // loading address (2 bytes, L/H)
        c=fgetc(fp);
        tape_info.load_address=c;
        c=fgetc(fp);
        tape_info.load_address |= (c<<8);
        //printf("Load address: $%04x\n\r",load_address);

        // go address (2 bytes, L/H)
        c=fgetc(fp);
        tape_info.go_address=c;
        c=fgetc(fp);
        tape_info.go_address |= (c<<8);
        //printf("Go address: $%04x\n\r",go_address
        fclose(fp);
        return 0;
    } else {
        return -1;
    }
}
 
Thanks, I'll give that a try.

Your project looks pretty cool! The micro you're using seems similar to the Teensy I'm using.
 
Thanks, I'll give that a try.

Your project looks pretty cool! The micro you're using seems similar to the Teensy I'm using.

The module I used is an older mbed LPC1768 running at 100 MHz max. I tuned it a bit down to get the VGA screen filled horizontally as the Exidy only emits 512 pixels instead of 640 for a normal VGA screen.
VGA monochrome signal is generated through the I2S output which is driven by DMA so it does not need much CPU power.
The LPC1768 has 64k of RAM and 512k Flash.

The emulator runs in Basic mode but also runs CPM 1.4 with 4 floppy drives emulated. The Exidy serial port is emulated over the USB serial link of the mbed so I can upload programs from the PC/laptop to the Exidy. Snapshots and tape images are on SD card. When the command FILES is executed from the monitor I present a rudimentary file selector and once selected, loading is instant.
 
Claus hooked up his device to my Sorcerer II and it worked just fine (actually better as I have a real BASIC cart rather than a RAM based one). There are a couple of features I'd like to add to his device but I'm not sure how many of these are feasible:

1. The ability to automatically CLOAD basic games when detected. Right now you have to quickly type CLOAD one the file is selected. We need to figure out what the address is of the CLOAD command (anyone know?).
2. The ability to run CP/M. This would require the CP/M program in a BIN format and then the ability for the device to run .DSK files. Might not be possible or might require more memory than the base 48K I have.
3. Auto detection of 300 vs 1200 baud files. Not sure how hard that would be, but all the BASIC game files I have seem to be 300 baud not 1200.

It's a really nice device. It's fun seeing large games load in a matter of seconds versus the 10-20 min they used to take to load. That and the fact that I don't see CRC Error after a few min of loading. :)

Does anyone have an easy to use WAV to BIN file converter? The one I have is a 32-bit DOS program which no longer works in Windows 10.
 
I have a collection of .BIN files from somewhere upthread and have decoded their header format. I tried and failed to find it on line - closest I got was it's some kind of MESS file. Here's what I found:

FD
00
80
00
00
Lo - byte count remaining
Hi
00 - any number of 0 bytes
Xx - any number of ASCII characters
1A
Lo - execute address
Hi
Lo - load start address
Hi
Lo - load end address
Hi
Xx - data bytes

Anyone familiar with that format? Is it correct?

Anyway I can convert that to the Sorcerer tape format and then the files should load and run.

Looks like you have successfully reverse-engineered the .BIN header format that files for MESS originally used?
If it does indeed work can you provide a fuller explanation about what each byte does as your notes above are a bit too cryptic for me :)
Questions about the format come up from time-to-time from people trying to work with it so it could be great to have a canonical explanation of the format for other people creating tools.
 
It's just called wav2bin, it's out on the web. Not sure if it works with sorcerer files, but it should. I need to try with my old DOS 6.22 box.
 
I guess this wav2bin program won't work on the wav files I have. Does anyone know how the .bin files that are out there were created? Maybe Tezza knows?
 
Interesting. Then where did all those .bin files come from? Someone had to make them. :)

Good question. The people that wrote the code for the Sorcerer module in MAME/MESS would know. Who these people are though, I have no idea.

Tez
 
I've tried to find another program that can convert .wav to .bin but I've had no luck. Surely there has to be something out there as lots of old computers use tape files.
 
Since a WAV file is nothing more than a sampled audio signal it depends greatly on the type of signal recorded to have a 'wav2bin' program recognize/decode it to binary data.

It depends on the signal encoding used (like Manchester 1200/2400 Hz) and the baud rate and the number of bits per byte at which it has been recorded.
So there will be no universal wav2bin program. On the web you will find lots of wav2bin programs specific for a certain type of computer.

A ZX80, Acorn Atom, Commodore 64 produce totally different audio signals than an Exidy sorcerer
 
So it's starting to look like we need a specific wav2bin for the sorcerer then. Well someone obviously figured it out as .bin files exist. Too bad we don't who made them or how.
 
So it's starting to look like we need a specific wav2bin for the sorcerer then. Well someone obviously figured it out as .bin files exist. Too bad we don't who made them or how.

The .bin files in MAME were created using a program written in QBASIC on a 386 as a way of storing and transferring programs for Exidy Sorcerer, Super-80, Microbee and VZ-200 which all have a similar tape format (some differences in headers and CRC calculations).

A serial connection between the Super-80 with a special ROM allowed loading and saving of programs - effectively using the PC as tape drive so the machines could still be used after the tapes had failed.

Therefore there was no conversion of .wav to .bin - there was a conversion of the serially transferred bytes to .bin happening on the PC.

The format became incorporated into MESS (now MAME) when the owner of machines it was developed for became a dev.

I believe the format is deprecated in MAME even as it becomes more popular as an interchange format outside of it.

Brad Robinson's tapetool2 has recently been updated to support the Sorcerer format. Support for .wav to .bin may not be 100 percent yet - I have not had time to check but it can do many useful things including converting a .wav to vanilla binary (ie no header info or CRC bytes) which is great for feeding to disassembler or for inspection of Sorcerer object code in a hex editor.
 
Back
Top