You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
3.9 KiB
195 lines
3.9 KiB
|
|
GenFont:
|
|
; FUNCTION = make pattern completly
|
|
; INPUT : (DS=CS) CX = KS code, ES:DI = buffer pointer
|
|
; OUTPUT : (NC) ES:DI = buffer pointer
|
|
; PROTECT : none
|
|
extrn Ks2ChAddr:word
|
|
VowelTypeCnt = 3
|
|
push bp
|
|
push di
|
|
mov ax,cx
|
|
mov bp,di ; save buffer pointer
|
|
test [CodeStat],Chab
|
|
jnz @f
|
|
call [Ks2ChAddr]
|
|
jnc @f
|
|
jmp MakeFontEnd
|
|
@@:
|
|
call ChkVowelType ; check vowel type
|
|
add si,[PatGenAddr]
|
|
mov di,bp
|
|
mov dx,ax ; save CH code
|
|
xor ax,ax
|
|
mov cx,16
|
|
rep stosw ; clear buffer
|
|
; DX = CH code, BP = buffer pointer, SI = type no.
|
|
add si,offset Type1stTbl - offset GenFont
|
|
push dx
|
|
mov di,[HanPatternPtr]
|
|
add di,FontStruc1st
|
|
and dx,0111110000000000b
|
|
mov cl,7
|
|
rol dx,cl
|
|
call MakePattern
|
|
pop dx
|
|
jc MakeFontEnd
|
|
@@:
|
|
add si,offset Type2ndTbl - offset Type1stTbl
|
|
push dx
|
|
mov di,[HanPatternPtr]
|
|
add di,FontStruc2ndV
|
|
push si
|
|
mov si,dx
|
|
mov cl,5
|
|
shr si,cl
|
|
and si,0000000000011111b
|
|
add si,offset VowelType - offset GenFont
|
|
add si,[PatGenAddr]
|
|
mov al,[si]
|
|
dec al
|
|
mov ah,4*VowelTypeCnt
|
|
mul ah
|
|
pop si
|
|
add di,ax
|
|
and dx,0000001111100000b
|
|
mov cl,4
|
|
shr dx,cl
|
|
add dx,32*2
|
|
call MakePattern
|
|
pop dx
|
|
jc MakeFontEnd
|
|
@@:
|
|
add si,offset Type3rdTbl - offset Type2ndTbl
|
|
mov di,[HanPatternPtr]
|
|
add di,FontStruc3rd
|
|
and dx,0000000000011111b
|
|
shl dx,1
|
|
add dx,32*2*2
|
|
call MakePattern
|
|
MakeFontEnd:
|
|
pop di
|
|
pop bp
|
|
ret
|
|
|
|
ChkVowelType:
|
|
; FUNCTION = get vowel type bits(4)
|
|
; INPUT : (DS=CS)AX = CH code
|
|
; OUTPUT : (CC) SI = vowel type code(4 bits)
|
|
; DESTORY : CX, DX
|
|
mov si,ax
|
|
mov cl,5
|
|
shr si,cl
|
|
and si,0000000000011111b
|
|
add si,offset VowelType - offset GenFont
|
|
add si,[PatGenAddr]
|
|
mov cl,[si]
|
|
shl cl,1
|
|
shl cl,1 ; 0000xx00b
|
|
mov dx,ax
|
|
and dx,0111110000011111b
|
|
cmp dh,00000100b ; 1st fill code ?
|
|
jz @f ; jump if so
|
|
or cl,00000001b ; 0000xxx1b
|
|
@@:
|
|
cmp dl,00000001b ; last fill code ?
|
|
jz @f ; jump if so
|
|
or cl,00000010b ; 0000xx1xb
|
|
@@:
|
|
xor ch,ch
|
|
mov si,cx
|
|
ret
|
|
|
|
MakePattern:
|
|
; FUNCTION = make pattern
|
|
; INPUT : (DS=CS) BP = buffer pointer, DX = input code
|
|
; DI = font struc pointer, CL = real type no.
|
|
; OUTPUT : none
|
|
; DESTORY : AX, BX, CX, DI
|
|
push si
|
|
mov cl,[si] ; get type no.
|
|
mov si,dx
|
|
add si,[HanPatternPtr]
|
|
mov si,[si]
|
|
or si,si
|
|
jz MakePatternFill
|
|
or si,si
|
|
js MakePatternErr ; jump if MSB = 1
|
|
or cl,cl
|
|
js MakePatternFill ; jump if MSB = 1
|
|
xor ch,ch
|
|
xor bx,bx
|
|
@@:
|
|
jcxz @f
|
|
mov ax,[di+2]
|
|
mul ah
|
|
add bx,ax ; BX = byte size
|
|
add di,4
|
|
loop @b
|
|
@@:
|
|
add si,[HanPatternPtr]
|
|
add si,bx
|
|
mov bx,di
|
|
; calc target address
|
|
mov di,bp
|
|
mov ax,[bx] ; get (X, Y)
|
|
mov cl,al
|
|
mov al,ah
|
|
xor ah,ah
|
|
shl ax,1
|
|
add di,ax
|
|
xor ch,ch
|
|
add di,cx
|
|
; calc repeat counter
|
|
mov dx,[bx+2]
|
|
mov bl,dh
|
|
mov bh,dl
|
|
mov dl,2 ; 16 dot
|
|
sub dl,bh
|
|
xor dh,dh ; AX = blank byte
|
|
xor ch,ch
|
|
MakeFontLoop:
|
|
mov cl,bh ; BH = repeat counter
|
|
@@:
|
|
lodsb
|
|
or es:[di],al
|
|
inc di
|
|
loop @b
|
|
add di,dx
|
|
dec bl
|
|
jnz MakeFontLoop
|
|
MakePatternFill:
|
|
pop si
|
|
ret
|
|
MakePatternErr:
|
|
pop si
|
|
stc
|
|
ret
|
|
|
|
VowelType label byte
|
|
db 0,0,0,1,1,1,1,1,0,0,1,1,1,2,3,3
|
|
db 0,0,3,2,2,3,3,3,0,0,2,2,3,1,0,0
|
|
Type1stTbl label byte
|
|
db -1, 0,-1, 4,-1, 1,-1, 2,-1, 3,-1, 4,-1, 6,-1, 5
|
|
Type2ndTbl label byte
|
|
db -1,-1,-1,-1, 0, 1, 2, 2, 0, 1, 2, 2, 0, 1, 2, 2
|
|
Type3rdTbl label byte
|
|
db -1,-1, 0, 1,-1,-1, 0, 1,-1,-1, 0, 1,-1,-1, 0, 1
|
|
|
|
FontStruc STRUC
|
|
Char1st dw 32 dup(?) ; 1st code word table
|
|
Char2nd dw 32 dup(?) ; 2nd code word table
|
|
Char3rd dw 32 dup(?) ; 3rd code word table
|
|
FontStruc1st db 4*7 dup(?) ; 1st code struc table
|
|
FontStruc2ndV db 4*3 dup(?) ; 2nd V-vowel code struc table
|
|
FontStruc2ndH db 4*3 dup(?) ; 2nd H-vowel code struc table
|
|
FontStruc2ndHV db 4*3 dup(?) ; 2nd HV-vowel code struc table
|
|
FontStruc3rd db 4*2 dup(?) ; 3rd code struc table
|
|
RealFont db ? ; font image area
|
|
FontStruc ENDS
|
|
|
|
CharTbl label word
|
|
INCLUDE HAN.PAT
|
|
GenFontLng = $-GenFont
|
|
|
|
|