como dices CPULoyal los caracteres en multicolor los tengo controlados pero todavia no se como darle color a cada uno, a ver si me pongo con ello (es que todavia no me he puesto) ya que he tenido un finde un poco liado.
He estado mas con cuestiones artisticas como habreis visto,...todos los limites de pantalla y superacion de 255 por parte del disparo esta sin hacer...
Saludos.
Bueno, para darte otro empujoncito hacia la aplicación del 4º color te amplio el ejemplo que te puse la vez anterior.
Hay un detalle interesante en el uso de la memoria de color. Como te expliqué, el par de bits 11 en la definición de los caracteres indica que el color a usar será el asignado por la memoria de color a partir de la dirección fija para los 4 bancos de video $D800 (55296).
Ahora bien, la Commodore 64 tiene una paleta de 16 colores para video, y en los modos de hires puedes asignar cualquiera de ellos asignando el valor del 0 al 15, de acuerdo al valor elegido.
Sin embargo, en modo multicolor y solo cuando ya está configurado, la paleta de colores se reduce a los 8 primeros colores, pero usando los valores del 8 al 15, porque el bit 3 indica el modo hires para ese carácter en particular, usando la relación 1 a 1 de memoria de pantalla y memoria de color.
Puedes notarlo en el ciclo de prueba que puse. Es visible pese a que el retardo no es muy prolongado.
Saludos
00001 0000 *=$C000
00002 C000 AD 0E DC BGNPRG LDA $DC0E ;ACCEDEMOS A LA MEMORIA DE CARACTERES
00003 C003 29 FE AND #$FE ;DESCONECTANDO TEMPORALMENTE INTERRUPCIONES
00004 C005 8D 0E DC STA $DC0E ;Y KERNAL
00005 C008 A5 01 LDA $01
00006 C00A 29 FB AND #$FB
00007 C00C 85 01 STA $01
00008 C00E A0 00 BGNCPY LDY #$00 ;HACEMOS UNA COPIA DE LOS PRIMEROS 64 (512 BYTES)
00009 C010 A2 02 LDX #$02 ;CARACTERES DESDE $D000 A $3000
00010 C012 F0 1E BEQ CPYRMNBY ;EL REGISTRO X CONTIENE EL TOTAL DE PÁGINAS A
00011 C014 A9 00 LDA #$00 ;COPIAR (CADA PÁGINA ES IGUAL A 256 BYTES)
00012 C016 85 FB STA $FB
00013 C018 A9 D0 LDA #$D0
00014 C01A 85 FC STA $FC
00015 C01C A9 00 LDA #$00
00016 C01E 85 FD STA $FD
00017 C020 A9 30 LDA #$30
00018 C022 85 FE STA $FE
00019 C024 B1 FB KEEPCPY1 LDA ($FB),Y ;CICLO DE COPIA EN BLOQUES DE 256 BYTES
00020 C026 91 FD STA ($FD),Y
00021 C028 C8 INY
00022 C029 D0 F9 BNE KEEPCPY1
00023 C02B E6 FC INC $FC ;PREPARAMOS LOS APUNTADORES A LA SIGUIENTE PÁGINA
00024 C02D E6 FE INC $FE ;Y COMPROBAMOS SI AÚN QUEDAN PÁGINAS POR COPIAR
00025 C02F CA DEX
00026 C030 D0 F2 BNE KEEPCPY1
00027 C032 A2 00 CPYRMNBY LDX #$00 ;COPIAR LOS BYTES RESTANTES DE LA PÁGINA
00028 C034 F0 08 BEQ CHRRTN ;NUEVAMENTE EL REGISTRO X CONTIENE EL NÚMERO DE
00029 C036 B1 FB KEEPCPY2 LDA ($FB),Y ;BYTES FALTANTES
00030 C038 91 FD STA ($FD),Y
00031 C03A C8 INY
00032 C03B CA DEX
00033 C03C D0 F8 BNE KEEPCPY2
00034 C03E A5 01 CHRRTN LDA $01 ;RESTAURAMOS INTERRUPCIONES Y KERNAL
00035 C040 09 04 ORA #$04
00036 C042 85 01 STA $01
00037 C044 AD 0E DC LDA $DC0E
00038 C047 09 01 ORA #$01
00039 C049 8D 0E DC STA $DC0E
00040 C04C AD 18 D0 LDA $D018 ;HABILITAMOS LA MEMORIA DE CARACTERES EN
00041 C04F 29 F0 AND #$F0 ;LA DIRECCIÓN $3000
00042 C051 09 0C ORA #$0C
00043 C053 8D 18 D0 STA $D018
00044 C056 AD 16 D0 LDA $D016 ;HABILITAMOS MODO MULTICOLOR
00045 C059 09 10 ORA #$10
00046 C05B 8D 16 D0 STA $D016
00047 C05E A9 00 LDA #$00 ;COLOR BACKGROUND 0
00048 C060 8D 21 D0 STA $D021
00049 C063 A9 02 LDA #$02 ;COLOR BACKGROUND 1
00050 C065 8D 22 D0 STA $D022
00051 C068 A9 07 LDA #$07 ;COLOR BACKGROUND 2
00052 C06A 8D 23 D0 STA $D023
00053 C06D A9 BD LDA <CHRDEF ;REDEFINIMOS LOS PRIMEROS 4 CARACTERES
00054 C06F 85 FB STA $FB ;DEL CONJUNTO DESDE DATOS ALMACENADOS
00055 C071 A9 C0 LDA >CHRDEF ;EN LA DIRECCIÓN CHRDEF ($C0BD)
00056 C073 85 FC STA $FC
00057 C075 A9 00 LDA #$00
00058 C077 85 FD STA $FD
00059 C079 A9 30 LDA #$30
00060 C07B 85 FE STA $FE
00061 C07D A0 00 LDY #$00
00062 C07F A2 20 LDX #$20
00063 C081 B1 FB KEEPCPY3 LDA ($FB),Y
00064 C083 91 FD STA ($FD),Y
00065 C085 C8 INY
00066 C086 CA DEX
00067 C087 D0 F8 BNE KEEPCPY3
00068 C089 A9 00 LDA #$00
00069 C08B 8D 00 04 STA $0400 ;COMO EJEMPLO MOSTRAMOS LOS CARACTERES
00070 C08E A9 01 LDA #$01 ;REDEFINIDOS EN LA DIRECCIÓN $0400
00071 C090 8D 01 04 STA $0401 ;DE LA MEMORIA DE PANTALLA
00072 C093 A9 02 LDA #$02
00073 C095 8D 02 04 STA $0402
00074 C098 A9 03 LDA #$03
00075 C09A 8D 03 04 STA $0403
00076 C09D A2 00 LDX #$00 ;HACEMOS UNA PEQUEÑA RUTINA PARA CAMBIAR LOS
00077 C09F A0 00 LDY #$00 ;LOS COLORES DE LOS CARACTERES EN UN CICLO
00078 C0A1 A9 00 LDA #$00 ;A LA MEMORIA $D800
00079 C0A3 8E 00 D8 CYCCLRS STX $D800
00080 C0A6 E8 INX
00081 C0A7 8E 01 D8 STX $D801
00082 C0AA E8 INX
00083 C0AB 8E 02 D8 STX $D802
00084 C0AE E8 INX
00085 C0AF 8E 03 D8 STX $D803
00086 C0B2 C8 LOOP1 INY ;INTRODUCIMOS UN RETRASO PARA VER EL CAMBIO
00087 C0B3 C0 FF CPY #$FF
00088 C0B5 D0 FB BNE LOOP1
00089 C0B7 A0 00 LDY #$00
00090 C0B9 4C A3 C0 JMP CYCCLRS
00091 C0BC 60 RTS
00092 C0BD 14 7D 7D CHRDEF BYTE 20,125,125,125,105,105,20,0
00093 C0C5 14 6D 6D BYTE 20,109,109,109,109,109,109,20
00094 C0CD 14 69 69 BYTE 20,105,105,105,125,125,125,20
00095 C0D5 14 79 79 BYTE 20,121,121,121,121,121,121,20
00096 C0DD
00097 C0DD