eXec.plMAGAZYN UŻYTKOWNIKÓW KOMPUTERÓW AMIGA
MAGAZYN UŻYTKOWNIKÓW KOMPUTERÓW AMIGA

czwartek, 29. września, 2022, 17:25

Amiga forum / AmigaOS 2.x i starsze / NewScreen i Fonts ?

Czytasz wątek: NewScreen i Fonts ?

68k_tester
Nieaktywny użytkownik starego forum

NewScreen i Fonts ? wysłany: 2009-05-18 15:02

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ć?

Odpowiedz

AmiZaP
Nieaktywny użytkownik starego forum

NewScreen i Fonts ? wysłany: 2009-05-19 12:49

@68k_tester
... a całość musi ruszyć na systemie 1.3, czy ktoś wie jak to trzeba zrobić?




Nie programuję w assemblerze, ale nie chcę żebyś pozostał tutaj tak po prostu bez odpowiedzi.
Zestawienie: ASM + OS 1.3 to już zbyt odległe czasy abyś mógł łatwo otrzymać odpowiedź.
Dotyczy to chyba nawet for zachodnich.
Ze swej strony postaram się znaleźć jakieś materiały na ten temat w swoich archiwach.
Wiem, że coś mam, ale dotarcie do tego wymaga czasu.
Jeśli podasz maila to podeślę materiał.


Odpowiedz

68k_tester
Nieaktywny użytkownik starego forum

Re:NewScreen i Fonts ? wysłany: 2009-05-19 13:01

adres email turbobuster@o2.pl

Dzięki wszelkie informacje są dla mnie cenne..

Pozdrawiam

Darek


Odpowiedz

68k_tester
Nieaktywny użytkownik starego forum

Re:NewScreen i Fonts ? wysłany: 2009-05-21 13:24

Oto rozwiązanie dla zainteresowanych tematem:



;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.
;UWAGAlik 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


Odpowiedz

AmiZaP
Nieaktywny użytkownik starego forum

Re:NewScreen i Fonts ? wysłany: 2009-05-22 00:35

Widzę, że przewalczyłeś problem.
To pozytywnie, chociaż gdy oglądam ten akurat kod to ciągle się utwierdzam w przekonaniu,
że assembler niczego w tym wypadku nie wnosi ponad to co daje C/C++.

Życzę dalszego i owocnego składania mnemoników.


Odpowiedz

68k_tester
Nieaktywny użytkownik starego forum

Re:NewScreen i Fonts ? wysłany: 2009-05-22 04:54

To prawda ale kod wynikowy z assemblera zawsze ma parę bajtów mniej....
Lubie assembler a ten z 68K jest wyjątkowo przyjemny i elastyczny pisze się w nim jak w BASIC'u.
Co do C to kompilatory jakie zdobyłem (Aztec 3.4a i Aztec 5.0) trochę mnie frustrują... bo składniowo
pamiętają czasy Ritchie'go i Kernighan'a a od ich edytora gorszy jest już tylko Vim.

Dzięki za pomoce i przykłady.
Pozdrawiam

Odpowiedz

AmigaOS.pl