; Visualizacion del charset de ejemplo ORG 35000 ld h, 0 ld l, a call ClearScreenAttrib ; Borramos la pantalla ld hl, charset1-256 ; Saltamos los 32 caracteres iniciales ld (FONT_CHARSET), hl xor a ld (FONT_X), a inc a ld (FONT_Y), a ; Empezamos en (0,1) ld a, 6 ld (FONT_ATTRIB), a ; Color amarillo sobre negro ld c, 32 ; Empezamos en caracter 32 ;;; Bucle vertical ld e, 4 bucle_y: ;;; Bucle horizontal ld b, 16 ; Imprimimos 16 caracteres horiz bucle_x: ld a, (FONT_X) inc a ld (FONT_X), a ; X = X + 1 ld a, c push bc push de ; Preservamos registros call PrintChar_8x8 ; Imprimimos el caracter "C" pop de pop bc inc c ; Siguiente caracter djnz bucle_x ; Repetir 16 veces ld a, (FONT_Y) ; Siguiente linea: inc a inc a ; Y = Y + 2 ld (FONT_Y), a xor a ld (FONT_X), a ; X = 0 dec e jr nz, bucle_y ; Repetir 4 veces (16*4=64 caracteres) loop: jr loop ret ;------------------------------------------------------------- FONT_CHARSET DW 0 FONT_ATTRIB DB 0 FONT_X DB 0 FONT_Y DB 0 ;------------------------------------------------------------- ;------------------------------------------------------------- ; PrintChar_8x8: ; Imprime un caracter de 8x8 pixeles de un charset. ; ; Entrada (paso por parametros en memoria): ; ----------------------------------------------------- ; FONT_CHARSET = Direccion de memoria del charset. ; FONT_X = Coordenada X en baja resolucion (0-31) ; FONT_Y = Coordenada Y en baja resolucion (0-23) ; FONT_ATTRIB = Atributo a utilizar en la impresion. ; Registro A = ASCII del caracter a dibujar. ;------------------------------------------------------------- PrintChar_8x8: ld bc, (FONT_X) ; B = Y, C = X ex af, af' ; Nos guardamos el caracter en A' ;;; Calculamos las coordenadas destino de pantalla en DE: ld a, b and $18 add a, $40 ld d, a ld a, b and 7 rrca rrca rrca add a, c ld e, a ; DE contiene ahora la direccion destino. ;;; Calcular posicion origen (array sprites) en HL como: ;;; direccion = base_sprites + (NUM_SPRITE*8) ex af, af' ; Recuperamos el caracter a dibujar de A' ld bc, (FONT_CHARSET) ld h, 0 ld l, a add hl, hl add hl, hl add hl, hl add hl, bc ; HL = BC + HL = FONT_CHARSET + (A * 8) ex de, hl ; Intercambiamos DE y HL (DE=origen, HL=destino) ;;; Dibujar 7 scanlines (DE) -> (HL) y bajar scanline (y DE++) ld b, 7 ; 7 scanlines a dibujar drawchar8_loop: ld a, (de) ; Tomamos el dato del caracter ld (hl), a ; Establecemos el valor en videomemoria inc de ; Incrementamos puntero en caracter inc h ; Incrementamos puntero en pantalla (scanline+=1) djnz drawchar8_loop ;;; La 8a iteracion, para evitar inc de + inc h ld a, (de) ; Tomamos el dato del caracter ld (hl), a ; Establecemos el valor en videomemoria ld a, h ; Recuperamos el valor inicial de HL sub 7 ; Restando los 7 scanlines avanzados ;;; Calcular posicion destino en area de atributos en DE. ; A = H rrca ; Codigo de Get_Attr_Offset_From_Image rrca rrca and 3 or $58 ld d, a ld e, l ;;; Escribir el atributo en memoria ld a, (FONT_ATTRIB) ld (de), a ; Escribimos el atributo en memoria ret ;------------------------------------------------------------------ ; Limpiar la pantalla con el patron de pixeles y atributos indicado. ; Entrada: H = atributo, L = patron ;------------------------------------------------------------------ ClearScreenAttrib: push de push bc ld a, h ; A = el atributo ex af, af' ; Nos guardamos el atributo en A' ld a, l ; Cargamos en A el patron ld hl, 16384 ; HL = Inicio del area de imagen ld (hl), a ; Escribimos el valor de A en (HL) ld de, 16385 ; Apuntamos DE a 16385 ld bc, 192*32-1 ; Copiamos 6142 veces (HL) en (DE) ldir ex af, af' ; Recuperamos A (atributo) de A' inc hl ; Incrementamos HL y DE inc de ; para entrar en area de atributos ld (hl), a ; Almacenamos el atributo ld bc, 24*32-1 ; Ahora copiamos 767 bytes ldir pop bc pop de ret ;------------------------------------------------------------- ; ASM source file created by SevenuP v1.20 - SevenuP (C) ; Copyright 2002-2006 by Jaime Tejedor Gomez, aka Metalbrain ; GRAPHIC DATA: ; Pixel Size: ( 8, 512) ; Char Size: ( 1, 64) ; Sort Priorities: Char line, Y char ; Data Outputted: Gfx ;------------------------------------------------------------- charset1: DEFB 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 24, 0, 24, 0 DEFB 0,108,108, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DEFB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DEFB 56, 0, 76, 56,110,196,122, 0, 0, 12, 12, 8, 0, 0, 0, 0 DEFB 0, 24, 0, 48, 48, 48, 24, 0, 0, 24, 0, 12, 12, 12, 24, 0 DEFB 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0,126,126, 24, 24, 0 DEFB 0, 0, 0, 0, 0, 12, 12, 8, 0, 0, 0,126,126, 0, 0, 0 DEFB 0, 0, 0, 0, 0, 56, 56, 0, 0, 0, 6, 12, 24, 48, 96, 0 DEFB 124, 0,206,214,230,254,124, 0, 28, 0,124, 28, 28, 28, 28, 0 DEFB 124, 0,198, 28,112,254,254, 0, 124, 0,198, 12,198,254,124, 0 DEFB 12, 0, 60,108,254,254, 12, 0, 254, 0,192,252, 14,254,252, 0 DEFB 60, 0,224,252,198,254,124, 0, 254, 0, 14, 28, 28, 56, 56, 0 DEFB 124, 0,198,124,198,254,124, 0, 124, 0,198,126, 6,126,124, 0 DEFB 0, 0, 24, 24, 0, 24, 24, 0, 118, 6,192,254,254,198,198, 0 DEFB 246, 6,192,252,192,254,254, 0, 12, 12, 48, 56, 56, 56, 56, 0 DEFB 118, 6,192,198,198,254,124, 0, 198, 6,192,198,198,254,124, 0 DEFB 0, 24, 0, 24, 24, 24, 24, 0, 124, 0,198,254,254,198,198, 0 DEFB 252, 0,198,252,198,254,252, 0, 124, 0,198,192,198,254,124, 0 DEFB 252, 0,198,198,198,254,252, 0, 254, 0,192,252,192,254,254, 0 DEFB 254, 0,224,252,224,224,224, 0, 124, 0,192,206,198,254,124, 0 DEFB 198, 0,198,254,254,198,198, 0, 56, 0, 56, 56, 56, 56, 56, 0 DEFB 6, 0, 6, 6,198,254,124, 0, 198, 0,220,248,252,206,198, 0 DEFB 224, 0,224,224,224,254,254, 0, 198, 0,254,254,214,198,198, 0 DEFB 198, 0,246,254,222,206,198, 0, 124, 0,198,198,198,254,124, 0 DEFB 252, 0,198,254,252,192,192, 0, 124, 0,198,198,198,252,122, 0 DEFB 252, 0,198,254,252,206,198, 0, 126, 0,224,124, 6,254,252, 0 DEFB 254, 0, 56, 56, 56, 56, 56, 0, 198, 0,198,198,198,254,124, 0 DEFB 198, 0,198,198,238,124, 56, 0, 198, 0,198,198,214,254,108, 0 DEFB 198, 0,124, 56,124,238,198, 0, 198, 0,238,124, 56, 56, 56, 0 DEFB 254, 0, 28, 56,112,254,254, 0, 60,102,219,133,133,219,102, 60 DEFB 0, 0, 96, 48, 24, 12, 6, 0, 24, 0, 24, 48, 96,102, 60, 0 DEFB 60, 0, 70, 12, 24, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0,126 END 35000