diff --git a/README.md b/README.md index fd4237d59..80ca8a0cc 100644 --- a/README.md +++ b/README.md @@ -75,16 +75,18 @@ Example code This code calculates prime numbers using the Sieve of Eratosthenes algorithm:: - %import c64textio + %import textio %zeropage basicsafe - + main { - + ubyte[256] sieve - ubyte candidate_prime = 2 - + ubyte candidate_prime = 2 ; is increased in the loop + sub start() { - memset(sieve, 256, false) ; clear the sieve + ; clear the sieve, to reset starting situation on subsequent runs + memset(sieve, 256, false) + ; calculate primes txt.print("prime numbers up to 255:\n\n") ubyte amount=0 repeat { @@ -95,22 +97,23 @@ This code calculates prime numbers using the Sieve of Eratosthenes algorithm:: txt.print(", ") amount++ } - c64.CHROUT('\n') + txt.chrout('\n') txt.print("number of primes (expected 54): ") txt.print_ub(amount) - c64.CHROUT('\n') + txt.chrout('\n') } - + sub find_next_prime() -> ubyte { while sieve[candidate_prime] { candidate_prime++ if candidate_prime==0 - return 0 ; we wrapped; no more primes available + return 0 ; we wrapped; no more primes available in the sieve } + ; found next one, mark the multiples and return it. sieve[candidate_prime] = true uword multiple = candidate_prime - + while multiple < len(sieve) { sieve[lsb(multiple)] = true multiple += candidate_prime @@ -120,6 +123,7 @@ This code calculates prime numbers using the Sieve of Eratosthenes algorithm:: } + when compiled an ran on a C-64 you'll get: ![c64 screen](docs/source/_static/primes_example.png) diff --git a/docs/source/building.rst b/docs/source/building.rst index 0e2c6d898..ef87493f6 100644 --- a/docs/source/building.rst +++ b/docs/source/building.rst @@ -149,10 +149,10 @@ If your running program hits one of the breakpoints, Vice will halt execution an Troubleshooting --------------- -Getting an assembler error about undefined symbols such as ``not defined 'c64flt'``? -This happens when your program uses floating point values, and you forgot to import ``c64flt`` library. +Getting an assembler error about undefined symbols such as ``not defined 'floats'``? +This happens when your program uses floating point values, and you forgot to import ``floats`` library. If you use floating points, the compiler needs routines from that library. -Fix it by adding an ``%import c64flt``. +Fix it by adding an ``%import floats``. Examples diff --git a/docs/source/index.rst b/docs/source/index.rst index fdbdacbf7..fdcebf2e9 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -43,16 +43,17 @@ Code examples This code calculates prime numbers using the Sieve of Eratosthenes algorithm:: - %import c64textio + %import textio %zeropage basicsafe main { - ubyte[256] sieve - ubyte candidate_prime = 2 + ubyte candidate_prime = 2 ; is increased in the loop sub start() { - memset(sieve, 256, false) ; clear the sieve + ; clear the sieve, to reset starting situation on subsequent runs + memset(sieve, 256, false) + ; calculate primes txt.print("prime numbers up to 255:\n\n") ubyte amount=0 repeat { @@ -63,18 +64,19 @@ This code calculates prime numbers using the Sieve of Eratosthenes algorithm:: txt.print(", ") amount++ } - c64.CHROUT('\n') + txt.chrout('\n') txt.print("number of primes (expected 54): ") txt.print_ub(amount) - c64.CHROUT('\n') + txt.chrout('\n') } sub find_next_prime() -> ubyte { while sieve[candidate_prime] { candidate_prime++ if candidate_prime==0 - return 0 ; we wrapped; no more primes available + return 0 ; we wrapped; no more primes available in the sieve } + ; found next one, mark the multiples and return it. sieve[candidate_prime] = true uword multiple = candidate_prime @@ -88,7 +90,6 @@ This code calculates prime numbers using the Sieve of Eratosthenes algorithm:: } - when compiled an ran on a C-64 you get this: .. image:: _static/primes_example.png diff --git a/docs/source/programming.rst b/docs/source/programming.rst index f4f6e13e1..daf8a89bd 100644 --- a/docs/source/programming.rst +++ b/docs/source/programming.rst @@ -226,7 +226,7 @@ This is because routines in the C-64 BASIC and KERNAL ROMs are used for that. So floating point operations will only work if the C-64 BASIC ROM (and KERNAL ROM) are banked in. -Also your code needs to import the ``c64flt`` library to enable floating point support +Also your code needs to import the ``floats`` library to enable floating point support in the compiler, and to gain access to the floating point routines. (this library contains the directive to enable floating points, you don't have to worry about this yourself) @@ -802,7 +802,7 @@ memset(address, numbytes, bytevalue) Efficiently set a part of memory to the given (u)byte value. But the most efficient will always be to write a specialized fill routine in assembly yourself! Note that for clearing the character screen, very fast specialized subroutines are - available in the ``screen`` block (part of the ``c64textio`` or ``cx16textio`` modules) + available in the ``txt`` block (part of the ``textio`` module) memsetw(address, numwords, wordvalue) Efficiently set a part of memory to the given (u)word value.