Autor Tema: Programa en código máquina desde cero (o intento de crear un juego).  (Leído 10477 veces)

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Aquí estamos otra vez.

Uno de los proyectos que dejé abandonados cuando tuve que retirar a mi pequeñajo en su momento, fue un juego de árcade que se llama Head On.



Como llevo un tiempo deseando hacer algo para tratar de desoxidar mi ya  casi olvidado código máquina, me he embarcado otra vez en el proyecto. Con mucha ilusión, aprovechando esos pequeños y extraños momentos de tiempo libre que de vez en cuando se dan.

Lo iré haciendo rutina a rutina y las iré colgando para compartir conocimientos y naturalmente, atender a los consejos del personal que habita el foro, muchos de los cuales, tienen conocimientos y experiencias que valoro mas allá de toda medida.

Explicaré un poco como pienso hacerlo funcionar.

Usaré caracteres de la memoria de pantalla para leer lo que hay en la pista (puntos a comer, paredes, bonus, manchas aceite, etc) pero no se mostrará nada, solo el sprite que se irá posicionando encima de donde esté nuestro coche invisible XD.

Solo se podrá mover el coche invisible una vez cada 8 ciclos para dar tiempo a la rutina de posicionar el sprite encima de las coordenadas donde están ahora.

Eso es otra rutina que aún no he creado. Darme tiempo XD
En fin, al trabajo...  ;)

PD: Si veis errores en las explicaciones, no lo dudéis, corregidme y lo modificare.   
« última modificación: Enero 11, 2016, 13:30:29 por Maniako »
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #1 en: Enero 07, 2016, 12:42:06 »
Animos con el proyecto!!

Los.colores son un poco... Emmm...
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #2 en: Enero 07, 2016, 12:45:58 »
Empezaré con la primera rutina que ya posteé por el foro.
Esta coloca un sprite encima de un carácter o zona de pantalla (de 1024 a 2023).
EL sprite está hecho del tamaño de un carácter de pantalla, 8x8 pixels y siempre encuadrado en los primeros 8 pixéls para así, quede siempre "en el mismo lugar".

El código viene ya comentado en lo posible.
Uso coordenadas X e Y de la memoria de pantalla, es decir, X irá de 0 a 39 (40) é Y de 0 a 24 (25) .

El cálculo es muy sencillo, para hallar las coordenadas de un sprite sobre unas coordenadas concretas de la pantalla (X o Y) , solo hay que multiplicar por 8 (8 pixeles por caracter de pantalla) la cordenada deseada y sumarle la corrección , ya que X=0 e Y=0 (de una zona de la memoria de pantalla) equivale a 1024 (el primer caracter de pantala) pero las coordenadas X=0 e Y=0 en un sprite, lo "mostraria" escondido en los bordes de la pantalla.

En este caso y con los sprites que he creado, la corrección a sumar en X al sprite seria #25 y en Y , #50.

Código: [Seleccionar]
;Creado en CBM prg STUDIO 3.6.0
;Pruebas para colocar sprite en pantalla partiendo de unas coordenadas de pantalla
;X de 0 a 39 e Y de 0 a 24
; 10 SYS4096

*=$801

        BYTE    $0B, $08, $0A, $00, $9E, $34, $30, $39, $36, $00, $00, $00
*=$1000 ;#4096

;Posición sprite en coordenadas X=0 e Y=0 de caracteres, en el sprite es X=#24 e Y=#50
;Formula de caracteres a sprites: Xcar*8+24 Ycar*8+50
facarg=$bc0c
intfac=$b391
sum=$b86a
res=$b853
mul=$ba2b
div=$bb12
facind=$bc9b
msb=$d010       ;Activar >255 sprites
posprites=$D000
spena=$D015
Posmemspr=$07f8 ;#2040

Xcar0=#19        ;Coordenada X coche 0 (el prota) 28*8=224 +24 de correccion=248.
                 ;Es el máximo sin tener que activar el msb
Ycar0=#00        ;Coordenada Y coche 0 (elprota)

;Posicionando y conectando sprites
        lda #1
        sta spena      ;Conecta sprite 0
        lda #50
        sta posprites+1 ;CoordY
        lda #192+2      ;#12288
        sta Posmemspr   ;Sprite en memoria
loop                    ;Inutil de momento, solo se ejecuta una vez
   
        lda #00         ;Desactiva el msb antes del cálculo
        sta msb         ;es mejorable, solo es para la prueba.

;Multiplicando la coordenada X en caracteres para conseguir la coordenada X del sprite:
;Vale también para la coordenada Y. De hecho, se llamará a esta rutina para calcular
;cada eje de cada coche.

;ACU y Registro Y se pueden cargar antes de llamar a esta rutina. Aqui los cargo a
;continuación para las pruebas.

        lda #00         ;HIBYTE  LoHi Es 0 por que va de 0 a 0 XD
        ldy #Xcar0      ;LOBYTE ;00XX coordenada X coche Va de 0 al 39
        jsr intfac      ;
        jsr facarg      ;
        lda #00         ;HIBYTE LoHi
        ldy #08         ;LOBYTE 0008 X8
        jsr intfac
        jsr mul         ;Resultado en $64 y $65 HIBYTE y LOBYTE respectivamente
        jsr facind
        lda $64         ;Resultado HI de multiplicar Xcar x 8 bits
        ldy $65         ;Resultado LO de multiplicar Xcar x 8 bits
        jsr intfac
        jsr facarg
        lda #00         
        ldy #24         ;Corrección de la posición del sprite , ya que coordnada
                        ;X o Y con valor 0, queda detrás del borde de la pantalla.

        jsr intfac
        jsr sum
        jsr facind
        ldy $65
        clc             ;Por si acaso XD
        lda $64         ;Si el numero calculado sobrepasa los 255, el Hibyte no sera 0
        beq sigue1      ;Si es cero, pasa de activar el msb
        lda #01         ;Si es > de 0 , pasa a activar el msb
        sta msb

sigue1  sty posprites ;posprites   ;
        rts             ;Vuelta al basic


*=$3000 ;#12288  12288/64=192 primer sprite
; Derecha
 BYTE 0,0,0
 BYTE 118,0,0
 BYTE 32,0,0
 BYTE 63,0,0
 BYTE 63,0,0
 BYTE 32,0,0
 BYTE 118,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0,0

; Izquierda
 BYTE 0,0,0
 BYTE 110,0,0
 BYTE 4,0,0
 BYTE 252,0,0
 BYTE 252,0,0
 BYTE 4,0,0
 BYTE 110,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0,0

; Abajo
 BYTE 0,0,0
 BYTE 66,0,0
 BYTE 126,0,0
 BYTE 90,0,0
 BYTE 24,0,0
 BYTE 90,0,0
 BYTE 90,0,0
 BYTE 24,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0,0

; Arriba
 BYTE 24,0,0
 BYTE 90,0,0
 BYTE 90,0,0
 BYTE 24,0,0
 BYTE 90,0,0
 BYTE 126,0,0
 BYTE 66,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0
 BYTE 0,0,0,0

LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #3 en: Enero 07, 2016, 12:48:41 »
Animos con el proyecto!!

Los.colores son un poco... Emmm...

Jajajaj, puntilloso!!!
El original era de colores sencillos y básicos como ese.
De todas maneras, esto es un ejercicio de re aprendizaje para mi y una ayuda a todo aquel que deseé empezar con el ensamblador. 

Como he dicho, iré poniéndolo paso a paso. Iré añadiendo consejos , ayudas y mejoras a medida que se vaya avanzando.

No he puesto nada aún en el mapa de memoria de colores de pantalla.
Lo más probable es que acabe usando caracteres programables y entonces, haré mapas de colores.
« última modificación: Enero 07, 2016, 20:27:47 por Maniako »
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #4 en: Enero 07, 2016, 13:10:44 »
Aquí tengo ya la rutina de copiar en pantalla las pistas donde se "competirá" contra los malosos.

Como podéis notar, al tener cada pantalla 1000 caracteres, se tiene que utilizar el direccionado ZERO PAGE. Puede parecer magia negra, pero es muy sencilla de usar para manejarse con números de 16 bit.
Por poner un ejemplo, $0400 (#1024) es la primera zona de memoria de la pantalla, un poke 1024,81 mostrará un punto arriba a la izquierda.

Este número, para poder trabajarlo para que nuestro commodore lo entienda , se divide en HIBYTE y LOBYTE.

$04 es el HIBYTE (bit mas significativo) y $00 seria el LOBYTE (bit menos significativo).

Para mostrar las pantallas, solo hay que cargar las direcciones desde donde leerla, las de mostrar en pantalla siempre son las mismas. Eso se hará con unas tablas y leyéndolas cuando toque. En esta rutina, de momento hacedlo manualmente para ir jugando con ella.

Para no complicarme la vida, podéis ver que he usado $FF para indicarle a la rutina que ya ha terminado de mostrar la pista y que devuelva el control a quién se lo dio.

Observad que voy aumentando el LOBYTE de cada zona y solo cuando se desborda (vuelve a 0), aumenta el HIBYTE.

Desbordar... lo que me gusta con las copas de bebida cuando estoy en la disco!!!
Pero no, en CM, desbordar significa que pasas de los valores permitidos en un bit.
Como sabéis, solo podéis pokear valores del 0 a 255, si ponéis numeros negativos o mayores de 255, os aparece un error.
 
En CM, si sumas 1 a 255, pasa a ser 0 pero con alteraciones en el REGISTRO DE ESTADO que podéis usar para detectar estas cosas y usarlas a vuestro favor.
Si le restáis 1 a 0, pasa a ser 255 y pasa lo antes explicado.
Yo uso el paso por cero para aumentar el HIBYTE.


Código: [Seleccionar]
;Creado en CBM prg STUDIO 3.6.0
;Este comprueba si el valor leido es $FF.
;Si o es, sabe que ha terminado de leer la pantalla y
;devuelve al programa.

; 10 SYS (4096)

*=$801

        BYTE    $0E, $08, $0A, $00, $9E, $20, $28,  $34, $30, $39, $36, $29, $00, $00, $00

*=$1000
        lda #08
        sta $d021
        sta $d020

        lda #$00        ;LO Primera pantalla a leer $4000.
        sta $FB         ;Lobyte leer caracter.
        lda #$40        ;HI Primera pantalla a leer $4000.
        sta $FC         ;Hibyte leer caracter.
        lda #$00        ;LO memoria de pantalla $0400.
        sta $FD         ;Lobyte escibir caracter.
        lda #$04        ;HI memoria de pantalla $0400.
        sta $FE         ;Hibyte escribir caracter.
        ldy #00         ;Y a 0. Necesario pero en este caso inutil.
loop1
        lda ($FB),y     ;Lectura datos pista.
        cmp #$FF        ;Si es FF, se acabo el ponerla en pantalla
        beq seacabo     ;y se vuelve al programa.
        sta ($FD),y     ;Pokea caracter leido en pantalla.
        inc $FB         ;Aumenta en 1 el lobyte lectura.
        bne pasa1       ;Si no desborda, sigue a lo suyo.
        inc $FC         ;Si desbordaba, aumenta en 1 el HIBYTE.
       
pasa1
        clc
        inc $FD         ;Aumenta en 1 el LOBYTE de escritura.
        bne pasa2       ;Si no desborda, sigue a lo suyo.
        inc $FE         ;Aumenta en 1 el HIBYTE de escritura.
pasa2   
        jmp loop1
seacabo
        rts
       
;PANTALLAS DEL JUEGO
 
*=$4000
; Screen 1 -    $4000
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$49,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$37,$33,$32,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$38,$38,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$4B,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$ff
; Screen 2 -    $43E8
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$72,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$2E,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$40,$40,$40,$40,$49,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$49,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$37,$33,$32,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$38,$38,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$4B,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$20,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$4B,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$2E,$42,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$43,$71,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$ff
; Screen 3 -    $47D0
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$72,$40,$40,$40,$72,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$42,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$49,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$37,$33,$32,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$38,$38,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$4B,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$20,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$4B,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$2E,$42,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$43,$71,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$ff

LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #5 en: Enero 07, 2016, 20:19:53 »
Se me ha ocurrido que en cada nivel, los 3 primeros caracteres serán los colores de fondo , pantalla y color de los caracteres. Así cada nivel tendrá sus colores particulares.

De momento colores fijos simples, el original es así ;)

Lo que me va a dar quebraderos es el tema de cambiar de carril en los coches enemigos. Pero creo que lo tengo resuelto. Ya iré contándoos.

Aqui un ejemplo.

Código: [Seleccionar]
;Creado en CBM prg STUDIO 3.6.0

;Este comprueba si el valor leido es $FF.
;Si o es, sabe que ha terminado de leer la pantalla y
;devuelve al programa.

; 10 SYS (4096)

*=$801

        BYTE    $0E, $08, $0A, $00, $9E, $20, $28,  $34, $30, $39, $36, $29, $00, $00, $00

*=$1000
             
;Preparando vectores lectura escritura de la pantalla.
        lda #$00        ;LO Primera pantalla a leer $4000.
        sta $FB         ;Lobyte leer caracter.
        lda #$40        ;HI Primera pantalla a leer $4000.
        sta $FC         ;Hibyte leer caracter.
        lda #$00        ;LO memoria de pantalla $0400.
        sta $FD         ;Lobyte escibir caracter.
        lda #$04        ;HI memoria de pantalla $0400.
        sta $FE         ;Hibyte escribir caracter.
        ldy #00         ;Y a 0. Necesario pero en este caso inutil.

;Leyendo los 3 primeros datos que soncolores de: fondo, marco y caracteres
        lda ($fb),y     ;Leer color fondo.
        sta $d021
        inc $fb
        lda ($fb),y     ;Leer color marco.
        sta $d020
        inc $fb
        lda ($fb),y     ;Leer color de los caracteres.
        jsr $AB47       ;Imprimir como chr$. CHR$(5)=Blanco
        inc $fb
        lda #147        ;borrar pantalla. CTRL HOME para activar el color de caracteres
        jsr $AB47
 
;Impimir pantalla
loop1
        lda ($FB),y     ;Lectura datos pista.
        cmp #$FF        ;Si es FF, se acabo el ponerla en pantalla
        beq seacabo     ;y se vuelve al programa.
        sta ($FD),y     ;Pokea caracter leido en pantalla.
        inc $FB         ;Aumenta en 1 el lobyte lectura.
        bne pasa1       ;Si no desborda, sigue a lo suyo.
        inc $FC         ;Si desbordaba, aumenta en 1 el HIBYTE.
       
pasa1
        clc
        inc $FD         ;Aumenta en 1 el LOBYTE de escritura.
        bne pasa2       ;Si no desborda, sigue a lo suyo.
        inc $FE         ;Aumenta en 1 el HIBYTE de escritura.
pasa2   
        jmp loop1
seacabo
        rts

*=$4000
; Presentación Screen 0 -
        BYTE    $00,$00,$05     ;Fondo y marco negro. Pistas en blanco, valor en CHR$.
        BYTE    $55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$42
        BYTE    $42,$20,$20,$55,$20,$49,$55,$40,$49,$55,$40,$49,$55,$4D,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$42
        BYTE    $42,$20,$20,$42,$20,$42,$42,$20,$20,$42,$20,$42,$42,$4D,$4D,$20,$20,$20,$20,$42,$20,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20,$42,$42
        BYTE    $42,$20,$20,$6B,$40,$73,$6B,$40,$73,$6B,$43,$73,$42,$20,$76,$20,$20,$20,$20,$42,$20,$42,$04,$05,$20,$0D,$01,$0E,$09,$01,$0B,$0F,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$42,$20,$42,$42,$20,$20,$42,$20,$42,$42,$4E,$4E,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$4A,$20,$4B,$4A,$40,$4B,$4A,$20,$4B,$4A,$4E,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$10,$01,$12,$01,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$55,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20,$55,$40,$49,$55,$20,$49,$20,$42,$20,$42,$03,$0F,$0D,$0D,$0F,$04,$0F,$12,$05,$0D,$01,$0E,$09,$01,$42,$20,$42,$42
        BYTE    $42,$42,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$20,$42,$42,$65,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$55,$40,$40,$40,$40,$49,$20,$42,$20,$42,$20,$42,$42,$42,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$42,$20,$42,$20,$42,$42,$67,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$42,$20,$4A,$40,$4B,$4A,$20,$4B,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$42,$42
        BYTE    $42,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$42
        BYTE    $42,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$42
        BYTE    $4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$FF
« última modificación: Enero 07, 2016, 20:25:21 por Maniako »
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #6 en: Enero 10, 2016, 12:41:35 »
Añadidas alguna "mejoras".
Añado prg para echaros unas risas XD

Con los cambios intento que, cuando termine el programa, pueda reorganizar las zonas de memoria que ocupa cada cosa sin tener que teclear cambiando un montón de direcciones.

Pulsando el disparo van pasando las pantallas o niveles. Puedo poner 251 niveles mas. Pero conuno o dos mas va sobrado.
Código: [Seleccionar]
;Creado en CBM prg STUDIO 3.6.0

;Este comprueba si el valor leido es $FF.
;Si o es, sabe que ha terminado de leer la pantalla y
;devuelve al programa.

; 10 SYS (4096)

*=$801

        BYTE    $0E, $08, $0A, $00, $9E, $20, $28,  $34, $30, $39, $36, $29, $00, $00, $00


facarg=$bc0c
intfac=$b391
sum=$b86a
res=$b853
mul=$ba2b
div=$bb12
facind=$bc9b
msb=$d010       ;Activar >255 sprites
posprites=$D000
spena=$D015
Posmemspr=$07f8 ;#2040
Joy2= $DC00
nivel=$2F00     ;Variables programa

*=$1000

;Aqui empieza el menú y espera que dispares
        lda #00         ;Poner variable niveles a 0
        sta nivel       ;Primera carga presentacion.

levels  lda nivel       ;Nivel actual
        rol             ;X2
        tax             ;X=ACU
        lda vectpant,x  ;Direccion de la pantalla según el nivel
        sta $FC         ;HI
        inx             ;Vamos a leer la segunda direccion.
        lda vectpant,x  ;Leyendola.
        sta $FB         ;LO
        jsr mostrar     ;muestra la pantalla segun el nivel.
loop2   lda joy2        ;Leer joy puerto2
        sbc #101        ;Restale #101
        and #16         ;¿Es disparo?
        beq salida      ;Si. Al juego
        jmp loop2       ;No, a leer joy otra vez.
;Empieza el juego en si.

salida  inc nivel       ;Borar todo esto, es solo la prueba
        lda nivel
        cmp #04
        bne loop3
        lda#00
        sta nivel
loop3   lda Joy2        ;para mostar los niveles
        cmp #127        ;al disparar. Esta rutina espera a
        bne loop3       ;soltar el disparo para seguir
        clc             ;al comparar, se activa el flac carry y hay que
        jmp levels      ;resetaerlo
         
;MOSTRAR PANTALLA.
mostrar ;lda #<pantallas ;LOBYTE pantalla a leer.
        ;sta $FB         ;Lobyte leer caracter.
        ;lda #>pantallas ;HIBYTE pantalla a leer.
        ;sta $FC         ;Hibyte leer caracter.
        lda #$00        ;LO memoria de pantalla $0400.
        sta $FD         ;Lobyte escibir caracter.
        lda #$04        ;HI memoria de pantalla $0400.
        sta $FE         ;Hibyte escribir caracter.
        ldy #00         ;Y a 0. Necesario pero en este caso inutil.

;Leyendo los 3 primeros datos que soncolores de: fondo, marco y caracteres
        lda ($fb),y     ;Leer color fondo.
        sta $d021
        inc $fb
        lda ($fb),y     ;Leer color marco.
        sta $d020
        inc $fb
        lda ($fb),y     ;Leer color de los caracteres.
        jsr $AB47       ;Imprimir como chr$. CHR$(5)=Blanco
        inc $fb
        lda #147        ;borrar pantalla. CTRL HOME para activar el color de caracteres
        jsr $AB47
 
;Impimir pantalla
loop1
        lda ($FB),y     ;Lectura datos pista.
        cmp #$FF        ;Si es FF, se acabo el ponerla en pantalla
        beq seacabo     ;y se vuelve al programa.
        sta ($FD),y     ;Pokea caracter leido en pantalla.
        inc $FB         ;Aumenta en 1 el lobyte lectura.
        bne pasa1       ;Si no desborda, sigue a lo suyo.
        inc $FC         ;Si desbordaba, aumenta en 1 el HIBYTE.
       
pasa1
        clc
        inc $FD         ;Aumenta en 1 el LOBYTE de escritura.
        bne pasa2       ;Si no desborda, sigue a lo suyo.
        inc $FE         ;Aumenta en 1 el HIBYTE de escritura.
pasa2   
        jmp loop1
seacabo
        rts
*=$2f00         ;Variables en memoria.$2F00-2FFF para cosas variadas XD

*=$3000         ;Tablas fijas
vectpant        BYTE    $40,$00         ;Presentacion
                BYTE    $43,$EC         ;Primer nivel
                BYTE    $47,$D8         ;Segundo nivel
                BYTE    $4b,$c4         ;Tercer nivel

*=$4000         ;Pantallas
pantallas
; Presentación Screen 0 - $4000
        BYTE    $0E,$0E,$05     ;Fondo y marco negro. Pistas en blanco, valor en CHR$.
        BYTE    $55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$42
        BYTE    $42,$20,$20,$55,$20,$49,$55,$40,$49,$55,$40,$49,$55,$4D,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$42
        BYTE    $42,$20,$20,$42,$20,$42,$42,$20,$20,$42,$20,$42,$42,$4D,$4D,$20,$20,$20,$20,$42,$20,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20,$42,$42
        BYTE    $42,$20,$20,$6B,$40,$73,$6B,$40,$73,$6B,$43,$73,$42,$20,$76,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$0D,$01,$0E,$09,$01,$0B,$0F,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$42,$20,$42,$42,$20,$20,$42,$20,$42,$42,$4E,$4E,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$4A,$20,$4B,$4A,$40,$4B,$4A,$20,$4B,$4A,$4E,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$10,$01,$12,$01,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$55,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20,$55,$40,$49,$55,$20,$49,$20,$42,$20,$42,$03,$0F,$0D,$0D,$0F,$04,$0F,$12,$05,$0D,$01,$0E,$09,$01,$42,$20,$42,$42
        BYTE    $42,$42,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$20,$42,$42,$65,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$55,$40,$40,$40,$40,$49,$20,$42,$20,$42,$20,$42,$42,$42,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$42,$20,$42,$20,$42,$42,$67,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$42,$20,$4A,$40,$4B,$4A,$20,$4B,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$3E,$0A,$0F,$19,$13,$14,$09,$03,$0B,$20,$05,$0E,$20,$10,$0F,$12,$14,$20,$32,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$3E,$04,$09,$13,$10,$01,$12,$01,$20,$10,$01,$12,$01,$20,$05,$0D,$10,$05,$1A,$01,$12,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$42,$42
        BYTE    $42,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$42
        BYTE    $42,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$42
        BYTE    $4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$FF
; Screen 1 -            $43EC
        BYTE    $06,$06,$05     ;Fondo y marco negro. Pistas en blanco, valor en CHR$.
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$49,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$4B,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$ff
; Screen 2 -            $47D8
        BYTE    $00,$00,$05     ;Fondo y marco negro. Pistas en blanco, valor en CHR$.
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$72,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$2E,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$40,$40,$40,$40,$49,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$49,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$4B,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$20,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$4B,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$2E,$42,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$43,$71,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$ff
; Screen 3 -            $4BC4
        BYTE    $07,$07,$90     ;Fondo y marco negro. Pistas en blanco, valor en CHR$.
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$72,$40,$40,$40,$72,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$42,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$49,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$4B,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$20,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$4B,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$2E,$42,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$43,$71,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$ff

LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #7 en: Enero 10, 2016, 22:10:41 »
Hey! tiene buena pinta!
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

kikems

  • Commodore Master
  • *****
  • Mensajes: 307
  • DQuest ha borrado mi despedida, gracias a todos.
    • Ver Perfil
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #8 en: Enero 11, 2016, 12:16:18 »
La verdad que se te ve manejando el CM como si fuera algo sencillo, jejj.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o un intento ).
« Respuesta #9 en: Enero 11, 2016, 12:28:42 »
Intento que sea jugable y "vistoso".  :D

@kikems:

Es "sencillo" aprender CM, pero lioso a la hora de hacer un programa modulable.

En mi firma verás el primer programa que se solía hacer cuando aprendías a usar ensambladores o monitores.

Mi intención al crear este hilo, a parte de motivarme de una vez a hacer algo  ;D, es la de animar al personal a empezar a trastear en CM.

Iré poniendo los avances que vaya haciendo en el código siempre intentando explicarlo dentro de mis limitadas posibilidades. Se como hago que funcione, pero explicarlo, a veces, para mi es más difícil que hacerlo.
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o intento de crear un juego).
« Respuesta #10 en: Junio 21, 2016, 10:01:35 »
Pufff... lo tengo abandonadisimo y mira que le tengo ganas a este proyecto.

A ver si en estas vacaciones le puedo dedicar algo de tiempo.
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Programa en código máquina desde cero (o intento de crear un juego).
« Respuesta #11 en: Junio 21, 2016, 12:41:40 »
Si es que te distraen constantemente con otras cosas!
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o intento de crear un juego).
« Respuesta #12 en: Junio 21, 2016, 13:35:45 »
Si es que te distraen constantemente con otras cosas!

¿Como lo sabes?  :o
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Programa en código máquina desde cero (o intento de crear un juego).
« Respuesta #13 en: Junio 21, 2016, 13:44:01 »
Tengo un ceksto centido...
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Maniako

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 1008
  • SYS 8*4096
    • Ver Perfil
Re:Programa en código máquina desde cero (o intento de crear un juego).
« Respuesta #14 en: Julio 16, 2017, 21:28:13 »
Un año y 7 meses después, por fín he sacado tiempo libre para tratar de retomar este proyecto casi olvidado.
He hecho la parte del menú añadiendole "vehiculos" que circulan siguiendo el circuito.
En la versión final no se verán puntitos XD, se verán coches formados por sprites que irán moviendose pixel a pixel siguiendo a esos puntos, de caracter a caracter.

El código puede optimizarse , es la primera versión un poco "bruta", pero la cuelgo igualmente para el que quiera echarle un ojo.

Código: [Seleccionar]
;CBM PRG STUDIO 3.10.0

;CONSTANTES:
facarg=$bc0c
intfac=$b391
sum=$b86a
res=$b853
mul=$ba2b
div=$bb12
facind=$bc9b
msb=$d010       ;Activar >255 sprites
posprites=$D000
spena=$D015
Posmemspr=$07f8 ;#2040
Joy2= $DC00
nivel=$2F00     ;Variables programa

; 10 SYS (4096)

*=$0801

        BYTE    $0E, $08, $0A, $00, $9E, $20, $28,  $34, $30, $39, $36, $29, $00, $00, $00

;*******************************************************************************
;*******************************************************************************

*=$1000
;*******************************************************************************
;*******************************************************************************
;Arranque del juego. Puesta a cero de variables:
;LECTURA DE PANTALLAS.         
;Puesta a cero de lectura de niveles.
        lda #<SCR       ;Lo Lectura pantallas
        sta Lect0+1
        lda #>SCR       ;Hi lectura pantallas
        sta Lect0+2
;Puesta a cero posiciones coches por nivel.
        lda #<COORNIV   
        sta Lect1+1     ;LO
        lda #>COORNIV
        sta Lect1+2     ;HI

;Copiar pistas y Coordenadas de los coches
        jsr mostrar     ;Mostar niveles
        jsr NivCoch     ;Copiar variables coches (copia según nivel).

;Prueba de movimiento de coordenadas.

Decero;  clc
        ldx #03
        stx RegX

loop1
;Guardando coordenadas para su recuperación en caso de colisión.
        ldx RegX
        lda CoorX,x
        sta TempX
        lda CoorY,x
        sta TempY
;Moviendo a nuevas coordenadas
        jsr MOVER
;Calcular vectores pantalla 16 bit.
        jsr CHECK
;¿Hay obstáculo?
        jsr Quehay
;Pokea un punto para saber por donde navegan las coordenadas.
        ldx RegX
        ldy CoorX,x
        lda #81
        sta ($FB),y
;Bucle de freno para tener tiempo de ver lo que ocurre XD
        ldx #25
lop1    ldy #255
lop2    dey
        bne lop2
        dex
        bne lop1
;Pokea un espacio para borrar punto.
        ldx RegX
        ldy CoorX,x
        lda  #32   ; #32
        sta ($FB),y

        dec RegX
        bmi Decero
        jmp loop1
;===================================SUBRUTINAS==================================       
;===================================MOVER COCHES X e Y
MOVER
        ldx RegX
Bucle0  lda Dir,x
        beq Der
        cmp #01
        beq Arr
        cmp #02
        beq Izq
        cmp #03
        beq Abaj
;-------
Der     Inc CoorX,x
        jmp sigue0     
;-------
Izq     dec CoorX,x
        jmp sigue0
;-------
Arr     dec CoorY,x
        jmp sigue0
;-------
Abaj    inc CoorY,x
Sigue0  rts
;===================================CHECK.
;Calcula las coordenadas X e Y y carga en ACU lo que haya debajo.
CHECK   
        ldx RegX         
        lda #00         ;HI
        ldy CoorY,x     ;LO coordenada Y de cada coche
        jsr intfac
        jsr facarg
        lda #00         ;HI
        ldy #40         ;LO * #40
        jsr intfac
        jsr mul
        jsr facind
        lda $64         ;LO
        ldy $65         ;HI resultado de CoordY*40
        jsr intfac
        jsr facarg
        lda #04         ;HI
        ldy #00         ;LO sumar resultado por #1024
        jsr intfac
        jsr sum
        jsr facind
        lda $64         ;LO
        ldy $65         ;HI
        sty $FB         ;LO
        sta $FC         ;HI
        ldx RegX        ;Recupernado el valor de X de antes de multiplicar.
        ldy CoorX,x
        lda ($FB),y     ;Peek(1024+(Y*40)+X)
        clc
        rts
;===================================QUE HAY.
Quehay          ;Aquí llega con el valor a comprobar en el ACU.
        cmp #32
        bne paso2
        rts
paso2
        cmp #66         ;Obstaculo |
        bne paso3
        jsr Recor
        jsr CdirXtoY
        rts
paso3
        cmp #64         ;Obstaculo -
        bne paso4
        jsr Recor
        jsr CdirYtoX
        rts
paso4
        rts             ;Volviendo sin nada o futuras ampiaciones del juego.
;Recupera antiguas coordenadas y las recalcula para ceropage.
Recor       
        ldx RegX
        lda TempX
        sta CoorX,x
        lda TempY
        sta CoorY,x
        jsr CHECK
        rts
;===================================CAMBIODIR.
CdirXtoY                ;Cambia dirección de X a Y
        ldx RegX
        lda CoorY,x
        sta TempY       ;GUardando Y
        inc CoorY,x         ;Chequear una posición por debajo.
        jsr CHECK       ;Recalcular coord 16 bit.
        cmp #64
        beq paso5

        lda #03         ;Abajo
        sta Dir,x
        inc TempY
        jmp Recor       ;Cambia direccion y recupera 16 bit
paso5
        dec TempY

       
        lda #01         ;Arriba
        sta Dir,x
        jmp Recor       ;Cambia direccion y recupera 16 bit

       
CdirYtoX 
        ldx RegX
        lda CoorX,x
        sta TempX       ;GUardando Y
        inc CoorX,x         ;Chequear una posición a la derecha.
        jsr CHECK       ;Recalcular coord 16 bit.
        cmp #66
        beq paso6

        lda #00         ;Der
        sta Dir,x
        inc TempX
        jmp Recor       ;Cambia direccion y recupera 16 bit
paso6

        dec Tempx
     

        lda #02         ;Izq
        sta Dir,x
        jmp Recor       ;Cambia direccion y recupera 16 bit

        rts

;===================================MOSTRAR PANTALLAS.
mostrar
;Lectura colores pantallas:
        jsr Leer
        sta $d021       ;Color Fondo.
        jsr Leer
        sta $d020       ;Color marco.
        jsr Leer
        jsr $ab47       ;Color caracteres.
        lda #147        ;CHR$ CLR screen
        jsr $ab47       ;Para que se muestren del color deseado. Ahorro RAM color.
        jsr Leer
        sta spena       ;Conecta los sprites que van a verse.

;Siempre puesta a cero de ESCRITURA Ram pantalla.
        lda #00
        sta Escr0+1     ;Lo Escritura RAM pantalla
        lda #04
        sta Escr0+2     ;Hi Escritura RAM pantalla
;Copiar 1000 chars a pantalla.
loop0   jsr Leer        ;Leyendo datos pantallas.
        cmp #255
        clc
        beq fin0        ;Si=Adios
Escr0   sta $ffff       ;No importa el valor. Tendrá el correcto.
        inc Escr0+1     ;Aumento en 1 el LOBYTE escritura.
        bne paso1
        inc Escr0+2     ;Aumento en 1 el HIBYtE escritura.
paso1   jmp loop0
fin0    rts
;===================================LEER.
Leer            ;Lectura de niveles.
Lect0   lda $ffff       ;No importa el valor. Tendrá el correcto.
Ajuste  inc Lect0+1     ;Aumento en 1 el LOBYTE lectura.
        bne paso0
        inc Lect0+2          ;Hi
paso0   rts
;===================================COPIAR VARIABLES COCHES SEGUN NIVEL.
NIVCOCH ldy #00
Lect1   lda $ffff
        cmp #255
        beq fin2
        clc
        sta CoorX,y
        inc Lect1+1
        bne paso9
        inc Lect1+2
paso9   iny
        jmp Lect1
fin2    rts       


;*******************************************************************************
;EMPIEZA LA ZONA DE VARIABLES
;*******************************************************************************
CoorX   BYTE    $00,$00,$00,$00         ;Coordenadas X de los coches
CoorY   BYTE    $00,$00,$00,$00         ;Coordenadas Y de los coches
Dir     BYTE    $00,$00,$00,$00         ;Direcciones de cada coche.0-3

TempX   BYTE    $00                     ;Cache coordenada X para recuperar
TempY   BYTE    $00                     ;Cache coordenada Y para recuperar
Borra   BYTE    $00                     ;Permiso para borrar el punto.
RegX    BYTE    $00                     ;Guarda el registro X
;*******************************************************************************
;Coches por nivel
COORNIV         ;X,Y y DIRECCION

        ;        X0  X1  X2  X3  Y0  Y1  Y2  Y3  D0  D1  D2  D3
        BYTE    $02,$02,$25,$1d,$09,$16,$16,$02,$00,$01,$02,$00,$ff     ;Presentacion
        BYTE    $0c,$0c,$01,$17,$17,$01,$0c,$0c,$00,$02,$01,$01,$ff     ;Niv1
        BYTE    $0c,$0c,$01,$17,$17,$01,$0c,$0c,$00,$02,$01,$01,$ff     ;Niv2
        BYTE    $0c,$0c,$01,$17,$17,$01,$0c,$0c,$00,$02,$01,$01,$ff     ;Niv3

;*******************************************************************************
;*******************************************************************************
;*******************************************************************************

;*******************************************************************************
;Pantallas
*=$3000
SCR
        BYTE    $0E,$0E,$05,$03  ;Fondo, marco, pistas,sprites conectados
        BYTE    $55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$42
        BYTE    $42,$20,$20,$55,$20,$49,$55,$40,$49,$55,$40,$49,$55,$4D,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$42
        BYTE    $42,$20,$20,$42,$20,$42,$42,$20,$20,$42,$20,$42,$42,$4D,$4D,$20,$20,$20,$20,$42,$20,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20,$42,$42
        BYTE    $42,$20,$20,$6B,$40,$73,$6B,$40,$73,$6B,$43,$73,$42,$20,$76,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$0D,$01,$0E,$09,$01,$0B,$0F,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$42,$20,$42,$42,$20,$20,$42,$20,$42,$42,$4E,$4E,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$4A,$20,$4B,$4A,$40,$4B,$4A,$20,$4B,$4A,$4E,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$10,$01,$12,$01,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$55,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20,$55,$40,$49,$55,$20,$49,$20,$42,$20,$42,$03,$0F,$0D,$0D,$0F,$04,$0F,$12,$05,$0D,$01,$0E,$09,$01,$42,$20,$42,$42
        BYTE    $42,$42,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$20,$42,$42,$65,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$55,$40,$40,$40,$40,$49,$20,$42,$20,$42,$20,$42,$42,$42,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$42,$20,$42,$20,$42,$42,$67,$42,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$42,$20,$4A,$40,$4B,$4A,$20,$4B,$20,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$3E,$0A,$0F,$19,$13,$14,$09,$03,$0B,$20,$05,$0E,$20,$10,$0F,$12,$14,$20,$32,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$3E,$04,$09,$13,$10,$01,$12,$01,$20,$10,$01,$12,$01,$20,$05,$0D,$10,$05,$1A,$01,$12,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$20,$42,$42
        BYTE    $42,$42,$20,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$42,$42
        BYTE    $42,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$42,$42
        BYTE    $42,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$42
        BYTE    $4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$ff
; Screen 1
        BYTE    $06,$06,$05,$03     ;Fondo, marco, pistas,sprites conectados
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$49,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$4B,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$ff
; Screen 2
        BYTE    $00,$00,$05,$07     ;Fondo, marco, pistas,sprites conectados
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$72,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$2E,$55,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$40,$40,$40,$40,$49,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$49,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$4B,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$20,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$4B,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$2E,$42,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$43,$71,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$ff
; Screen 3
        BYTE    $07,$07,$90,$07     ;Fondo, marco, pistas,sprites conectados
        BYTE    $55,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$72,$40,$40,$40,$72,$40,$40,$40,$40,$40,$40,$40,$40,$40,$49,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$42,$20
        BYTE    $42,$2E,$55,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$40,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$40,$49,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$55,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$55,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$55,$43,$40,$40,$40,$40,$40,$43,$49,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$10,$15,$0E,$14,$0F,$13,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$07,$01,$13,$0F,$06,$01,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$30,$30,$30,$30,$30,$20,$42,$20,$20,$20,$20,$20,$20,$20,$42,$20,$20,$20,$20,$20,$42,$20,$42,$20,$20,$20,$20,$20,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$20,$20,$20,$20,$20,$20,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$43,$40,$40,$40,$40,$40,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$20,$42,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$4A,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$4B,$2E,$42,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$42,$20,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$4A,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$42,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$4B,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$42,$20
        BYTE    $42,$2E,$4A,$43,$43,$43,$43,$43,$43,$43,$20,$20,$20,$20,$20,$43,$43,$43,$43,$43,$43,$43,$4B,$2E,$42,$2E,$4A,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$2E,$42,$20
        BYTE    $42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$20,$20,$20,$20,$20,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$2E,$42,$20
        BYTE    $4A,$43,$43,$43,$43,$43,$43,$43,$43,$43,$40,$40,$40,$40,$40,$43,$43,$43,$43,$43,$43,$43,$43,$43,$71,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$40,$4B,$20,$ff


Comento algúnas cosas.
Espero ser capáz de explicame de manera comprensiva, soy mal profesor XD.

Estoy usando subrutinas a porrillo para hacer el código algo más comprensible.

Para los niveles, incluida la presentación, incluyo antes de cada nivel los datos de colores de fondo,marco,pistas y sprites conectados que habrá en ese nivel.
Utilizo rutinas del kernel  $AB47 que imprime el caracter CHR$ que necesites.
Para cambiar los colores de las pistas, primero selecciono el color CHR$(xx) y después el CHR$(147) que es CLR, limpia la pantalla y así, todos los carácteres tendrán el nuevo color, así me ahorro tocar la RAM color.

Mi idea es que siempre se muevan los 4 coches pero que simplemente apagando los sprites innecesarios se pueda varial el nivél de dificultad.

Los 4 "coches" se mueven usando un bucle y tablas de coordenadas variables. De está manera, teoricamente se podrian llegar a manejar 255 "objetos" sin enormes cantidades de código, pero demasiado LOOP ralentiza la ejecución del programa.

Las pantallas se muestran secuencialmente. Cada vez que llamo a la rutina, automáticamente se mostrará la siguiente pantalla o nivél. Lo mismo para las coordenadas de los vehiculos para cada nivél y las futuras ampliaciones.

Lo consigo variando directamente los vectores de lectura/escritura en el propio código.
Por ejemplo:
____________________________________________________________________________________
                     LDA #<pantallas      Se carga con el LOBYTE donde estén los niveles
                     STA Lectura+1         y lo guarda como LOBYTE de Lectura
                     LDA #>pantallas     Se carga con el HIBYTE donde estén los niveles.
                     STA Lectura+2         y lo guarda como HIBYTE de lectura.
Lo mismo para Escritura, en este caso $0400 que es RAM pantalla.
..............................

Lectura         LDA $4000
Escritura       STA $0400
                     INC lectura+1   Aumento el LOBYTE de $4000, pasa a ser $4001
                     BNE paso1        si no es=0, saltar el ajuste de HIBYTE
                     INC lectura+2   Aumenta el HIBYTE. De $4000, pasa a 4100.
paso1
                     INC Escritura+1
etc............
Lo mismo para Escritura. Solo hay que tener en cuenta resetear esos vectores cada vez que el juego empiece de cero y la escritura cada vez que se vaya a usar.
Si veís el código, esos vectores los tengo como $FFFF. No importa el valor que pongáis, al arrancar el juego, los pongo a sus valores correctos.
Para saber cuando termina el bucle de lectura/escritura, reviso el valor leido, si es 255, se termina de leer y se sale del bucle.

*$4000
pantallas      BYTE $00,$44,$55,$32,....etc
____________________________________________________________________________________

Si queréis preguntar algo, adelante. Trataré de explicarme lo mejor que pueda  ;)
Regresaré de aquí a 1 año y 7 meses  ;D ;D ;D
« última modificación: Julio 16, 2017, 21:32:22 por Maniako »
LDA #$50
STA $0400
RTS
Lloré cuando conseguí hacer esto con el monitor del FC1.