Jump to content
IGNORED

Classic99 Updates


Tursi

Recommended Posts

17 hours ago, Tursi said:

Thank you, I wasn't calling for butt pats (always appreciated tho! ;) )... I'm just tired of fixing things for people all the time and never getting to do what I want to do. ;)

 

Support requests reflect the huge (Trumpism right there :lol:) level of interest and use of Classic 99. I think it's one of the best forms of flattery!

  • Like 2
Link to comment
Share on other sites

3 hours ago, Vorticon said:

Support requests reflect the huge level of interest and use of Classic 99. I think it's one of the best forms of flattery!

When I do things for people, they love it. When I don't, suddenly I'm being told people aren't going to wait around for me, and everything else is better anyway. Dang internet... ;)

 

We have lots of great projects going on right now, no need for me to worry about it! Frig, I still need to go plug in my TIPI. ;)

 

  • Like 8
Link to comment
Share on other sites

I have been out of the loop for a little bit...

Just want to say, I LOVE Classic99. 

 

I Thank you for your efforts.  I feel it is complete, but think it is great that you continue updating this great product!

 

I know from time to time, I feel like my efforts go under appreciated or not at all.  But I guess that is life?  

Tom Brady carried his team to 3 out of 4 super bowls and couldn't get a contract from the team that under paid him for 20 years....

 

  • Like 5
Link to comment
Share on other sites

3 hours ago, Tursi said:

When I do things for people, they love it. When I don't, suddenly I'm being told people aren't going to wait around for me, and everything else is better anyway. Dang internet... ;)

 

We have lots of great projects going on right now, no need for me to worry about it! Frig, I still need to go plug in my TIPI. ;)

 

 

I love, own and use Classic 99, as well as many of other programs and gadgets you've created over the years for the community Tursi.   I'll admit though, when a wait looks to be at least 2.5 years to never, I cannot afford to put all my hopes in one basket and wait forever.  Hell, I could be dead or suffering from full on dementia by then.  Waiting is a younger mans game, I have to squeeze all the enjoyment out of life that I can now, or move on to something else to give me the enjoyment I need out of a hobby.

  • Like 1
Link to comment
Share on other sites

3 hours ago, INVISIBLE said:

I love, own and use Classic 99, as well as many of other programs and gadgets you've created over the years for the community Tursi.   I'll admit though, when a wait looks to be at least 2.5 years to never, I cannot afford to put all my hopes in one basket and wait forever.  Hell, I could be dead or suffering from full on dementia by then.  Waiting is a younger mans game, I have to squeeze all the enjoyment out of life that I can now, or move on to something else to give me the enjoyment I need out of a hobby.

If I may, that's exactly my point.

 

I'm not so young myself. For the last 20+ years I've been putting people's requests ahead of my own wishes. When you asked for a slideshow program, who put aside an entire week to build it for you? The same guy who said he was never going to add disk image support to his emulator but spent pretty much the entirety of last weekend finally debugging it.

 

I realized when I looked at my list of half finished projects and bucket list items that it was now literally impossible for me to complete the list - I will be dead before it happens. Waiting for everything else to calm down so I can work on that list isn't happening. If I died tomorrow and St Peter (IF I go that way ;) ) asks what I'm most proud of... I'm not going to have an answer for him.

 

I am not the only technically capable person here and if somehow I am the only one who can do a thing, not wanting to do that thing isn't a failing on my part. Nor is being willing to do it but after what I've already got cued up is done. I shouldn't be expected to drop everything to start a new project because someone asked for it. 

 

Of course, if you guys are willing to pay a proper consulting wage, then we'll talk. But otherwise I'm supposed to be having fun.

 

That's where the list came in. Because I like solving problems and it's hard for me to ignore a problem I can fix. The list gives me both an excuse, a memory aid so I don't lose it, and a way to measure whether a request is just a "wouldn't it be cool?" or a "this is desperate!" -- that's where the voting comes in. (Even I vote, in fact mostly I vote, since my opinions may change from day to day, and it helps me sort even me.) But it's pointless if I just ignore it. 

 

So no. Don't put your hopes in me. I never asked anyone to. I think I've been pretty forthcoming about my schedule, in addition - it's listed right there. These challenges are hard and they take time - and it's made worse by a job that consumes far more than 40 hrs a week. The last time I was productive was when I was unemployed. Maybe that's coming again, I don't know yet. But this time I need to try and knock a few things off that damn list. ;)

 

  • Like 9
Link to comment
Share on other sites

Well, with a little prodding I could maybe take your "Classic 99 laptop" project off your list.  Proof of concept wise, that chromebook I did up a few days ago seems to do well.  slight issue with going fullscreen mode, but otherwise seems pretty solid.

 

Could probably be integrated pretty easily into a live image flash stick.

 

If your backlog of projects is just too big to manage, consider delegating some tasks to people you trust?

Link to comment
Share on other sites

1 hour ago, wierd_w said:

Well, with a little prodding I could maybe take your "Classic 99 laptop" project off your list.  Proof of concept wise, that chromebook I did up a few days ago seems to do well.  slight issue with going fullscreen mode, but otherwise seems pretty solid.

 

Could probably be integrated pretty easily into a live image flash stick.

 

If your backlog of projects is just too big to manage, consider delegating some tasks to people you trust?

You and anyone else may absolutely try anything you like --- it doesn't mean I won't do it, though. I've added things to the list because there's some part of the task I want to try - not necessarily because the world needs it. (The world doesn't need Night Reigns 2, but it's on there anyway ;) ). But you can't really delegate a personal bucket list, eh? ;)

 

  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...

Classic99 399.023

 

Enough with the image disk bugs, guys. I told you I didn't want to implement write support specifically so I wouldn't have to do this. ;)

 

- added rename to image disks

- fix AMS mapping to unmappable regions

 

  • Like 8
  • Thanks 1
Link to comment
Share on other sites

Version 399.025

- ** fix interrupt skip after context switch instructions ** - off by one meant we never really skipped
- fix breakpoint loads for more complex breakpoints, was using a destructive string call
- add level masking to interrupt calls, though I think it doesn't matter on the TI...
- add ability to trigger breakpoints for WP and ST register changes
- remove interrupt skip from X instruction that didn't work anyway but shouldn't have been there
- BaseDisk::CloseAllFiles only closed files if they were not open. ;)
- add debug warning when VDP accessed with interrupts active
- make sure to check for open files on reset cases
- fix for drawing border when 80 column mode is disabled but the bits are set anyway

 

Version 399.024
- Fix reading imagedisk files by sector - file type was not being ignored
 

http://harmlesslion.com/software/classic99

 

  • Like 10
  • Thanks 1
Link to comment
Share on other sites

8 hours ago, retroclouds said:

Thanks for the update, it is much appreciated! ?

 

I have a feature request Tursi: would you be willing to add the F18a 30 rows mode to classic99 (in combination with allowing sprites in text mode, the same as the F18a allows)?

Not until the rewrite. Hacking all the F18A bits into the middle of the 9918A code is bordering on unmanageable.

 

Sprites in text mode are already allowed, though ;)

 

  • Like 1
Link to comment
Share on other sites

On 4/27/2020 at 12:24 PM, Tursi said:

Version 399.025

<SNIP>
- add debug warning when VDP accessed with interrupts active
- <snip>

 

Version 399.024
- Fix reading imagedisk files by sector - file type was not being ignored
 

http://harmlesslion.com/software/classic99

 

Hi Tursi,  Thanks again for all your efforts with this program. It's a beaut.  I am running 399.025 now.

 

I have written Camel99 Forth to keep interrupts running as much as possible so that I can use ISR counters measuring elapsed time for code evaluations.

So I have interrupts masked while setting the VDP addresses and during KSCAN calls, but I do VDP read/writing with LIMI 2.

I don't seem to have any bad effects from this on real iron but I don't push things anywhere near a speed limit.

 

I can't find a reference in the manual. Is there a flag to disable the VDP warnings?

My debug screen is full of warnings.  :)  

 

Link to comment
Share on other sites

1 hour ago, TheBF said:

Hi Tursi,  Thanks again for all your efforts with this program. It's a beaut.  I am running 399.025 now.

 

I have written Camel99 Forth to keep interrupts running as much as possible so that I can use ISR counters measuring elapsed time for code evaluations.

So I have interrupts masked while setting the VDP addresses and during KSCAN calls, but I do VDP read/writing with LIMI 2.

I don't seem to have any bad effects from this on real iron but I don't push things anywhere near a speed limit.

 

I can't find a reference in the manual. Is there a flag to disable the VDP warnings?

My debug screen is full of warnings.  :)  

 

There's no disable, no. Someday. Still, if you are doing VDP access with VDP interrupts enabled then you are coding a race condition. All races trip eventually, it's just a matter of time, and then you will have a difficult debug situation on hand. It's good practice not to rely on "works most of the time".

 

The only time it's safe to do openly is when you know how long ago the last interrupt was cleared. For instance, if you have just finished a VDP interrupt, re-enabled interrupts, then you have 16ms until the next one. But if you are syncing to the interrupt anyway, then you might as well do your processing before re-enabling the interrupts, just in case the interrupt ran long and the next one is already ready.

 

In your case, you are protecting the address set (as you must) and only read/writes are unprotected. This is safe if you can guarantee that the VDP interrupt handler will NEVER change the address. So you'll never use the built-in sprite motion, you'll never used the built-in sound lists from VDP RAM, and you'll never let the screen timeout and go blank (because this will change a VDP register which in turn changes the address). Also, never use a user-interrupt function or a DSR interrupt that touches the VDP. It's a pretty long list of things you need to protect against, I think it's safer to protect your code.

 

It's protecting you from yourself, consider protecting your VDP access with LIMI 0 wraps.

 

For now at least. Eventually I plan to move warnings to a separate view. Will consider adding a way to mute the warning for the next one though.

 

Link to comment
Share on other sites

So that was a pretty easy fix. 

I LIMI 0 at the start of the VDP address setting sub-routine and  LIMI 2  after the last instruction that touches the VDP in the routine.

Timings using the screen time-out counter seem about the same. 

 

Most of the time the VDP warnings are gone but occasionally I get this"

Warning: PC >A072 reading VDP with LIMI 2

And here is the debugger code that runs at >A072

   A072  0646  dect R6                     (14)
>  A074  C584  mov  R4,*R6                
   A076  C108  mov  R8,R4                 
   A078  045A  b    *R10                  

This is the runtime code for a Forth variable. (which is just a pointer to memory like a label on a DATA statement)

Push R4  ( top of stack cache register) onto the data stack

Move the address of the interpreter pointer (R8) into R4

 

Why would that show the VDP warning?

 

Edit: And now the debug screen is repeating this over and over.

 

 

Edited by TheBF
Link to comment
Share on other sites

16 hours ago, TheBF said:

Most of the time the VDP warnings are gone but occasionally I get this"


Warning: PC >A072 reading VDP with LIMI 2

And here is the debugger code that runs at >A072


   A072  0646  dect R6                     (14)
>  A074  C584  mov  R4,*R6                
   A076  C108  mov  R8,R4                 
   A078  045A  b    *R10                  

This is the runtime code for a Forth variable. (which is just a pointer to memory like a label on a DATA statement)

Push R4  ( top of stack cache register) onto the data stack

Move the address of the interpreter pointer (R8) into R4

 

Why would that show the VDP warning?

Well, it's showing it because the interrupt level is 2 and you accessed the VDP in R6, presumably. :) You can put a breakpoint on that address to see the state of the system when it's hit. The decrement by 2 is interesting, though... it's possible that there's a bug in my check but given where it lives, that doesn't feel likely. What is R6 set to?

 

If it only happens sometimes it's a little harder to catch since breakpoints can't be stacked at the moment... 

Link to comment
Share on other sites

R6 is the base address of the data stack and starts at >FF7C.

There will be occasions where I put a VDP address on the data stack and then run a VDP read or write routine but all of these are now running with interrupts off.

 

It seems quite hard to nail down.

It might be related to my disk DSR routine... I will check if it is doing VDP on it's own. 

 

(EDIT:  Not DSR.  BLWP to the  DSR routine starts with LIMI 0  and ends the LIMI 2 )

 

 

Edited by TheBF
Link to comment
Share on other sites

Hmm.. makes it seem unlikely. Is it possible that the instruction before the decrement is responsible? It's unlikely, but sometimes I don't trust the internal PC in debug statements, the cause can be an instruction or two earlier.

 

I just noticed I was focused on A074, cause that's where the arrow is, but the debug says A072. Definitely look at the previous instruction. The PC needs to be incremented before the hardware access occurs. ;)

 

Link to comment
Share on other sites

Classic99 399.026

 

- add some missing closes to the disk image handling. should've RAI
- add full directory sort when writing to a disk image to fix old broken images (this should also fix rename from the last update, but nobody had time to notice it was broken yet)
- all the fixes made to saving FIAD headers over the years never made it into disk images: bytes in last header and number record field were both wrong for variable type files (and bytes was wrong for fixed)
- added disk size verification to TICC handler because the TICC doesn't check like I thought it did and people are just using it for everything. DO NOT USE THIS CONTROLLER EXCEPT FOR TESTING COMPATIBILITY. Not only do you not get the extended features but it isn't fully virtualized, I just hooked the sector read/write. ;)

 

http://harmlesslion.com/software/classic99

 

 

  • Like 5
  • Thanks 1
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...