Esta entrada en el blog es para reflejar los libros de referencia que estoy usando y para que sean más fáciles de encontrar.
En el caso de la CPU MOS 6501 / 6510, las instrucciones son las mismas.
Estos libros me han sido de gran ayuda:
Ordenadores de 8 bits. Software y desarrollo para ordenadores de 8 Bits ZX Spectrum y Commodore 64.
IF r$(x)="0" AND X<8 THEN PLOT OVER 1;(px-8)+(x-1),py+4: GO TO 390
IF r$(x)="1" AND X<8 THEN PLOT INVERSE 0; FLASH f; BRIGHT bold; FLASH f; INK co;(px-8)+(x-1),py+4: GO TO 390
IF R$(X)="0" AND X=8 THEN PLOT INVERSE 1; INK co; BRIGHT bold; FLASH f;(px-8)+(x-1),py+4: GO TO 390
IF R$(X)="1" AND X=8 THEN PLOT INVERSE 0; INK co; BRIGHT bold; FLASH f;(px-8)+(x-1),py+4
DEF FN x(x)=x*8
DEF FN y(y)=ABS ((y*8)-168)
10 CLS : LET lx=0: LET ly=0: LET hy=0: LET hx=0
20 DEF FN x(x)=x*8
30 DEF FN y(y)=ABS ((y*8)-168)
40 INPUT "Entra coor. Y :";ly
50 INPUT "Entra coor. X :";lx
60 IF lx<0 OR lx>31 OR ly<0 OR ly>21 THEN PRINT AT 2,2;"Val. no val. 0>X<32. 0>Y<22": GO TO 40
70 PRINT AT 2,2;" ": PRINT AT 2,2;"Lo X: ";lx
80 PRINT AT 3,2;" ": PRINT AT 3,2;"Lo Y: ";ly
90 LET hx=FN x(lx): LET hy=FN y(ly)
100 PRINT AT 4,2;" ": PRINT AT 4,2;"Hi X: ";hx
110 PRINT AT 5,2;" ": PRINT AT 5,2;"Hi Y: ";hy
120 INPUT "Pintar X ?";z$
130 IF z$="s" THEN GO SUB 200
140 INPUT "salir ? s/n ";z$
150 IF z$="s" THEN GO TO 180
160 PRINT AT 2,2;" "
170 GO TO 10
180 STOP
190 RETURN
200 FOR a=0 TO 7
210 PLOT hx+a,hy+a
220 PLOT hx+a,(hy+7)-a
230 NEXT a
240 RETURN
LET f=0
IF z>128 THEN LET f=1: LET z=z-128
LET b=0
IF z>64 THEN LET b=1: LET z=z-64
LET p=INT (z/8)
LET co=z-(p*8)
PRINT FLASH f; INK co; BRIGHT b; PAPER p;z$
10 REM Localizacion de UDG por coordenadas x,yHay varias cosas que tener en cuenta:
20 REM igual que el SCREEN$(y,x) pero funciona con UDG
30 REM vamos a cargar el UDG 149 (f)
40 FOR i=0 TO 7
50 POKE USR "f"+i,255
60 NEXT i
70 PRINT AT 7,13;CHR$ 149
80 REM le damos las coordenadas y res nos devuelve el UDG
90 LET x=13: LET y=7
100 GO SUB 260
110 PRINT AT 0,0;"El UDG es el ";res
120 GO TO 310
130 LET res=udg
140 LET vY=y*8
150 LET vX=x
160 FOR S=0 TO 7
170 LET iY=vY+S
180 LET BLOCK=INT (iY/64)
190 LET CROW=INT (iY/8)
200 LET YR=iY-(CROW*8)
210 LET CROW=CROW-(BLOCK*8)
220 LET ADD=16384+BLOCK*2048+CROW*32+YR*256
230 IF (PEEK ((USR (CHR$ udg))+s))<>(PEEK (add+vX)) THEN LET res=0: RETURN
240 NEXT S
250 RETURN
260 FOR i=144 TO 164
270 LET udg=i
280 GO SUB 130
290 IF res>=144 THEN RETURN
300 NEXT i
310 STOP