| |
Majikeyric
Registered: Sep 2002 Posts: 83 |
How does linecrunch work ?
Hi everybody !!!!
Can someone explain or point me to a web site where I could find information about linecrunch ???
I think it allows to scroll bitmaps but I don't know how ???
thanks. |
|
| |
Nightlord
Registered: Jan 2003 Posts: 131 |
there is an article called bfli by pasi ojala in c hacking issue 10. check it out at:
http://www.ffd2.com/fridge/chacking/
there is some info about linecrunch in there about the vic fooling by d011 trickery. the best overall vic source in my opinion is vic-ii compendium at:
http://www.informatik.hu-berlin.de/~koethnig/vicii/eindex.html
all kinds of vic-ii counter fooling stuff is well explained in there |
| |
Majikeyric
Registered: Sep 2002 Posts: 83 |
Thanks nightlord I gonna read this ;o) |
| |
CyberBrain Administrator
Posts: 392 |
The VIC-article is also in nice text-format, so you can download it:
http://ftp.martnet.com/martnet/commie/documents/chipdata/VIC-Ar.. |
| |
tecM0
Registered: Jan 2002 Posts: 40 |
another great VIC_infopage:
http://www.minet.uni-jena.de/~andreasg/c64/vic_artikel/vic_arti..
point 3.1.14 explains linecrunch...a little bit...
tecM0/+H |
| |
Majikeyric
Registered: Sep 2002 Posts: 83 |
Thanks everybody !!! |
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
be aware that linecrunching causes trouble on some machines. when doing linecrunching on these some bits in memory will be randomly cleared in most cases. on my flat c128 linecrunching only works after testing it several times and turning the machine off and on again between each test.... but IF it runs, all linecrunching demos and games do run.
however this is not a c128 problem like some people believe. it's a problem of VIC revisions. machines with 8562/8565 VICs don't have this problem (C64C, C64G and C128DCR). problems only occur on the flat c128, the old c128d and old c64's. i even have seen one c64 which wasn't able to do plain FLI. |
| |
Ninja
Registered: Jan 2002 Posts: 407 |
a c64 that cannot do FLI? Wooow, wanna have, ULTRA-RARE, big bucks on ebay!! ;)) |
| |
algorithm
Registered: May 2002 Posts: 702 |
It might be a power supply problem. I know it sounds very unusual.
All demo's and games which shift the screen horizontally using a graphic trick (placing specific byte combinations in $d011 followed by a self modified delay and yet another value in $d011) would seem to randomly crash the entire system.
During my C64 days (A very long time ago) I had created a small utility which would test this and give a report on the amount of bytes that were corrupted. If it did this or crashed (Due to the very possible corruption of program data) I would find that switching the system off and on would sometime solve the problem.
Mind you, this would sometimes have to be done 7 or 8 times.
After a while, I got a new power supply unit and guess what. This problem never happened again!!
I had previously read somewhere that the the linecrunch routine causes the VICII chip to draw in more power and a faulty or weak powersupply would cause memory corruption. Who knows...
|
| |
Shadow Account closed
Registered: Apr 2002 Posts: 355 |
I have this problem with my C64 (new model, not the breadbox).
Many demos that have graphic scrolling lock up after just a few seconds. Never had any issues with games though, and FLI etc. works perfectly. |
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
"new model" doesn't mean anything except for the casing. it most likely still has an old board inside with 65xx ic's. |
| |
raven Account closed
Registered: Jan 2002 Posts: 137 |
well none of my machines have this problem (old,new,flat 128, 128D) but i've seen it happen on one machine (c64c) at X2001..
Thats one very interesting problem |
| |
Cybernator
Registered: Jun 2002 Posts: 154 |
I've tested all my C64s, and the only thing that doesn't work on old ones, is $DE00 programs.
One of my new C64s works fine, except with Insomnia (of course there must be something else, but this is what I have found so far). The computer simply locks up at the beginning. I suspect that CIA2 is blown. One old C64, gives me a message saying something like: "Disk drive not present", although it works with other programs as well.
@Raven: What does your code do at the beginning? (Before the screen fader). I guess it installs the fastloader into the 1541s memory. So most probably it's CIA2. But strange thing is that everything else I've tried so far, works perfect.
@Graham: Btw, on your site I've read that the 8500 is 6510 with different pin layout. I haven't tried to swap the processors, but I've seen an old C64 with 8500 processor (it didn't seemed to be resoldered at home). It worked normally. Are you sure it's the pin layout? I assumed it was the voltage difference here.
Btw, anyone knows the difference between 6526-A (used in new C64s), and 6526 (used in old C64s)? |
| |
Stryyker
Registered: Dec 2001 Posts: 465 |
I think the A means 2MHz mode available too. |
| |
yago
Registered: May 2002 Posts: 332 |
Concerning different CIAs:
There is a way of detecting them, one type needs longer for an IRQ (mist's diag-prg did this)
I also discovered memory-faintings when fidling with D011 on a "all-new" c64, and concluded that this does only happen when the c64 is not switched on a long time.
Don't know if this due to power-supply or other things..
Murphys Law regarding linecrunching:
It works on all machines, except on the organizers one.
|
| |
Cybernator
Registered: Jun 2002 Posts: 154 |
Stryyker wrote:
"I think the A means 2MHz mode available too."
I understand using this chip in C128, but why would someone use it in a C64C ??? I've even seen CIAs like "6526A-1" and "6526B". What teh heck does this mean? :/
Yago wrote:
"Concerning different CIAs:
There is a way of detecting them, one type needs longer for an IRQ (mist's diag-prg did this)"
You mean the IRQ occurence is delayed? (In case I understood you right). I just made a little test-routine which uses double raster interrupt to stabilize, and then starts timer A of CIA1, which then generates interrupt and changes the border color. (DEN is set to 0, btw).
Then I've used both version of CIA, and the color change happened exactly at the same place.
I've probably misunderstood ya. Where can I find the routine you mentioned?
Yago wrote:
"I also discovered memory-faintings when fidling with D011 on a "all-new" c64, and concluded that this does only happen when the c64 is not switched on a long time.
Don't know if this due to power-supply or other things.."
Ok, I realize my English sux :P Do you mean the C64 was NEW-VERSION, or it was new (NOT RAPED)? :) Or maybe all NEW-VERSION _C64s_ you have tried?
Never noticed such a problem. Only that those grey dots (when changing border/paper color) may appear or disappear when switching the C64 on/off.
Yago wrote:
"Murphys Law regarding linecrunching:
It works on all machines, except on the organizers one."
Hehe :-) |
| |
yago
Registered: May 2002 Posts: 332 |
To recognize the both CIAs (6526 & 8???), try the Program "diag" which might be found here:
http://www.weihenstephan.org/~michaste/mxass/
If it not included inside the Assembler anymore, contact me.
My "new C64" has all new Chips, SID, VIC, everything.
It has also a green LED, and msmakelas shiftlock-detection does not work as reliable as on other C64s (which seems to be an attribute of the mainboard/cia, NOT the keyboard).
I have also other "new version" c64 (to be honest, I use only non-breadbox-c64), but most of them have "old" chips.
The "dot"-problem can be used to manually detect a new VIC.
lda #0
sta $d011
loop: sta $d020
jmp loop
PS: "old" chips = 6xxx
"new" chips = 8xxx
|
| |
Cybernator
Registered: Jun 2002 Posts: 154 |
Yago wrote:
"To recognize the both CIAs (6526 & 8???), try the Program "diag" which might be found here..."
Wait a minute, I've never seen 85xx CIA. New C64s are based on 85xx chips, except for the CIA. It still 6526 with "A" after the number. Or maybe there're some 85xx based CIAs which are unknown to me? If possible, please check the number of the CIAs in your C64.
Btw, please explain something more about the "shiftlock detection" you mentioned (or send me a link if there's any).
|
| |
Stryyker
Registered: Dec 2001 Posts: 465 |
My newer C64 had red LED. |
| |
yago
Registered: May 2002 Posts: 332 |
Quote: Yago wrote:
"To recognize the both CIAs (6526 & 8???), try the Program "diag" which might be found here..."
Wait a minute, I've never seen 85xx CIA. New C64s are based on 85xx chips, except for the CIA. It still 6526 with "A" after the number. Or maybe there're some 85xx based CIAs which are unknown to me? If possible, please check the number of the CIAs in your C64.
Btw, please explain something more about the "shiftlock detection" you mentioned (or send me a link if there's any).
Concerning differences between left shift and shiftlock:
This is an excerpt from C=Hacking #7:
You can use this feature to distinquish between the left
shift and the shift lock keys, although they are connected
to same hardware lines. The shift lock key has smaller
resistance than the left shift. If you make both CIA 1
ports to outputs (write $FF to $DC03 and $DC01) prior
reading the left shift key, only shift lock can change the
values you read from CIA 1 port B ($DC01).)
Have Fun,
Zed Yago
|
| |
ChristopherJam
Registered: Aug 2004 Posts: 1381 |
So I've been playing with line crunch a little, but if I try to do it within the display area, I've only managed to crunch every second row of characters.
(eg, I can get VIC to display 8 lines of row 3, then 1 line of row 4, then 8 lines of row 5, then 1 line of row 6)
Within row 3, I tell VIC to delay row 4 by a line, then trigger row 4 at the time I would for FLI (ie with the three char bug area visible). I can then start row 5 in any of the next 7 lines.
Is crunching multiple adjacent rows down to single adjacent lines only possible if you start in the upper border, before the first char row has been displayed? |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1381 |
Never mind, got it working now :D |
| |
Raistlin
Registered: Mar 2007 Posts: 574 |
I'm starting to code my first linecruncher (!) .. and hitting some snags. I can only get it to scroll 0-14px (!) instead of the 0-15px that I of course want...
Across 16 frames, I'm doing these D011 writes (VSYNC, HSYNC):-
Frame0: V01, H15 (D011 = $30) and V48, H09 (D011 = $31)
Frame1: V01, H15 (D011 = $31) and V49, H09 (D011 = $32)
...
Frame6: V01, H15 (D011 = $36) and V54, H09 (D011 = $37)
Frame7: V01, H15 (D011 = $37) and V54, H09 (D011 = $30)
Frame8: V01, H15 (D011 = $30)
Frame9: V01, H15 (D011 = $31)
..
Frame15: V01, H15 (D011 = $37)
These are the only $d011 writes that I do...
Frame7 and Frame8 end up the same .. so it seems that I have something out of step somehow - both frame 7 and 8 of course have a final $d011 value of $30... so I assume I'm doing -something- wrong here..?
Any help/advice at all would be great............ |
| |
Raistlin
Registered: Mar 2007 Posts: 574 |
One more small note with what I'm trying to do here ... I'm -hoping- that I can do 0-15px linecrunch-based scrolling without losing any of the vertical height of the screen .. ie. retaining all 24chars (192px). |
| |
Krill
Registered: Apr 2002 Posts: 2854 |
Still not quite sure what you want to achieve, tbh. :)
Linecrunching does not lose you any char rows, but the wrapping point (screen offset $03ff->0 mid-row) and shifted screen contents below that become a bit cumbersome to handle.
One crunched char row equals upscrolling by 7 rasterlines, and you'd normally combine linecrunching with FLD (empty lines filled with $3fff idle pattern) for pixel-wise hardware Y-scrolling. |
| |
Raistlin
Registered: Mar 2007 Posts: 574 |
Ahhh, thanks Krill! That was the last piece of the puzzle - and explains why I could only get 0-14px working instead of 0-15px (0-7px coming from the smooth scroll of D011 plus 0px or 7px depending on whether I crunched a line).
I have it working in my test function now... tomorrow I'll see whether I can get it working in a more useful way :-) |
| |
Krill
Registered: Apr 2002 Posts: 2854 |
Glad i could help!
So the missing piece of the puzzle was that you'd set YSCROLL again after the crunched line, so you'd have 0..7 pixels of scroll-range above plus another 0..7 pixels of scroll-range below the crunched rows?
Or that you'd need to crunch 3 char rows (not just 2) in order to scroll up by 15 pixels? =) |