📄 ui_getfp_latin1.msa
字号:
/*
********************************************************************************
* ACTOS
* ui dirver show picture
*
* (c) Copyright 2002-2003, Actions Co,Ld.
* All Right Reserved
*
* File : UI_GetFPFan.msa
* By : Rcmai
* Version: 1> v1.00 first version 04-1-18 8:53
********************************************************************************
*/
#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 04h
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:
sub 0a4h //区码0xa4,繁体第一个汉字是A440
call AddCountQuma //算出字个数HL=(c-0xa1)*(94+63)。输入a=区码-0xa1,输出HL
ld a,d //取位码
cp 0xa1 //BIG5位码分界点
jr nc,Multi2ndPart //区内第二部分字 a1h~feh=94个字
Multi1stPart: //区内第一部分字 40h~7eh=63个字
sub 0x40
ld b,0
ld c,a
add hl,bc //加上位得出字的真正序号
jp MultiWordNumOk
Multi2ndPart: //区内第二部分字
sub 0xa1 //BIG5第一个字的区码
add a,0x3f
ld b,0
ld c,a
add hl,bc //加上位得出字的真正序号
MultiWordNumOk:
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
//---------------------------------------------------
AddCountQuma: //提供函数HL=(c-0xa1)*(94+63) = (c-0xa4)*160-(c-0xa4)*3
push bc
push de
ld h,0
ld l,a
call HLShfit_5bit //hl*32
ld d,h
ld e,l
add hl,hl //hl*64
add hl,hl //hl*128
add hl,de //hl*128+hl*32=hl*160
ld c,a //a=区码-0xa4
ld b,0x00
sbc hl,bc
sbc hl,bc
sbc hl,bc
pop de
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 + -