⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdrv_specialfuncs.msa

📁 炬力方案176*132软件源码,适用于AK1025
💻 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 + -