Fonts

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Habe die Routine jetzt an einen der Mods gemailt (Galahat, bitte checke mal deinen Email-account). Ansonsten maile ich da auch gerne direkt an Interessenten.

      Hochladen ins Forum ging nicht, das Paket ist leider zu groß (2,1Mb, maximal zulässig ist aber nur 1MB), kleiner kann ich keine Installroutine packen...auch wenn da fast nur eine dll oder ocx drin ist. Zu Sicherheit habe ich auch noch die Standart-runtimes von VB mit reingepackt, damit habe das nämlich gecoded.

      Hoffentlich geht es jetzt...Installation immer als Admin ausführen, also man sollte Admin-Rechte auf dem Rechner haben und am besten, um sicher zu gehen, mit rechtsklick "als Admin ausführen" anklicken...

      (Am besten aber einfach die kleine exe ziehen und die Schritte aus dem Registerbeispiel weiter vorne machen, dann habt Ihr nur ein paar kb auf dem System.)

      Gruss
      Peer
    • Mahlzeit,

      kann mir irgendwer sagen, wie es sich mit den TT-Fonts verhält?

      Alles, was die TTs von den Proportionalfonts unterscheidet, ist die "2" ganz oben und, was mir auffiehl, die beiden 0-Spalten am Ende jedes Chars...
      Der 8x8TT.font in Bascom verwendet aber, meiner Meinung nach, einen prop-Font, weil alle Buchstaben 8 Spalten breit sind.
      Wenn nun aber jeder Buchstabe beliebig breit sein darf, dann müsste doch eigentlich zumindest beim 'M" und dem "W" eine größere Breite zustande kommen, oder?

      Wie ist das denn nur zu lesen?

      Ich würde das jetzt so interpretieren:
      Bascom definiert die Nullspalten einfach als "nicht vorhanden + 2 Leerzeichen", die man zu Beginn ganz oben im Font definiert (da kann dann ja auch 3,4 oder 5 oder was auch immer stehen), womit Bascom den Job der Codierung selbst übernimmt? (also Nuller weg und dann den definierten Abstand einfügen?)

      Gruss
      Peer
    • Hallo,

      so richtig durchschaut habe ich das Bascom-Font-Format noch nicht, aber ich vermute wohl dasselbe wie du:

      - Der einzige Unterschied zwischen den Sample-Fonts (MCS Electronics\BASCOM-AVR\SAMPLES\LCDGRAPH) font8x8.font und font8x8TT.font ist die 2 in der ersten Datenzeile.
      D.h. das Daten-Format für Fixed-Width-Fonts ist dasselbe wie für variable Fonts, daher wird die variable Buchstabenbreite wohl in der Fontroutine erledigt.
      - Mit den etwas spärlichen Infos aus der Bascom-Hilfe (avrhelp.mcselec.com/index.html?font_editor.htm) denke ich, dass die Routine, falls das TT-Flag gesetzt ist (4. Wert 1. Zeile <> 0), Datenbytes am Anfang und Ende des Zeichens, die 0 sind, überspringt/ignoriert.
      - Damit die Zeichen dann nicht zusammen kleben, wird ein fixer Abstand (in dieser Beispielfont eben 2 Pixel) eingefügt.

      Und noch ein bisschen was von meinem Senf:
      Mark hat da wohl bei den Font-Typen ein bisschen was durcheinander gebracht,
      die Bascom-Standard-Fonts sind nichtproportionale (Bitmap-) Fonts (oder Fixed Font, Monospace, ...) -> de.wikipedia.org/wiki/Nichtproportionale_Schriftart,
      im Gegensatz zu Fonts mit angepasster Zeichenbreite, den proportionalen Schriftarten.
      Truetype ist ein Format für proportionale Schriftarten, bei der Zeichen nicht als Bitmap, sondern vektorisiert abgespeichert sind, mit Bezier-Splines, individuellen Abständen zwischen verschiedenen Zeichen (zb. der Abstand zwischen T und , oder T und L) und und und, also für Bascom/AVRs nicht zu gebrauchen :)

      Lg
    • genau richtig, das ist TrueType, aber da schaun wir mal großzügig drüber weg, was gemeint war, ist wohl klar.

      Ich habe diese Einstellungen einfach mal versucht, also die 2 Pixel Abstand, aber es tut sich leider nichts. Der Font bleibt proportional...hatte auch mal im Dateinamen das TT hintergehängt...was tut man nicht alles, wenn man was nicht versteht ;)

      Tja, die Beschreibung ist wirklich sehr dünn...

      Ich würde das ja gerne mit in meinen Fontmaker einbauen, aber wie, wenn es nicht geht.

      Im Anhang habe ich mal meine neue Version als Setup.exe hochgeladen als Installationsvariante. Das Zip installiert nur das Com-Modul, damit man die Win-eigenen Dateidialoge benutzen kann. Sonst nichts mehr, damit konnte ich das Setup unter 1MB drücken.

      Man kann jetzt auch (rudimentär) bestehende Bascom-Fonts einladen.
      Aber bitte nichts an den Einstellungen verändern (also Breite und Höhe). Dann gibt es Probleme. Ich werde das nochmal passend machen.

      Es gibt noch einen kleinen Bug, wobei er bei bestimmten Formaten das Pixelfenster nicht richtig ausließt. Checke ich mal am WE.
      Aber ansonsten geht es ganz gut, wenn man dem Ablauf von 1-10 folgt.

      Gruss
      Peer
      Dateien
    • Leider habe ich kein GLCD zur Hand um die Bascom-Fontroutinen zu testen...
      Aber ich hab mir mal den für die Zeichendarstellung zuständigen Code rausgesucht, hier die Subroutine für das in der Hilfe erwähnte EADOGM128:

      Quellcode: glcdEADOGM128x3.lib

      1. ;character in r24
      2. ;in order to draw multiple fontsizes the fontdata stores the
      3. ;number of bytes and the number of rows.
      4. ; .db 1,8,8,0 , means 1 row, 8 bits width, block size total, last param is spacing for true type fonts
      5. _gwrite_lcdchar:
      6. $EXTERNAL _LPMBYTE, _MUL8, _GLOCATE
      7. Push r30 ; save registers
      8. Push r31
      9. lds r21,{___lcdrow} ; the row
      10. push r21 ; save it
      11. lds r7,{___lcdcol}
      12. Lds r30 ,{___fonttable} ; start of font data
      13. Lds r31 ,{___fonttable +1}
      14. #IF _ROMSIZE>65536
      15. * In R3,RAMPZ ; save RAMPZ page
      16. * Lds r0,{___fonttable +2} ; load page number for the used font
      17. * Out RampZ,r0 ; set page number
      18. #ENDIF
      19. Call _lpmbyte ; Get Y Bytes 1 For Example
      20. mov r18,r0 ; save Y
      21. call _lpmbyte ; get X bytes , 8 for an 8*8 font
      22. mov r19,r0 ; save X
      23. call _lpmbyte ; get blocksize
      24. mov r16,r0 ; in accu
      25. call _lpmbyte ; get blocksize
      26. mov r22,r0 ; spacing, should be 1 or 2
      27. subi r24,32 ; chars start at 32 (space)
      28. mov r20,r24
      29. call _mul8 ; get offset
      30. Add r30,r20 ; add to start of font data
      31. Adc r31,r21
      32. #IF _ROMSIZE>65536
      33. rcall _glcd_rampcheck_inc ; check boundery
      34. #ENDIF
      35. ;--------optional true type option ----
      36. clr r12
      37. ;we need to determine the left space of the character so that we can skip these zeros
      38. ;we store the left in r15
      39. clr r1 ; we need a reg with zero
      40. mov r14,r18 ; Y bytes
      41. cpi r22,0 ; test for 0
      42. breq _gwrite_lcdchar_rows ; it is 0 so skip this option
      43. clr r13
      44. dec r13 ; put 255 into r13
      45. mov r12,r13 ; and also in r12
      46. _truetypey:
      47. clr r15
      48. mov r16,r19 ; x bits
      49. _trueTypeX:
      50. call _lpmbyte ; get data in r0
      51. breq _trueType1 ; it is zero so skip
      52. dec r16 ; adjust
      53. Add r30,r16 ; skip the rest of the bytes
      54. Adc r31,r1 ; add zero
      55. #IF _ROMSIZE>65536
      56. rcall _glcd_rampcheck_inc ; check boundery
      57. #ENDIF
      58. rjmp _truetype2 ; skip code
      59. _truetype1:
      60. inc r15 ; inc zero bytes counter
      61. dec r16
      62. brne _trueTypeX ; check the other x bytes
      63. _truetype2:
      64. cp r15,r13 ; check the previous with the new value
      65. brsh _truetype3 ; if r15 same or higher then we skip
      66. mov r13,r15 ;save the smallest in r13
      67. _truetype3:
      68. dec r14 ; next row of bytes
      69. brne _trueTypeY ; check again for Y
      70. ;now r13 contains the number of left bytes to skip
      71. ;we now check the same in reverse so we get the rgt space and the Z pointe is at the right pos
      72. mov r14,r18 ; Y bytes
      73. _truetypeyr:
      74. clr r15
      75. mov r16,r19 ; x bits
      76. _truetypexr:
      77. sbiw r30,1 ; dec Z pointer
      78. #IF _ROMSIZE>65536
      79. rcall _glcd_rampcheck_dec ; check boundery
      80. #ENDIF
      81. lpm ; get byte
      82. tst r0 ; test for zero
      83. breq _truetype1R
      84. dec r16
      85. sub r30,r16
      86. sbc r31,r1
      87. #IF _ROMSIZE>65536
      88. rcall _glcd_rampcheck_dec ; check boundery
      89. #ENDIF
      90. rjmp _truetype2R
      91. _truetype1r:
      92. inc r15
      93. dec r16
      94. brne _truetypeXR
      95. _truetype2r:
      96. cp r15,r12
      97. brsh _truetype3R
      98. mov r12,r15
      99. _truetype3r:
      100. dec r14
      101. brne _truetypeYR
      102. ;now R12 contains right space
      103. cp r13,r19 ; check if left is empty char
      104. brne _gwrite_lcdchar_rows ; no so continue
      105. mov r13,r22 ; use defined spaces since a space would be all zero
      106. clr r12 ; clear right space otherwise it mess up
      107. _gwrite_lcdchar_rows:
      108. sts {___lcdcol},r7 ; restore column
      109. mov r23,r19 ; x bits 8 12 or 16
      110. sub r23,r12 ; minus right space
      111. _gwrite_lcdchar1:
      112. lds r20,{___lcdcol}
      113. lds r21,{___lcdrow}
      114. call _Glocate ; set right position
      115. cpi r22,0 ; test for 0
      116. breq _gwrite_lcdchar2 ; normal font
      117. tst r13 ; check spaces
      118. breq _gwrite_lcdchar2 ; if zero then skip
      119. mov r21,r13 ; skips
      120. _gwrite_lcdcharSkips:
      121. call _lpmbyte ; get byte
      122. dec r21
      123. brne _gwrite_lcdcharSkips
      124. sub r23,r13 ; adjust x bits
      125. _gwrite_lcdchar2:
      126. call _lpmbyte ; get byte
      127. mov r24,r0
      128. lds r21,{___LCDrev} ; reverse display?
      129. tst r21
      130. breq _gwrite_lcdchar3
      131. com r24 ; not 0 so complement
      132. _gwrite_lcdchar3:
      133. call _GWrite_data ; write char data
      134. lds r21,{___lcdcol} ; increase column
      135. inc r21
      136. sts {___lcdcol},r21
      137. dec r23 ; dec bits dones
      138. brne _gwrite_lcdchar2 ; write all X bytes
      139. add r30,r12 ; move z pointer with right space so we keep the proper pointer value
      140. adc r31,r1 ; r1 was 0
      141. #IF _ROMSIZE>65536
      142. rcall _glcd_rampcheck_inc ; check boundery
      143. #ENDIF
      144. ;now add some space
      145. cpi r22,0 ; is it true type?
      146. breq _gwrite_lcdchar5 ; no so exit
      147. lds r21,{___LCDrev} ; reverse display?
      148. mov r23,r22 ; right space columns
      149. _gwrite_rightspace:
      150. clr r24
      151. tst r21 ; test inverse
      152. breq _gwrite_rightspace2 ; skip if normal
      153. com r24 ; inverse
      154. _gwrite_rightspace2:
      155. call _GWrite_data ; write char data
      156. dec r23
      157. brne _gwrite_rightspace
      158. lds r21,{___lcdcol} ; increase column
      159. add r21,r22
      160. sts {___lcdcol},r21
      161. _gwrite_lcdchar5:
      162. lds r21,{___lcdrow} ; inc row
      163. inc r21
      164. sts {___lcdrow},r21
      165. dec r18 ; dec rows
      166. breq _gwrite_lcdchar4 ; all done so skip code
      167. rjmp _gwrite_lcdchar_rows ; for all rows
      168. _gwrite_lcdchar4:
      169. pop r21 ; get original row back
      170. sts {___lcdrow},r21 ; restore
      171. #IF _ROMSIZE>65536
      172. * OUT RAMPZ, R3 ; restore RAMPZ for next character
      173. #ENDIF
      174. Pop R31
      175. Pop R30
      176. ret
      Alles anzeigen
      (Nachricht zu lang, FF)
    • Selbe Routine für SED GLCDs:

      Quellcode: glcdSED.lib

      1. ;character in r24
      2. ;in order to draw multiple fontsizes the fontdata stores the
      3. ;number of bytes and the number of rows.
      4. _gwrite_lcdchar:
      5. $EXTERNAL _LPMBYTE, _MUL8, _GLOCATE
      6. Push r30 ; save registers
      7. Push r31
      8. * lds r21,{___lcdrow} ; the row
      9. push r21 ; save it
      10. * lds r7,{___lcdcol}
      11. * Lds r30 ,{___fonttable} ; start of font data
      12. * Lds r31 ,{___fonttable +1}
      13. *#IF _ROMSIZE>65536
      14. ;* Clr r0 ; temp reg
      15. ;* lsl R30 ; shift to left
      16. ;* Rol r31 ; rotate left with carry
      17. ;* Rol R0 ; MSB of address is in R0 LS bit
      18. ;* Out RAMPZ, R0 ; set the page
      19. * Lds r0,{___fonttable +2} ; load page number for the used font
      20. * Out RampZ,r0 ; set page number
      21. *#ENDIF
      22. call _lpmbyte ; get Y bytes 1 for example
      23. mov r18,r0 ; save Y
      24. call _lpmbyte ; get X bytes , 8 for an 8*8 font
      25. mov r19,r0 ; save X
      26. call _lpmbyte ; get blocksize
      27. mov r16,r0 ; in accu
      28. adiw r30,1 ; adjust for words
      29. subi r24,32 ; chars start at 32 (space)
      30. mov r20,r24
      31. call _mul8 ; get offset
      32. Add r30,r20 ; add to start of font data
      33. Adc r31,r21
      34. _gwrite_lcdchar_rows:
      35. * sts {___lcdcol},r7 ; restore column
      36. mov r20,r7
      37. * lds r21,{___lcdrow} ; restore row
      38. rcall _glocate ; set location
      39. mov r23,r19 ; x bytes (8)
      40. _gwrite_lcdchar1:
      41. call _lpmbyte ; get byte
      42. mov r24,r0
      43. ;--------
      44. * lds r21,{___LCDrev} ; reverse display?
      45. tst r21
      46. breq _gwrite_lcdchar3
      47. com r24 ; not 0 so complement
      48. _gwrite_lcdchar3:
      49. ;--------
      50. rcall _GWrite_data ; write char data
      51. * lds r21,{___lcdcol} ; increase column
      52. inc r21
      53. * sts {___lcdcol},r21
      54. dec r23 ; dec bytes dones
      55. brne _gwrite_lcdchar1 ; not ready
      56. *lds r21,{___lcdrow} ; inc row
      57. inc r21
      58. * sts {___lcdrow},r21
      59. dec r18 ; dec rows
      60. brne _gwrite_lcdchar_rows ; for all rows
      61. pop r21 ; get original row back
      62. * sts {___lcdrow},r21 ; restore
      63. Pop R31
      64. Pop R30
      65. ret
      Alles anzeigen
      Die sind schon sehr unterschiedlich. Wenn ich das richtig interpretiere, fehlt zb. beim SED-Fontcode komplett die TT-Option, die für das EADOGM implementiert ist. Auf welchem Display testest du? Ich vermute, dass dort die TT-Option ebenfalls nicht implementiert ist.

      Lg
    • ach gott, ne, das wird nichts...dann werde ich mich erst mal um andere features kümmern und die Sache zur Seite legen
      Hätte gedacht, dass es einfach in der font Datei codiert ist, aber so...warum einfach, wenn es auch kompliziert geht.

      Das mit dem zip:
      Haben die anderen Downloader das gleiche Problem?
      Das habe ich einfach mit der Win Zipfunktion gezipt...ich glaube, ich habe noch einen anderen ziper auf meinem Rechner, lade ich gleich noch mal anders komprimiert hoch ( weil als exe mögen die Admins nicht)
    • Peer Gehrmann schrieb:

      Alles, was die TTs von den Proportionalfonts unterscheidet, ist die "2" ganz oben und, was mir auffiehl, die beiden 0-Spalten am Ende jedes Chars...
      Der 8x8TT.font in Bascom verwendet aber, meiner Meinung nach, einen prop-Font, weil alle Buchstaben 8 Spalten breit sind.
      Wenn nun aber jeder Buchstabe beliebig breit sein darf, dann müsste doch eigentlich zumindest beim 'M" und dem "W" eine größere Breite zustande kommen, oder?
      Ich sehe das so, wenn die ersten Spalten 0 sind werden die übersprungen.
    • Hi, na um so besser.

      nächste Woche gibt es eine neue Version.
      Die ist aufgeräumter und ich habe ein paar kleine Bugs raus, die wohl kaum Jemanden Auffallen, aber nerven können, wenn sie auftreten.
      Die Bedienung ist mit Rollerbuttons etwas logischer, aber man kann erstmal nicht mehr direkt in die Parameter-Textfelder eingeben, da hätte ich eine Menge mögliche Fehler abfangen müssen, die das Programm sonst zum Absturz bringen würden.

      Wichtig:
      Bitte Vorsicht beim Abarbeiten der Chars:

      Klickt nicht auf die Fonts oder Einstellungen der Fonts wenn Ihr schon geänderte chars übernommen habt in 'NewChar Tab', sonst löscht das Programm alle gemachten Änderungen im 'NewChar Tab'.
      Also bitte immer zuerst alle Einstellungen machen bei den Texteinstellungen in der oberen Box, bevor Ihr die chars einzeln bearbeitet und übernehmt!

      Da packe ich in der nächsten Woche mal einen Break rein, der nachfragt, ob man die bisherigen Änderungen wirklich löschen möchte.
    • Hi hkipnik,

      schön, dass er Dir soweit gefällt.
      Mir fallen noch ein paar wichtige Sachen dafür ein, die ich in den nächsten Wochen programmieren werde.
      Wenn man den Ablauf einhält, kann man wirklich recht schnell besonders kleine Fonts sehr sauber auf die Displays bekommen.
      Daran krankt es ja meist.

      Außerdem sitze ich (im Kopf) an einem "Malprogramm" für die Displays.
      Mir liegen die einfachen Maler a la Windows Paint etwas quer, die sind mir einfach zu ungenau.
      Das kann man etwas einfacher gestalten und ist ja auch schön, wenn man Fonts und 'Malings' in einem Prog hat.

      Später auch mal für farbige Displays.

      (Ich habe mir gerade auch mal dieses E-Ink Display mit 800x600 zugelegt. Wow, was für eine feine Auflösung das hat und zwei Graustufen dazu...)

      Gruss
      Peer
    • So, habe mich hinreißen lassen: Hier ist die neue Version. Ist jetzt deutlich logischer und besser strukturiert.

      Bitte neu installieren. Eine weitere ocx ist dazugekommen.

      Speichern und laden ist nun ins Menue ausgelagert, um den Bildschirm aufzuräumen.
      Nach dem ersten Bearbeiten und dem laden eines Bestand-Fonts werden einige Frames gesperrt, damit man nichts 'kaputt' machen kann.
      Aber nach wie vor selbsterklärend zur einen Bildschirmhinweis.

      Jetzt baue ich als nächstes einen Displaysimulator..

      Viel Spaß
      Dateien
    • Font-Studio, die nächste...
      Ich habe ein paar doofe Bugs entfernt und etwas am .font-Import geschraubt.
      Außerdem habe ich eine Funktion ergänzt, mit der man ein Zeichen im Editor invertieren kann.
      Das ist z.B. sehr schön, wenn man Werte editieren will bzw. anzeigen möchte, dass man im Edit-Modus ist.
      Dazu muss man leider aber noch jedes Zeichen einzeln invertieren.
      Ich werde das noch um eine Funktion erweitern, bei der mit einem Klick alle Zeichen invertiert werden.
      Die kann man dann unter z.B. "Myfont_inverted.font" speichern und mit auf den Kontroller laden.
      Dateien