2007-09-30 12:46:34 +00:00
|
|
|
;;;
|
|
|
|
;;;
|
|
|
|
;;; libconio_arch-small.hS
|
|
|
|
;;;
|
|
|
|
;;; Architecture depend libconio implementation.
|
|
|
|
;;; This assembler source contributes basically saving for speed and memory.
|
|
|
|
;;;
|
|
|
|
;;; @author Takahide Matsutsuka <markn@markn.org>
|
|
|
|
;;;
|
2007-11-28 09:38:21 +00:00
|
|
|
;;; $Id: libconio_arch-small.cS,v 1.2 2007/11/28 09:38:21 matsutsuka Exp $
|
2007-09-30 12:46:34 +00:00
|
|
|
;;;
|
|
|
|
|
|
|
|
;; uses preprocessor to enable definitions
|
|
|
|
#include "ctk_arch-def.h"
|
|
|
|
|
|
|
|
;; export symbols
|
|
|
|
.globl _clrscr_arch
|
|
|
|
.globl _libputc_arch
|
2007-11-28 09:38:21 +00:00
|
|
|
.globl _libputs_arch
|
2007-09-30 12:46:34 +00:00
|
|
|
|
|
|
|
.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
|
2007-11-28 09:38:21 +00:00
|
|
|
|
|
|
|
_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
|
2007-09-30 12:46:34 +00:00
|
|
|
_libconio_arch_small_end::
|