Jump to content
IGNORED

New GUI for the Atari 8-bit


flashjazzcat

Recommended Posts

Hah ha, Joey not you tooo!.... You guys really need to re-read some of the stuff I have written. Maybe BOLD CASE WILL STICK OUT BETTER. I NEVER SAID IT'S NOT POSSIBLE, I SAID IT'S NOT WORTHWHILE THE EFFORT AND I REPEAT IT AGAIN DESPITE THE AMSTRAD DEMO with nice looking girls shaking their butts against a backdrop of Pacman chasing ghosts. If you don't believe me, just wait, and our lifespans permitting, we will see the results... :-D

OK fine, then while I could probably search here and find a quote where you called it impossible, it doesn't matter. my point is, YOU shouldn't care if OTHER PEOPLE 'waste' THEIR time on this.

 

EDIT: or maybe I can't find a quote where you called it impossible (I did say probably the first time)

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

OK fine, then while I could probably search here and find a quote where you called it impossible, it doesn't matter

 

 

Well that's how urban legends spread like wildfire....

 

. my point is, YOU shouldn't care if OTHER PEOPLE 'waste' THEIR time on this.

 

EDIT: or maybe I can't find a quote where you called it impossible (I did say probably the first time)

 

But I am a caring person :love:

Edited by atari8warez
Link to comment
Share on other sites

Hey, Flashjazzcat. You'd better cancel the whole thing because atari8warez thinks this is a waste of time.

 

Glad he spoke up before you went any further. :P Maybe you should go watch some TV and never try to do anything amazing ever again.

 

 

 

/please see the sarcasm in that!

Link to comment
Share on other sites

It has been ported to the MSX2 (Screenshot) and Joyce PCW (Screenshot) (also an Amstrad but a complete different machine, not compatible).

Due to the better hardware the MSX-version is more powerful than the CPC and PCW version.

 

OK. I was just curious since I am in the process of building my own Z80 based machine. while it will obviously start off simple and primitive, I may eventually add graphics hardware, RAM banking, etc. as I understand it, the topmost parts of the OS are written mainly independent from the hardware. so my questions are: is it possible to port this to a completely different custom machine or am I out of luck? if yes, what are considered the 'minimum' requirements of a Z80 system that is capable of running SymbOS? If I were to do this, would it be a lot easier if I tried to make various features (things like banking) similar/identical to the CPC, the PCW and/or MSX?

 

Lastly, should I have sent this to you in PM so as to avoid hi-jacking the thread? :D (question for others/FJC)

Link to comment
Share on other sites

OK. I was just curious since I am in the process of building my own Z80 based machine. while it will obviously start off simple and primitive, I may eventually add graphics hardware, RAM banking, etc. as I understand it, the topmost parts of the OS are written mainly independent from the hardware. so my questions are: is it possible to port this to a completely different custom machine or am I out of luck? if yes, what are considered the 'minimum' requirements of a Z80 system that is capable of running SymbOS? If I were to do this, would it be a lot easier if I tried to make various features (things like banking) similar/identical to the CPC, the PCW and/or MSX?

Sounds interesting :)

What SymbOS requires is...

- a Z80 CPU (or compatible like the R800 in the MSX turboR)

- 128KB or more Ram (no Roms are required)

- a 50Hz (or faster) hardware interrupt signal

- special RAM banking possibilities: It should be possible to swap each of the 4 x 16K in the visible 64K area (0-3ffff, 4000-7fff, 8000-bfff, c000-ffff) with any other 16K block in the whole memory (max. 1MB); this is how the MSX and the PCW are doing it

- bitmap screen mode (2, 4 or 16 colours)

...and of course some keyboard/joystick or mouse and disc drive/harddisc. SymbOS only supports the FAT12/FAT16/FAT32 (up to 128GB) and the Amsdos + CP/M filesystem.

It would be great, if the video hardware has some blitter functionality like the VDP of the MSX2 has. Because of this SymbOS runs faster on an MSX than on a CPC as the lowlevel-screendriver can then be optimized.

 

But yes, we should move to PM for everything else :) - sorry for off-topic!

Link to comment
Share on other sites

haha wow, coding, hardware, musician and, impressionist! Is there no end to your talents Jon? :D

 

I've said it before but, it's a fantastic professional approach to such a big project. It takes guts and patience to keep assessing what you're doing and continually rewriting from trial and testing. The end result will be outstanding :thumbsup:

  • Like 7
Link to comment
Share on other sites

I just found it was a good decision not to try and keep up with this thread for a while.

One one hand I got my SV release done, on the other hand it's really more entertaining if you can read all this at once :-)

 

Regarding speed, stacks and ZP: (Level 3 Demo Coder's answer)

Assuming we have enough space to unroll the code (e.g. we have the cart), you can brutefore copying the $80 byte of ZP and the full stack to the extended RBAM bank in <3000 cycles with LDA/STA, e.g. less then 10% of a frame. Even much less if you use the current stack pointer as index in the unrolled code for the stack pointer part.

 

And as for the nice text mode demo video: Seems we can then finally control the machine with the keyboard and don't have to use the mouse all the time!

Edited by JAC!
Link to comment
Share on other sites

<media goes here>

 

Wow, I am speechless , must admit it's creative to say the least.... :)

 

As for groundbreaking, earth shuttering news on AspeQt.... not really.... I am still trying to figure out why SDX drops the first sector of data when copying from a source file from the folder image to the target file. Interestingly this only happens when the target disk is in SpartaDos format. With a target disk in Atari DOS format everything is fine. I am not sure at this point whether this is SDX or AspeQt related. Need more testing and some hard debugging which requires some serious concentration on my part which I seem to be lacking these days...and the fact that 90% of undocumented AspeQt code doesn't belong to me does not help a lot in debugging ;)

Edited by atari8warez
Link to comment
Share on other sites

As for groundbreaking, earth shuttering news on AspeQt.... not really.... I am still trying to figure out why SDX drops the first sector of data when copying from a source file from the folder image to the target file. Interestingly this only happens when the target disk is in SpartaDos format. With a target disk in Atari DOS format everything is fine. I am not sure at this point whether this is SDX or AspeQt related. Need more testing and some hard debugging which requires some serious concentration on my part which I seem to be lacking these days...and the fact that 90% of undocumented AspeQt code doesn't belong to me does not help a lot in debugging ;)

Good luck with that. I am spoiled by the nice debugger in VS2010, but so much of the coding I do is database related. That is never fun to debug (is anything?)

Link to comment
Share on other sites

Regarding speed, stacks and ZP: (Level 3 Demo Coder's answer)

Assuming we have enough space to unroll the code (e.g. we have the cart), you can brutefore copying the $80 byte of ZP and the full stack to the extended RBAM bank in <3000 cycles with LDA/STA, e.g. less then 10% of a frame. Even much less if you use the current stack pointer as index in the unrolled code for the stack pointer part.

Don't forget, that you have to do this twice on each task switch (saving the current ZP/Stack and restoring the next ZP/Stack). A task switch should happen at least once per frame.

Link to comment
Share on other sites

I just found it was a good decision not to try and keep up with this thread for a while.

 

Unfortunately I've has similar feelings of late.

 

Assuming we have enough space to unroll the code (e.g. we have the cart), you can brutefore copying the $80 byte of ZP and the full stack to the extended RBAM bank in <3000 cycles with LDA/STA, e.g. less then 10% of a frame. Even much less if you use the current stack pointer as index in the unrolled code for the stack pointer part.

 

I was gonna grab some time this weekend in between driver writing to adapt a version of Tebe's sample code in order to try and establish these very statistics. So this is great info, Peter - thanks!

 

And as for the nice text mode demo video: Seems we can then finally control the machine with the keyboard and don't have to use the mouse all the time!

 

Amazingly some people prefer to navigate dialogues with the keyboard even when mouse support is provided. Those that don't should just avoid touching the keyboard, of course.

 

A task switch should happen at least once per frame.

 

Another question answered before I had to ask. :D

 

...which requires some serious concentration on my part which I seem to be lacking these days...

 

No wonder, since you spend so much time fooling around in this thread.

Edited by flashjazzcat
Link to comment
Share on other sites

Don't forget, that you have to do this twice on each task switch (saving the current ZP/Stack and restoring the next ZP/Stack). A task switch should happen at least once per frame.

Hmm - 20% of the frame just for the stack? That's disappointing. Maybe this will take much less time if only the relevant bytes need copied?

Link to comment
Share on other sites

I am one of those keyboard people. I do it to avoid a context change on input. Please support both.

 

Without hesitation. That's why we've got the shortcut keys displayed in the menus (they just don't do anything yet).

 

Re: ballsachery

 

Jon, just build it. Fuck'em. Your baby, nobody else's.

 

Well, it should be apparent that I stopped paying attention to the crap some days ago. However, my tolerance will easily be exhausted if the problem becomes chronic. This wouldn't affect the development process, just the means by which it's documented.

 

Hmm - 20% of the frame just for the stack? That's disappointing. Maybe this will take much less time if only the relevant bytes need copied?

 

It'll certainly take less time, and moreover I don't think we're talking about a large chunk of the stack, nor page zero for that matter. The thing about the stack is it needs to be flexible, so there's no point in segmenting it into small, fixed size partitions.

Link to comment
Share on other sites

Another question answered before I had to ask. :D

 

TBH the rule "at least one task switch per frame" is what I heard somewhere in the past (IIRC someone told me that Windows is doing it like this), and that's also how I do it in SymbOS. Maybe 25Hz would be ok, too (but in this case, the GUI task can't react on keyboard/mouse inputs as fast as we are used to it [50Hz])

In reality you don't have much more than 2 or 3 working tasks at maximum, most tasks are in sleep or in idle mode. Those tasks, which are idle, return to the scheduler at once - in this case you have more than one switch/frame even if the scheduler is forcing a switch only once per frame. But here again: Idle tasks shouldn't use much of the stack and the zero page, so you will have a fast task switch in this case.

Edited by Prodatron
  • Like 2
Link to comment
Share on other sites

In reality you don't have much more than 2 or 3 working tasks at maximum, most tasks are in sleep or in idle mode. Those tasks, which are idle, return to the scheduler at once...

 

Well, this is the salient point about GUIs which it seems not everyone grasps. On the Atari in 2 colour hi-res mode, the likelihood of running tasks (e.g. video players) relentlessly drawing to the screen without taking breath is lessened. From what's been done so far, it's clear to me that the most cycle-intensive operations are screen updates, pure and simple, and I'd be inclined to give redraws a high task priority anyway. The single-tasking demo is, of course, doing next to nothing for half the time (except servicing the interrupts which poll the mouse and draw the pointer) until a window is moved or client area content changes. So why not put those "dead" cycles to good use? "Parallelism" was talked about much earlier in this thread, for precisely the reasons outlined here.

Edited by flashjazzcat
Link to comment
Share on other sites

Jon, if/when you manage to implement multitasking successfully, if its apparent "speed" is a subjective thing,

(as in some people feel its fine, others feel its a bit slow, etc, and I guess that would differ entirely based on

what kind of software people are trying to use on it, based on their needs/prefs), are you planning on making

it configurable? As in, per user choice, they could turn multitasking *off* entirely, but keep the rest of the GUI

working? I'm assuming you'll have some kind of manager for it, where you can kill process's, prioritize them,

etc,...

 

If this has been discussed/answered already, I apologise, hard to glean the chaff from the wheat in this thread

sometimes... :)

 

Thanks!

Link to comment
Share on other sites

No wonder, since you spend so much time fooling around in this thread.

 

Actually the reason I spend so much time around this thread is due to factors other than my curiosity about this project. I would normally be only reading it quietly had it not been for the relentless reaction I see from you and other readers to some of my comments. Apparently one can not express his opinion freely if the opinion brushes the developers feathers in the wrong direction. We all see the type of replies I get from various people here and I would say very few falls into what i would call a technical discussion (i.e.: "Jon, just build it. Fuck'em....."). I am being seen as negative, alleged to have said things that I haven't etc...etc...

 

In any case the best approach from me from now on would be just to keep quite, keep my opinion to myself, and wait and see. That's what I should have done in the first place anyway because the strongest word on this subject would be the end result of this project, and I am hoping to live long enough to see that day.

Edited by atari8warez
Link to comment
Share on other sites

Good luck with that. I am spoiled by the nice debugger in VS2010, but so much of the coding I do is database related. That is never fun to debug (is anything?)

 

Thanks....Qt IDE also has a nice debugger (but I am new to Qt and C++), the difficulty is in debugging multi-threaded, event driven code. AspeQt code that listens to and serves SIO requests is run in a separate thread outside of the GUI and it's completely event driven. In the good ol' days programming was done in a top-down fashion where the code followed a certain flow and logic so tracing the code during debugging was much easier. Not quite so with the newer technology and I am not in my early 20's anymore :)

Edited by atari8warez
Link to comment
Share on other sites

The only way to please everyone (well, nearly everyone) is to make almost everything configurable, and certainly no-one will need to feel compelled to open more than one application at a time. If the pre-emptive route is chosen, I'll follow SymbOS's method of having the UI manager itself running as a parallel task to whatever application (this seems like sensible design to me, and - as Prodatron already explained to me - passing messages between applications and the desktop manager neatly solves the issue of re-entrancy, which is naturally hard to support in assembly language). So, in a single-application scenario, you'll basically have the I/O process and the UI manager process idling the whole time (i.e. immediately calling idle when they find no waiting messages in their queue) until something happens - i.e. you drag a window in your single application, causing a series of messages to be exchanged between UI manager and application. I'd envisage that while the redraws are happening, the application would tend to be idling while the UI manager was busy, and vice versa. So I can't see the overhead being great if you elect not to have non-idling applications running in the background. Surely if an idle process has no messages waiting, the context switch into that process need not even be attempted, so we save time there too.

 

So, in short, if I/O, UI and application (the minimum three processes required for the system to operate) are implemented as parallel processes (necessary if pre-emptive tasking is implemented at all), it won't be possible to just flip a switch and pretend the facility isn't there, but I doubt this design will significantly degrade single-application operation.

 

Yes, we'd be able to kill processes and assign them priority. There's nothing to stop really screwed up applications from writing outside their memory space (ostensibly, $4000-$7FFF), but if a program simply went into a closed loop for some reason and stopped pulling messages out of its queue, it would be classed as "unresponsive", and we'd be able to kill it, which is nice. :)

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