Jump to content
tschak909

New Atari BBS software.

Recommended Posts

Nice! This will be fun to watch evolve. Ultimately, what would I need in order to connect an Atari 8-bit to the Internet so I could put a BBS online? I assume there are Windows and OS X ATASCII terminal emulators that can connect to 8-bit BBSs via the internet?

 

I actually use SyncTerm on my PC to call out. Runs fine in Win8.1 and it does support ATASCII in 40 col. It supports just about everything else too, so I don't have to switch programs. Once I get all my Ataris set up I'll probably go ahead and use them for BBSing, but for now, SyncTerm does the job well.

 

As for what you'd need to run one, there are a few ways depending on how "old-school" you want to go. I'm sure when you're ready people will come out of the woodwork to offer suggestions. ;)

Share this post


Link to post
Share on other sites

Got your code running on my Atari 800 with an Incognito board.

 

Can you tell me the git command to just update all the files (already cloned the repo), I want to run Cygwin, update the source, make, exit like real fast. I'm not the best at doing bash scripts.

 

In other thoughts, have you considered at least a codename for this project? Come on dude, I'm getting tired of ataribbs.

Share this post


Link to post
Share on other sites

Got your code running on my Atari 800 with an Incognito board.

 

Can you tell me the git command to just update all the files (already cloned the repo), I want to run Cygwin, update the source, make, exit like real fast. I'm not the best at doing bash scripts.

 

In other thoughts, have you considered at least a codename for this project? Come on dude, I'm getting tired of ataribbs.

a git pull will get the latest from the master branch. :)

 

As for a name... I _really_ wanna use Bender (complete with ASCII art), but, that's a copyright violation... :P

 

-Thom

Share this post


Link to post
Share on other sites

Blender BBS?

 

Also getting Fatal Error, can't find interface when loading on my real hardware. Using APE via SIO2PC, so you may not have a solution for that setup yet, but just letting you know.

Share this post


Link to post
Share on other sites

Blender BBS?

 

Also getting Fatal Error, can't find interface when loading on my real hardware. Using APE via SIO2PC, so you may not have a solution for that setup yet, but just letting you know.

Have you tried loading an RS232 handler, e.g. RS232.COM from the SpartaDOS 3.2 disk? It is required for real hardware.

 

You'll run into an issue where the modem initialization will hang after the sanity check, because the device flips out of concurrent mode (due to the fact that concurrent mode stops simultaneous SIO access with other devices. The emulated Altirra handler does not have this problem.)... I will try to fix this.

 

-Thom

Share this post


Link to post
Share on other sites

Have you tried loading an RS232 handler, e.g. RS232.COM from the SpartaDOS 3.2 disk? It is required for real hardware.

 

You'll run into an issue where the modem initialization will hang after the sanity check, because the device flips out of concurrent mode (due to the fact that concurrent mode stops simultaneous SIO access with other devices. The emulated Altirra handler does not have this problem.)... I will try to fix this.

 

-Thom

Yeah, loaded rs232, then the bbs and it got to port open. and just sat there waiting.

 

So, cool. I'll leave it at that until sometime next week. Party!

Share this post


Link to post
Share on other sites

I added some open/close port functionality to the terminal_* functions in terminal_c, and now it's getting further...it's sending ATZ...but not getting a response. Need to test with ICE-T to see if the TCP/IP Handler is only available for the bare R: handler...

 

-Thom

Share this post


Link to post
Share on other sites

ICE-T exhibits same behavior, so I wonder if I fixed it?

 

Code has been pushed, can try to rebuild, Android.

 

-Thom

Share this post


Link to post
Share on other sites

Did some refactoring, and I'm seeing some odd behavior, where all of a sudden it can no longer write to the printer, or to the disk. The fopen() calls literally fail. Shawn, or anyone: is there a way I can ask for the most recent error? Am digging through the code to see if I can just drop down into CIO and query, but..no idea yet...

 

ugh.

 

In some cases with careful removing of certain open/close calls, I can do roughly 10 rings/answers in a row, before the problem exhibits itself.

 

-Thom

Share this post


Link to post
Share on other sites

Did some refactoring, and I'm seeing some odd behavior, where all of a sudden it can no longer write to the printer, or to the disk. The fopen() calls literally fail. Shawn, or anyone: is there a way I can ask for the most recent error?

 

Check errno?

Share this post


Link to post
Share on other sites

Ok, so, after much debugging, the problem was, too many open files. the open/close serial routines in CC65 don't actually properly close the IOCB. Will have to postpone any working on real hardware until I can rewrite some parts of the driver, and add ioctl support.

 

Code pushed.

 

Continuing onward.

 

-Thom

  • Like 1

Share this post


Link to post
Share on other sites

ICE-T exhibits same behavior, so I wonder if I fixed it?

 

Code has been pushed, can try to rebuild, Android.

 

-Thom

I will in the evening Thom, don't have access to my hardware at the office, I'll try to check in by 6pm PST m-th. Maybe I'll bring an Atari to the office, this place needs some style.

Share this post


Link to post
Share on other sites

I will in the evening Thom, don't have access to my hardware at the office, I'll try to check in by 6pm PST m-th. Maybe I'll bring an Atari to the office, this place needs some style.

I rolled back the open/close changes, so it may not work anymore. Right now, all I can do is work on the serial drivers, and clean things up, until I can get things sane enough to run on real hardware. If you want to test in emulation, I am using the latest Altirra.

 

-Thom

Share this post


Link to post
Share on other sites

Fantastic. The weirdness you're seeing is because the connect string isn't being completely matched.

 

When testing in altirra, I would set the DTE rate to 115200, and disable serial port throttling.

 

-Thom

Share this post


Link to post
Share on other sites

Another status report:

 

* Character input primitives added to terminal.c (get character, get character with echo character, e.g. for passwords)

* Line input primitives added to input.c (line input, line input with hidden characters (for passwords)

* subsequently debugged

 

And a matching youtube video

 

 

Enjoy,

-Thom

  • Like 2

Share this post


Link to post
Share on other sites

* Line input primitives added to input.c (line input, line input with hidden characters (for passwords)

Feature consideration... Password Digesting (one-way encryption passwords). Dunno how difficult it is for an 8-bit Atari to do SHA-1 or MD5 encryption, but some simple random checksum generator would probably work just fine. You'd think modern password security would of made it to bbs design by now...

 

Found this page on DES Encryption and Password Handling in GNU C. Reminder, Android8675 is not an expert coder, and may not know what he's talking about. ;)

Share this post


Link to post
Share on other sites

Feature consideration... Password Digesting (one-way encryption passwords). Dunno how difficult it is for an 8-bit Atari to do SHA-1 or MD5 encryption, but some simple random checksum generator would probably work just fine. You'd think modern password security would of made it to bbs design by now...

 

Found this page on DES Encryption and Password Handling in GNU C. Reminder, Android8675 is not an expert coder, and may not know what he's talking about. ;)

Yeah, password hashing will be wanted, for sure. Traditionally in the past on smaller machines, you would use something like a 16 or 32 bit CRC as a hash. This may still be sufficient for this, as calculating an md5 hash on a 6502 does multiplies/shifts over a 128-bit quantity, (hash calculation would easily take double digit seconds).

 

-Thom

Share this post


Link to post
Share on other sites

Was not able to read all of this but I love the concept and look forward to seeing this!

Share this post


Link to post
Share on other sites

as an example, here is a classic md5 hashing algorithm in plain C:

 

unsigned *md5( const char *msg, int mlen) 
{
    static Digest h0 = { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476 };
//    static Digest h0 = { 0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210 };
    static DgstFctn ff[] = { &f0, &f1, &f2, &f3 };
    static short M[] = { 1, 5, 3, 7 };
    static short O[] = { 0, 1, 5, 0 };
    static short rot0[] = { 7,12,17,22};
    static short rot1[] = { 5, 9,14,20};
    static short rot2[] = { 4,11,16,23};
    static short rot3[] = { 6,10,15,21};
    static short *rots[] = {rot0, rot1, rot2, rot3 };
    static unsigned kspace[64];
    static unsigned *k;
 
    static Digest h;
    Digest abcd;
    DgstFctn fctn;
    short m, o, g;
    unsigned f;
    short *rotn;
    union {
        unsigned w[16];
        char     b[64];
    }mm;
    int os = 0;
    int grp, grps, q, p;
    unsigned char *msg2;
 
    if (k==NULL) k= calcKs(kspace);
 
    for (q=0; q<4; q++) h[q] = h0[q];   // initialize
 
    {
        grps  = 1 + (mlen+8)/64;
        msg2 = malloc( 64*grps);
        memcpy( msg2, msg, mlen);
        msg2[mlen] = (unsigned char)0x80;  
        q = mlen + 1;
        while (q < 64*grps){ msg2[q] = 0; q++ ; }
        {
//            unsigned char t;
            WBunion u;
            u.w = 8*mlen;
//            t = u.b[0]; u.b[0] = u.b[3]; u.b[3] = t;
//            t = u.b[1]; u.b[1] = u.b[2]; u.b[2] = t;
            q -= 8;
            memcpy(msg2+q, &u.w, 4 );
        }
    }
 
    for (grp=0; grp<grps; grp++)
    {
        memcpy( mm.b, msg2+os, 64);
        for(q=0;q<4;q++) abcd[q] = h[q];
        for (p = 0; p<4; p++) {
            fctn = ff[p];
            rotn = rots[p];
            m = M[p]; o= O[p];
            for (q=0; q<16; q++) {
                g = (m*q + o) % 16;
                f = abcd[1] + rol( abcd[0]+ fctn(abcd) + k[q+16*p] + mm.w[g], rotn[q%4]);
 
                abcd[0] = abcd[3];
                abcd[3] = abcd[2];
                abcd[2] = abcd[1];
                abcd[1] = f;
            }
        }
        for (p=0; p<4; p++)
            h[p] += abcd[p];
        os += 64;
    }
 
    if( msg2 )
        free( msg2 );
 
    return h;
}    
The saving grace here is that this is all done with adds and shifts, but the sheer number of local variables would make this a pig on the 6502. I dunno... I'll try it and see what happens. I have been wrong before, and will continue being wrong long after. :)

 

-Thom

Share this post


Link to post
Share on other sites

Pushed another commit to git. This is the start of keyboard control commands during wait for call. For now Control-X exits the BBS package.

 

-Thom

Share this post


Link to post
Share on other sites

Is there _any_ tool that I can use to create ATASCII screens? I'm needing to do some stuff to test the terminal detection code, and would like to do so without having to bootstrap a tool :P :)

 

-Thom

Share this post


Link to post
Share on other sites

Password hashing is a waste of time, and here's why I think so:

 

1. Any hash you can calculate on the Atari will be broken by a modern PC very easily.

2. The risk is low that someone will steal your Atari BBS password list, and not worth the time.

3. The password will be sent over the wire in cleartext anyway (telnet is cleartext.)

 

I would just obfuscate the passwords with a simple XOR or even store them in cleartext on the Atari side.

  • Like 2

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...