[net.micro.cbm] Next print location on the screen

cfj@omovax.UUCP (Charles Johnson) (12/20/84)

Does anyone know, which memory locations control where the next
position that characters will be printed at on the C-64 ?
I believe 211 (decimal) controls which column but I haven't been
able to find out what controls which line.

I'm trying to write a function which will print anywhere on the screen
without using the cursor controls or poking directly to the screen.

Thanks,

Charles Johnson
Hillsboro, OR

P.S. I have a copy of the programmer's manual, but their descriptions
	 of the memory map is not that great.

calway@ecsvax.UUCP (James Calloway) (12/31/84)

x
The PLOT routine in the kernal ($FFF0 or65520) will position the cursor for you. Load the Y register with the column number, 0-39, and the X resister with the row number, 0-24, clear the carry flag and JSR to FFF0.

If you want to do that from BASIC, you can poke the Y value into 782 and the X value into 781. I don't know how to clear the carry flag except to SYS to a short routine that contains these numbers:
24,76,240,255

This will jump to FFFO for you and then return to BASIC.

-- 

James  Calloway
The News and Observer
Box 191
Raleigh, N.C. 27602
(919) 829-4570
{akgua,decvax}!mcnc!ecsvax!calway

joels@tektools.UUCP (Joel Swank) (01/02/85)

> x
> The PLOT routine in the kernal ($FFF0 or65520) will position the cursor for you. Load the Y register with the column number, 0-39, and the X resister with the row number, 0-24, clear the carry flag and JSR to FFF0.
> 
> If you want to do that from BASIC, you can poke the Y value into 782 and the X value into 781. I don't know how to clear the carry flag except to SYS to a short routine that contains these numbers:
> 24,76,240,255
> 
> This will jump to FFFO for you and then return to BASIC.

Location 783 is the initial P reg for SYS calls. To clear carry (and all other
flags) poke a 0 here. Location 780 passes the A reg. All 4 locations can be
peeked after retrurn from the SYS to see the contents of the registers after
the ML subroutine has executed.

Joel Swank
Software Center Tools Support
50-487
Tektronix
Beaverton OR 97077
(503) 627-4403

calway@ecsvax.UUCP (James Calloway) (01/05/85)

x
Good point. If the cursor is on while you call the PLOT routine, it sometimes gets caught by the interrupt, causing some screen locations visited by the cursor
to switch to reverse video.
You will need a short ML routine that turns off the interrupt, corrects the cursor if necessary, calls PLOT and then turns the interrupt back on.
I have something like that lying around. If I can find it, I will post it.
Thanks for the tip on the status register (location 784). My Programmer's Reference Guide lists it as "SP" which I took to mean stack pointer. Should have known.


-- 

James  Calloway
The News and Observer
Box 191
Raleigh, N.C. 27602
(919) 829-4570
{akgua,decvax}!mcnc!ecsvax!calway

calway@ecsvax.UUCP (James Calloway) (01/07/85)

x
Below is a ML routine that will move the cursor without leaving parts of the 
screen in reverse video. The only instance I have found in which it does not work is on line 24, the last line (starting with 0). I'm not sure why.
The routine assumes you already have loaded the X register with the row number
(0-24) and the Y register with the column number (0-39).

          SEI
          LDA $CF
          BNE fixcrsr
          CLC
goplot    JSR FFF0
          CLI
          RTS
fixcrsr   LDA #$01
          STA $CD
ckagain   CLI
          NOP
          NOP
          NOP
          NOP
          NOP
          SEI
          LDA $CF
          BNE ckagain
          CLC
          BCC goplot


This can be used with BASIC. Select an address that is safe from BASIC and POKE 
the following numbers into memory:

120,165,207,208,6,24,
32,240,255,88,96,169,
1,133,205,88,234,234,234,
234,234,120,165,207,208,
245,24,144,233

From BASIC you can POKE the column number into 782 and the row number into 781.
Then SYS to the address  you chose for the routine. It will move the cursor and
return to BASIC.


-- 

James  Calloway
The News and Observer
Box 191
Raleigh, N.C. 27602
(919) 829-4570
{akgua,decvax}!mcnc!ecsvax!calway

grant@hp-pcd.UUCP (grant) (01/12/85)

{}

you can set/clear the carry for a BASIC SYS call by writing an 
appropriate value (0 for clear, 1 for set, I think) into the PSW
location (similar to the X, Y, and A locations).  I think its address
is 784, but I don't have my documentation here.  When you do a SYS,
the X, Y, A registers and the PSW are all loaded from their respective 
locations before the user routine is called.  When the routine is
finished, the registers and PSW are saved back into their locations
before BASIC resumes.  This means that BASIC can both send and receive
parameters to/from the ML.

For example, if you set the carry before calling PLOT, the cursur's
row and column will be returned to you.

One warning:  PLOT may give funny results if the cursor is on.  It
may move to a new spot while the screen is reversed, leaving an
inverse character and possibly a funny color under its old position.
(It is possible that I am confusing PLOT with just trying to turn the
cursor on in BASIC.)