Login
Back to forumReply to this topicGo to last reply

Posted By

Luca
on 2022-05-06
14:33:56
 Screen scrolling forced by PRINT/CHAR

I tried to force the Plus/4 to behave like the C64, when you PRINT a character in the very last column of the screen: there's no chance to let the Plus/4 avoid to scroll down the whole lower part of the screen due automatically making a new chars'row right below it.

I was sure there would be some triggering location where to activate/deactivate this feature, just like the char's inserting or the general scrolling of the screen...but no, or at least I ain't able to find it. So, I folded to use some POKE3072+39,XX instead.

Is it just me, or there's no easy solution via Basic for this?

Posted By

Gaia
on 2022-05-06
16:21:48
 Re: Screen scrolling forced by PRINT/CHAR

The C64 scrolling is different from the plus/4. However, it's possible to do what you want, with escape sequences:

10 PRINTCHR$(27)"M"
20 CHAR,39,24,"O"
30 GOTO 30

Posted By

Luca
on 2022-05-06
16:38:16
 Re: Screen scrolling forced by PRINT/CHAR

@Gaia thank you, unfortunately that ESC code stops the screen scrolling, not the automatic line inserting, hece it works in the last screen line only, as I've pointed out before.

Posted By

Gaia
on 2022-05-06
17:47:28
 Re: Screen scrolling forced by PRINT/CHAR

I'm a bit confused now, I thought you wanted to AVOID screen scrolling? So you mean you're actually wanting to trigger it? That is exactly what the default behaviour is. But ESC+V will trigger a scroll down any time.

EDIT: I think I know what you mean. But to me it seems the C64 behaves the same way there...?

Posted By

Luca
on 2022-05-06
20:46:23
 Re: Screen scrolling forced by PRINT/CHAR

@Gaia eh unfortunately the C64 apparently operates in a different way, and this thread actually arrives after a conversion from the C64 Basic to Plus/4, where what would look like an easy slice of code has demonstated to work differently compared to the C64.

Try your own code, e.g. moved on line 0, having some test below that first line:

10 PRINTCHR$(27)"M"
20 CHAR,39,0,"O"
30 GOTO 20


...and you'll see what happens: the text scrolls down because the simple act of printing a character into the last screen columns "produces" the next line (line 1 in this case). I also changed line 30 in order to repeat it till the text below disappears completely from the screen.


Now try this both on C64 and Plus/4, writing some garbage to be eventually scrolled away on screen:

10 PRINT"{home}"TAB(39)"O":GOTO10


and see what I mean wink

Posted By

RoePipi
on 2022-05-07
08:44:46
 Re: Screen scrolling forced by PRINT/CHAR

There is a really cheap solution for this, PRINTing a char at the second last position, then INSERTing one before happy

10 PRINT"{home}"; : REM MOVE CURSOR TO TOP
20 FOR N=1 TO 39 : REM LOOP 39 TIMES
30 PRINT"O"; : REM PRINT WITHOUT NEWLINE
40 NEXT : REM LOOP END
50 PRINT"{left}{shift+del}O"; : REM STEP BACK OVER LAST CHAR, PUSH IT RIGHT, PLACE CHAR
60 CONT : REM INFINITE LOOP, BREAK WITH RUN/STOP


Also, you can combine the Esc+M methods above with defining a window to that one line you want, using Esc+T at the start of line and Esc+B at the end of line:

10 PRINT"{home}" CHR$(27) "M" CHR$(27) "T" TAB(39) CHR$(27) "B"
20 PRINT"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO" : REM 40x"O"
30 CONT



Posted By

Luca
on 2022-05-07
10:46:54
 Re: Screen scrolling forced by PRINT/CHAR

@RoePipi I tried your system, and in the very end doesn't work, I also tried something similar before posting here...BUT wink A different approach of the method you've revealed before would work.
See the animated GIF, where I first run your attempt with RUN9 and then I RUN39 mine.



In any case, it works for simple cases, and new annoying assumptions to work with must be applied in different cases: in the Basic stuff I've converted, for example, that 39,0 screen location has been used for a little animation, and the attempt I tried would eventually produces some bad side effects if multiple chars gotta be printed...

Anyway, we kinow now we could always do something. Of course, the straight solution I've taken (POKE3072+39,XX) is still the best one.
What remains, is that actually C64 and C264 kernels seem to act differently in that particular situation.

Posted By

SVS
on 2022-05-07
14:13:49
 Re: Screen scrolling forced by PRINT/CHAR

Hello, I'm back happy after so long.
Luca you should try POKE DEC("7EE"),DEC("40").
This disables the scroll between line 0 and line 1 when printing on column 39. By playing around with bits inside $7EE..$7F1 you can disable it on any screen line.

Posted By

Luca
on 2022-05-07
15:51:11
 Re: Screen scrolling forced by PRINT/CHAR

@SVS aaah great man! I was sure it should have been a sort of switch somewhere!

Thank you man, you're once again our master of Basic V3.5! wink I suggest to extend that information on the next version of the Ultimate Map.

Posted By

George
on 2022-05-07
18:20:27
 Re: Screen scrolling forced by PRINT/CHAR

SVS Impressive knowledge!

Posted By

Csabo
on 2022-05-07
22:46:02
 Re: Screen scrolling forced by PRINT/CHAR

Indeed, SVS for the win happy

Posted By

SVS
on 2022-05-25
14:55:02
 Re: Screen scrolling forced by PRINT/CHAR

Hi, thank you pals for your good words. happy I've decoded the use of the table at $7EE...7F1.
The complete info is (will be) in the next issue of Ultimate-Map. In the meanwhile a brief summary, for whom is interested:

Each bit has the following meaning:
0 = The row is a new line;
1 = The row belongs to a logical line started in a previous row. A logical line can occupy till 3 rows on the screen, being long until 88 characters. This table memorizes the scheme of logical lines inside the screen matrix.
Warning: this table is reset by the use of windowing (CTRL-T, CTRL-B, etc.)

Posted By

javierglez
on 2022-05-25
16:06:14
 Re: Screen scrolling forced by PRINT/CHAR

I understand that RoePipi's tenliner 100 Line Maze, which I like a lot BTW, handled a similar issue by defining a window spanning the last line.



Back to topReply to this topic


Copyright © Plus/4 World Team, 2001-2024