nedoPC.org

Community for electronics hobbyists, established in 2002
Last visit was: 31 Oct 2024 17:11
It is currently 31 Oct 2024 17:11



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

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

P.S. Результат: https://gitlab.com/nedopc/sdk/-/tree/master/pseudo-86rk

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Mar 2024 13:22 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
Псевдографика там тоже будет т.к. 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 ¤

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Mar 2024 13:42 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
Стрелки (они правда худосочные):
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


P.S. Ещё вот такие стрелочки есть: ← ↑ → ↓
Code:
←
↑
→
↓
Это из блока вручную написанных символов: https://www.compart.com/en/unicode/block/U+FF00


You do not have the required permissions to view the files attached to this post.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Mar 2024 14:02 WWW
Doomed
User avatar

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


02 Mar 2024 14:10 WWW
Admin
User avatar

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

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

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

Attachment:
Screenshot from 2024-03-02 13-10-48.png


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

 ERROR
Attachment:
Screenshot from 2024-03-02 13-19-41.png


You do not have the required permissions to view the files attached to this post.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Mar 2024 14:11 WWW
Senior
User avatar

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

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


02 Mar 2024 14:22 WWW
Admin
User avatar

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Mar 2024 14:30 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
Эмулятор планирую строить на основе своего 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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Mar 2024 15:47 WWW
Doomed
User avatar

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

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


03 Mar 2024 03:36 WWW
Admin
User avatar

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

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


03 Mar 2024 10:56 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23385
Location: Silicon Valley
Теперь про мой класс 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, которые в ориониксе были вынесены в дочерний класс...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


04 Mar 2024 00:29 WWW
Doomed
User avatar

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


16 Mar 2024 11:09 WWW
Admin
User avatar

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

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


16 Mar 2024 21:28 WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 259
https://unicode.org/charts/PDF/U1FB00.pdf

_________________
uselessretro.blogspot.com


17 Mar 2024 09:20
Maniac
User avatar

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


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

_________________
uselessretro.blogspot.com


17 Mar 2024 09:23
 [ 77 posts ]  Go to page 1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: Claude AI [Bot] and 0 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

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