;;; ;;; ;;; libconio_arch-small.hS ;;; ;;; Architecture depend libconio implementation. ;;; This assembler source contributes basically saving for speed and memory. ;;; ;;; @author Takahide Matsutsuka ;;; ;;; $Id: libconio_arch-small.cS,v 1.2 2007/11/28 09:38:21 matsutsuka Exp $ ;;; ;; uses preprocessor to enable definitions #include "ctk_arch-def.h" ;; export symbols .globl _clrscr_arch .globl _libputc_arch .globl _libputs_arch .area _DATA _screen_offset:: .ds 2 .area _CODE _libconio_arch_small_start:: _clrscr_arch: ld hl, #0 ld (#_screen_offset), hl ld hl, #VRAM_CHAR ld bc, #VRAM_CHAR + #SCREEN_HEIGHT * #SCREEN_WIDTH _clrscr_arch_loop1: ld (hl), #CH_SPACE inc hl ld a, h cp b jr nz, _clrscr_arch_loop1 ld a, l cp c jr nz, _clrscr_arch_loop1 ld hl, #VRAM_ATTR ld bc, #VRAM_ATTR + #SCREEN_HEIGHT * #SCREEN_WIDTH _clrscr_arch_loop2: ld (hl), #COLOR_NORMAL inc hl ld a, h cp b jr nz, _clrscr_arch_loop2 ld a, l cp c jr nz, _clrscr_arch_loop2 ret _libputc_arch: ld hl, #2 add hl, sp ld a, (hl) _libputc_asm:: push af ld hl, (#_screen_offset) ld bc, #SCREEN_HEIGHT * #SCREEN_WIDTH ld a, b cp h jr nz, _libputc_arch_putc ld a, c cp l jr z, _libputc_arch_scroll _libputc_arch_putc: ld bc, #VRAM_CHAR add hl, bc pop af ld (hl), a ld hl, #_screen_offset inc (hl) ret nz inc hl inc (hl) ret _libputc_arch_scroll: push de ld hl, #VRAM_CHAR + #SCREEN_WIDTH ld de, #VRAM_CHAR ld bc, #SCREEN_HEIGHT * #SCREEN_WIDTH - #SCREEN_WIDTH push bc push de ldir pop de pop hl push hl ld (#_screen_offset), hl ld b, #SCREEN_WIDTH add hl, de _libputc_arch_scroll_loop: ld (hl), #CH_SPACE inc hl djnz _libputc_arch_scroll_loop pop hl pop de jr _libputc_arch_putc _libputs_arch: ld hl, #2 add hl, sp ld e, (hl) inc hl ld d, (hl) _libputs_arch_loop: ld a, (hl) or a ret z call _libputc_asm jr _libputs_arch_loop _libconio_arch_small_end::