📄 sdrv_getfontpoint.msa
字号:
/*
********************************************************************************
* ACTOS
* ui dirver show picture
*
* (c) Copyright 2002-2003, Actions Co,Ld.
* All Right Reserved
*
* File : UI_GetFontPoint.msa
* By : Rcmai
* Version: 1> v1.00 first version 12/03/2003 10:46PM
********************************************************************************
*/
#include "display.h"
#include "Drv_S6B33B0A.h"
module Sdrv_GetFontPoint
// public sUI_GetFontPoint
public Sdrv_GetFontPoint
extern AsciiSelect
extern AsciiFontLibAddr
extern FontLibAddr
extern CharPointBuffer
extern SD_RWStruct
rseg UI_RCODE
//********************************************************/
/*
** FUNCTION: GetCharPoint
**
** PURPOSE: Get Char Point Info by dma2
**
** PARAMETERS:
** input
** de=区位码
** bc=输出数据的存放地址
** output
** none
** DESCRIPTION:
//********************************************************/
Sdrv_GetFontPoint:
push bc
push de
ld (SD_RWStruct+5),bc
ld a,0x08
bit 6,b //bc是否大于4000h
jr z,_buffer_in_zram
dec a //0x07 fram buffer
_buffer_in_zram:
ld (SD_RWStruct+7),a
GetChineseCharPoint:
ld a,e //区码
cp FirstSectionCode
jr nc,_not_ascii
_is_ascii:
ld a,(AsciiSelect)
cp FONT_TYPE_LARGE
jr c,lsUse0608Type
jr lsUse0816Type
lsUse0608Type:
xor a
ld h,a
ld l,e
ld b,03h // ahl=a*8
call AHL_LeftShift //输入参数:b,hl
jr MoveAsciiPointToBuffer
lsUse0816Type:
xor a
ld h,a
ld l,e
ld b,04h // ahl=a*16
call AHL_LeftShift //输入参数:b,hl
ld bc,800h //0816Type ASCII起始地址=800h
add hl,bc
jr MoveAsciiPointToBuffer
_not_ascii:
cp 0xb0 //简体字库起始区码
jr nc,_is_chinese
_is_quanjiao:
sub FirstSectionCode
call AddCountQuma //算出字个数HL==((c-0xa1)*94+(b-0xa1))
call AddCountWeima
xor a
ld b,05h // ahl=a*32
call AHL_LeftShift //输入参数:b,hl
jp MoveFontPointToBuffer
_is_chinese:
sub 0xb0 //第一个汉字的区码
call AddCountQuma //算出字个数HL==((c-0xb0)*94+(b-0xa1))
call AddCountWeima
ld bc,34eh //全角符号个数=34eh
add hl,bc
xor a
ld b,05h // ahl=a*32
call AHL_LeftShift //输入参数:b,hl
jp MoveFontPointToBuffer
//--------------------------------------------------
MoveAsciiPointToBuffer:
ld de,(AsciiFontLibAddr)
add hl,de
ld (SD_RWStruct),hl
ld l,a
ld h,0
ld de,(AsciiFontLibAddr+2)
adc hl,de
ld (SD_RWStruct+2),hl
jr MovePointToBuffer
MoveFontPointToBuffer:
ld de,(FontLibAddr)
add hl,de
ld (SD_RWStruct),hl
ld l,a
ld h,0
ld de,(FontLibAddr+2)
adc hl,de
ld (SD_RWStruct+2),hl
MovePointToBuffer:
ld de,SD_RWStruct
ld bc,32
mSD_Read
MovePointBufferEnd:
pop de
pop bc
ret
//---------------------------------------------------
AddCountASCII: //算ICON地址,输入:hl 输出:hla
ret
//---------------------------------------------------
AddCountQuma:
push bc
push de
ld l,a
ld h,0
add hl,hl //hl*2(48-1)==hl*2(16*3-1)
ld e,l
ld d,h
call HLShfit_4bit
ld b,h //hl*3
ld c,l
add hl,hl
add hl,bc
or a
sbc hl,de //hl
pop de
pop bc
ret
AddCountWeima:
push bc
ld a,d
sub 0xa1
ld c,a
ld b,0
add hl,bc
pop bc
ret
AHL_LeftShift: //输入参数:b,hl
sla l
rl h
rla
djnz AHL_LeftShift
ret
HLShfit_5bit:
add hl,hl //HL*32
HLShfit_4bit:
add hl,hl //HL*16
HLShfit_3bit: //HL*8
add hl,hl
HLShfit_2bit:
add hl,hl
HLShfit_1bit:
add hl,hl
ret
/*
********************************************************************************
* the end of file
********************************************************************************
*/
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -