📄 hdrv_s6b33b0a.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 + -