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