📄 sdrv_specialfuncs.msa
字号:
/*
********************************************************************************
* ACTOS
* driver demo
*
* (c) Copyright 2002-2003, Actions Co,Ld.
* All Right Reserved
*
* File : UI_SpecialFuncs.msa
* By : Rcmai
* Version: 1> v1.00 first version date
********************************************************************************
*/
#include "display.h"
#include "Drv_S6B33B0A.h"
module UI_SpecialFuncs
public BlackCharToColor
public RectBuffFillColor
extern Hdrv_GetBuffData
extern Hdrv_SetWindow
extern Hdrv_SetWindow_Read
extern CharPointBuffer
extern DisplayBuffer
extern region
extern dc
extern charinvflag
extern charclarity
extern putCharChFlag
rseg UI_RCODE
dc_Inv_bak:
PenColor_Inv_bak defs 4
BackGDColor_Inv_bak defs 4
//[1]==================================================
// void BlackCharToColor(int cnt,char *SoureBufPos)
//直接传递的参数
// int cnt : 象素的列数,为了用旧字库,每列为一个BYTE
// char *SoureBufPos: 要转换的源buf首址
//用公共变量传递的参数
// DisplayBuffer: 显示缓冲区
//功能
// 根据字库把原来黑白字模换成彩色
//说明:
// 用到 de 传送参数,hl,bc作运算,没保护,用到IX已保护
//-----------------------------------------------------
BlackCharToColor:
ld a,(charinvflag)
or a
jr z,NotCharInv
//不用反相输出
push de
push bc
ld hl,dc
ld de,dc_Inv_bak
ld bc,8
ldir //备份设备内容
ld b,8
ld hl,dc
lopforinvdata:
ld a,(hl)
cpl
ld (hl),a
inc hl
djnz lopforinvdata
pop bc
pop de
NotCharInv:
ld a,(charclarity)
or a
jr z,NotClarity
//---读出背景数据----
push de
push bc
//--如下 de * 8
push de
pop hl
add hl,hl
add hl,hl
add hl,hl
push hl
ld de,region //为何要设定?
//call Hdrv_SetWindow
call Hdrv_SetWindow_Read //Jerry Xie Modify
pop bc
ld de,DisplayBuffer
call Hdrv_GetBuffData
ld de,region //为何要设定?
call Hdrv_SetWindow
pop bc
pop de
//-----
NotClarity:
push ix
ld ix,DisplayBuffer
push bc
pop hl// bc -> h //点阵区首址
//-----------------------
LoopForTransBuff:
ld a,(putCharChFlag)
ld b,a
//ld b,08h
ld c,(hl)
//-------------
LoopForTransByte:
//sla c
sra c
jr nc,TransDataNull
//画前景
ld a,(dc+1)
ld (ix+0),a
//inc ix //change by ybfu
ld a,(dc+0)
ld (ix+1),a
//inc ix
jr OldBackGD
TransDataNull:
//画背景
ld a,(charclarity)
or a
jr nz,OldBackGD
ld a,(dc+5)
ld (ix+0),a
ld a,(dc+4)
ld (ix+1),a
OldBackGD:
inc ix
inc ix
TransDataFinished:
//pop af ??
djnz LoopForTransByte
//-------------
inc hl
dec de
ld a,d
or e
jr nz,LoopForTransBuff
//-----------------------
pop ix
ld a,(charinvflag)
or a
jr z,BlackCharToColor_ret
ld hl,dc_Inv_bak
ld de,dc
ld bc,8
ldir //恢复设备内容
BlackCharToColor_ret:
ret
//=====================================================
//[2]==================================================
//=====================================================
// void RectBuffFillColor(int pixelcnt)
//直接传递的参数
// int pixelcnt: 要填充的象素个数
//
//用公共变量传递的参数
// DisplayBuffer: 显示缓冲区
//
//功能
// 把暂存显示Buffer中的 pixelcnt 个象素单元填为画笔颜色
//
//说明:
//
//-----------------------------------------------------
//选用方案4(ok,用10767 个cycles 约0.46ms/page) 这个最优
RectBuffFillColor:
ld a,d
or e
ret z //如输入为0则退出
dec de //减一个,因为第一个象素已放在BUFFER中 de = 象素数量 = pixelcnt
push de //de->hl
pop hl
add hl,hl //hl*2 象素值转为byte数 1 个象素要用 2 个 byte 来表示
push hl //hl->bc
pop bc
//先把颜色值放在buffer首
ld hl,(dc) //这里的 dc 的 c 和上面的 bc 中的c 冲突?
ld a,h
ld h,l
ld l,a
ld (DisplayBuffer),hl
//注,下面是用ldir实现 "滚动法" 空间填充功能,由于指令少,
// 并且时间也较少,所以是首选
ld hl,DisplayBuffer
ld de,DisplayBuffer+2
ldir
ret
end
//=====================================================
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -