[#1] NewScreen i Fonts ?
Rozrysowałem czcionkę zawierającą potrzebne mi znaki semigraficzne. Jednak chce aby dane bitowe mojej czcionki umieszczone były w kodzie programu a nie jako osobny plik dodawany do katalogu (fonts) Po dołączeniu pliku binarnego fonta do programu asemblerowego nie wiem jak zainicjalizować ten obraz bitowy w systemie aby był rozpoznawalny jako Font.
Funkcja AddFont() dodaje czcionkę do systemowej listy fontów jednak wymaga struktury TextFont ,którą trzeba odpowiednio wypełnić wielokrotne testy ustawienia tej struktury zgodnie z opisem z K.R.M dla (v37) nie dały rezultatu. Program powstaje w DevPac'u a całość musi ruszyć na systemie 1.3, czy ktoś wie jak to trzeba zrobić?
[#2] Re: NewScreen i Fonts ?

@68k_tester, post #1

Struktura TextFont jest zintegrowana z plikiem czcionki. Poza tym wydaje mi się, że dodawanie fontu do sys. listy i otwieranie go, aby otrzymać wskaźnik do struktury, który właśnie masz, jest zbyteczne.
[#3] Re: NewScreen i Fonts ?

@cholok, post #2

Nie wiedziałem,że struktura TextFont jest całością z plikiem czcionki!!!
Jak rozumiem pola (TextFont) znajdują się na samym początku pliku bo dalej pewnie są graficzne dane bitowe.

Jednak otwarcie ekranu wymaga struktury (NewScreen) ,która zawiera wskaźnik na strukturę (TextAttr) ona to opisuje czcionkę jaką ustalamy
dla tego ekranu i jego okien.... Dalej nie wiem jak powiązać strukturę (TextAttr) zawartą w (NewScreen) ze strukturą (TextFont)?????


Dodatkowa obserwacja: Plik czcionki jest programem wykonywalnym więc raczej nie zawiera struktury (TextAttr) na pozycji 0.



Ostatnia modyfikacja: 18.05.2009 20:41:55
[#4] Re: NewScreen i Fonts ?

@68k_tester, post #3

Przykład z RKM
* A sparse (but complete) sample font.
*
* Copyright (c) 1990 Commodore-Amiga, Inc.
*
* This example is provided in electronic form by Commodore-Amiga, Inc. for
* use with the 1.3 revisions of the Addison-Wesley Amiga reference manuals.
*
* To use this font, do the following:
*
* 1. Assemble this file (assumed to have been saved as "suits8.asm").
* For example, if you have the CAPE 680x0 assembler, and you have
* assigned "include:" to the directory containing your include files,
* use:
* CAsm -a "suits8.asm" -o "suits8.o" -i "include:"
*
* Link "suits8.o". For example, if you have Lattice, use:
* BLink from "suits8.o" to "suits8"
*
* 2. Create the subdirectory "Fonts:suits".
* Copy the file "suits8" (created in step 1.) to "Fonts:suits/8".
*
* 3. Create a font contents file for the font. You can do this
* by three methods:
* a. Run the program "Workbench1.3:System/FixFonts" which
* will create the file "Fonts:suits.font" automatically.
* b. Use the NewFontContents() call in the diskfont library to
* create a FontContentsHeader structure, which can be saved
* in the Fonts: directory as "suits.font". This is essentially
* what FixFonts does.
* c. Create the file manually by following these directions:
*
* Create a file in the Fonts: directory named "suits.font" the
* contents of which are as follows:
*
* The first word (two bytes) must contain the font header identifier, FCH_ID
* FCH_ID is defined in "libraries/diskfont.i" and is currently 0x0f00.
*
* The next word contains the number of FontContents entries. There will
* be only one font descriptor file in this sample font's directory, so the
* value 0x0001 should be used.
*
* Follow this information with the hex values for the string "suits/8";
* the path AmigaDOS should follow to reach this font size. The path is
* relative to "Fonts:"; "suits" is the directory in which AmigaDOS will find
* this font's font descriptor files and "8" is a font descriptor file.
* This should be followed by enough null characters (0x00) to pad the
* pathname to MAXFONTPATH bytes in length. MAXFONTPATH is defined in
* "libraries/diskfont.i" and is currently 256 bytes. The string in this
* example is 7 bytes long, therefore 249 bytes of padding are needed.
* Note that the font pathname must have at least one null character after
* it, making the maximum pathname length MAXFONTPATH-1.
*
* The next word contains the font YSize; in this case, 0x0008.
*
* The next byte contains the font Flags, in this case 0x00.
*
* The last byte contains the font characteristics, in this case 0x60.
* This says it is a disk-based font (bit 1 set) and the font has been
* removed (bit 7 set), saying that the font is not currently resident.
*
* Summary of suits.font file:
*
* Name: fch_FileID fch_NumEntries fc_FileName fc_YSize fc_Flags fc_Style
* Size: word word MAXFONTPATH bytes word byte byte
* Hex: 0f00 0001 73756974732F3800 0008 00 60
* ASCII: s u i t s / 8
*
* The correct length of a font file may be calculated with this formula:
* length := ((number of font contents entries) * (MAXFONTPATH+4)) + 4.
* In this case (one entry), this becomes (MAXFONTPATH + 8) or 264.
*
* To try out this example font, do the following.
* Start up the Notepad program or any other program which allows the
* user to select fonts. Choose the "suits" font in size 8 and type "abcd".
* This example font defines ASCII characters 'a' 'b' 'c' and 'd' only.
* All other characters map to a rectangle, meaning "character unknown".

INCLUDE "exec/types.i"
INCLUDE "exec/nodes.i"
INCLUDE "libraries/diskfont.i"

* Provide an easy exit in case this file is "Run" instead of merely loaded.

MOVEQ #-1,D0
RTS

* The following five entries comprise a Node structure, used by the system
* to link disk fonts into a list. See the definition of the "DiskFontHeader"
* structure in the "libraries/diskfont.i" include file for more information.

DC.L 0 ; ln_Succ
DC.L 0 ; ln_Pred
DC.B NT_FONT ; ln_Type
DC.B 0 ; ln_Pri
DC.L fontName ; ln_Name

DC.W DFH_ID ; FileID
DC.W 1 ; Revision
DC.L 0 ; Segment

* The next MAXFONTNAME bytes are a placeholder. The name of the
* font contents file (e.g. "suits.font") will be copied here after this
* font descriptor is LoadSeg-ed into memory. The Name field could have
* been left blank, but inserting the font name and size (or style) allows
* one to tell something about the font by using "Type OPT H" on the file.

fontName:
DC.B "suits8" ; Name

* If your assembler needs an absolute value in place of the "length"
* variable, simply count the number of characters in Name and use that.

length EQU *-fontName ; Assembler calculates Name's length.
DCB.B MAXFONTNAME-length,0 ; Padding of null characters.

* The rest of the information is a TextFont structure.
* See the "graphics/text.i" include file for more information.

font:
DC.L 0 ; ln_Succ
DC.L 0 ; ln_Pred
DC.B NT_FONT ; ln_Type
DC.B 0 ; ln_Pri
DC.L fontName ; ln_Name
DC.L 0 ; mn_ReplyPort
DC.W 0 ; (Reserved for 1.4 system use.)
DC.W 8 ; tf_YSize
DC.B 0 ; tf_Style
DC.B FPF_DESIGNED!FPF_PROPORTIONAL!FPF_DISKFONT ; tf_Flags
DC.W 14 ; tf_XSize
DC.W 6 ; tf_Baseline

* tf_Baseline must be no greater than tf_YSize-1, otherwise algorithmically-
* generated styles (italic in particular) can corrupt system memory.

DC.W 1 ; tf_BoldSmear
DC.W 0 ; tf_Accessors
DC.B 97 ; tf_LoChar
DC.B 100 ; tf_HiChar
DC.L fontData ; tf_CharData
DC.W 8 ; tf_Modulo, no. of bytes to add to the
; data pointer to go from one row of
; a character to the next row of it.
DC.L fontLoc ; tf_CharLoc, bit position in the font
; data at which the character begins.
DC.L fontSpace ; tf_CharSpace
DC.L fontKern ; tf_CharKern

* The four characters of this font define the four playing-card suit symbols.
* The heart, club, diamond, and spade map to the lower-case ASCII characters
* 'a', 'b', 'c', and 'd' respectively. The fifth entry in the table is the
* character to be output when there is no entry defined in the character set
* for the requested ASCII value.
*
*
* 97 (a) 98 (b) 99 (c) 100 (d) 255

* Font data is bit-packed edge to edge to save space.

fontData:
DC.W $071C0,$08040,$070FF,$0F000
DC.W $0FBE3,$0E0E0,$0F8C0,$03000
DC.W $07FCF,$0F9F3,$026C0,$03000
DC.W $03F9F,$0FFFF,$0FFC0,$03000
DC.W $01F0E,$0B9F3,$026C0,$03000
DC.W $00E00,$080E0,$020C0,$03000
DC.W $00403,$0E040,$0F8FF,$0F000
DC.W $00000,$00000,$00000,$00000
DC.W $00000,$00000,$00000,$00000

* The fontLoc information is used to "unpack" the fontData.
* Each pair of words specifies how the characters are bit-packed. For
* example, the first character starts at bit position 0x0000, and is 0x000B
* (11) bits wide. The second character starts at bit position 0x000B and
* is 0x000B bits wide, and so on. This tells the font handler how to unpack
* the bits from the array.

fontLoc:
DC.L $00000000B,$0000B000B,$000160007,$0001D000B,$00028000C

* fontSpace array: Use a space this wide to contain this character when it
* is printed. For reverse-path fonts these values would be small or negative.

fontSpace:
DC.W 000012,000012,000008,000012,000013

* fontKern array: Place a space this wide after the corresponding character
* to separate it from the following character. For reverse-path fonts these
* values would be large negative numbers, approximately the width of the
* characters.

fontKern:
DC.W 000001,000001,000001,000001,000001

fontEnd:
END



Ostatnia modyfikacja: 18.05.2009 21:24:13
[#5] Re: NewScreen i Fonts ?

@cholok, post #4

Dzięki temu przykładowi i porównaniu kilku plików z katalogu "Font" ustaliłem ,że w pliku z fontem
umieszczona jest struktura (TextFont) jej lokalizacja niezależnie od rozmiaru czcionki rozpoczyna
się zawsze od offsetu $3A dziesiętnie 58 względem początku pliku.

Dodatkowo odnalazłem w "aminecie" bardzo stary program o nazwie TransFont ,który pozwala wskazany mu
plik czcionki zamienić na tekst assemblerowy.
[#6] Re: NewScreen i Fonts ?

@68k_tester, post #5

Proste wstawienie pliu czcionki do kodu programu nie jest wykonalne.
Pomimo ustalenia offsetu do struktury (TextFont) dane w niej zawarte
nie pozwalają na jej bezpośrednie zastosowanie.Kłopot sprawia format
pliku czcionki... jest to program wykonywalny z zawartą w nim strukturą...
co oznacza ,że wskaźniki do adresów mają wartości ustalone w chwili
kompilacji i na pewno nie pokryją się z miejscem pod jakim dograliśmy
plik z fontem.

Jedynym skutecznym rozwiązaniem na jakie wpadłem jest zastosowanie
programu "TransFont" i dekompilacja pliku fonta.Po zestawieniu w
całość z naszym programem offsety są ponownie wyliczane przy assemblacji.


Oto ostateczne działające rozwiązanie problemu:
Jak widze nikt nie wpadł na inną metodę.




;Program: (1).Test otwarcia ekranu "Screen" Workbench
; (2).Wstawienie do kodu programu pliku binarnego z Font'em
; (3).Przypisanie dodanego Font'a do struktury "NewScreen"


;Test: Działa OK!!


;UWAGA: W systemowym katalogu "FONTS" znajdują się pliki zawierające
;obraz bitowy znaków czcionek graficznych wraz z nimi zintegrowana jest
;struktuta (TextFont) która opisuje allokację i format liter czcionki.
;Pozycja struktury (TextFont) w dowolnym pliku z czcionką jest
;zawsze taka sama i znajduje się pod offsetem $3A dziesiętnie 58
;względem początku pliku.
;UWAGA:Plik czcionki jest skompilowany jako plik wykonywalny.
;Dekompilacje pliku czcionki można przeprowadzić programem "TransFont"
;zwraca on plik assemblerowy czcionki wraz z zawartymi w nim strukturami.


;CPU: MC68000
;Assembler: DevPac v3.02
;Platforma: Amiga 500 OS v1.3 Kickstart (v34)


;exec.library

Exec equ 4
OldOpenLibrary equ -408
CloseLibrary equ -414

;intuition.library

OpenScreen equ -198
CloseScreen equ -66

;graphics.library

AddFont equ -480
RemFont equ -486
OpenFont equ -72
CloseFont equ -78
SetFont equ -66
AskFont equ -474

HIRES: = $8000
CUSTOMSCREEN: = $000f





Start: move.l Exec.w,a6
lea GfxName(pc),a1
jsr OldOpenLibrary(a6)
tst.l d0
beq Error_01
move.l d0,GfxBase

move.l Exec.w,a6
lea IntName(pc),a1
jsr OldOpenLibrary(a6)
tst.l d0
beq Error_02
move.l d0,IntBase

;UWAGA: Ponowne dodawanie czcionki już dodanej do systemu daje GURU...

Font_Open: move.l GfxBase,a6
move.l #Font_Screen,A0
jsr OpenFont(a6)
tst.l d0
beq.s Font_Add
Font_Close: move.l d0,a1
move.l GfxBase,a6
jsr CloseFont(a6)
bra.s OtwarcieEkranu
Font_Add: move.l GfxBase,a6
move.l #TextFont,a1
jsr AddFont(a6)



OtwarcieEkranu: move.l IntBase,a6
move.l #ScreenData,a0
jsr OpenScreen(a6)
tst.l d0
beq.s Error_03
move.l d0,ScreenBase
;------------------

WaitKey: cmp.b #$75,$bfec01 ;Wait for Key ($75=Esc)
bne.s WaitKey

;------------------
move.l IntBase,a6
move.l ScreenBase,a0
jsr CloseScreen(a6)
move.l GfxBase,a6
move.l #TextFont,a1
jsr RemFont(a6)

bsr Error_03
moveq #0,d0
rts

Error_03: move.l Exec.w,a6
move.l IntBase,a1
jsr CloseLibrary(a6)

Error_02: move.l Exec.w,a6
move.l GfxBase,a1
jsr CloseLibrary(a6)

Error_01: moveq #-1,d0
rts

IntBase: dc.l 0
IntName: dc.b 'intuition.library',0
GfxBase: dc.l 0
GfxName: dc.b 'graphics.library',0
;----------------------------------------------------
ScreenData: dc.w 0 ;Left Edge
dc.w 0 ;Top Edge
dc.w 640 ;Width
dc.w 256 ;Height
dc.w 2 ;Depth bitlan
dc.b 0 ;DetailPen
dc.b 1 ;BlockPen
dc.w HIRES ;ViewModes
dc.w CUSTOMSCREEN ;Type
dc.l Font_Screen ;Font Ptr
dc.l ScreenCaption ;DefaultTitleName Ptr
dc.l 0 ;Gadgets Ptr
dc.l 0 ;CustomBitMap Ptr
;----------------------------------------------------
ScreenCaption: dc.b '1234567890 Test Screen Key (Esc) to exit.',0
ScreenBase: dc.l 0
;----------------------------------------------------
Font_Screen: dc.l FontName ;wskaznik na nazwe czcionki
dc.w 8 ;rozmiar czcionki
dc.b 0 ;styl czcionki domyslnie 0
dc.b 0 ;flagi
FontName dc.b "tpzpl.font"

Length equ *-FontName
dcb.b 32-Length,0

TextFont ; Begin of TextFont structure
dc.l 0 ; ln_Succ
dc.l 0 ; ln_Pred
dc.b 12 ; ln_Type, NT_FONT
dc.b 0 ; ln_Pri
dc.l FontName ; ln_Name
dc.l 0 ; MN_REPLYPOPT
dc.w 0 ; MN_LENGTH
dc.w 8 ; tf_YSize
dc.b $00 ; tf_Style
dc.b $42 ; tf_Flags
dc.w 8 ; tf_XSize
dc.w 6 ; tf_Baseline
dc.w 1 ; tf_BoldSmear
dc.w 0 ; tf_Accessors
dc.b 32 ; tf_LoChar
dc.b 255 ; tf_HiChar
dc.l CharData ; tf_CharData
dc.w 192 ; tf_Modulo
dc.l CharLoc ; tf_CharLoc
dc.l 0 ; tf_CharSpace
dc.l 0 ; tf_CharKern
CharData
dc.w $0018,$6C6C,$1800,$3818,$0C30,$0000,$0000,$0003
dc.w $3C18,$3C3C,$1C7E,$1C7E,$3C3C,$0000,$0000,$003C
dc.w $7C3C,$7C1E,$787E,$7E3C,$663C,$06C6,$60C6,$C63C
dc.w $7C78,$7C3C,$7E66,$66C6,$C3C3,$FE3C,$C03C,$1000
dc.w $1800,$6000,$0600,$1C00,$6018,$0C60,$1800,$0000
dc.w $0000,$0000,$3000,$0000,$0000,$000E,$1870,$720F
dc.w $0018,$001C,$42C3,$183C,$667E,$1C00,$3E7E,$7E3C
dc.w $1878,$7818,$003E,$0000,$3038,$0040,$40C0,$1830
dc.w $0C18,$7166,$1800,$0230,$0C00,$6630,$0C60,$6678
dc.w $1830,$0C18,$0CC3,$003F,$300C,$1866,$0618,$3C30
dc.w $0C18,$7166,$1800,$0430,$0C00,$6630,$0C18,$0060
dc.w $0C30,$0C18,$0C00,$0000,$300C,$0C00,$0C18,$0000
dc.w $0018,$6C6C,$3E66,$6C18,$1818,$6618,$0000,$0006
dc.w $6638,$6666,$3C60,$3006,$6666,$1818,$0600,$6066
dc.w $C666,$6630,$6C60,$6066,$6618,$06CC,$60EE,$E666
dc.w $66CC,$6666,$1866,$66C6,$6666,$0C30,$600C,$3800
dc.w $1800,$6000,$0600,$3000,$6000,$0060,$1800,$0000
dc.w $0000,$0000,$3000,$0000,$0000,$0018,$1818,$9C3C
dc.w $7E00,$0C36,$3C66,$1860,$6681,$2433,$0681,$0066
dc.w $180C,$0C30,$007A,$0000,$7044,$CCC6,$C623,$0018
dc.w $1866,$8E00,$243C,$1E18,$187E,$0018,$1860,$006C
dc.w $D618,$3C66,$3C3C,$C666,$1818,$FE00,$08FE,$6618
dc.w $1866,$8E00,$2400,$0818,$1800,$0018,$181A,$66FC
dc.w $1818,$1866,$1866,$1802,$1818,$1866,$1800,$6600
dc.w $0018,$00FE,$60AC,$6830,$300C,$3C18,$0000,$000C
dc.w $6E78,$0606,$6C7C,$6006,$6666,$1818,$187E,$1806
dc.w $DE66,$6660,$6660,$6060,$6618,$06D8,$60FE,$F666
dc.w $66CC,$6670,$1866,$66C6,$3C3C,$1830,$300C,$6C00
dc.w $0C3C,$7C3C,$3E3C,$7C3E,$7C18,$0C66,$18EC,$7C3C
dc.w $7C3E,$7C3C,$7C66,$66C6,$C666,$7E18,$1818,$00F0
dc.w $6618,$3E30,$663C,$183C,$009D,$4466,$00B9,$003C
dc.w $7E18,$1860,$667A,$1800,$3044,$664C,$4C66,$183C
dc.w $3C3C,$3C3C,$3C66,$347E,$7E60,$7E3C,$3C6C,$3C66
dc.w $E63C,$763C,$6666,$6C6E,$6666,$0C66,$C318,$663C
dc.w $3C3C,$3C3C,$3C3C,$3C3C,$3C3C,$3C00,$001C,$0018
dc.w $7C00,$3C00,$3C00,$007C,$0000,$7E00,$007E,$0000
dc.w $0018,$006C,$3CD8,$7600,$300C,$FF7E,$007E,$0018
dc.w $7E18,$0C1C,$CC06,$7C0C,$3C3E,$0000,$6000,$060C
dc.w $D67E,$7C60,$6678,$786E,$7E18,$06F0,$60D6,$DE66
dc.w $7CCC,$7C3C,$1866,$66D6,$1818,$3030,$180C,$C600
dc.w $0006,$6660,$6666,$3066,$6618,$0C6C,$18FE,$6666
dc.w $6666,$6660,$3066,$66C6,$6C66,$0C70,$180E,$00C3
dc.w $6618,$6C78,$3C18,$0066,$00B1,$3CCC,$00A5,$0000
dc.w $1830,$0C00,$663A,$1800,$3038,$3358,$582C,$3066
dc.w $6666,$6666,$6666,$6060,$6078,$6018,$1878,$18F6
dc.w $F666,$6666,$3066,$387E,$6666,$1866,$66FC,$6C06
dc.w $0606,$0606,$0606,$6066,$6666,$6618,$1838,$183C
dc.w $663C,$663C,$603C,$7ECE,$6666,$0C66,$660C,$6600
dc.w $0018,$00FE,$0636,$DC00,$300C,$3C18,$0000,$0030
dc.w $7618,$1806,$FE06,$6618,$6606,$0000,$187E,$1818
dc.w $DE66,$6660,$6660,$6066,$6618,$06D8,$60C6,$CE66
dc.w $60CC,$6C0E,$1866,$3CFE,$3C18,$6030,$0C0C,$0000
dc.w $003E,$6660,$667E,$3066,$6618,$0C78,$18D6,$6666
dc.w $6666,$603C,$3066,$66D6,$3866,$1818,$1818,$000F
dc.w $6618,$3E30,$423C,$183C,$009D,$0066,$00B9,$0000
dc.w $187C,$7800,$660A,$0000,$3000,$6632,$3ED9,$607E
dc.w $7E7E,$7E7E,$7E7E,$6078,$7860,$7818,$1860,$1866
dc.w $DE66,$6666,$0E66,$6C76,$6666,$3066,$3C60,$663E
dc.w $3E3E,$3E3E,$3E3E,$607E,$7E7E,$7E18,$1858,$1866
dc.w $6666,$6666,$3C66,$00D6,$6666,$1866,$6618,$6600
dc.w $0000,$006C,$7C6A,$CE00,$1818,$6618,$1800,$1860
dc.w $6618,$3066,$0C66,$6618,$660C,$1818,$0600,$6000
dc.w $C066,$6630,$6C60,$6066,$6618,$66CC,$60C6,$C666
dc.w $60DC,$6666,$1866,$3CEE,$6618,$C030,$060C,$0000
dc.w $0066,$6660,$6660,$303E,$6618,$0C6C,$18C6,$6666
dc.w $7C3E,$6006,$3066,$3CFE,$6C3C,$3018,$1818,$003C
dc.w $6618,$0C30,$0018,$1806,$0081,$7E33,$00A5,$0000
dc.w $0000,$0000,$660A,$0000,$007C,$CC66,$6233,$6666
dc.w $6666,$6666,$6666,$3060,$6064,$6018,$1860,$186C
dc.w $CE66,$6666,$6666,$C666,$6666,$6066,$18C0,$6666
dc.w $6666,$6666,$6666,$6060,$6060,$6018,$1818,$1866
dc.w $6666,$6666,$0666,$18E6,$6666,$3066,$3C30,$3C00
dc.w $0018,$006C,$18CC,$7B00,$0C30,$0000,$1800,$18C0
dc.w $3C18,$7E3C,$0C3C,$3C18,$3C38,$1818,$0000,$0018
dc.w $7866,$7C1E,$787E,$603E,$663C,$3CC6,$7EC6,$C63C
dc.w $607E,$663C,$183C,$18C6,$C318,$FE3C,$033C,$0000
dc.w $003E,$7C3C,$3E3C,$3006,$660C,$0C66,$0CC6,$663C
dc.w $6006,$607C,$1C3E,$186C,$C618,$7E0E,$1870,$00F0
dc.w $7E18,$007E,$0018,$183C,$007E,$0000,$0081,$0000
dc.w $7E00,$0000,$7F0A,$0018,$0000,$00CF,$C467,$3C66
dc.w $6666,$6666,$6666,$1E7E,$7E7E,$7E3C,$3C7E,$3C78
dc.w $C63C,$3C3C,$3C3C,$00FC,$3C3C,$FE3C,$18FE,$6C3E
dc.w $3E3E,$3E3E,$3E3E,$3C3C,$3C3C,$3C0C,$0C0C,$0C3C
dc.w $663C,$3C3C,$7C3C,$007C,$3E3E,$7E3E,$187E,$1800
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$3000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0030,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$00FE
dc.w $0000,$0000,$0000,$003C,$0000,$7800,$0000,$0000
dc.w $6006,$0000,$0000,$0000,$0030,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$007E,$0000
dc.w $0000,$0000,$6000,$0030,$0000,$0002,$0E01,$0000
dc.w $0000,$0000,$0003,$0000,$0002,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$6000
dc.w $0000,$0000,$0006,$0000,$000C,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0080,$0000,$0000,$3000,$3000
CharLoc
dc.l $00000008,$00080008,$00100008,$00180008
dc.l $00200008,$00280008,$00300008,$00380008
dc.l $00400008,$00480008,$00500008,$00580008
dc.l $00600008,$00680008,$00700008,$00780008
dc.l $00800008,$00880008,$00900008,$00980008
dc.l $00A00008,$00A80008,$00B00008,$00B80008
dc.l $00C00008,$00C80008,$00D00008,$00D80008
dc.l $00E00008,$00E80008,$00F00008,$00F80008
dc.l $01000008,$01080008,$01100008,$01180008
dc.l $01200008,$01280008,$01300008,$01380008
dc.l $01400008,$01480008,$01500008,$01580008
dc.l $01600008,$01680008,$01700008,$01780008
dc.l $01800008,$01880008,$01900008,$01980008
dc.l $01A00008,$01A80008,$01B00008,$01B80008
dc.l $01C00008,$01C80008,$01D00008,$01D80008
dc.l $01E00008,$01E80008,$01F00008,$01F80008
dc.l $02000008,$02080008,$02100008,$02180008
dc.l $02200008,$02280008,$02300008,$02380008
dc.l $02400008,$02480008,$02500008,$02580008
dc.l $02600008,$02680008,$02700008,$02780008
dc.l $02800008,$02880008,$02900008,$02980008
dc.l $02A00008,$02A80008,$02B00008,$02B80008
dc.l $02C00008,$02C80008,$02D00008,$02D80008
dc.l $02E00008,$02E80008,$02F00008,$02F80008
dc.l $04700008,$04780008,$04800008,$03A00008
dc.l $03A80008,$03B00008,$03B80008,$04880008
dc.l $04900008,$04980008,$04A00008,$03E00008
dc.l $03E80008,$04280008,$04300008,$04A80008
dc.l $04400008,$03D00008,$03D80008,$04380008
dc.l $04600008,$03C80008,$04500008,$03C00008
dc.l $04480008,$04580008,$04680008,$03780008
dc.l $03800008,$03880008,$04B00008,$04B80008
dc.l $00000008,$04180008,$03900008,$00000008
dc.l $00000008,$03980008,$00000008,$00000008
dc.l $05780008,$00000008,$04100008,$00000008
dc.l $04D00008,$04C80008,$00000008,$03F00008
dc.l $00000008,$00000008,$00000008,$00000008
dc.l $04C00008,$04200008,$04000008,$00000008
dc.l $05800008,$00000008,$00000008,$00000008
dc.l $00000008,$00000008,$04080008,$03F80008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $03000008,$03000008,$03000008,$03000008
dc.l $00000008,$03080008,$03100008,$03180008
dc.l $03200008,$03280008,$03300008,$03380008
dc.l $03400008,$03480008,$03500008,$03580008
dc.l $03600008,$00680008,$03680008,$03700008
dc.l $04F80008,$05000008,$05080008,$05100008
dc.l $05180008,$05200008,$05280008,$05300008
dc.l $05380008,$05400008,$05480008,$05500008
dc.l $05580008,$05600008,$05680008,$05700008
dc.l $00000000

FontEnd
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem