Intentaré ser breve pero a la vez que se me entienda mas o menos :lol:
La CPU (6510) del C64 es capaz de direccionar los 64Kb de la máquina pero sin embargo el VIC-II (el chip gráfico) sólo es capaz de 'ver' (direccionar) 16Kb debido al tamaño del registro de direcciones que utiliza.
Por este motivo la memoria del C64, para el uso del VIC, se divide en 4 bancos de 16Kb cada uno, normalmente denominados (bank 0, 1, 2 y 3). Por defecto el bank que usa el VIC es el 0 (direcciones 0-16384) de ahí que en los ejemplos de Dr. Fred se haga referencia a direcciones en ese rango (la famosa 2040 que preguntabas). El banco de vídeo se puede cambiar usando ciertos registros del VIC y de hecho es lo más recomendable ya que el bank 0 (el por defecto) no es el más adecuado para ser usado por el VIC.
Después está el tema de en que direcciones está cada cosa (punteros de los sprites, coordenadas de los sprites, ...), la respuesta a esto es depende donde se encuentre la memoria de pantalla (screen memory). La memoria de pantalla, al igual que el banco del VIC, también es configurable aunque su valor por defecto es 1024 ($0400 en hex) y teniendo en cuenta que ocupa 1000 bytes (40x25 bytes) llega hasta la dirección 2023 (ya nos vamos acercando a la 2040 :wink: Esta parte está muy bien explicada aquí:
http://www.devili.iki.fi/Computers/Commodore/C64/Programmers_Reference/Chapter_3/page_101.htmlLos siguientes 16 bytes desde donde finaliza la screen memory no se usan para a partir del byte 16, existen 8 bytes que son los 8 punteros a las definiciones de cada sprite de ahí que en nuestro ejemplo la memoria de video comienze en la dirección 1024, termine en la 2023 + 16 bytes sin uso = 2039 por lo que la direccion 2040 es el puntero a la definición del primer sprite (sprite 0).
Esto en cuanto a los punteros de las definiciones, el resto de parámetros de los sprites (coordenadas, si están activos o no, colores, ...) se controlan con los diferentes registros del VIC que se encuentran en las direcciones a partir de la $D000 (53248), para eso leete la C64 Programmer's Reference Guide donde puedes ver la dirección de cada cosa (estas direcciones SI son fijas siempre).
Espero que esta parte haya quedado mas o menos clara...