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

📄 hdrv_s6b33b0a.msa

📁 炬力方案176*132软件源码,适用于AK1025
💻 MSA
字号:
/************************************************************/
//*                       ACTOS
//*                  driver demo
//*
//*                (c) Copyright 2002-2003, Actions Co,Ld.
//*                        All Right Reserved
//*
//* File   : Hdrv_S6B33B0A.msa
//* By     :
//* Version: 1> v1.00     first version     date
/************************************************************/
#include "display.h"
#include "Drv_S6B33B0A.h"
#include "Hdrv_S6B33B0A.h"
/************************************************************/
    module    Hdrv_S6B33B0A
/************************************************************/
	public	Hdrv_SetWindow
	public	Hdrv_SetWindow_Read
	public	Hdrv_UpdateScr
	public	Hdrv_BuffDataTrans
	public	Hdrv_PixelDataTrans
	public	Hdrv_PixelNullTrans
	public	Hdrv_GetPixelData
	public	Hdrv_GetBuffData
	public	Hdrv_RGB
	public	Hdrv_SetDrawMode
	public	Hdrv_InvBuffDataTrans
	public	Ready_Write_Data
	public	Write_Command
	public	Write_Data
	public	DelayMs
	public	StoreCE
	public	ReStoreCE
	public	Hdrv_Set_Command
	public	Hdrv_Set_data
/************************************************************/
	extern	dc
	extern	CEPort_Sav
	//extern	Sav_00
	//extern	TranMode
/************************************************************/
	rseg	UI_RCODE
/************************************************************/
//* void Hdrv_SetWindow(region_t *region);
//** FUNCTION:     Hdrv_SetWindow
//**
//** Description:  设置输出的窗口
//**
//**  input
//**        region_t *region: 要设置的输出窗口的范围
//**
//**  output
//**     none
/************************************************************/
Hdrv_Set_Command:
/*
	call	StoreCE
	WRITE_COMMAND	e
	call	ReStoreCE
	ret
*/
Hdrv_Set_data:
/*
	call	StoreCE
	WRITE_DATA	e
	call	ReStoreCE
    */
	ret
    
Hdrv_SetWindow_Sub:
	push	ix
	push	de
	push	de
	pop	  ix
//__________
	ld	d,132

	ld	a,(DrawMode_Flag)
	cp	DrawModeV_def
	jr	z,Y_Mode_MIRRY1
	cp	DrawModeVPic_def
	jr	nz,Y_Mode1

Y_Mode_MIRRY1:
	WRITE_COMMAND	0x2b
	jr	Mode_End1

Y_Mode1:
	WRITE_COMMAND	0x2a
Mode_End1:
	WRITE_DATA	0
	ld	a,(ix+0)
	WRITE_DATA	a
	
	WRITE_DATA	0
// window_end_x
	ld	a,(ix+2)
	ld	c,(ix+0)
	add	a,c
	sub	1
	WRITE_DATA	a

// window_end_y

	ld	a,(DrawMode_Flag)
	cp	DrawModeV_def
	jr	z,Y_Mode_MIRRY2
	cp	DrawModeVPic_def
	jr	nz,Y_Mode2

Y_Mode_MIRRY2:       
	WRITE_COMMAND	0x2a
	jr	Mode_End2
Y_Mode2:

	WRITE_COMMAND	0x2b
Mode_End2:
	WRITE_DATA	0
  ld  a,d
	ld	c,(ix+1)
	sub c
	ld	c,(ix+3)
	sub	c
  ld	e,a		//Y Box Start
	//===========
	WRITE_DATA	a
  
	WRITE_DATA	0
	ld	a,(ix+3)
	add	a,e
	sub	1
	WRITE_DATA	a    
	
	pop	de
	pop	ix
	ret

Hdrv_SetWindow:
	call	StoreCE
	call	Hdrv_SetWindow_Sub
	WRITE_COMMAND	0x2c        //开始写数据    ST7536特有
	call	Ready_Write_Data
	call	ReStoreCE
	ret
Hdrv_SetWindow_Read:
	call	StoreCE
	call	Hdrv_SetWindow_Sub
	WRITE_COMMAND	0x2e        //开始读数据    ST7536特有
	call	Ready_Write_Data
	call	ReStoreCE
	ret
/************************************************************/
//* void Hdrv_UpdateScr(const region_t *region);
//** FUNCTION:     Hdrv_UpdateScr
//**
//** Description:  按指定区域更新屏幕
//**
//**  input
//**      const region_t *region :要更新的屏幕的区域
//**
//**  output
//**     none
/************************************************************/
Hdrv_UpdateScr:
	ret
/************************************************************/
//* void Hdrv_BuffDataTrans ( char *buff , int datacnt);
//** FUNCTION:     Hdrv_BuffDataTrans
//**
//** Description:  把指定 buff ,指定长度的数据送到 LCM 中
//**
//**  input
//**     char *buff :数据 buffer 的首址 (de)
//**     int datacnt:传送数据的个数    (bc)
//**
//**  output
//**     none
/************************************************************/
Hdrv_BuffDataTrans:
	call	StoreCE
/*
	ld	a,(TranMode)
	or	a
	jr	nz,DMATranMod
	//用普通模式传送数据
*/

	ex	de,hl    
	ld	de,8000h
	ldir
	jr	Hdrv_BuffDataTrans_ret
    
/*
DMATranMod:
	//用DMA模式传送数据
	ld    a,d
	bit    6,a
	jr    z,DMALowZram
	ld    hl,0x0740
	jr    DMATranStart
DMALowZram:
	ld    hl,0
DMATranStart:
	ld    (Dsc_Lcd_Dma_Out_Table+3),hl
	ld       (Dsc_Lcd_Dma_Out_Table),de
	dec      bc
	ld       (Dsc_Lcd_Dma_Out_Table+0ah),bc
	ld       de,Dsc_Lcd_Dma_Out_Table
	in    a,(0x70)
	or    3
	out    (0x70),a
	call    DmaDriver
	in    a,(0x70)
	and    0xfc
	out    (0x70),a
*/
Hdrv_BuffDataTrans_ret:
	call	ReStoreCE
	ret
/************************************************************/
//*  void Hdrv_PixelDataTrans( void );
//** FUNCTION:     Hdrv_PixelDataTrans
//**
//** Description:  把当前画笔的值输出一个象素到屏幕上
//**
//**  input
//**     none
//**
//**  output
//**     none
/************************************************************/
Hdrv_PixelDataTrans:
/*
	call	StoreCE
	ld	hl,(dc)
	ld	a,h
	ld	(8000h),a
	ld	a,l
	ld	(8000h),a
	call	ReStoreCE
*/
	ret
/************************************************************/
//*  void Hdrv_PixelNullTrans( void );//
//** FUNCTION:     Hdrv_PixelNullTrans
//**
//** Description:  送一个空数据,表示这个点不变
//**
//**  input
//**     none
//**
//**  output
//**     none
/************************************************************/
Hdrv_PixelNullTrans:
	ret
/************************************************************/
///* non_banked  void  Hdrv_GetBuffData ( char *buff , int pixelcnt);
//** FUNCTION:     Hdrv_GetBuffData
//**
//** Description:  把LCM上从当前位置开始的 datacnt 个象素的数据读出到指定的Buff中。
//**
//**  input
//**    char  *buff :输出缓冲区的首址;(de)
//**    int datacnt :要输出的像素个数;(bc)
//**
//**  output
//**     none
/************************************************************/
Hdrv_GetBuffData:
	call	StoreCE

	ld	a,(8000h)    //先空读一次,这是无用的数据(LCM特性)
	
/*
	sla	c
	rl	b
	ld    hl,8000h
	ldir
*/

ReadLoop:
	push	bc
   
	ld	a,(8000h)
	ld	(Shitf1),a
	ld	a,(8000h)
	ld	c,a
	ld	a,(8000h)
	ld	(Shitf2),a
  
	sla	c
	rl	b
	sla	c
	rl	b
	sla	c
	rl	b
	ld	a,b
	and	00000111b
	ld	b,a
	
	ld	a,(Shitf1)
	and	11111000b
	or	b
	ld	(de),a
	inc	de
	
	ld	a,c
	and	11100000b
	ld	c,a
	
	ld	a,(Shitf2)
	sra	a
	sra	a
	sra	a
	and	00011111b
	or	c
	ld	(de),a
	inc	de
	pop	bc
	
	dec	bc
	ld	a,b
	or	c
	jr	nz,ReadLoop

	call    ReStoreCE
	ret
/************************************************************/
//* COLORREF Hdrv_GetPixelData (void);
//** FUNCTION:     Hdrv_GetPixelData
//**
//** Description:  把LCM上当前的象素的值读出。
//**
//**  input
//**     void
//**
//**  output
//**     COLORREF : 返回当前象素的系统颜色值
/************************************************************/
Hdrv_GetPixelData:
	ret
/************************************************************/
// void Hdrv_InvBuffDataTrans(char *buf, int pixelcnt);
//直接传递的参数
//  int pixelcnt: 要反相的象素个数(bc)
//  *buf:   显示缓冲区(de)
//
//功能
//  把显示Buffer中的 pixelcnt 个象素的数据反色输出到LCM。
//
//说明:
//
/************************************************************/
Hdrv_InvBuffDataTrans:
/*
	call	StoreCE
lopfortransdata:
	ld	a,(de)
	cpl
	ld	(8000h),a
	inc	de
	ld	a,(de)
	cpl
	ld	(8000h),a
	inc	de
	dec	bc
	ld	a,b
	or	c
	jr	nz,lopfortransdata
	call	ReStoreCE
	*/
	ret
/************************************************************/
//* COLORREF Hdrv_RGB(BYTE red, BYTE green, BYTE blue );
//** FUNCTION:     Hdrv_RGB
//**
//** Description:  把用分量表示的颜色值转为系统颜色值 COLORREF
//**
//**  input
//**       BYTE red : 红色灰度级
//**       BYTE green :绿色灰度级
//**       BYTE blue :蓝色灰度级
//**
//**  output
//**      COLORREF : 系统的颜色值
/************************************************************/
Hdrv_RGB:
	ret
/************************************************************/
//** void Hdrv_SetDrawMode (BYTE mode );
//** FUNCTION:     Hdrv_SetDrawMode
//**
//** Description:  设置作图模式(横向还是纵向)
//**
//**  input
//**     BYTE mode:
//**        DrawModeH_def        //横向优先
//**        DrawModeV_def          //纵向优先
//**
//**  output
//**      none
/************************************************************/
Hdrv_SetDrawMode:
	call	StoreCE
	//WRITE_COMMAND    0x30        //data scan direction
	//WRITE_COMMAND    0xbc        //data scan direction
	
	ld	a,e
	ld	(DrawMode_Flag),a
	cp	DrawModeV_def
	jr	z,IsModeV
	jr	c,IsModeH
	cp	DrawModeHPic_def
	jr	z,lsModeHPic
lsModeVPic:
	//WRITE_DATA    0x04        //page/column address setting
	ld	a,0x34    //0x82
	ld	(Mode_Reg),a    
	jr	Hdrv_SetDrawMode_ret
lsModeHPic:
	//WRITE_DATA    0x00        //page/column address setting
	ld    a,0x14    //0x80
	ld    (Mode_Reg),a    //save to 0x40
 	jr    Hdrv_SetDrawMode_ret

IsModeH:
	//WRITE_DATA    0x01        //page/column address setting
	ld    a,0x94    //0x80
	ld    (Mode_Reg),a    //save to 0x40
	jr    Hdrv_SetDrawMode_ret
IsModeV:
	//WRITE_DATA    0x05        //page/column address setting
	ld    a,0xb4    //0x82
	ld    (Mode_Reg),a    //save to 0x40

Hdrv_SetDrawMode_ret:
	//WRITE_DATA    0x01        //rgb arrangement
	//WRITE_DATA    0x01        //gray-scale setup (64-gray:01h)
	
	WRITE_COMMAND    0x36
	ld    a,(Mode_Reg)
	WRITE_DATA    a
	/*
    
	WRITE_COMMAND    0x40
	ld    a,(Mode_Reg)
	WRITE_COMMAND    a
	*/
	call    ReStoreCE
	ret
/************************************************************/
/*
DmaDriver:
	push   bc
	ex     de,hl
	ld     bc,0e06h
lopforout:
	outi
	inc        c
	xor     a
	or      b
	jr      nz,lopforout
	pop    bc
DmaDriveL:
	in     a,(13h)
	bit     0,a
	jr     nz,DmaDriveL
	ret
*/
/************************************************************/
Write_Command:
	call	Ready_Write_Command
	ld	a,c        //输出指令
	ld	(8000H),a
	ret
/************************************************************/
Write_Data:
	call	Ready_Write_Data
	ld	a,c        //输出数据
	ld	(8000H),a
	ret
/************************************************************/
Ready_Write_Data:
	in	a,(0xf0)
	set	0,a
	out	(0xf0),a
	
	in	a,(0xf2)
	set	0,a
	out	(0xf2),a
	ret
/************************************************************/
Ready_Write_Command:
	in	a,(0xf0)
	set	0,a
	out	(0xf0),a
	
	in	a,(0xf2)
	res	0,a
	out	(0xf2),a
	ret
/************************************************************/
StoreCE:
				di
				ld	hl,37h
				inc	(hl)
        in	a,(0x02)
        cp	18h
        jr	z,StoreCE_end
        ld	(CEPort_Sav),a
        ld	a,0x18			//change by ybfu
        out	(0x02),a
StoreCE_end:
        in	a,(0x00)
				ld	(Sav_00),a
				or	11000000b
				out	(0x00),a
        ret
/************************************************************/
ReStoreCE:
        ld	a,(Sav_00)
	      out	(0x00),a
	      
				ld	a,(CEPort_Sav)
        out	(0x02),a
        ld	hl,37h
				dec	(hl)
				jr	nz,NotEI
				ei
NotEI:
        ret
/************************************************************/
DelayMs:
	push	bc
delay1ms_loop2:
	ld	b,250
delay1ms_loop1:
	in	a,(0x4e)
	in	a,(0x4e)
	in	a,(0x4e)
	in	a,(0x4e)
	in	a,(0x4e)
	set	3,a
	out	(0x4e),a
	out	(0x4e),a
	djnz	delay1ms_loop1
	dec	c
	jr	nz,delay1ms_loop2
delay1ms_ret:
	pop	bc
	ret
/************************************************************/
DrawMode_Flag:	defb	0x00
Mode_Reg:	defb	0x00
//DireOut_Reg:	defb	0x00
Sav_00:		defb	0x00
Shitf1:		defb	0x00
Shitf2:		defb	0x00
/************************************************************/
/*
Dsc_Lcd_Dma_Out_Table:
        //源地址设置
        defw  0000h        //源地址 L|H 格式 (a0-a15)
        defb  00h          //源地址 (a16-a23)
        defb  40h          //源地址在哪段空间及地址(a24-a28)
        defb  07h          //源地址在 zram 中的哪一页

        //目标地址设置
        defw  8000h        //目标地址 L|H 格式 (a0-a15)
        defb  00h          //目标地址 (a16-a23)
        defb  0cch         //目标地址在哪段空间及地址(a24-a28)
        defb  00h          //目标地址在 zram 中的哪一页

        //传送数据的 byte 数
        defb  0ffh,01h     //传送数据的数量

        //传送模式及wait state 设置
        defb  40h         //3 wait state

        //启动传送
        defb  01h
*/
/************************************************************/
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -