Page 1 of 1

z80-telnet client

PostPosted: Wed, 06.02.2019 15:18:03
by asve79
Выкладываю на общее обозрение свой проект. Как проект развивался тут: https://zx-pk.ru/blogs/8784-asve79.html

Принимаю конструктивную критику и пожелания.

На текущий момент версия не поддерживает управляющие коды и ANSI. В общем-то неначем было тренироваться, да и потребности никто не выражал. Будем развивать по мере востребованности.
Версия продукта под ZX Evolution - использует механизм подключения к сети через соединение к компьютеру, на котором поднят ic-сервер.
Версию под ESP планирую сделать в обозримом будущем, ввиду того, что ESP модуль ко мне приехал буквально на днях.

Проект в гитхабе: https://github.com/asve79/z80-telnet

Демка:
Image

Re: z80-telnet client

PostPosted: Wed, 06.02.2019 16:48:49
by VBI
отлично!
надо будет sna попробовать.
поздравляю с приобретением esp!

вопрос - изменения в дровах сети для 232 порта были? или они те-же что и в коде zifi?

Re: z80-telnet client

PostPosted: Thu, 07.02.2019 09:30:28
by asve79
VBI wrote:вопрос - изменения в дровах сети для 232 порта были? или они те-же что и в коде zifi?


Я брал из твоего репозитория, пока что модуль от @psb.
Пришло время как раз разобраться с zifi драйвером )

Re: z80-telnet client

PostPosted: Sat, 09.02.2019 17:44:51
by idxi
asve79, хорошая работа !
В виде либы, это вообще универсально, чтобы не важно через что передавать/принимать будет: com, zifi, w5500, 28j60, etc... :)
Самое время юзать Расширенные возможности работы с ts-conf - dma и тп )

Re: z80-telnet client

PostPosted: Tue, 12.02.2019 08:21:46
by asve79
Дойдем и до либы. Хочу сначала модулей напилить, тогда будет понятно как лучше это все дело цнифицировать.
Для TS-ки вообще бы модуль в WC запихнуть, чтобы из приложений можно было пользоваться как драйбером ОС. Но.. Это дальнейший повод подумать и пообсуждать )

Re: z80-telnet client

PostPosted: Thu, 14.02.2019 00:26:28
by idxi
Классно !

Есть мысль такая, что для простоты и быстроты можно что то в sdcc писать со вставками asm :/

Re: z80-telnet client

PostPosted: Thu, 14.02.2019 14:24:03
by asve79
sdcc это видимо какой-то следующий этап. )
В любом случае придется разбираться с интеграцией с C, Смотрю сейчас популярно стало его использовать.
Я правильно понимаю что управление страницами памяти он берет на себя?

Re: z80-telnet client

PostPosted: Thu, 14.02.2019 18:08:32
by TS-Labs
Неправильно =) Все управление страницами - методом заката солнца вручную.

Re: z80-telnet client

PostPosted: Fri, 15.02.2019 11:41:54
by asve79
TS-Labs wrote:Неправильно =) Все управление страницами - методом заката солнца вручную.


Хех, раз с памятью придется также танцевать, то большого смысла в коде на С не вижу, только накладные расходы по производительности. )
Для быстрозадач - да, а для чего-то по-серьезней ИМХО нет.

Есть еще z88dk. Может там продвинулись дальше. Бузжуи из zx-next-а его активно используют.

Re: z80-telnet client

PostPosted: Fri, 15.02.2019 12:44:47
by TS-Labs
С нужен для оформления логики верхнего уровня в читаемом виде. Все низкоуровневные процедуры можно (и нужно) писать на асме.
Не прелесть ли?
.png

Re: z80-telnet client

PostPosted: Tue, 19.02.2019 18:00:28
by idxi
Огонь ! )

Re: z80-telnet client

PostPosted: Thu, 04.04.2019 07:46:54
by dr_max
Пару капель в защиту С :) Я тоже относился довольно скептически к С на Z80 и писал всё на чистом асме.
В качестве тестового проекта стартовал UDImage на С (для нужд которого потом родился проект gcWin ))

Вот выдержки из кода для наглядности:
wd_crc(), wd_read_sector() на асме

Code: Select all
void udi_set_crc(u8 num_sectors)
{
    u8 i;
    u16 sector_size;
    u16 crc, initial_crc;

    for (i=0; i<num_sectors; i++)
    {
        sector_size = 128 << (SHDR[i].n);
        initial_crc = (sector_array[i].flag.data_type) ? WDCRC_F8 : WDCRC_FB;
        crc = wd_crc(track_dump + sector_array[i].offset_dat, sector_size, initial_crc);
        if(sector_array[i].flag.crc)    // if crc error
            crc=~crc;
        *((u16*)(track_dump + sector_array[i].offset_dat + sector_size)) = crc;
    }
}


Code: Select all
void udi_read_sectors(u8 num_sectors)
{
    u8 i;
    u8 error;
    u8 type;
    u16 offset;
    for (i=0; i<num_sectors; i++)
    {
        offset = sector_array[i].offset_dat;
        if(!offset) continue;
        {
            type = (sector_array[i].flag.data_type) ? 1 : 0;
            error = wd_read_sector(type, SHDR[i].c, SHDR[i].r-1, track_dump + offset);
            sector_array[i].flag.crc = (error == WD_ERROR_CRC) ? 1 : 0;
        }
    }
}