OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 29.03.2024, 08:02

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
PříspěvekNapsal: 11.04.2023, 12:09 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2332
Has thanked: 303 times
Been thanked: 637 times
Jen rychlý dotaz - zkoušel jste někdo analyzovat písmo v ovladači Minigrafu MZXR?

Během zkoumání něčeho jiného jsem nakouknul do MZXR s tím, že bych si napsal konvertor na jiný formát (do pole v PHP) a zjistil jsem že to, jak jsem si myslel, že je písmo kódované tak není a že netuším, jak kódované je :)

Resp. dolních 6 bitů jsou zjevně souřadnice, to sedí. Bit 7 ukončuje sekvenci bytů s dvojicí souřadnic, to (asi) taky sedí. Ale nesedí mi bit 6 o kterém jsem si myslel, že určuje zdvih pera. Viz náčrtek s rozepsanými znaky.

Nějaký nápad?

Kód:
; od této adresy se prohledává font při hledání podoby konkrétního znaku
A_62232         db      080h            ; ASCII 32 = mezera, bit 7 = rovnou ukončení kresby znaku
A_62233         db      080h            ; ... ale proč je tady taky bit 7... že by mezera sežrala 2 byty?

; 62234         ASCII 33 = !
                db      03Ah            ; kreslíme shora 0b00111010 = [7,2] a položit pero na cíl
                db      05Ah            ; čára dolů 0b01011010 = [3,2] a bit 6 = zdvihnout pero
                db      00Ah            ; pohyb na 0b00001010 = [1,2] a položit pero na cíl
                db      0CAh            ; bez pohybu 0b11001010 = [1,2], zdvihni pero (bit 6), ukonči (bit 7)
; 62238         ASCII 34 = "
                db      031h, 07Ah      ; 0b00110001 jdi [6,1] a polož, 0b01111010 jdi [7,2], zdvihni
                db      032h, 0FBh      ; 0b00110010 jdi [6,2] a polož, 0b11111011 jdi [7,3], zdvihni, konec
; 62242         ASCII 35 = #
                db      039h, 049h      ; 0b00111001 jdi [7,1] a polož, 0b01001001 jdi [1,1], zdvihni
                db      00Bh, 07Bh      ; 0b00001011 jdi [1,3] a polož, 0b01111011 jdi [7,3], zdvihni
                db      02Ch, 068h      ; 0b00101100 jdi [5,4] a polož, 0b01101000 jdi [5,0], zdvihni
                db      018h, 0DCh      ; 0b01011000 jdi [3,0] a polož, 0b11011100 jdi [3,4], zdvihni, konec
;               ASCII 36 = $
                db      010h, 053h
                db      05Ch, 063h
                db      061h, 068h
                db      071h, 074h
                db      03Ah, 0CAh
;               ASCII 37 = %
                db      07Ch, 039h
                db      070h, 069h
                db      072h, 079h
                db      01Bh, 052h
                db      04Bh, 054h
                db      0DBh
;               ASCII 38 = &
                db      00Ch, 069h
                db      071h, 07Ah
                db      073h, 06Bh
                db      058h, 050h
                db      049h, 04Ah
                db      0DCh
;               ASCII 39 = '
                db      03Bh, 0F2h      ; 0b00111011 jdi [7,3] a polož, 0b11110010 jdi [6,2], zdvihni, konec
;               ASCII 40 = (
                db      03Bh, 069h      ; 0b00111011, 0b01101001
                db      059h, 0CBh
;               ASCII 41 = )
                db      039h, 06Bh
                db      05Bh, 0C9h
;               ASCII 42 = *
                db      011h, 073h
                db      024h, 060h
                db      031h, 0D3h
;               ASCII 43 = +
                db      020h, 064h
                db      032h, 0D2h
;               ASCII 44 = ,
                db      012h, 0C1h
;               ASCII 45 = -
                db      020h, 0E4h      ; 0b00100000 jdi [4,0] a polož, 0b11100100 jdi [4,4], zdvihni, konec
;               ASCII 46 = .
                db      00Ah, 0CAh      ; 0b00001010 jdi [1,2] a polož, 0b11001010 jdi [1,2], zdvihni, konec
;               ASCII 47 = /
                db      0FCh            ; 0b11111100 jdi [7,4], polož, zdvihni, konec
                                        ; nedává smysl! - Může být 1. byte zároveň ukončující? U tečky to tak není.
;               ASCII 48 = 0
                db      07Ch, 034h      ; 0b01111100 jdi [7,4] ?, 0b00110100 jdi [6,4] ?
                db      054h, 04Bh      ; 0b01010100 jdi [2,4] ?, 0b01001011 jdi [1,3] ?
                db      049h, 050h      ; 0b01001001 jdi [1,1] ?, 0b01010000 jdi [2,0] ?
                db      070h, 079h      ; 0b01110000 jdi [6,0] ?, 0b01111001 jdi [7,1] ?
                db      07Bh, 0F4h      ; 0b01111011 jdi [7,3] ?, 0b11110100 jdi [6,4], zdvihni, konec
;               ASCII 49 = 1
                db      029h, 07Bh
                db      0CBh
;               ASCII 50 = 2
                db      028h, 070h
                db      079h, 07Bh
                db      074h, 06Ch
                db      063h, 059h
                db      050h, 048h
                db      0CCh
;               ASCII 51 = 3
                db      030h, 079h
                db      07Bh, 074h
                db      06Ch, 063h
                db      05Ch, 054h
                db      04Bh, 049h
                db      0D0h
;               ASCII 52 = 4
                db      03Ah, 050h
                db      054h, 023h
                db      0CBh
;               ASCII 53 = 5
                db      010h, 049h
                db      04Bh, 054h
                db      064h, 06Bh
                db      068h, 078h
                db      0FCh
;               ASCII 54 = 6
                db      020h, 069h
                db      06Bh, 064h
                db      054h, 04Bh
                db      049h, 050h
                db      070h, 079h
                db      0FCh
;               ASCII 55 = 7
                db      038h, 07Ch
                db      074h, 0C9h
;               ASCII 56 = 8
                db      009h, 050h
                db      058h, 061h
                db      063h, 06Ch
                db      074h, 07Bh
                db      079h, 070h
                db      068h, 061h
                db      063h, 05Ch
                db      054h, 04Bh
                db      0C9h
;               ASCII 57 = 9
                db      008h, 04Bh
                db      054h, 074h
                db      07Bh, 079h
                db      070h, 060h
                db      059h, 05Bh
                db      0E4h
;               ASCII 58 = :
                db      01Ah, 05Ah
                db      02Ah, 0EAh


Přílohy:
Poznámka: zagzipované SVG pro Inkscape s poznámkami
mzxr_font_verifikace_dat.svg.gz [10.64 KiB]
62 krát
mzxr_font_verifikace_dat.png
mzxr_font_verifikace_dat.png [ 339.47 KiB | Zobrazeno 1734 krát ]

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS
Nahoru
 Profil  
 
PříspěvekNapsal: 11.04.2023, 14:23 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 580
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 90 times
Zkoumal jsem to, porovnával jsem MZXR s modulem v IQ151 a je to jak píšeš. Na FTP je nahraný v sekci CSCZ složka Minigraf-fontviewer.

Fonty jsou skoro shodné, je tam hruba 10 rozdílů, IQčko má hezčí A, MZXR zase &, další rozdíly jsou třeba v B,2,4 a jiné....

ten bit6 je, jestli před posunem na "novou souřadnici" má položit pero nebo zvednout, na konci (a teď nevím jestli čáry nebo znaku ale spíš každé čáry) pero zvedá, proto může mít "/" jen jeden bajt - jako jediný znak ve forntu, protože ta čára začíná v základní pozici (netřeba najíždět jako u ".")

Příloha:
obr.jpg
obr.jpg [ 106.83 KiB | Zobrazeno 1706 krát ]


Nahoru
 Profil  
 
PříspěvekNapsal: 11.04.2023, 21:10 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2332
Has thanked: 303 times
Been thanked: 637 times
l00k píše:
ten bit6 je, jestli před posunem na "novou souřadnici" má položit pero nebo zvednout, na konci (a teď nevím jestli čáry nebo znaku ale spíš každé čáry) pero zvedá, proto může mít "/" jen jeden bajt - jako jediný znak ve forntu, protože ta čára začíná v základní pozici (netřeba najíždět jako u ".")
O výchozí pozici [0,1] jsem neuvažoval, pracoval jsem zároveň s Hersheyho fonty a tam výchozí pozice neexistuje. Na výchozí pozici [0,1] sedí nejenom lomítko, ale i na znak procento. U něj musí být výchozí stav pera položeno na [0,1] a zdvihá se až po [4,7].

Mám MZXR ve snapshotu od 60000, znak $ začíná na 62250, znak % od 62260 (#f334) a vypadá takto
Kód:
#7C  0b0 1 111 100 -> [4,7] s položeným perem na horní konec čáry
#39  0b0 0 111 001 -> [7,1] zdvihni, se zdviženým perem na levý kroužek
#70  0b0 1 110 000 -> [6,0] s položeným perem na [6,0]...
#69  0b0 1 101 001 -> [5,1]
#72  0b0 1 110 010 -> [2,6]
#79  0b0 1 111 001 -> [7,1] uzavřít levý kroužek
#1B  0b0 0 011 011 -> [3,3] zdvihni, se zdviženým perem na pravý kroužek
#52  0b0 1 010 010 -> [2,2]
#4B  0b0 1 001 011 -> [1,3]
#54  0b0 1 010 100 -> [2,4]
#DB  0b1 1 011 011 -> [3,3] uzavřít pravý kroužek, konec znaku = po dokončení čáry zdvihni

Budiž - to začíná dávat smysl, stav bitu 6 v první souřadnici je tedy důležitý a určuje jestli se rovnou kreslí od výchozí [0,1] (bit 6 = 1), nebo ne (bit 6 = 0).

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
PříspěvekNapsal: 12.04.2023, 08:46 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 580
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 90 times
Na Hershey font jsem se díval taky, ale napadla mně jiná myšlenka (pro 0512/16), umí kreslit oblouky (AA,AR) - přemýšlel jsem nad tím že místo pouze úseček by se použily i oblouky....

Nemáš náhodou někde řecký font pro některý ze zapisovačů? (azbuka je v 0512/16)


Nahoru
 Profil  
 
PříspěvekNapsal: 12.04.2023, 09:38 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2332
Has thanked: 303 times
Been thanked: 637 times
l00k píše:
Na Hershey font jsem se díval taky, ale napadla mně jiná myšlenka (pro 0512/16), umí kreslit oblouky (AA,AR) - přemýšlel jsem nad tím že místo pouze úseček by se použily i oblouky....

Nemáš náhodou někde řecký font pro některý ze zapisovačů? (azbuka je v 0512/16)
Řecký font nemám, jen ten Hersheyho. Ale co se použití Hersheyho písma s Minigrafem týče, tak jsem si jistý, že přinejmenším rowmans použít jde, mám to vyzkoušeno. Míchat kreslení oblouků do toho vůbec není potřeba, písmena jsou složená z úseček tak šikovně, že vypadají pěkně zaobleně.

Zkoušel jsem to na upraveném Minigrafu s mojí řídící deskou (ten plotr jsem dostal zcela bez elektroniky), originál mám zabalený a hlavně bych musel mnohem víc času věnovat softwaru, takže to zatím nehrozí. Ale i v tom upraveném RS232 Minigrafu jsou původní motory, takže kvalita kresby, kromě toho, že se do něj posílá nejzákladnější HPGL, by měla bý identická.

Mám i konverzní utilitu TXT -> HPGL s použitím Hersheyho písma napsanou v PHP (pro konzoli, ideálně Bash), ještě to chce hodně ladění, ale už to umí vygenerovat text s proporcionálním písmem včetně zarovnání odstavců k oběma okrajům a teď nově už to umí používat i písmo z MZXR... víceméně, ještě to není zcela hotové.


Přílohy:
2023-04-12 01-37-21.png
2023-04-12 01-37-21.png [ 570.9 KiB | Zobrazeno 1646 krát ]

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS
Nahoru
 Profil  
 
PříspěvekNapsal: 12.04.2023, 14:52 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 580
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 90 times
Pěkně to píše, možná by stálo vzít B a A z fontu co je pro minigraf pro IQ151, ty mi připadají hezčí (hlavně to A)

;"A" - 07Ah,04Ch,021h,0E3h
;"B" - 078h,07Bh,074h,06Ch,063h,060h,063h,05Ch,054h,04Bh,0C8h


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 3 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz