A2osX/FNT2FON.S.txt

640 lines
11 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BUILD/FNT2FON
*--------------------------------------
.INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/LIBGUI.I
*--------------------------------------
2017-12-08 16:10:39 +00:00
S.FNT.dfVersion .EQ 0
S.FNT.dfSize .EQ 2
S.FNT.dfCopyright .EQ 6
S.FNT.dfType .EQ 66
S.FNT.dfPoints .EQ 68
S.FNT.dfVertRes .EQ 70
S.FNT.dfHorizRes .EQ 72
S.FNT.dfAscent .EQ 74
S.FNT.dfInternalLeading .EQ 76
S.FNT.dfExternalLeading .EQ 78
S.FNT.dfItalic .EQ 80
S.FNT.dfUnderline .EQ 81
S.FNT.dfStrikeOut .EQ 82
S.FNT.dfWeight .EQ 83
S.FNT.dfCharSet .EQ 85
S.FNT.dfPixWidth .EQ 86
S.FNT.dfPixHeight .EQ 88
S.FNT.dfPitchAndFamily .EQ 90
S.FNT.dfAvgWidth .EQ 91
S.FNT.dfMaxWidth .EQ 93
S.FNT.dfFirstChar .EQ 95
S.FNT.dfLastChar .EQ 96
S.FNT.dfDefaultChar .EQ 97
S.FNT.dfBreakChar .EQ 98
S.FNT.dfWidthBytes .EQ 99
S.FNT.dfDevice .EQ 101
S.FNT.dfFace .EQ 105
S.FNT.dfBitsPointer .EQ 109
S.FNT.dfBitsOffset .EQ 113
S.FNT.dfReserved .EQ 117
S.FNT.dfCharTable2 .EQ 118
*S.FNT.dfFlags3 .EQ 118
*S.FNT.dfAspace3 .EQ 122
*S.FNT.dfBspace3 .EQ 124
*S.FNT.dfCspace3 .EQ 126
*S.FNT.dfColorPointer3 .EQ 128
*S.FNT.dfReserved13 .EQ 132
S.FNT.dfCharTable3 .EQ 148
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPInputBufPtr .EQ ZPBIN+2
2017-12-11 16:54:34 +00:00
ZPInputTblPtr .EQ ZPBIN+4
ZPInputBMPtr .EQ ZPBIN+6
ZPOutPutTblPtr .EQ ZPBIN+8
ZPCharBufPtr .EQ ZPBIN+12
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #16 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.FILE.OK .DA MSG.FILE.OK
L.MSG.HEADER.OK .DA MSG.HEADER.OK
L.MSG.HEADER.KO .DA MSG.HEADER.KO
2017-12-08 16:10:39 +00:00
L.MSG.RANGE .DA MSG.RANGE
2017-12-11 16:54:34 +00:00
L.MSG.DUMP .DA MSG.DUMP
L.MSG.DONE .DA MSG.DONE
.DA 0
*--------------------------------------
CS.INIT
.1 >INC.G ArgCount
>SYSCALL GetArg.A
bcs .7
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintF.YA
lda #K.E.SYN
sec
rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 >LDA.G hInputBuf
bne .5
jsr CS.INIT.OPENINPUT
bcc .1 scan for any other args
rts
.5 >LDA.G hOutputFile
bne .99
jsr CS.INIT.CREATEOUTPUT
bcc .1 scan for any other args
rts
.7 >LDA.G hOutputFile
beq .99
2017-12-08 16:10:39 +00:00
>LDYAI 8192 max 256x256 pixels
>SYSCALL GetMem.YA
bcs CS.INIT.RTS
2017-12-11 16:54:34 +00:00
>STYA ZPCharBufPtr
txa
2017-12-11 16:54:34 +00:00
>STA.G hCharBuf
.8 clc
CS.INIT.RTS rts
*--------------------------------------
CS.INIT.OPENINPUT
>PUSHWI 0 Aux type
>PUSHBI 0 Type
>PUSHBI SYS.FOpen.R
>PUSHW ZPPtr1
>SYSCALL LoadFile
bcs CS.INIT.RTS
>PUSHYA
txa
>STA.G hInputBuf
>SYSCALL GetMemPtr.A
>STYA ZPInputBufPtr
>LDYA L.MSG.FILE.OK
>SYSCALL PrintF.YA
2017-12-08 16:10:39 +00:00
ldy #S.FNT.dfVersion
lda (ZPInputBufPtr),y
bne .99
2017-12-08 16:10:39 +00:00
iny
lda (ZPInputBufPtr),y
2017-12-08 16:10:39 +00:00
cmp #2
beq .1
cmp #3
bne .99
2017-12-08 16:10:39 +00:00
.1 asl *2 = Entry Len in Tbl
>STA.G FNT.Version
pha
2017-12-08 16:10:39 +00:00
ldy #S.FNT.dfAscent
lda (ZPInputBufPtr),y
2017-12-08 16:10:39 +00:00
>STA.G FON.Header+S.FON.Ascent
>PUSHA
2017-12-08 16:10:39 +00:00
ldy #S.FNT.dfPixHeight
lda (ZPInputBufPtr),y
2017-12-08 16:10:39 +00:00
>STA.G FON.Header+S.FON.PixH
>PUSHA
2017-12-08 16:10:39 +00:00
ldy #S.FNT.dfPixWidth
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.PixW
>PUSHA
pla
>PUSHA
>LDYA L.MSG.HEADER.OK
>SYSCALL PrintF.YA
clc
rts
.99 >LDYA L.MSG.HEADER.KO
>SYSCALL PrintF.YA
lda #K.E.IBIN
sec
rts
*--------------------------------------
CS.INIT.CREATEOUTPUT
>PUSHWI 0 Aux type
2017-12-08 16:10:39 +00:00
>PUSHBI $CC FON Type
>PUSHBI SYS.FOpen.W+SYS.FOpen.X
>PUSHW ZPPtr1
>SYSCALL FOpen
bcs .9
>STA.G hOutputFile
.9 rts
*--------------------------------------
2017-12-08 16:10:39 +00:00
CS.RUN ldy #S.FNT.dfBreakChar
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.Break
>PUSHA
2017-12-08 16:10:39 +00:00
ldy #S.FNT.dfDefaultChar
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.Default
>PUSHA
2017-12-08 16:10:39 +00:00
ldy #S.FNT.dfLastChar
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.Last
>PUSHA
ldy #S.FNT.dfFirstChar
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.First
2017-12-11 16:54:34 +00:00
>STA.G CharIndex
2017-12-08 16:10:39 +00:00
>PUSHA
2017-12-08 16:10:39 +00:00
>LDYA L.MSG.RANGE
>SYSCALL PrintF.YA
2017-12-08 16:10:39 +00:00
>LDA.G FON.Header+S.FON.Last
2017-12-11 16:54:34 +00:00
sec
2017-12-08 16:10:39 +00:00
>SBC.G FON.Header+S.FON.First
>STA.G CharCount
2017-12-11 16:54:34 +00:00
asl
tay
lda #0
rol
>SYSCALL GetMem.YA
>STYA ZPOutPutTblPtr
txa
>STA.G hTblBuf
2017-12-08 16:10:39 +00:00
>LDA.G FNT.Version
ldx #S.FNT.dfCharTable2
cmp #4
2017-12-11 16:54:34 +00:00
beq .1
2017-12-08 16:10:39 +00:00
ldx #S.FNT.dfCharTable3
2017-12-08 16:10:39 +00:00
.1 txa
clc
adc ZPInputBufPtr
sta ZPInputTblPtr
lda #0
adc ZPInputBufPtr+1
sta ZPInputTblPtr+1
2017-12-08 16:10:39 +00:00
.2 ldy #2
lda (ZPInputTblPtr),y Get Char BitMap Offset
clc
adc ZPInputBufPtr
sta ZPInputBMPtr
iny
lda (ZPInputTblPtr),y
adc ZPInputBufPtr+1
sta ZPInputBMPtr+1
2017-12-08 16:10:39 +00:00
lda (ZPInputTblPtr) Get Char PixW
jsr CS.RUN.GetChar
2017-12-11 16:54:34 +00:00
jsr CS.RUN.DumpChar
jsr CS.RUN.ShiftLChar
jsr CS.RUN.CutRChar
jsr CS.RUN.DumpChar
>DEBUG
>INC.G CharIndex
2017-12-08 16:10:39 +00:00
>DEC.G CharCount
beq .8
2017-12-08 16:10:39 +00:00
lda ZPInputTblPtr
clc
>ADC.G FNT.Version
sta ZPInputTblPtr
bcc .2
inc ZPInputTblPtr+1
bra .2
.8 >LDYA L.MSG.DONE
>SYSCALL PrintF.YA
lda #0
sec
CS.RUN.RTS rts
*--------------------------------------
2017-12-08 16:10:39 +00:00
* A=PixW, ZPInputBMPtr->DATA
*--------------------------------------
2017-12-11 16:54:34 +00:00
CS.RUN.GetChar >STA.G CharPixW
>STA.G CharOutPixW
pha
2017-12-08 16:10:39 +00:00
lsr
lsr
lsr
tax
pla
and #7
beq .1
inx
2017-12-11 16:54:34 +00:00
.1 txa
2017-12-08 16:10:39 +00:00
>STA.G CharByteW
2017-12-11 16:54:34 +00:00
>STA.G CharOutByteW
2017-12-08 16:10:39 +00:00
2017-12-11 16:54:34 +00:00
lda #0 0 -> A -> CharByteW
2017-12-08 16:10:39 +00:00
.2 pha
clc
2017-12-11 16:54:34 +00:00
adc ZPCharBufPtr
2017-12-08 16:10:39 +00:00
sta ZPPTR1
lda #0
2017-12-11 16:54:34 +00:00
adc ZPCharBufPtr+1
2017-12-08 16:10:39 +00:00
sta ZPPTR1+1
2017-12-11 16:54:34 +00:00
>LDA.G FON.Header+S.FON.PixH
tax
.3 lda (ZPInputBMPtr) Get one source byte
2017-12-08 16:10:39 +00:00
inc ZPInputBMPtr
bne .4
inc ZPInputBMPtr+1
2017-12-11 16:54:34 +00:00
.4 tay
lda TWIST,y
sta (ZPPTR1)
2017-12-08 16:10:39 +00:00
lda ZPPTR1
clc
>ADC.G CharByteW
sta ZPPTR1
bcc .5
inc ZPPTR1+1
2017-12-11 16:54:34 +00:00
.5 dex
bne .3
2017-12-08 16:10:39 +00:00
pla
2017-12-11 16:54:34 +00:00
inc
>CMP.G CharByteW
bne .2
2017-12-08 16:10:39 +00:00
clc
rts
*--------------------------------------
2017-12-11 16:54:34 +00:00
* Dump ZPCharBufPtr : CharByteW x FON.Header+S.FON.PixH
*--------------------------------------
CS.RUN.DumpChar >LDA.G CharOutByteW
>PUSHA
>LDA.G CharOutPixW
>PUSHA
>LDA.G CharIndex
>PUSHA
>PUSHA
>LDYA L.MSG.DUMP
>SYSCALL PrintF.YA
lda ZPCharBufPtr
sta ZPPTR1
lda ZPCharBufPtr+1
sta ZPPTR1+1
>LDA.G FON.Header+S.FON.PixH
tay
.1 phy
lda #'|'
>SYSCALL PutChar.A
>LDA.G CharPixW
tay
.2 lda (ZPPTR1)
inc ZPPTR1
bne .3
inc ZPPTR1+1
.3 ldx #8
.4 lsr
pha
lda #' '
bcc .5
lda #'O'
.5 phx
phy
>SYSCALL PutChar.A
ply
plx
pla
dey
beq .6
dex
bne .4
bra .2
.6 lda #'|'
>SYSCALL PutChar.A
lda #13
>SYSCALL PutChar.A
lda #10
>SYSCALL PutChar.A
ply
dey
bne .1
rts
*--------------------------------------
CS.RUN.ShiftLChar
>LDA.G bNoShrink
bmi .9
.1 lda ZPCharBufPtr
sta ZPPTR1
lda ZPCharBufPtr+1
sta ZPPTR1+1
>LDA.G FON.Header+S.FON.PixH
tax
lda #0
pha
.2 pla
ora (ZPPTR1)
pha
lda ZPPTR1
clc
>ADC.G CharByteW
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 dex
bne .2
pla
beq .9 No pixel in first COL, must be SPACE or BREAK
lsr
bcs .9
lda ZPCharBufPtr
sta ZPPTR1
lda ZPCharBufPtr+1
sta ZPPTR1+1
>LDA.G FON.Header+S.FON.PixH
tax
.4 >LDA.G CharByteW
tay
clc
.5 dey
lda (ZPPTR1),y
ror
sta (ZPPTR1),y
tya
bne .5
lda ZPPTR1
clc
>ADC.G CharByteW
sta ZPPTR1
bcc .6
inc ZPPTR1+1
.6 dex
bne .4
>DEC.G CharOutPixW
and #7
bne .1
>DEC.G CharOutByteW
bra .1
.9 rts
*--------------------------------------
CS.RUN.CutRChar >LDA.G bNoShrink
bmi .9
lda ZPCharBufPtr
sta ZPPTR1
lda ZPCharBufPtr+1
sta ZPPTR1+1
.1 >LDA.G FON.Header+S.FON.PixH
tax
>LDA.G CharOutByteW
tay
dey
lda #0
pha
.2 pla
ora (ZPPTR1),y
pha
lda ZPPTR1
clc
>ADC.G CharByteW
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 dex
bne .2
pla
bne .4
tya No bits in this COL
beq .9 was COL 0.....SPACE or BREAK
>DEC.G CharOutByteW
>LDA.G CharOutPixW
sec
sbc #8
sta (pData),y
bra .1
.4 ldx #9
.5 dex
asl
bcc .5
>LDA.G CharOutPixW
and #$F8
sta (pData),y
txa
ora (pData),y
sta (pData),y
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
2017-12-08 16:10:39 +00:00
CS.QUIT >LDA.G hOutputFile
beq .1
>SYSCALL FClose.A
2017-12-08 16:10:39 +00:00
.1 >LDA.G hInputBuf
2017-12-11 16:54:34 +00:00
beq .2
2017-12-08 16:10:39 +00:00
>SYSCALL FreeMem.A
2017-12-11 16:54:34 +00:00
.2 >LDA.G hCharBuf
beq .3
>SYSCALL FreeMem.A
.3 >LDA.G hTblBuf
beq .8
2017-12-08 16:10:39 +00:00
>SYSCALL FreeMem.A
.8 clc
rts
*--------------------------------------
CS.END
2017-12-11 16:54:34 +00:00
*--------------------------------------
.INB /A2OSX.BUILD/X.TWIST.G
*--------------------------------------
OptionList >PSTR "NnVv"
OptionVars .DA #bNoShrink,#bNoShrink,#bVerbose,#bVerbose
MSG.USAGE >CSTR "Usage : FNT2FON FNT-File \r\n -V : Verbose Mode\r\n -N : No shrink\r\n"
2017-12-08 16:10:39 +00:00
MSG.FILE.OK >CSTR "FNT File Loaded, %D Bytes Read\r\n"
MSG.HEADER.OK >CSTR "FNT File Version : %d, Size : %d x %d pixels, Ascent : %d\r\n"
MSG.HEADER.KO >CSTR "Invalid Input File Format\r\n"
MSG.RANGE >CSTR "First/Last Char : %d/%d, Default : %d, Break : %d\r\n"
2017-12-11 16:54:34 +00:00
MSG.DUMP >CSTR "Caracter ID : %d (0x0%2h), Width(P) : %d, Width(B) : %d\r\n"
MSG.DONE >CSTR "All Done!!!\r\n"
*--------------------------------------
.DUMMY
.OR 0
DS.START
2017-12-08 16:10:39 +00:00
FNT.Version .BS 1
FON.Header .BS S.FON
ArgCount .BS 1
hInputBuf .BS 1
hOutputFile .BS 1
bVerbose .BS 1
2017-12-11 16:54:34 +00:00
bNoShrink .BS 1
hCharBuf .BS 1
hTblBuf .BS 1
CharIndex .BS 1
2017-12-08 16:10:39 +00:00
CharCount .BS 1
2017-12-11 16:54:34 +00:00
CharPixW .BS 1
2017-12-08 16:10:39 +00:00
CharByteW .BS 1
2017-12-11 16:54:34 +00:00
CharOutPixW .BS 1
CharOutByteW .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/FNT2FON.S
ASM