nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 27 Apr 2024 00:45



Reply to topic  [ 37 posts ]  Go to page 1, 2, 3  Next
Текстовый эмулятор Pseudo-86RK 
Author Message
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Задумал я тут текстовый эмулятор Pseudo-86RK (как часть nedoPC SDK), чтобы можно было CI/CD наладить на гитлабе, который бы прогонял тесты при изменениях каких-то в моих будущих программульках для РК (и вообще для 8080/8085 кода) и сравнивал бы вывод с эталонным. Вариант по умолчанию будет работать с ncurses, чтобы можно было менять местоположение курсора и раскрашивать текст, однако будет вариант сборки чисто текстовый при котором вывод через монитор будет делаться в stdout, причём каждая строка (опционально) может иметь префикс с количеством тактов, прошедших на момент начала этой строки, чтобы можно было точно считать время потраченное на вычисления (например декодирование SHAFF). Потом можно будет ещё сделать вариант сборки для доса (работа с текстовым экраном через conio) - просто чтобы было :lol:

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


02 Mar 2024 13:22
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Псевдографика там тоже будет т.к. UTF-8 может такие символы показать ▓█▀▄█▓:
Quote:
02584
E29684
None
▄

-------------
02580
E29680
None
▀

-------------
02588
E29688
None
█

-------------
0258C
E2968C
None
▌

-------------
02590
E29690
None
▐

-------------
02596
E29696
None
&#9622

-------------
02597
E29697
None
▗

-------------
02598
E29698
None
▘

-------------
02599
E29699
None
▙

-------------
0259A
E2969A
None
▚

-------------
0259B
E2969B
None
▛

-------------
0259C
E2969C
None
▜

-------------
0259D
E2969D
None
▝

-------------
0259E
E2969E
None
▞

-------------
0259F
E2969F
None
▟

-------------
02593
E29693
None
▓

Источник: https://www.isthisthingon.org/unicode/index.phtml?page=02&subpage=5&hilite=02595#Block%20Elements

Надо ещё найти стрелочки (они точно были), человечка и яблоко :mrgreen:

P.S. Ещё там есть такое:
Quote:
025A2
E296A2
None
▢

-------------
025A4
E296A4
None
▤

(это для моих шрифтовых расширений)

P.P.S. Вот этот советский символ тоже надо вместо доллара взять :roll:
Quote:
¤

U+00A4 Currency Sign

System Representation (click value to copy)
Nº 164
UTF-8 C2 A4
UTF-16 00 A4
UTF-32 00 00 00 A4
URL-Quoted %C2%A4
HTML hex reference ¤

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


02 Mar 2024 13:42
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Стрелки (они правда худосочные):
Quote:
02190
E28690
81A9
←

-----------
02191
E28691
81AA
↑

-----------
02192
E28692
81A8
→

-----------
02193
E28693
81AB
↓


Вертикальные и горизонтальные палки разной толщины:
Quote:
02500
E29480
849F
─

-----------
02501
E29481
84AA
━

-----------
02502
E29482
84A0
│

-----------
02503
E29483
84AB
┃

-----------
025AC
E296AC
None
▬


Яблоко (правда красное):
Code:
Unicode Character (U+1F34E):

HTML Entity:   

    🍎
    🍎

UTF-8 Encoding:   0xF0 0x9F 0x8D 0x8E
Источник: https://www.compart.com/en/unicode/U+1F34E

Сам символ яблока сюда вставить не могу, т.к. у MySQL из-за него сносит крышу, а вот терминал моего дебияна этот символ замечательно показывает:
Attachment:
Screenshot from 2024-03-02 12-56-55.png
Screenshot from 2024-03-02 12-56-55.png [ 4.55 KiB | Viewed 1401 times ]

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


02 Mar 2024 14:02
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 318
Location: Tashkent
Reply with quote
Shaos wrote:
Сам символ яблока сюда вставить не могу, т.к. у MySQL из-за него сносит крышу
Вот ведь, а!?
Вроде бы "Проблему 2000" уже как-то решали ведь. Но, нашлось "яблоко раздора"! :surprised:
(Сколько нового софта ни пишут, а багов - целый клоповник!)


02 Mar 2024 14:10
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Ну это видать сильно расширенный юникод с очень большим номером :lol:

P.S. Вот из той же серии цветной человечек :)

https://www.compart.com/en/unicode/U+1F57A

Attachment:
Screenshot from 2024-03-02 13-10-48.png
Screenshot from 2024-03-02 13-10-48.png [ 6.18 KiB | Viewed 1393 times ]


P.P.S. Под спойлером сообщение об ошибке при попытке заслать текст с этим человечком в форум:

 ERROR
Attachment:
Screenshot from 2024-03-02 13-19-41.png
Screenshot from 2024-03-02 13-19-41.png [ 185.88 KiB | Viewed 1377 times ]

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


02 Mar 2024 14:11
Profile WWW
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 138
Location: 93.80.157.217
Reply with quote
может версия мускуля старая? когда они тока ввели поддержку UTF-8, они под эти символы выделили только три байта... только ТРИ, млять, БАЙТА!!! какому "гению" в голову пришло, что для кодирования UTF-8 надо только три байта, какую документацию он читал? уже позже, когда поняли, что лоханулись, добавили ещё один тип данных -- utf8mb4, где уже под символ UTF-8 выделено 4 байта.

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


02 Mar 2024 14:22
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
vital72 wrote:
может версия мускуля старая? когда они тока ввели поддержку UTF-8, они под эти символы выделили только три байта... только ТРИ, млять, БАЙТА!!! какому "гению" в голову пришло, что для кодирования UTF-8 надо только три байта, какую документацию он читал? уже позже, когда поняли, что лоханулись, добавили ещё один тип данных -- utf8mb4, где уже под символ UTF-8 выделено 4 байта.
Да - на этом виртуальном серваке староватая лампа стоит, надо наверное обновиться...

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


02 Mar 2024 14:30
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Эмулятор планирую строить на основе своего C++ класса Processor8080, который я начал писать ещё в 1994 году (т.е. этому коду уже 30 лет!!!), первую рабочую версию выкатил в 1996 и далее сделал ряд улучшений, включая активность 2012 года по причёсыванию наших эмуляторов. См. https://gitlab.com/nedopc/sdk/-/blob/master/common/proc8080.cpp

Code:
/*  proc8080.cpp - class Processor8080 for emulation of 8080/8085.

    Part of nedoPC SDK (software development kit for DIY and RETRO computers)

    Copyright (c) 1994-2024, Alexander Shabarshin <me@shaos.net>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "proc8080.h"

/*
    02 Apr 1994 - Start of implementation
    14 Oct 1996 - First version for Borland-C++ 2.0
    20 Jun 1997 - Some fixes
    17 Jan 1998 - Port to Watcom-C/C++ 10.0
    26 Sep 2000 - Some fixes
    17 Oct 2006 - Some modifications for OrioniX
    26 Dec 2006 - Released under GPLv2 through SourceForge
    18 Nov 2007 - Added timings for 8085 + some fixes
    26 Aug 2012 - Fixed DAA and flag AC
    02 Mar 2024 - Re-licensed under GPLv3
*/

Этот класс например уже использовался в моём эмуляторе компьютера Орион под названием OrioniX (2006 и ранее в досовской версии):

http://www.nedopc.org/forum/viewtopic.php?f=94&t=8480

а также в симуляторе домашней сети куда могли быть включены несколько компьютеров с процессором i8080 (1997-1998):

http://www.nedopc.org/forum/viewtopic.php?f=46&t=9621

Image

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


02 Mar 2024 15:47
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 318
Location: Tashkent
Reply with quote
Кстати, а в чём общая суть такой эмуляции?

В соседней ветке тоже представил скрипт симуляции (не эмуляции) работы архитектур i8080/i8086/x86/x64…
В принципе, его можно дописать и довести до ума, чтобы воспроизвести больший функционал РАДИО-86РК.


03 Mar 2024 03:36
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Alikberov wrote:
Кстати, а в чём общая суть такой эмуляции?
Общая суть озвучена в первой строчке первого сообщения - CI/CD надобно для GitLab :roll:

Ну и плюс хотелось бы с точностью до такта знать время выполнения тех или иных подпрограмм, написанных в кодах 8080/8085 (кодеры, декодеры, компиляторы, разнообразная математика и т.д.), причём с максимально возможной скоростью...

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


03 Mar 2024 10:56
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Теперь про мой класс Processor8080:
Code:
/*  proc8080.h - class Processor8080 for emulation of 8080/8085.

    Part of nedoPC SDK (software development kit for DIY and RETRO computers)

    Copyright (c) 1994-2024, Alexander Shabarshin <me@shaos.net>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef __PROC8080_H
#define __PROC8080_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SH_FALSE 0
#define SH_TRUE 1
#define SH_BIT int
#define SH_BYTE unsigned char
#define SH_WORD unsigned short

#define SH_FLAG_8085 1

class Processor8080
{
 int flags;
protected:
 unsigned long time;
 unsigned long timel;
 SH_BYTE lastcom;
 SH_BYTE A,B,C,D,E,H,L;
 SH_WORD SP,PC,PC_;
 SH_BIT z_,p_,c_,s_,a_,i_;
 SH_BYTE par[256];
 SH_WORD mul256(SH_BYTE b) { return ((SH_WORD)b)<<8; };
 SH_BYTE plus(SH_BYTE b1,SH_BYTE b2,SH_BYTE b3=0)
 {
   SH_BYTE b1l,b1r,b2l,b2r,b_l,b_r;
   b1l=(b1&0xF0)>>4;
   b1r=b1&0x0F;
   b2l=(b2&0xF0)>>4;
   b2r=b2&0x0F;
   b_r=b1r+b2r+b3;
   a_=(b_r&0x10)>>4;
   b_r=b_r&0x0F;
   b_l=b1l+b2l+a_;
   c_=(b_l&0x10)>>4;
   b_l=b_l&0x0F;
   return (b_l<<4)|b_r;
 }
 SH_BYTE minus(SH_BYTE b1,SH_BYTE b2,SH_BYTE b3=0)
 {
   SH_BYTE b1l,b1r,b2l,b2r,b_l,b_r;
   b1l=(b1&0xF0)>>4;
   b1r=b1&0x0F;
   b2l=(b2&0xF0)>>4;
   b2r=b2&0x0F;
   b_r=b1r-b2r-b3;
   if(b_r&0x10) a_=SH_TRUE;
   else a_=SH_FALSE;
   b_r=b_r&0x0F;
   b_l=b1l-b2l-a_;
   if(b_l&0x10) c_=SH_TRUE;
   else c_=SH_FALSE;
   b_l=b_l&0x0F;
   if(a_) a_=SH_FALSE;
   else a_=SH_TRUE;
   return (b_l<<4)|b_r;
 }
 void flag_p(SH_BYTE b) { p_=(SH_BIT)par[b]; };
 void flag_z(SH_BYTE b) { if(!b) z_=SH_TRUE; else z_=SH_FALSE; };
 void flag_s(SH_BYTE b) { s_=(b&0x80)>>7; };
 void flag_all(SH_BYTE b) { flag_s(b); flag_z(b); flag_p(b); };
 void ret(void) { PC=getw(SP); SP+=2; };
 void call(SH_WORD a) { SP-=2; putw(SP,PC); PC=a; };
public:
 SH_BIT INTR;
 SH_BIT HALT;
 long getTime(void){return timel;};
 void setPC(SH_WORD a) { PC=a; };
 void setSP(SH_WORD a) { SP=a; };
 void setBC(SH_WORD x) { B=x>>8; C=x&0xFF; };
 void setDE(SH_WORD x) { D=x>>8; E=x&0xFF; };
 void setHL(SH_WORD x) { H=x>>8; L=x&0xFF; };
 void setPSW(SH_WORD x)
 {
   A=(x>>8)&0xFF;
   s_=(x&0x0080)>>7;
   z_=(x&0x0040)>>6;
   a_=(x&0x0010)>>4;
   p_=(x&0x0004)>>2;
   c_=(x&0x0001);
 }
 SH_WORD getPC(void) { return PC; };
 SH_WORD getSP(void) { return SP; };
 SH_WORD getBC(void) { return mul256(B)|C; };
 SH_WORD getDE(void) { return mul256(D)|E; };
 SH_WORD getHL(void) { return mul256(H)|L; };
 SH_WORD getPSW(void) { return (mul256(A)|(s_<<7)|(z_<<6)|(a_<<4)|(p_<<2)|2|c_); };
 SH_BYTE getM(void) { return get(getHL()); };
 int is8085(void) { return flags&SH_FLAG_8085; };
 Processor8080(int f=0);
 virtual ~Processor8080() { ; };
 virtual SH_BYTE get(SH_WORD a) { return 0xFF; }; // read from memory
 virtual void put(SH_WORD a,SH_BYTE b) { ; }; // write to memory
 virtual SH_BYTE interruption(void) { return 0; }; // interrupt
 virtual int aux(SH_BYTE com,SH_BIT ok) { return 0; }; // parallel activity
 virtual SH_BYTE inp(SH_BYTE p) { return 0xFF; }; // read from port
 virtual void outp(SH_BYTE p,SH_BYTE b) { ; }; // write to port
 SH_WORD getw(SH_WORD a) { SH_WORD w=get(a); w|=mul256(get(a+1)); return w; };
 void putw(SH_WORD a, SH_WORD w) { put(a,w&0xFF); put(a+1,(w>>8)&0xFF); };
 unsigned long step(unsigned long t=1);
 int load(const char *s,SH_WORD adr,SH_WORD len=0xFFFF,SH_WORD off=0);
 int save(const char *s,SH_WORD adr,SH_WORD len);
};

class Processor8085 : public Processor8080
{
public:
 Processor8085() : Processor8080(SH_FLAG_8085) {;};
 virtual ~Processor8085() {;};
};

#endif
Как не трудно заметить, этот класс не имеет памяти (причём поначалу имел, но затем перестал т.к. у разных машин подразумеваяется разная реализация памяти) и чтобы к процессору добавить память надо переопределить виртуальные методы get и put (чтения и запись одного байта соответственно). Для выполнения шага эмуляции используется метод step, а в случае необходимости перехватывать какие-то инструкции или просто что-то делать после каждого шага существует виртуальный метод aux, который можно переопределить. Также при необходимости можно переопределить методы работы с портами ввода-вывода (inp и outp).

P.S. Вернул обратно в класс методы save и load, которые в ориониксе были вынесены в дочерний класс...

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


04 Mar 2024 00:29
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 318
Location: Tashkent
Reply with quote
Может поднять небольшой TelNet/PuTTY-сервер с эмуляцией РАДИО-86РК? :mrgreen:


16 Mar 2024 11:09
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22597
Location: Silicon Valley
Reply with quote
Alikberov wrote:
Может поднять небольшой TelNet/PuTTY-сервер с эмуляцией РАДИО-86РК? :mrgreen:
Ну у меня есть rk86.net, который я планировал оснастить сетевыми возможностями, чтобы пользователи могли запускать сетевые программы, ходить "в гости" друг к другу посещая сессии друг-друга и т.д. Эмулятор в браузере поди куда практичнее нежели эмулятор по телнету или тем более ssh :roll:

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


16 Mar 2024 21:28
Profile WWW
Senior
User avatar

Joined: 14 Oct 2023 06:59
Posts: 139
Reply with quote
https://unicode.org/charts/PDF/U1FB00.pdf

_________________
uselessretro.blogspot.com


17 Mar 2024 09:20
Profile
Senior
User avatar

Joined: 14 Oct 2023 06:59
Posts: 139
Reply with quote
vital72 wrote:
добавили ещё один тип данных -- utf8mb4, где уже под символ UTF-8 выделено 4 байта.


так появилось UTF-16 8)

_________________
uselessretro.blogspot.com


17 Mar 2024 09:23
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 37 posts ]  Go to page 1, 2, 3  Next

Who is online

Users browsing this forum: Hammer, Shaos and 63 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.