Jump to content
IGNORED

#FujiNet - a WIP SIO Network Adapter for the Atari 8-bit


tschak909

Recommended Posts

As part of the sioNetwork refactoring:

 

* The protocols have been deleted, and I am rewriting them in their own library, in lib/network-protocol

* sio_read/write/status now have a sister _channel() method which returns the appropriate data for a given channel mode (PROTOCOL, JSON, etc.)

* Everything is being documented in the code that I touch, e.g.

unknown.png

 

This is an area that people could help with, helping comb through, asking questions about parts of the code, and then marking up the code so that it can be understood by other developers just coming on.

 

-Thom

  • Like 2
Link to comment
Share on other sites

Quote
  • Button A (Left)
    • Short press: disk swap
    • Long press: enable/disable SIO2BT mode
  • Button B (Middle left)
    • Short press: print debug info to serial console
    • Long press: Safe reset (unmount SD card then reboot)
    • Hold during power up to reset FujiNet config
  • Hard Reset Button (Right)

 

Just a question, how it actually swaps drives? Does it do shift-left or shift-right on the mountings?

That would be actually pretty convenient to have e.g. A as a shift-left and B (or A+B) as shift-right (if possible).

This way even 3 or more disk-sides games could be run (e.g. Brundless).

Edited by Jacques
  • Like 1
Link to comment
Share on other sites

3 hours ago, Jacques said:

 

Just a question, how it actually swaps drives? Does it do shift-left or shift-right on the mountings?

That would be actually pretty convenient to have e.g. A as a shift-left and B (or A+B) as shift-right (if possible).

This way even 3 or more disk-sides games could be run (e.g. Brundless).

It’s basically the same as the ATR Swap button on a SIDE2 cartridge or Incognito board with Flashjazzcat’s firmware - for two disks, whatever you have mounted as D2: moves to the D1: slot, and whatever you have mounted as D1: rotates to the end of the line into the D2: slot. So two ATRs simply swap places. 

 

If you have 3 or more slots in use, then it simply rotates the current D1: slot to the end of the line, with each other slot moving down closer to the beginning of the list. So for a three-disk setup, pressing the button moves D1: to D3:; the disk in D2: moves to D1:, and the disk in D3: moves to D2:. The same principle applies if you have 4 slots in use. 

Link to comment
Share on other sites

I disagree. We need button B for additional functionality. It makes zero sense to add a rotate in the opposite direction, because you're rotating on a limited set in any case. At most, you're rotating, what? 6 disks? (e.g. Alternate Reality or Omnitrend Universe?)

 

Additionally, if there is a gap in the slots, the rotation deliberately stops there.

 

-Thom

 

Edited by tschak909
Link to comment
Share on other sites

As part of the process of rewriting the networking (N:) device, I am explicitly hooking into errno values that are emitted by lwIP, so that they can be exposed to the Atari and provide much better error reporting when doing network operations.

 

These errors are reported via status byte 4 of DVSTAT, and ones that are critical correspond with an ERROR 144 reported from SIO (ERROR).

 

https://github.com/FujiNetWIFI/fujinet-platformio/wiki/Error-Codes-for-N%3A-Device

These are attached to the existing programmer pages on the wiki for the N: device.

 

-Thom

Edited by tschak909
  • Like 1
Link to comment
Share on other sites

17 hours ago, tschak909 said:

I disagree. We need button B for additional functionality. It makes zero sense to add a rotate in the opposite direction, because you're rotating on a limited set in any case. At most, you're rotating, what? 6 disks? (e.g. Alternate Reality or Omnitrend Universe?)

 

Additionally, if there is a gap in the slots, the rotation deliberately stops there.

 

-Thom

 

Well, for me, given there's no LCD display on the device:

 

1) it would make sense, because with shift LEFT and (if available) RIGHT it's more difficult to GET LOST in swapping if you need to jump back and forth between images. With one button, you need to click it n-times to rotate it all to do D1-D2-D1. Just A and B if two buttons were available

2) the rotation shouldn't really stop  when there's a gap, it's a bit unlogic, why shouldn't it be rotated as a whole anyway?

3) to allow shift-RIGHT on button B, maybe further combinations of pressing-time or pressing A-B together could be used for more functionality on buttons?

 

Just a thought ;)

Edited by Jacques
Link to comment
Share on other sites

2 hours ago, Jacques said:

Well, for me, given there's no LCD display on the device:

 

1) it would make sense, because with shift LEFT and (if available) RIGHT it's more difficult to GET LOST in swapping if you need to jump back and forth between images. With one button, you need to click it n-times to rotate it all to do D1-D2-D1. Just A and B if two buttons were available

2) the rotation shouldn't really stop  when there's a gap, it's a bit unlogic, why shouldn't it be rotated as a whole anyway?

3) to allow shift-RIGHT on button B, maybe further combinations of pressing-time or pressing A-B together could be used for more functionality on buttons?

 

Just a thought ;)

Ultimately we want the ability to change disks from the web interface which would allow you to see what is mounted but it has not been implemented yet. 

 

To be clear, this is how disk swap with the button works now: 

start

D1
D2
D3
D4

swap

D4
D1
D2
D3

swap

D3
D4
D1
D2

swap

D2
D3
D4
D1

swap

D1
D2
D3
D4

  • Confused 1
Link to comment
Share on other sites

10 minutes ago, mozzwald said:

Ultimately we want the ability to change disks from the web interface which would allow you to see what is mounted but it has not been implemented yet. 

 

To be clear, this is how disk swap with the button works now: 

start

D1
D2
D3
D4

swap

D4
D1
D2
D3

swap

D3
D4
D1
D2

swap

D2
D3
D4
D1

swap

D1
D2
D3
D4

Wait, what? I’ve never actually tested rotating more than two disks, but given what you wrote above, that means FujiNet is rotating the disk order opposite to the way that U1MB+SIDE2 and Incognito do it. It also means that if you want to use a 3- or more disk set game or set of working disks, you need to put Disk 2 of any set into the D4: slot, then Disk 3 into D3:, and Disk 4 into D2: ... That seems incredibly counter-intuitive to me. 

Link to comment
Share on other sites

26 minutes ago, mozzwald said:

To be clear, this is how disk swap with the button works now: 

start

D1, D2, D3, D4

swap

D4, D1, D2, D3

swap

D3, D4, D1, D2

swap

D2, D3, D4, D1

swap

D1, D2, D3, D4

wat?!

 

2 Disks Should be

start

D1, D2

swap

D2, D1

swap

D1, D2

 

3 Disks Should be

start

D1, D2, D3

swap

D2, D3, D1

swap

D3, D1, D2

swap

D1, D2, D3

 

4 Disks Should be

start

D1, D2, D3, D4

swap

D2, D3, D4, D1

swap

D3, D4, D1, D2

swap

D4, D1, D2, D3

swap

D1, D2, D3, D4

 

 

Wayhey! something none of the testers have tried :) Just shows how often this is required.

 

Edited by Mr Robot
Typos
  • Like 1
Link to comment
Share on other sites

Indeed, shifting/rotating left (including no mounts, please) feels much more intuitive, with possibility of counter-rotation it would be just all that's needed.

Web interface for disk mountings would be nice addition, but I think all the fun with FujiNet is to finally use Atari for Internet access (BBS's, etc.) WITHOUT PC, so using PC to swap disks wouldn't be one's first choice, methinks.

 

P.S.
I did try it and got confused, that's probably because of rotation to the right and rotation stopping on gaps (unmounted drives) ;-)

 

 

Edited by Jacques
Link to comment
Share on other sites

6 minutes ago, Jacques said:

rotation stopping on gaps (unmounted drives)

That should definitely happen, who wants to flip the disk on a two disk game and then have to press the button 4 more times to turn it back!

 

Should point out there are 8 mounts btw, not 4, if we don't stop on empty drive we have to loop through 8 drives to get back to the start.

 

Link to comment
Share on other sites

I don't think so, since you have no LCDdisplay, but you know what you've mounted where (even with gaps), respective number of clicks gets you there. In most cases you shift L or R just around few nearby drives, so it's not an issue anyway to shift with gaps, provided you have both L and R shifts.
For me it would be much more consistant to simply shift what's or what's not in drives. If you land no disk in drive, you have an idea where you are, too.

Edited by Jacques
Link to comment
Share on other sites

Heh, whoops.. they shift the other direction, sorry :D

 

We do what we can with the buttons we have and the Atari side config. 'Bonus' configuration will be handled with the web interface. Early on we made it clear that the web interface will be needed for some configurations. 

 

personally, I don't even see a use case for having an empty slot but I'm not hardcore user either so, ignoring everything after an empty slot for rotate makes sense to me.

 

the problem with swapping empty slots is that you would always have to swap 8 slots even if you only have 2 disk inserted. Lots of wasted button presses.

Edited by mozzwald
Empty slots
  • Like 1
Link to comment
Share on other sites

Now someone's just being a smartass. ;)

 

Here's the current code for disk image rotate:

// Disk Image Rotate
/*
  We rotate disks my changing their disk device ID's. That prevents
  us from having to unmount and re-mount devices.
*/
void sioFuji::image_rotate()
{
    Debug_println("Fuji cmd: IMAGE ROTATE");

    int count = 0;
    // Find the first empty slot
    while (_fnDisks[count].fileh != nullptr)
        count++;

    if (count > 1)
    {
        count--;

        // Save the device ID of the disk in the last slot
        int last_id = _fnDisks[count].disk_dev.id();

        for (int n = count; n > 0; n--)
        {
            int swap = _fnDisks[n - 1].disk_dev.id();
            Debug_printf("setting slot %d to ID %hx\n", n, swap);
            _sio_bus->changeDeviceId(&_fnDisks[n].disk_dev, swap);
        }

        // The first slot gets the device ID of the last slot
        _sio_bus->changeDeviceId(&_fnDisks[0].disk_dev, last_id);
    }
}

 

Link to comment
Share on other sites

8 minutes ago, mozzwald said:

the problem with swapping empty slots is that you would always have to swap 8 slots even if you only have 2 disk inserted. Lots of wasted button presses.

That starts to be interesting logical exercise ;-)

For me rotation should ALWAYS allow you to get anywhere. Having gaps is common practice when using D1-D8 disk-drives emulation devices, let's say with SIO2SD and now FujiNet, I'm keeping always D3 empty, just in case I need to power on and use real floppy drive, which I have assigned as D3. Or you leave some drives empty, just in case to mount something temporarily. So now with empty D3 to be able to rotate between ATR images in D1, D2, D4, D5, D6, D7, D8, I would need to add something to D3 just to build the bridge? Hmm... ;-)

Link to comment
Share on other sites

5 minutes ago, Jacques said:

That starts to be interesting logical exercise ;-)

For me rotation should ALWAYS allow you to get anywhere. Having gaps is common practice when using D1-D8 disk-drives emulation devices, let's say with SIO2SD and now FujiNet, I'm keeping always D3 empty, just in case I need to power on and use real floppy drive, which I have assigned as D3. Or you leave some drives empty, just in case to mount something temporarily. So now with empty D3 to be able to rotate between ATR images in D1, D2, D4, D5, D6, D7, D8, I would need to add something to D3 just to build the bridge? Hmm... ;-)

This is an interesting point, with D3 empty but D1, 2, 4, 5 populated it should still be possible to rotate through all the populated disks. I wouldn't ever make D3 be in slot 1 though, its empty/turned off. If you want it to be in slot 1 stick a blank disk in it to enable it.

 

Link to comment
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.
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...