mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-05 18:57:03 +00:00
640 lines
11 KiB
Plaintext
640 lines
11 KiB
Plaintext
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
|
||
*--------------------------------------
|
||
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
|
||
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
|
||
L.MSG.RANGE .DA MSG.RANGE
|
||
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
|
||
|
||
>LDYAI 8192 max 256x256 pixels
|
||
>SYSCALL GetMem.YA
|
||
bcs CS.INIT.RTS
|
||
|
||
>STYA ZPCharBufPtr
|
||
txa
|
||
>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
|
||
|
||
ldy #S.FNT.dfVersion
|
||
lda (ZPInputBufPtr),y
|
||
bne .99
|
||
|
||
iny
|
||
lda (ZPInputBufPtr),y
|
||
cmp #2
|
||
beq .1
|
||
|
||
cmp #3
|
||
bne .99
|
||
|
||
.1 asl *2 = Entry Len in Tbl
|
||
>STA.G FNT.Version
|
||
pha
|
||
|
||
ldy #S.FNT.dfAscent
|
||
lda (ZPInputBufPtr),y
|
||
>STA.G FON.Header+S.FON.Ascent
|
||
>PUSHA
|
||
|
||
ldy #S.FNT.dfPixHeight
|
||
lda (ZPInputBufPtr),y
|
||
>STA.G FON.Header+S.FON.PixH
|
||
>PUSHA
|
||
|
||
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
|
||
>PUSHBI $CC FON Type
|
||
>PUSHBI SYS.FOpen.W+SYS.FOpen.X
|
||
>PUSHW ZPPtr1
|
||
>SYSCALL FOpen
|
||
bcs .9
|
||
>STA.G hOutputFile
|
||
.9 rts
|
||
*--------------------------------------
|
||
CS.RUN ldy #S.FNT.dfBreakChar
|
||
lda (ZPInputBufPtr),y
|
||
>STA.G FON.Header+S.FON.Break
|
||
>PUSHA
|
||
|
||
ldy #S.FNT.dfDefaultChar
|
||
lda (ZPInputBufPtr),y
|
||
>STA.G FON.Header+S.FON.Default
|
||
>PUSHA
|
||
|
||
|
||
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
|
||
>STA.G CharIndex
|
||
>PUSHA
|
||
|
||
>LDYA L.MSG.RANGE
|
||
>SYSCALL PrintF.YA
|
||
|
||
>LDA.G FON.Header+S.FON.Last
|
||
sec
|
||
>SBC.G FON.Header+S.FON.First
|
||
>STA.G CharCount
|
||
|
||
asl
|
||
tay
|
||
lda #0
|
||
rol
|
||
>SYSCALL GetMem.YA
|
||
>STYA ZPOutPutTblPtr
|
||
txa
|
||
>STA.G hTblBuf
|
||
|
||
>LDA.G FNT.Version
|
||
ldx #S.FNT.dfCharTable2
|
||
cmp #4
|
||
beq .1
|
||
ldx #S.FNT.dfCharTable3
|
||
|
||
.1 txa
|
||
clc
|
||
adc ZPInputBufPtr
|
||
sta ZPInputTblPtr
|
||
lda #0
|
||
adc ZPInputBufPtr+1
|
||
sta ZPInputTblPtr+1
|
||
|
||
.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
|
||
|
||
lda (ZPInputTblPtr) Get Char PixW
|
||
|
||
jsr CS.RUN.GetChar
|
||
jsr CS.RUN.DumpChar
|
||
jsr CS.RUN.ShiftLChar
|
||
jsr CS.RUN.CutRChar
|
||
jsr CS.RUN.DumpChar
|
||
|
||
>DEBUG
|
||
|
||
>INC.G CharIndex
|
||
>DEC.G CharCount
|
||
beq .8
|
||
|
||
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
|
||
*--------------------------------------
|
||
* A=PixW, ZPInputBMPtr->DATA
|
||
*--------------------------------------
|
||
CS.RUN.GetChar >STA.G CharPixW
|
||
>STA.G CharOutPixW
|
||
|
||
pha
|
||
lsr
|
||
lsr
|
||
lsr
|
||
tax
|
||
pla
|
||
and #7
|
||
beq .1
|
||
inx
|
||
|
||
.1 txa
|
||
>STA.G CharByteW
|
||
>STA.G CharOutByteW
|
||
|
||
lda #0 0 -> A -> CharByteW
|
||
|
||
.2 pha
|
||
clc
|
||
adc ZPCharBufPtr
|
||
sta ZPPTR1
|
||
lda #0
|
||
adc ZPCharBufPtr+1
|
||
sta ZPPTR1+1
|
||
|
||
>LDA.G FON.Header+S.FON.PixH
|
||
|
||
tax
|
||
|
||
.3 lda (ZPInputBMPtr) Get one source byte
|
||
|
||
inc ZPInputBMPtr
|
||
bne .4
|
||
inc ZPInputBMPtr+1
|
||
|
||
.4 tay
|
||
lda TWIST,y
|
||
sta (ZPPTR1)
|
||
lda ZPPTR1
|
||
clc
|
||
>ADC.G CharByteW
|
||
sta ZPPTR1
|
||
bcc .5
|
||
inc ZPPTR1+1
|
||
|
||
.5 dex
|
||
bne .3
|
||
|
||
pla
|
||
inc
|
||
>CMP.G CharByteW
|
||
bne .2
|
||
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
* 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
|
||
*--------------------------------------
|
||
CS.QUIT >LDA.G hOutputFile
|
||
beq .1
|
||
|
||
>SYSCALL FClose.A
|
||
|
||
.1 >LDA.G hInputBuf
|
||
beq .2
|
||
>SYSCALL FreeMem.A
|
||
|
||
.2 >LDA.G hCharBuf
|
||
beq .3
|
||
>SYSCALL FreeMem.A
|
||
|
||
.3 >LDA.G hTblBuf
|
||
beq .8
|
||
>SYSCALL FreeMem.A
|
||
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
CS.END
|
||
*--------------------------------------
|
||
.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"
|
||
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"
|
||
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
|
||
FNT.Version .BS 1
|
||
FON.Header .BS S.FON
|
||
ArgCount .BS 1
|
||
hInputBuf .BS 1
|
||
hOutputFile .BS 1
|
||
bVerbose .BS 1
|
||
bNoShrink .BS 1
|
||
hCharBuf .BS 1
|
||
hTblBuf .BS 1
|
||
CharIndex .BS 1
|
||
CharCount .BS 1
|
||
CharPixW .BS 1
|
||
CharByteW .BS 1
|
||
CharOutPixW .BS 1
|
||
CharOutByteW .BS 1
|
||
DS.END
|
||
.ED
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE /A2OSX.BUILD/FNT2FON.S
|
||
ASM
|