Login
Forum Help



Post Your Message
="hidden" name="cat" value="Programming">
Username: (Login)

Topic:
Message:
 


Previous Messages
Posted By

Luca
on 2009-10-25
12:31:07
 Re: IRQ and FF06



Posted By

Gaia
on 2009-10-25
09:14:53
 Re: IRQ and FF06

Kichy, in case you do it with the FF1D trick you have the benefit that you get the extra "border" cycles, too, which speeds things up quite a bit. Here is a quick and dirty routine I have put together in TEDMON:

D2000 2023
. 2000 78 SEI
. 2001 A9 FE LDA #$FE
. 2003 CD 1C FF CMP $FF1C
. 2006 D0 FB BNE $2003
. 2008 A9 13 LDA #$14
. 200A CD 1D FF CMP $FF1D
. 200D D0 FB BNE $200A
. 200F A9 CA LDA #$CA
. 2011 8D 1D FF STA $FF1D
. 2014 A9 DB LDA #$DB
. 2016 A2 24 LDX #$24
. 2018 CD 1D FF CMP $FF1D
. 201B D0 FB BNE $2018
. 201D 8E 1D FF STX $FF1D
. 2020 EE 19 FF INC $FF19
. 2023 4C 01 20 JMP $2001

The idea here is that we wait until we reach rasterline $014 and then make the TED think he is already at the end of the visible window by writing $CA into the horizontal raster. This will let the TED turn off the DMA (colour and char fetch) and "close the border". But for the rest of the screen and video timing not to screw up, we must set things back a few lines later to the values it would be if there were no raster register writes at all. This is basically how all extended border effects work (well, most of them anyway).

There are a couple of caveats though, one namely that make sure you do not write an odd number into FF1D while it is in an even line and vice versa because that will screw up the PAL line phase and you get artifacts ("alternative" as well alternating colours per frame :-) ). So stay with either all odd or even numbers in case you're not sure.

Of course this routine is quite suboptimal because I am doing all this in a busy loop but it is easy to set things up in a raster IRQ (actually two raster IRQs per frame, or one raster and one timer, as you like it).

PS: it could also be that I accidentally changed the frame rate, too, by not counting the actual video lines generated (which should be 312) properly, but I was lazy.

Posted By

KiCHY
on 2009-10-25
06:59:36
 Re: IRQ and FF06

The illegalmode way solved my problem, but it would be handy if someone could create an encyclopedia entry about this topic wink

Thank you again!

Posted By

KiCHY
on 2009-10-25
05:53:22
 Re: IRQ and FF06

Thanx for the quick answers and solutions! My aim is to hide a central portion of my graphic screen (ergo full bitmap mode) while I repaint the unvisible area (forcing an unprofessional code to mimic a professional behaviour, eheh). So I will try setting illegal mode first, perhaps more complicated solutions will follow...
Luca: I turned Skype on.

Posted By

Degauss
on 2009-10-24
17:27:57
 Re: IRQ and FF06

Phew. Just blanking out ONE bigger portion of the screen is quite easy to manage: You only need to modify FF1D. I believe having TWO visible areas is more complicated and involves a bit more TED-hacking (as rachy said)

Posted By

Luca
on 2009-10-24
15:14:21
 Re: IRQ and FF06

I guess Rachy is right, I would try it with my $FF06/$FF1F tables, but at the moment I've some problems with Plus4IDE...
Inner communication: Kichy, I waited for you on Skype but didn't get you ;)

Posted By

Chicken
on 2009-10-24
15:06:09
 Re: IRQ and FF06

Rereading this... I probably got you wrong and you want some char lines and then some border color "area" ($ff19) and then some chair lines again. If I remember correctly, it's possible to "re-initialize" a complete new "text window" by manipulating $ff1d (and probably some other registers).
Some demos obviously used this method for scrollers in the upper and lower border. (Not sure but I think Crown's Magic Picture Show works like this.)
Furthermore, making the "text window" smaller and thus gaining some cycles is possible (this was discussed here in the early days of XeO3).

Posted By

Rachy
on 2009-10-24
14:55:20
 Re: IRQ and FF06

It is possible by writing into FF1D, FF06, FF14 and FF1F synchronized. A bit tricky, though, because exact timing is the key. You can find some programs, which manage this kind of reshape of screen display. Some turbo loader or cruncher popped into my mind right away (which hid its own code in the screen memory by this way), I just can't remember its title. But I am pretty sure I have seen the same in some of Crown's programs too.

Posted By

Chicken
on 2009-10-24
14:49:19
 Re: IRQ and FF06

If you just want to "hide" (or "blacken") lines, I'd suggest switching to some "illegal" mode (e.g. setting ECM color mode bit AND bitmap bit) in those lines.

Posted By

Luca
on 2009-10-24
14:01:36
 Re: IRQ and FF06

I tried too, and fail. There's somethng I don't really know aboit FF16's 4th bit. I also tried with $FF1D check, nothing to do

Posted By

Csabo
on 2009-10-24
14:00:57
 Re: IRQ and FF06

Hey, nice to see you back happy

I believe this is not possible on the TED: you cannot turn the screen on or off via FF06 once the frame has started. It's only checked for the whole frame, not per rasterline.

I have not tried this, but what you're looking for might be possible by playing with FF1D. You can definitely make the lower border start sooner (e.g. like in Out Of Border), so MAYBE it's possible to set FF1D back to show some more character lines at the bottom. (My guess would be that this won't work, but it's worth a try.)

May I ask why you'd want to do this?

Posted By

KiCHY
on 2009-10-24
12:03:23
 IRQ and FF06

Hi demogurus,

I ran into problem when I wanted to do a quick screen effect using IRQ.
My goal is this: the first two character rows are visible, then I turn off the screen (with FF06bit4). Later I turn screen back to make the last 3 character rows to be visible again. I learnt that completely turning off the screen with FF06 works, but turning off the screen between two specified raster lines doesn't (at least my knowledge lacks about this topic).
Demogurus, what's the solution for this simple problem?

Cheers,
KiCHY


Copyright © Plus/4 World Team, 2001-2024. Support Plus/4 World on Patreon