Ahí te tiro un pedazo de código de ayuda para que trastees con el. De todas formas, es un ejemplo en SCREEN 2,2 y no te dejará todo claro: te recomiendo que, como bien ha dicho pitpan, tras tontear con este código busques después información detallada de los sprites en alguno de los libros técnicos que hay por ahí (para que te explique, por ejemplo, cómo funcionar con otros modos de sprites, o cómo manipular el EC bit que se encuentra en el dato de color para hacer que tus sprites desaparezcan por la izquierda, etc).
En fin, al menos tienes algo para trastear. Lo único que hace es cambiar el modo de pantalla, definir los gráficos de 2 patrones y después mostrarlos en pantalla. Espero que te sirva para arrancar!
;---------------------------------------------------------------------------
; CONSTANTES
;---------------------------------------------------------------------------
; Posiciones VRAM
SPRTBL equ $3800
SPRATR equ $1b00
;---------------------------------------------------------------------------
; Posiciones RAM
FORCLR equ $f3e9
CLIKSW equ $f3db
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
; PROGRAMA PRINCIPAL
;---------------------------------------------------------------------------
INICIO:
; **** primero, cambiamos el modo de video y el color ****
; -------- color 15,1,1
ld hl,FORCLR
ld [hl],15 ; color 15 (foregrond)
inc hl
ld [hl],1 ; color ,1 (background)
inc hl
ld [hl],1 ; color ,,1 (border)
; -------- screen 2,0,0
call INIGRP ; screen 2 (modo de video 2)
ld bc,$0e201
call WRTVDP ; screen ,2 (sprites de 16x16)
xor a
ld [CLIKSW],a ; screen ,,0 (desactivo keyclick)
; **** ahora redefinimos el dibujo de dos sprites de 16x16 ****
ld hl,SPRITES_GRAFICOS ; copiamos los datos desde SPRITES_GRAFICOS
ld de,SPRTBL ; a la zona de VRAM de patrones de sprites
ld bc,32*2 ; y la cantidad será 64 bytes
call LDIRVM ; házlo!
; **** ahora redefinimos los atributos de los dos sprites ****
ld hl,SPRITES_ATRIBUTOS ; copiamos los datos desde SPRITES_ATRIBUTOS
ld de,SPRATR ; a la zona de VRAM de atributos de sprites
ld bc,4*2 ; y la cantidad será 8 bytes
call LDIRVM ; házlo!
LOOP_INFINITO:
jp LOOP_INFINITO
;---------------------------------------------------------------------------
; DATOS
;---------------------------------------------------------------------------
SPRITES_GRAFICOS:
; sprite patrón 0 (dibujo del cuadrado enfadado)
db $3f,$40,$80,$80,$80,$80,$80,$80
db $8c,$82,$80,$80,$80,$80,$40,$3f
db $fc,$02,$01,$01,$01,$01,$01,$01
db $31,$41,$01,$01,$01,$01,$02,$fc
; sprite patrón 1 (dibujo del cuadrado contento)
db $3f,$40,$80,$80,$80,$80,$80,$84
db $84,$84,$80,$80,$80,$80,$40,$3f
db $fc,$02,$01,$01,$01,$01,$01,$21
db $21,$21,$01,$01,$01,$01,$02,$fc
SPRITES_ATRIBUTOS:
; Y(-1), X, PATRON*4, COLOR
db 88-1,104,0*4,15
db 88-1,136,1*4,8