BBS:      TELESC.NET.BR
Assunto:  Re: list running prog c64 basic v2
De:       Tilmann Hentze
Data:     Tue, 10 Feb 2026 21:00:02 +1100
-----------------------------------------------------------
Grant Weasner  schrieb:
> If I had just put:
> 10 list
> 20 goto 10
> it wouldn't work because list executes something like a run-stop first.

This works silmilarily as your program for me: The programm lists itself and
 then stops. I wonder why.
I tested this with vice and yapesdl.

I'll try to comment your program:

Lines 5 to 9 copies the BASIC keywords to k$() array.
5 print "initializing...": dim k$(255): rp=41111
6 for t=124 to 255: w$="": rem --- fill the cache ---
7 b=peek(rp): w$=w$+chr$(b and 127): rp=rp+1
8 if b<128 goto 7
9 k$(t)=w$+" ": if rp < 41581 then next t

The BASIC program starts at 2049, this is the addres of the first line;
clear the screen
10 ad = 2049: print chr$(147)

The next BASIC line number is at this address
20 nx = peek(ad) + 256 * peek(ad+1)

This is the end of the program
30 if nx = 0 then end

Get the BASIC program line number and print it
40 ln = peek(ad+2) + 256 * peek(ad+3)
50 print ln; " ";

Loop from line's start of text to end of line
60 for i = ad + 4 to nx - 2

Get a byte. If its value less than 128 then it is a character, print it
70 c = peek(i): if c < 128 then print chr$(c);: goto 100

It is a BASIC token, lookup in keywords table and print it.
80 print k$(c);

Loop end; print an empty line; next BASIC line address; restart loop
100 next i: print: ad = nx: goto 20

Best regards,
Tilmann.
-- 
Wo sich noch Bit und Byte gute Nacht sagen.

--- PyGate Linux v1.5.11
 * Origin: Dragon's Lair, PyGate NNTP<>Fido Gate (3:633/10)

-----------------------------------------------------------
[Voltar]