Previous Thread
Next Thread
Print Thread
Page 2 of 2 1 2
Re: Electron WIP [Re: R. Belmont] #117693 08/19/20 07:17 PM
Joined: Apr 2012
Posts: 285
Pernod Offline OP
Senior Member
OP Offline
Senior Member
Joined: Apr 2012
Posts: 285
Originally Posted by R. Belmont
That's a thing for 80-column cards on the Apple II as well. I don't know of any great solution right now.

Other devices I've implemented that generate a screen do actually use a separate physical screen, apart from the palette extenders which don't affect screen_update and just modify the palette used.

I wondered about adding a property to the expansion device, something like screen_update_override(), and somehow passing the bitmap back to the base machine. But as the device uses a HD6845 and SAA5050 this got complicated rather quickly.

I'll stick with outputting to a separate screen for now.


BBC Model B, ATPL Sidewise, Acorn Speech, 2xWatford Floppy Drives, AMX Mouse, Viglen case, etc.
Re: Electron WIP [Re: Pernod] #117694 08/19/20 08:49 PM
Joined: Apr 2012
Posts: 285
Pernod Offline OP
Senior Member
OP Offline
Senior Member
Joined: Apr 2012
Posts: 285
So this is what I currently have:
[Linked Image from i.imgur.com]
[Linked Image from i.imgur.com]
Let's see if anyone actually tries it and notices the issue.

There's a later Mk2 version of this addon that fits the Electron internally, rather than using the expansion port. I don't yet have the technical details for this but will probably add it as a clone with the board fitted, which will allow it to use the same screen.


BBC Model B, ATPL Sidewise, Acorn Speech, 2xWatford Floppy Drives, AMX Mouse, Viglen case, etc.
Re: Electron WIP [Re: Pernod] #117695 08/19/20 11:56 PM
Joined: Mar 2001
Posts: 16,575
R
R. Belmont Online Content
Very Senior Member
Online Content
Very Senior Member
R
Joined: Mar 2001
Posts: 16,575
If it's internal and uses the same screen, you could make a Machine Configuration switch rather than a clone.

Re: Electron WIP [Re: Pernod] #117791 09/07/20 10:10 AM
Joined: Apr 2012
Posts: 285
Pernod Offline OP
Senior Member
OP Offline
Senior Member
Joined: Apr 2012
Posts: 285
The Electron has supported Tube (co-processor) devices for quite awhile now but was recently reported that they didn't work, though I have posted screenshots of them working in the past. Seemed odd that the exact same devices worked fine on the BBC machines but seemed to be skipping some byte transfers when used with the Electron.

After a few days of head scratching I tried set_perfect_quantum and they sprang to life again, and also fixed some spurious issues with a couple of the Electron floppy interfaces.

So the BBC machines have set_maximum_quantum(attotime::from_hz(60)) which wasn't enough for the Electron. I'm tempted to make the BBC perfect_quantum too.

If using maximum_quantum, how is it determined? When should I use maximum_quantum vs. perfect_quantum? I also see there's boost_interleave, when should that be used?

The process that had been failing was passing a byte from Electron (host) to co-processor (parasite), where the parasite must process the received byte within 10us before the next byte was latched from the host. In this case I could probably just use boost_interleave but am thinking perfect_quantum would be preferred rather than trying to boost individual cases,


BBC Model B, ATPL Sidewise, Acorn Speech, 2xWatford Floppy Drives, AMX Mouse, Viglen case, etc.
Re: Electron WIP [Re: Pernod] #117792 09/07/20 05:20 PM
Joined: Feb 2004
Posts: 2,168
Vas Crabb Online Content
Very Senior Member
Online Content
Very Senior Member
Joined: Feb 2004
Posts: 2,168
You can call set_maximum_quantum in as many places in the machine configuration as you like, and it will take the smallest one and use that as the longest scheduler timeslice allowed for the machine. Whether you set it or not, it will never use a timeslice longer than 1/60s as that’s hard-coded as the longest allowed timeslice in the scheduler itself.

I don’t particularly like the “perfect quantum” configuration because it’s kind of misleading. It doesn’t necessarily give perfect interleave on the device you set it for. What it actually does is query that device’s device_execute_interface for the minimum machine cycles per instruction, converts it to clock cycles, and multiplies by the device’s configured clock frequency to convert it to a time. Then if that’s smaller than all the values set with set_maximum_quantum, it will use it as the longest allowed timeslice. It may fail to give perfect interleave on the device if some other device executes an instruction that takes longer than the desired timeslice length and it needs to catch other devices up.

(There’s nothing special about the “perfect quantum” device – you can get exactly the same effect by using the same calculation and calling set_maximum_quantum with that value.)

Page 2 of 2 1 2

Who's Online Now
1 registered members (Vas Crabb), 28 guests, and 0 spiders.
Key: Admin, Global Mod, Mod
ShoutChat Box
Comment Guidelines: Do post respectful and insightful comments. Don't flame, hate, spam.
Forum Statistics
Forums9
Topics8,811
Posts115,967
Members4,914
Most Online890
Jan 17th, 2020
Powered by UBB.threads™ PHP Forum Software 7.7.3