nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 29 Mar 2024 05:55



Reply to topic  [ 106 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8  Next
Solid C - компилятор Си для Спринтера 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Post Re:
Vasil Ivanov wrote:
dhau wrote:
Shaos wrote:
И еще вопрос - в каком виде и для каких систем существует "фирменная" версия SOLID C и кто ее автор?


SOLiD - это ник Егора Вознесенского. Он был отцом-основателем группы Novatec MSX. Он написал SOLiD C с нуля, используя совместимый синтакс и форматы обьектных файлов.

У него можно получить сорцы SOLID C или это глухое дело ?.

Вот наткнулся https://www.msx.org/forum/msx-talk/development/state-art-c-programming-msx
Quote:
By msxegor
Master (183)
21-03-2014, 14:57

Hi! There is also Solid C that was developed by me a while ago.
It is mostly MSX-C compatible, but knows of Z80: uses 16-bit subtraction, index registers and bit commands.
Standard library was written in assembly and highly optimal; supports DOS-1 and DOS-2 from the box.
Compiler was used by some of my friends here in russia to code game engines, so some graphics is there in libraries.
Do not have it currently with me (I'm in the office now) but will look for something for you to play with later on weekend.

By msxegor
Master (183)
25-03-2014, 09:35

I do remember some problems with char-to-int translation in early versions of SOLID C and I definitely fixed them. Unfortunately I do not know if this version is fixed Sad I lost almost everything when my MSX (state of the art - desktop Yamaha YIS-805 with 11.5 MHz CPU, 1 meg of RAM, harddisk and modem) was stolen in 1999. I tried to restore compiler from bits of sources and disassembled executives in 2004 or so, and I have SOLID C version 2.00 somewhere in archives on my PC. Did a bit of optimization there too.

By Manuel
Ascended (17511)
16-02-2015, 18:48

Unfortunately, Egor passed away last year...

Ref: http://www.msx.org/forum/msx-talk/hardware/beer-ide-bios-19rc1-source-code-wanted

Тема на пкзх: https://zx-pk.ru/threads/23622-umer-egor-voznesenskij-(solid).html

_________________
:dj: https://mastodon.social/@Shaos


08 Mar 2021 03:07
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Нашёл пакет багфиксов CLIB для Солида от какого-то японца - в доке он указывает текст лицензии, который он получил в переписке от Егора:
Quote:
SOLID C is freeware, and you may use it for any purpose.
You may use it for development of ANY software (including
commercial products). SOLID C cannot be sold.
т.е. использовать можно, но продавать нельзя

P.S. Найти бы вот эти архивы: sc10dem.arj, sclib98.arj
Ну и до кучи: zdsource.arj (исодники его дизассемблера для MSX)


P.P.S. Вот пример из веб-архива как писать функции с переменным количеством аргументов на Solid C:
Code:
int sample(.);

int sample(nargs,args)
int nargs;
int args;
{
   int i,*p;
   
   for (i = 0,p = &args;i < nargs;i++){
      printf("Parameter No.%d %d\n",i+1,*p);
      p++;
   }
}
https://web.archive.org/web/20041201151034/http://homepage3.nifty.com/Tatsu_syo/TMR/SOLIDC.html
Google Translate wrote:
Максимальное количество аргументов, которое может быть передано в функцию с переменным параметром, равно 6, и если оно превышает 7, компилятор не будет генерировать нормальный код.
Проверил на Спринтере - у нас такого ограничения НЕТУ - всё работает как надо и с 10 аргументами!!!

P.P.P.S. Оттуда же - при указании extern объявления массива надо обязательно указывать его размер:
Code:
extern char buf []; /* Ошибка возникает из-за того, что размер массива не объявлен */

char buf [128];
////////////////////////////////////////////////////
extern char buf [128];

char buf [128];

Тип char всегда беззнаковый, приставки signed и unsigned для char игнорируются.

Первые 3 аргумента функции передаются через регистры, а остальные - через стек:
Code:
HL = 0001H (если int) или A=01H (если char)
DE = 0041H (если char, то используется только младший байт)
BC = 0FFFDH (если char, то используется только младший байт)
(SP + 2) = 0F0H
(SP + 3) = 0FBH
и т.д.

Возврат данных через A для char или через HL для int:
Code:
cseg ; указывает компоновщику, что это программа.
PUBLIC func_ ; имя функции + '_'

func_:
   ld hl, 0
   ret

В случае функции с переменным количеством аргументов аргументы всегда передаются через стек, как в MSX-C, а количество задаётся в HL:
Code:
sub ((short int) 1, 'A', (unsigned short int) -3, (char *) 0xfbf0);

превращается в

(SP + 2) 01H
(SP + 3) 00H
(SP + 4) 41H
(SP + 5) Неопределенный
(SP + 6) FDH
(SP + 7) FFH
(SP + 8) 0F0H
(SP + 9) 0FBH

Как установить ассемберный код в конкретные адреса:
Code:
    aseg; установить в абсолютный режим
    org 4000H; Разместите следующие программы после 4000H

intprog:
    di
    xor a
    ld (intflag), a
    ei
    ret

    cseg; Код относительного режима отсюда

$MEMRY - начальный адрес кучи

_________________
:dj: https://mastodon.social/@Shaos


08 Mar 2021 03:30
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Написал универсальный батник SC.BAT, с помощью которого можно компилировать любые программы, сосотящие из одного исходного файла с расширением .C и находящиеся в каком-то определённом каталоге (в данном случае C:\SOLID\EXAMPLES) путём записи в шелле SC.BAT HELLO (где HELLO имя программы для сборки - HELLO.C которая в дальнейшем превратится в HELLO.EXE):
Code:
set PROG=%1
set PREFIX=C:\SOLID\EXAMPLES
REM SolidC EXE files must be in PATH on disk C!
cls 2
del %PROG%.exe
cc1 -m %PREFIX%\%PROG%
cc2 %PREFIX%\%PROG%
as %PREFIX%\%PROG%
REM LD filename length is limited to 12 characters!
%PREFIX%\ld %PROG%,clib/l/gXMAIN /x
del %PROG%.tmc
del %PROG%.rel
del %PROG%.asm
LD.EXE и CLIB.IRL должны лежать в том же каталоге вместе с исходниками (т.к. LD.EXE пока не умеет работать с длинными путями - имена входных файлов ограничены 12 символами), а CC1.EXE, CC2.EXE и AS.EXE (вместе с каталогом INCLUDE) должны находиться в путях (PATH), однако обязательно, чтобы на том же самом диске т.к. DSS не умеет нормально запускать программы с одного диска и давать им параметром путь к файлу с другого диска - после этого диск пропадает до ребута...

P.S. Этот батник для шелла, а в FN пока так работать не будет - FN не умеет запускать BAT файлы из командной строки где параметры пишем - чтобы пускаться из панели FN надо в батнике вместо %1 написать имя программы, например HELLO (можно также скопировать SC.BAT в HELLO.BAT и прописать в новом файле имя программы для сборки).

_________________
:dj: https://mastodon.social/@Shaos


09 Mar 2021 02:36
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Shaos wrote:
P.S. Найти бы вот эти архивы: sc10dem.arj, sclib98.arj
Архивы нашлись - спасибо Василию Иванову, который скинул архив с набором оригинальных дистров солида с отдельными патчами и другими японскими штуками :kruto:

_________________
:dj: https://mastodon.social/@Shaos


09 Mar 2021 18:14
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
У меня лично планы такие на Солид:
1) написать пре-препроцессор (можно взять за основу CPPPP из архива, что Василий в телегу скинул), который бы преобразовывал ANSI C в K&R, а также комменты преобразовывал из C++ в С стиль (уже есть в cpppp), если надо UNIX окончания переводил в DOS, если есть русский UTF8 переводил бы в альтернативную кодировку доса, может какие-то простые C++ вещи бы мог превращать в понятный для солида вид;
2) починить LD.EXE чтобы мог работать с длинными путями;
3) сделать утилиту MAKE для Спринтера;
4) сделать собиралку CLIB.IRL на Спринтере (используя MAKE, сделанный в предыдущем пункте, а также написанием собственной утилиты MX, которая режет исходники на модули);
5) написать оптимизатор (по типу как для некоторых других 8-битных компилей были), который бы шёл по асмовскому тексту и преобразовывал бы некоторые вещи для скорости, хотя я смотрю там вроде и так всё более менее оптимально - например OPTD1.COM (из того же архива от Василия) нашёл в результате компилирования LZH3.C размером 2.5 тыщи строк только несущественные мелочи:
Code:
0a1
> ; Code optimized with XelaSoft's code optimizer version 1.1
2045,2046c2046
<    call   update_
<    ret
---
>    jp   update_   ; -optimized-
2076,2077c2076
<    call   Putcode_
<    ret
---
>    jp   Putcode_   ; -optimized-
2088,2089c2087
<    call   putc_
<    ret
---
>    jp   putc_   ; -optimized-
2397,2398c2395
<    call   EncodeEnd_
<    ret
---
>    jp   EncodeEnd_   ; -optimized-
---
>
> ; # BC load groups replaced: 0
> ; # DE load groups replaced: 0
> ; # EX DE,HL pairs removed: 0
> ; # call/ret pairs replaced: 4
> ; # in/out instr. used: 0
> ; # shift instructions replaced 0


P.S. А вообще "интеллектуальный" оптимайзер может разворачивать циклы при необходимости и вставлять тела небольших подпрограмм вместо call (видимо ещё надо и профайлер делать, чтобы узнать какие части кода часто вызываются и выполняются дольше всего)

P.P.S. В коде солида вот такие штуки попадаются:
Code:
   ex    de,hl
   ld   a,e
   sub   c
   ld   c,a
   ld   a,d
   sbc   a,b
   ld   b,a
   ld   l,c
   ld   h,b
которые можно заменить на:
Code:
       or a
       sbc hl,bc

и даже такое можно встретить:
Code:
       ld b,a ; можно выкинуть
       ld b,c

по сути можно проанализировать операции с регистрами по всей длине программы и убрать лишние копирования в регистры, которые далее по коду перетираются

_________________
:dj: https://mastodon.social/@Shaos


09 Mar 2021 22:40
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Заскриншотил вывод солидовских утилит без параметров в своём эмуле Спринтера - так хоть видно какие они параметры могут принимать:

Attachment:
Zpring-CC1.gif
Zpring-CC1.gif [ 6.88 KiB | Viewed 6106 times ]


Attachment:
Zpring-CC2.gif
Zpring-CC2.gif [ 2.73 KiB | Viewed 6106 times ]


Attachment:
Zpring-AS.gif
Zpring-AS.gif [ 4.98 KiB | Viewed 6087 times ]


Attachment:
Zpring-LD.gif
Zpring-LD.gif [ 8.03 KiB | Viewed 6106 times ]


ну и до кучи:

Attachment:
Zpring-OL.gif
Zpring-OL.gif [ 5.53 KiB | Viewed 6106 times ]


P.S. при печати помощи похоже табуляция не обрабатывается - надо починить эмулятор

_________________
:dj: https://mastodon.social/@Shaos


10 Mar 2021 01:31
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Научил свой эмуль нормально пускать LD.EXE с параметрами :mrgreen:

Attachment:
Zpring-LD-OK.gif
Zpring-LD-OK.gif [ 5.06 KiB | Viewed 6087 times ]


P.S. Увидел, что для CC1 в хелпе есть опция
Code:
-k      Karnighan && Ritchie compatability
Значит ли это, что оригинальный SolidC всё таки был ANSI?

_________________
:dj: https://mastodon.social/@Shaos


11 Mar 2021 01:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Дизассемблировал загрузчик из LD.EXE
 LD.ASM
Code:
; Disassembled LD.EXE from Solid C for Sprinter

  ORG   0A400h-512

;EXE-file header:
        dw 5845h     ; EXE Signature
        db 45h       ; Reserved (EXE type)
        db 00h       ; Version of EXE file
        dw 0200h     ; Code offset
        dw 0000h
        dw 0280h     ; Primary loader size or 0 (no primary loader)
        dw 0000h     ; Reserved
        dw 0000h     ; Reserved
        dw 0000h     ; Reserved
        dw START     ; Loading address
        dw START     ; Starting address (register PC)
        dw 0BF00h    ; Stack address (register SP)
        ds 490       ; Reserved

PORT_PAGE0   equ   082h
PORT_PAGE1   equ   0A2h
PORT_PAGE2   equ   0C2h
PORT_PAGE3   equ   0E2h

PORT_Y      equ   089h

;code of program

START:

   push   ix ; push pointer to command line arguments
   ; K_CLEAR (Flush the console input buffer and execute other function) - function #31
   ld     bc, 03135h
   rst    10h
   ; SYSTIME (Return the current system time and date)
   ld     c, 021h
   rst    10h
; Output:
; D - day [1..31]
; E - month [1..12]
; IX - year [0000..1999.2000..9999]
; H - hour [0..23]
; L - minute [0..59]
; B - second [0..59]
; C - day of week [1..7]
   ld     a, d
   ld     (A4CD), a
   ld     a, e
   ld     (A4CE), a
   ld     (A4CF), ix
   pop    ix ; pop pointer to command line arguments
   in     a, (PORT_PAGE0)
   ld     (A4C5), a
   in     a, (PORT_PAGE1)
   ld     (A4CB), a
   in     a, (PORT_PAGE3)
   ld     (A4CC), a
   in     a, (PORT_Y)
   ld     (A4CA), a
   ld     (LARGS+1), ix
   ld     a, (ix-3)
   ld     (A4C3), a
   ld     hl, msg
   ; PCHARS (Write the null-terminated string pointed to by string directly to the console)
   ld     c, 05ch
   rst    10h
   ; GETMEM (Allocate a memory block)
   ld     bc, 033dh ; 3 pages
   rst    10h
   jr     nc, NOERR1
   ; ERR1 (can't allocate memory)
   ld     a, (A4C3)
   ; CLOSE (Close file)
   ld     c, 012h
   rst    10h
   ld     hl, err1
LEND:   ; PCHARS (Write the null-terminated string pointed to by string directly to the console)
   ld     c, 05ch
   rst    10h
   ; EXIT (Terminate a program)
   ld     bc, 0ff41h ; exit code FF
   rst    10h
NOERR1:   ld     (A4C4), a
   ld     hl, A4C6
   ; EMM_FN5 Get list of physical page numbers
   ld     c, 0c5h
   rst    8 ; BIOS
   ld     a, (A4C6) ; page A
   out    (PORT_PAGE3), a
   ; clean window 3 (page A) <<< TODO: use accelerator
   ld     hl, 0c000h
LOOP1:   xor    a
   ld     (hl), a
   inc    hl
   or     h
   jr     nz, LOOP1
   ld     hl, 04dedh   ; ???
   ld     (0c038h), hl ; ???
   ld     a, (A4C8) ; page C
   out    (PORT_PAGE3), a
   ld     hl, 0c000h
   ld     de, 01b0ah ; byte count <<< TODO: read all
   ld     a, (A4C3)
   ; READ (Read data from a file)
   ld     c, 013h
   rst    10h
   jp     c, LERR2
   ld     a, (A4C3)
   ; CLOSE (Close file)
   ld     c, 012h
   rst    10h
   di
   ld     a, 0c0h
   out    (PORT_Y), a
   ld     a, (A4C7) ; page B
   out    (PORT_PAGE1), a
   ld     hl, 0c000h
   ld     de, 04100h
   call   DECODE
   ld     a, (A4C6) ; page A
   out    (PORT_PAGE0), a
   ld     hl, A4C4
   ld     de, 06d39h ; move 13 variables there
   ld     bc, 13
   ldir
LARGS:   ld     hl, 0 ; at this point here will be a pointer to command line arguments (#A380)
   jp     04100h

LERR2:   ld     a, (A4C4)
   ; FREEMEM (Deallocate a memory block that was previously allocated by GETMEM)
   ld     c, 03eh
   rst    10h
   ld     a, (A4C3)
   ; CLOSE (Close file)
   ld     c, 012h
   rst    10h
   ld     hl, err2
   jp     LEND

A4C3    db #00 ; file handle
A4C4    db #FF ; memory handle
A4C5    db #FF ; old page0
A4C6    db #FF ; Physical identifier of page A
A4C7    db #FF ; Physical identifier of page B
A4C8    db #FF ; Physical identifier of page C
A4C9    db #FF
A4CA    db #FF ; old port_y
A4CB    db #FF ; old page1
A4CC    db #FF ; old page3
A4CD    db #00 ; day
A4CE    db #00 ; month
A4CF    dw #0000 ; year

msg   db   13,10,"SOLID Linkage Editor  Version 0.04b   Ported by Vasil Ivanov"
   db   13,10,"Based on linkage editor v4.60  (c) 1997, SOLiD Inc.",13,10,0
err1   db   "Not enough memory to load program !",13,10,0
err2   db   "Disk loading error !",13,10,0

DECODE:
;UnHrust      di
   ld   ix,-12
   add   ix,sp
   push   de
   ld   sp,hl
   pop   bc
   ex   de,hl
   pop   bc
   dec   bc
   add   hl,bc
   ex   de,hl
   pop   bc
   dec   bc
   add   hl,bc
   sbc   hl,de
   add   hl,de
   jr   c,loc1
   ld   d,h
   ld   e,l
loc1:   lddr
   ex   de,hl
   ld   d,(ix+11)
   ld   e,(ix+10)
   ld   sp,hl
   pop   hl
   pop   hl
   pop   hl
   ld   b,6
loc2:   dec   sp
   pop   af
   ld   (ix+6),a
   inc   ix
   djnz   loc2
   exx
   ld   d,0BFh
   ld   bc,1010h
   pop   hl
loc3:   dec   sp
   pop   af
   exx
loc4:   ld   (de),a
   inc   de
loc5:   exx
loc6:   add   hl,hl
   djnz   loc7
   pop   hl
   ld   b,c
loc7:   jr   c,loc3
   ld   e,1
loc8:   ld   a,80h
loc9:   add   hl,hl
   djnz   loc10
   pop   hl
   ld   b,c
loc10:   rla
   jr   c,loc9
   cp   3
   jr   c,loc11
   add   a,e
   ld   e,a
   xor   c
   jr   nz,loc8
loc11:   add   a,e
   cp   4
   jr   z,loc26
   adc   a,0FFh
   cp   2
   exx
loc12:   ld   c,a
loc13:   exx
   ld   a,0BFh
   jr   c,loc17
loc14:   add   hl,hl
   djnz   loc15
   pop   hl
   ld   b,c
loc15:   rla
   jr   c,loc14
   jr   z,loc16
   inc   a
   add   a,d
   jr   nc,loc18
   sub   d
loc16:   inc   a
   jr   nz,loc20
   ld   a,0EFh
loc17:   rrca
   cp   a
loc18:   add   hl,hl
   djnz   loc19
   pop   hl
   ld   b,c
loc19:   rla
   jr   c,loc18
loc20:   exx
   ld   h,0FFh
   jr   z,loc21
   ld   h,a
   dec   sp
   inc   a
   jr   z,loc24
   pop   af
loc21:   ld   l,a
   add   hl,de
   ldir
loc22:   jr   loc5
   ;
loc23:   exx
   rrc   d
   jr   loc6
   ;
loc24:   pop   af
   cp   0E0h
   jr   c,loc21
   rlca
   xor   c
   inc   a
   jr   z,loc23
   sub   10h
loc25:   ld   l,a
   ld   c,a
   ld   h,0FFh
   add   hl,de
   ldi
   dec   sp
   pop   af
   ld   (de),a
   inc   hl
   inc   de
   ld   a,(hl)
   jr   loc4
   ;
loc26:   ld   a,80h
loc27:   add   hl,hl
   djnz   loc28
   pop   hl
   ld   b,c
loc28:   adc   a,a
   jr   nz,loc31
   jr   c,loc27
   ld   a,0FCh
   jr   loc32
   ;
loc29:   dec   sp
   pop   bc
   ld   c,b
   ld   b,a
   ccf
   jr   loc13
   ;
loc30:   cp   0Fh
   jr   c,loc29
   jr   nz,loc12
   add   a,0F4h
   ld   sp,ix
   jr   loc34
   ;
loc31:   sbc   a,a
   ld   a,0EFh
loc32:   add   hl,hl
   djnz   loc33
   pop   hl
   ld   b,c
loc33:   rla
   jr   c,loc32
   exx
   jr   nz,loc25
   bit   7,a
   jr   z,loc30
   sub   0EAh
loc34:   ex   de,hl
loc35:   pop   de
   ld   (hl),e
   inc   hl
   ld   (hl),d
   inc   hl
   dec   a
   jr   nz,loc35
   ex   de,hl
   jr   nc,loc22
   ret

        INCBIN "ld_compr.bin"

Теперь надо разобрать ld_compr.bin - это 6922 байта, сжатые хрустом (депакер ещё 252 байта занимает) - в развёрнутом виде этот блок кода занимает 12422 байта, но там есть области, заполненные нулями - см. приаттаченный архив cо сжатым и расжатым файлом (а также с вышеприведённым исходником - уже сейчас это всё можно собрать с помошью zmac 1.33 и получить точную копию LD.EXE)


Attachments:
ld_all.zip [15.96 KiB]
Downloaded 282 times

_________________
:dj: https://mastodon.social/@Shaos
11 Mar 2021 23:55
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Василий в телеге выложил свои сырцы LD (дизасм солидовского LD с дописанными вещами для Спринтера в частности поддержка сборки в EXE и в DLL) - теперь повеселее дело пойдёт :)

Также Sayman подогнал исходники make для MSX - написано в 1995 году на MSX-C т.е. теоретически должно быть легко портируемо под Солид: https://hansotten.file-hunter.com/software/msx-c/

_________________
:dj: https://mastodon.social/@Shaos


14 Mar 2021 22:49
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Вот по быстрому попробовал написать графическую программку на солиде в видеорежиме 0x82 (640x256 16 цветов), которая использует ANTONFNT.DLL для вывода текста шрифтом из FN:


Attachments:
solidc-antonfnt.jpg
solidc-antonfnt.jpg [ 95.39 KiB | Viewed 5944 times ]

_________________
:dj: https://mastodon.social/@Shaos
19 Mar 2021 02:35
Profile WWW
Writer

Joined: 02 Dec 2020 14:53
Posts: 21
Reply with quote
сколько на сколько строк и символов получается таким текстом?
так то можно в средствах разработки какой то редактор запилить, IDE, когда большое разрешение :)


19 Mar 2021 07:23
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Шрифт тут пропорциональный по горизонтали (точно такой же как в FN), а по высоте - на картинке строка 8 пикселов т.е. 32 строки

Ещё есть либа FNAPI выпущенная в исходниках в августе 2002 года - там к шрифту ещё добавлены контролы из FN - можно тоже в DLL завернуть

_________________
:dj: https://mastodon.social/@Shaos


19 Mar 2021 07:42
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
Вот сменил палитру на EGA-шную:

Attachment:
solidc-antonfnt-ega.jpg
solidc-antonfnt-ega.jpg [ 145.25 KiB | Viewed 5901 times ]


Правда там цвет #00 вместо невидимого чёрным по чёрному сделался ярко-белым по чёрному - видимо какая-то внутренняя логика либы - если начинать с любого другого цвета, то всё работает, даже #00 который идёт не первым (будет реально чёрным по чёрному - я проверил)

_________________
:dj: https://mastodon.social/@Shaos


20 Mar 2021 01:12
Profile WWW
Writer

Joined: 02 Dec 2020 14:53
Posts: 21
Reply with quote
Shaos wrote:
Шрифт тут пропорциональный по горизонтали (точно такой же как в FN), а по высоте - на картинке строка 8 пикселов т.е. 32 строки

я так и не понял, какое разрешение в знакоместах то?
32 строки, ок. а символов в строке сколько?


20 Mar 2021 07:12
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22422
Location: Silicon Valley
Reply with quote
RomanRom2 wrote:
Shaos wrote:
Шрифт тут пропорциональный по горизонтали (точно такой же как в FN), а по высоте - на картинке строка 8 пикселов т.е. 32 строки

я так и не понял, какое разрешение в знакоместах то?
32 строки, ок. а символов в строке сколько?

Ну дык пропорциональный шрифт ведь - если всё написать буковками i то влезет дофига, а если W, то не очень :roll:

_________________
:dj: https://mastodon.social/@Shaos


20 Mar 2021 11:47
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 106 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8  Next

Who is online

Users browsing this forum: No registered users and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.