ПК-01 ЛЬВОВ

форум о ПК-01,02 "Львов"
Текущее время: 26 апр 2018, 18:57

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 214 ]  На страницу 1, 2, 3, 4, 5 ... 15  След.
Автор Сообщение
 Заголовок сообщения: DprToLvt (PasToLvt)
СообщениеДобавлено: 04 июн 2012, 22:06 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
Написанные мной дизассемблер и ассемблер, все это «промежуточная фигня» по сравнению с Мировой революцией… :-) На них очень скоро я поставлю окончательную «точку».
Как я уже писал, что хотелось бы «прогнуть» среду Delphi (Pascal) под компиляцию для ПК-01 Львов.
Потихоньку начинаю пытаться реализовывать это.
Так как я не являюсь профессиональным программистом у меня естественно возникают вопросы.
Рассчитываю на вашу поддержку.
Хочу реализовать модуль в дельфи, где регистры и каждая команда процессора КР580 будет переведена («окутана») процедурой Дельфи, например:
Разметка регистров будет позаимствованная с исходников эмулятора Антона Игнатичева (http://lvovpc.cu.cc/)
Код:
  RgC:   byte;
  RgB:   byte;
  RgE:   byte;
  RgD:   byte;
  RgL:   byte;
  RgH:   byte;
  RgA:   byte;
  RgF:   byte;
  RgSP:  word; //Указатель стека
  RgPC:  word; // Счетчик команд
  RgBC:  word absolute RgC;
  RgDE:  word absolute RgE;
  RgHL:  word absolute RgL;
  RgPSW: word absolute RgA;    // Флаги


А команды ассемблера будут «окутаны» и подточены для возможности выполнения их в дельфи т.е. вот так вот:
Код:
Procedure _NOP;
begin
end;

 {LXI B} //        'B <-...',
Procedure LXIB(w:word);
begin
RgBC:=w;
end;

//{STAX B}   'A --> Mem(BC)' 02:
Procedure STAXB(b:byte);
begin
RAM[RgBC]:=b;
end;

// INX B {INX B}   'BC=BC+1' C03:
Procedure INXB;
begin
RgBC:=RgBC+1;
end;

// {INR B}   'B=B+1'
Procedure INRB;
begin
RgB:=RgB+1;
end;

и т.д.

Это сделано для того чтобы каждую команду асма можно было выполнять как процедуру дельфи и тоже самое делать с регистрами…
Вопрос вот в чем:

1. Будет ли хватать быстродействия современных машин, если программу написать на таких процедурах, и чтобы она выполняясь не медленнее, чем на реальном асме (кодах) ПК-01?

2. Незнаю как реализовать некоторые команды в Дельфи, например PUSH и POP? Помогите.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 04 июн 2012, 22:45 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
sas9568635 писал(а):
Как я уже писал, что хотелось бы «прогнуть» среду Delphi (Pascal) под компиляцию для ПК-01 Львов.

Безумству храбрых поем мы песню! Но почему все-таки Дельфи? Под CP/M80 был ТурбоПаскаль 3.0, который отлично работал на ПК-02 с Z80. Сам по себе он был удобен в работе, выдавал приличный код (хотя рантайм был около 10-11 кб), но по быстродействию все равно пасовал перед ассемблером. Чтобы написать что-либо шустрое, нужно было обращаться к inline-вставкам машинных кодов. К чему это я пишу, - может, не стоит мучить старичка ПК-01? Какой результат мы ожидаем? Может, все-таки лучше ориентироваться на Си, как-никак этот язык ближе к железу, чем Паскаль при всем уважении к нему. :)

upd. Или эта любопытная задумка ценна прежде всего самой возможностью ее реализации? Искусство, так сказать, ради искусства? :wink:

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 00:01 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщений: 202
честно говоря, мне раньше казалось, что я в жизни видел уже всё.... похоже, что я ошибался.....

to sas9568635:
В исходном сообщении речь идёт про компилятор, а в примере в коде реализован интерпретатор (эмулятор). Следовало бы определиться для кросс-компиляции с целевой и гостевой машинами.

BTW, liberation прав, был в своё время прекрасный express pascal под CP/M (я его на Корветах видел), как, впрочем, и Small C ... было даже такое поделие ...

P.S. ответ на вопросы есть здесь:
http://www.amazon.com/Advanced-Compiler ... 1558603204


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 00:29 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
Добавлю пару слов. Что именно из Дельфи нам нужно? Я слабо ориентируюсь в этой среде, но понимаю, что библиотека визуальных компонент нам точно не нужна, да и средства работы с БД тоже вряд ли будут востребованы. Что остается? Управляющие структруры языка? ООП? Типы данных, которые Паскаль поддерживает "искаропки"? Надо уточнить приоритеты. :)

upd. Опирясь на собственный опыт использования TP 3.0 на ПК-02, могу сказать, что больше всего использовал работу с вещественными числами, обработку строк и работу с файлами. Возможно, без всего этого можно было обойтись, если бы для "Львова" существовали соответствующие библиотеки на ассемблере. Хотя возможность спокойно создавать переменные без оглядки на число регистров тоже очень радовала. :D

2upd. "Самолет хорошо, пароход хорошо, а олени лучше!", - может, все-таки Форт? :wink:

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 00:53 
Не в сети

Зарегистрирован: 07 дек 2010, 16:54
Сообщений: 202
Если рассматривать вопрос с практической стороны, то:
для хостовой реализации Форт - это единственно возможный вариант (тем более что во встроенном бейсике есть и библиотека с плавающей точкой и графика и т.п. - достаточно просто их оттуда выковырять)
для кросс-компилятора - тут можно навернуть всё что угодно, вплоть до супероптимизатора на все 64К программы в памяти....

и это при том, что _уже_ можно пользоваться компиляторами для однокристалок и/или гнусью.
а вот по этому http://www.cpm.z80.de/small_c.html есть даже книга на русском языке:
681.3.06 Х38
Хендрикс, Д.
Компилятор языка Си для микроЭВМ [Текст] = The Small-C Handbook : пер. с англ. / Д. Хендрикс; Ред. Б.А. Кузьмин. - . - . - . - М. : Радио и связь, 1989. - . - 240 с. : ил., прил.. - . - . - Библиогр.. - . - ISBN 5-256-00161-2 : 00.80 р.

тема раскрыта?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 01:01 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
sadfsdfsdaf писал(а):
для хостовой реализации Форт - это единственно возможный вариант (тем более что во встроенном бейсике есть и библиотека с плавающей точкой и графика и т.п. - достаточно просто их оттуда выковырять)

Меня терзают смутные подозрения... Вроде бы я Вас уже спрашивал про сохранившиеся записи по дизассемблированию стандартного ПЗУ ПК-01? Что-то найти удалось?

sadfsdfsdaf писал(а):
и это при том, что _уже_ можно пользоваться компиляторами для однокристалок и/или гнусью.

А какой-нибудь наглядный пример можно?

sadfsdfsdaf писал(а):
тема раскрыта?

Для меня более чем! Уже не на шутку спать хочется. :D

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 01:15 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
(Написанные в этой и других темах сообщения почитаю и вникну завтра, на свежую голову)

Попытаюсь рассказать свою задумку словами :-) насколько это возможно… :-)
Создаешь новый проект в дельфи (DPR,pas)
Подключаешь в него модули «КР580», «ПЗУ ПК-01 Львов» и «экран ПК-01 Львов», (для начала хотябы только такие модули), которые эмулируют … понятно что… :-) (скорее всего это будут DLL- модули, вообщем как будет получаться…)… модуль «экран ПК-01 Львов» будет состоять из формы-дельфи, а в ней «подобие» экрана Львов (компонент TPaintBox), и обращение к экрану соответственно будет такое же как (аналог IN OUT) и в ПК-01.
Итак. Программа написанная на дельфи будет управлять «КР580», «ПЗУ ПК-01 Львов» и «экран ПК-01 Львов», словно программа написанная в самом ПК-01. Это понатно! Так ведь? :-)
Далее.
Для реальной компиляции, в реальные коды КР580, необходимо будет заменять дельфийские структуры и процедуры, на такие, которые будут заложены в возможность их к компиляции в машкоды КР580. Т.е. это будут команды КР580, А ТАКЖЕ некоторые структуры, которые могут смело переводится на машкоды КР580 (в несколько команд КР580)

После чего их утилита-компилятор сможет их перевести в LVT-формат.

При нежелании переводить на машкоды КР580 :-) можно просто скопилировать в обычный экзешник.. :-) (ради шутки)

Основная соль этого всего:
Удобство написания программ в среде дельфи в отличии от например, той же LvivStudio :-)
Возможность отрабатывать пошагово, наблюдая за всем, что только можно (регистрами, флагами процессора и т.д.), причем при необходимости, а такое бывает часто при отладке, можно в программе их изменять «в наглую» присвоив им нужное значение, причем в любом месте программы. (Например RgSP:=RgSP+1; RgHL:=$1500; FlagS:=False и т.д.)
Никаких границ по памяти, правда до последнего момента :-) когда их утилита-компилятор будет компилировать в LVT-формат.
Использовать всю мощь дельфи и ее процедуры и функции, как вспомогательные, в «гремучей смеси» с обычными (возможными к компиляции в КР580) командами.
Может еще чего забыл… :-)

Вот огрызок-черновик от части программы которая написана в среде дельфи и ее компиляция в КР580, будет очень даже реальна.
Как бы я хотел уже сейчас использовать такое для написания и компиляции программ для ПК-01.
Может что-то подобное уже есть? Где?
Код:
program PastoLV;//
uses
  PasToLVUnit in 'PasToLVUnit.pas',
  I8080 in 'I8080.PAS';

Label STARTj81A0,j81C1;
var
d84B0,d84B1………………… :AddrDB; // метки под данные

Procedure c80D4;forward;
Procedure c80D4;
Begin
RgHL:=d85F4;            // LXI H, d85F4  ;HL <-...
SHLD($80D5);              //  SHLD $80D5    ;L-->Mem(...),H-->Mem(...+1)
RET;
end;

Procedure cF82D;forward;
Procedure cF82D;
Begin
………………..
end;

begin
BEGINPROGRAM:=$81A0;

d84B0:=SetAddrDB; // привязать к МЕТКЕ данных адрес Данных  (это как на асме метка= «d84B0:»
addDB($F2);  // Установить (добавлять) данные  (это как на асме = «.DB $F2»


d84B1:=SetAddrDB; // привязать к МЕТКЕ данных адрес Данных, это как на асме =» d84B1: .db 46,$CA,$4F, $40»
addDB(46); addDB($CA);addDB($4F); addDB($40);
….

STARTj81A0:
RgSP:= $AFFF;                // LXI SP, $AFFF ;SP <-...
c83B4;                       //CALL c83B4    ;Безусловный вызов ПП
RgHL:=d85F4;                 // LXI H, d85F4  ;HL <-...
SHLD($80D5);                //  SHLD $80D5    ;L-->Mem(...),H-->Mem(...+1)
c80D4;                       //   ;Безусловный вызов ПП
……
……………
j81C1:
RgDE:=RgDE-1;               //    DCX D         ;DE=DE-1
RgA:=RgE;                   //     MOV A,D       ;A=D

if FlagZ then goto j81C1;  //JNZ j81C1     ;БП, если Z=0
c8b4;                      // CALL c83B4    ;Безусловный вызов ПП
RgHL:=$4806;                //LXI H, $4806  ;HL <-...
RgE:=$0C;                   //MVI E, $0C    ;E <-...Загрузка байта данных ... в приемник E
RgBC:=$03D1;                       //LXI B, $03D1  ;BC <-...

………………
end.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 10:23 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
liberation писал(а):
Под CP/M80 был ТурбоПаскаль 3.0, который отлично работал на ПК-02 с Z80.

Ссылку кинь, посмотрю, что это, если оно конечно запустится подвии, уменя например ( PC-01 Lvov emulator version 1.05 Copyright (c) Anton V. Ignatichev 1999-2002) под вин на ноуте не запускается видимо из-за граф.режима....
liberation писал(а):
Чтобы написать что-либо шустрое, нужно было обращаться к inline-вставкам машинных кодов.

Дак все таки... Если я напишу таким образом быстродествие будет меньше чем на ПК-01 ?
liberation писал(а):
Может, все-таки лучше ориентироваться на Си, как-никак этот язык ближе к железу, чем Паскаль при всем уважении к нему. :)

Язык Си мне попросту незнаком, реализовываю, то что знаю...
liberation писал(а):
Или эта любопытная задумка ценна прежде всего самой возможностью ее реализации? Искусство, так сказать, ради искусства? :wink:

Я думаю, что если это реализовать, даже хоть как-то, то можно это будет использовать это на всю катушку, создавать модули (библиотеки) процедур и функций разного назначения, где потом можно легко писать программы и легким нажатием скомпилировать в достаточного оптимальный код для ПК-01. Оптимальный код нужно будет закладывать в процедуры (и модули процедур unit)? вообщем, что-то подобное макроАсму, но в среде Дельфи... и я думаю это будет круче.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 10:32 
Не в сети

Зарегистрирован: 29 мар 2012, 21:35
Сообщений: 115
sas9568635 писал(а):
1. Будет ли хватать быстродействия современных машин, если программу написать на таких процедурах, и чтобы она выполняясь не медленнее, чем на реальном асме (кодах) ПК-01?

Я думаю, будет даже гораздо быстрее, чем надо, и рано или поздно ты задумаешься о том, как сделать выполнение близким по скорости к реальному. Т.е. во всех процедурах нужно будет добавить увеличение глобального счётчика тактов, а где-то в глобальном цикле надо будет сделать пересчёт тактов в реальное время и задержку на это время (за вычетом времени, ушедшего на выполнение).

А если к твоей системе вместо отлаживаемой программы добавить дешифрацию команд i8080, то ты получишь вполне полноценный эмулятор. :)

sas9568635 писал(а):
2. Незнаю как реализовать некоторые команды в Дельфи, например PUSH и POP? Помогите.

Например так:
Код:
 {PUSH B} //        'stack <- BC',
Procedure PUSHB;
begin
  RgSP := RgSP - 1;
  SetMem(RgSP, RgB);
  RgSP := RgSP - 1;
  SetMem(RgSP, RgC);
end;

Я намеренно заменил твоё RAM[RgSP] := ... на процедуру, поскольку все обращения к памяти нужно делать через общую процедуру, учитывающую раскладку памяти, и обновляющую точки экрана, если это необходимо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 10:37 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
sadfsdfsdaf писал(а):
В исходном сообщении речь идёт про компилятор, а в примере в коде реализован интерпретатор (эмулятор).

Задумка в том, что в среде Дельфи программа будет работать как в интерпретаторе, а после "палировки" ее, можно будет компилировать отдельной утилитой в ПК-01. Понятно, что абсолютно все, что можна наваять в дельфи никакая утилита скомпилировать под ПК-01 (ЛВТ) не сможет, поэтому нужно будет в среде Дельфи окончальный вариант программы "подтачивать" (ну или сразу писать с таким расчетом) под то чтобы его можно было скомпилировать утилитой.
Ну это похоже как раньше было "интерпретатор-бейсика" и "Турбо-бейсик".


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 10:54 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
liberation писал(а):
Добавлю пару слов. Что именно из Дельфи нам нужно?

Дельфи нам нужен ВЕСЬ :-) ну или как захочешь... :-) КАК ВСПОМАГЕТЕЛЬНЫЙ ИНСТРУМЕНТ ДЛЯ НАПИСАНИЯ И "ПАЛИРОВКИ" ПРОГРАММЫ!
Ну допустим ты пишиешь такое на дельфи: Скажем процедуру вывода спрайта...
Код:
For x:=0 to 34 do begin
For y:=0 to 14 do begin
OUT($C2) // аналоги асм команд и портов ПК-01
.....
OUT($D2) // аналоги асм команд и портов ПК-01
.....
IN ($D2) // аналоги асм команд и портов ПК-01
....
MVIA($00)// аналоги асм команд и портов ПК-01
OUT $C2 // аналоги асм команд и портов ПК-01
....
end; end;



Так пишешь целую программ... подобие как Паскаль (Дельфи) с асм вставками...
Отпалировал, Запустил, работает! Далее, аккуратно и постепенно заменяешь процедуры конструкции котороем не могут быть скомпилированы, на аналогичные (асмовские) по ходу проверяя запуском проги правильность "подмены"...

liberation писал(а):
"Самолет хорошо, пароход хорошо, а олени лучше!", - может, все-таки Форт? :wink:

Ну не знаю Я "ФОРТы" "ЛИСПы" "СИшки" еще чего-то там...
ну... ...не виновата Я, он сам... :-) (из фильма "БР")


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 10:59 
Не в сети

Зарегистрирован: 29 мар 2012, 21:35
Сообщений: 115
sas9568635 писал(а):
Возможность отрабатывать пошагово, наблюдая за всем, что только можно (регистрами, флагами процессора и т.д.), причем при необходимости, а такое бывает часто при отладке, можно в программе их изменять «в наглую» присвоив им нужное значение, причем в любом месте программы.

Но ведь это всё есть и в отладчике эмулятора!
Я предлагаю тебе сконцентрироваться на разработке ассемблера, потому что если твой ассемблер будет генерировать листинг в определённом формате, то его можно будет "подключить" к отладчику, и вместо дизассемблированного кода, в котором нет меток, ты увидишь текст твоей программы из листинга, со всеми метками и комментариями.

В дальнейшем, если автор LvivStudio захочет, можно будет объеденить LvivStudio, твой ассемблер, и мой эмулятор в одну IDE, удобство пользования которой не будет уступать Дельфи. Надо будет только, чтобы твой ассемблер генерировал отладочную информацию, которую смог бы использовать LvivStudio, передавая её через определённый интерфейс отладки моему эмулятору. Этот интерфейс содержит все возможности управления отладкой внутри эмулятора (выдача/установка регистров, памяти, точек останова). А автору LvivStudio нужно будет сделать подсветку точек останова и текущей строки в редакторе, и выдачу/редактирование регистров, памяти и портов.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 11:14 
Не в сети

Зарегистрирован: 20 апр 2012, 16:00
Сообщений: 372
Откуда: Конотоп
b2m писал(а):
Я думаю, будет даже гораздо быстрее, чем надо, и рано или поздно ты задумаешься о том, как сделать выполнение близким по скорости к реальному....

Это конечно хорошо. Задержки писать думаю не проблема...

b2m писал(а):
А если к твоей системе вместо отлаживаемой программы добавить дешифрацию команд i8080, то ты получишь вполне полноценный эмулятор. :)

А поточнее можно?...
b2m писал(а):
Я намеренно заменил твоё RAM[RgSP] := ... на процедуру, поскольку все обращения к памяти нужно делать через общую процедуру, учитывающую раскладку памяти, и обновляющую точки экрана, если это необходимо.


Спасибо за содержательные ответы. Я так понял мне еще очень внимательно надо изучить принцип работы этих команд и стека и т.д. слава богу, думаю это можно будет проследить например в том же "Эмуляторе 3000". Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 11:23 
Не в сети
Аватар пользователя

Зарегистрирован: 11 авг 2008, 17:05
Сообщений: 1403
Откуда: Украина
b2m писал(а):
В дальнейшем, если автор LvivStudio захочет, можно будет объеденить LvivStudio, твой ассемблер, и мой эмулятор в одну IDE, удобство пользования которой не будет уступать Дельфи.

Ого, идет Кутузов бить французов! Дмитрий, у Вас же есть интересный ассемблер на js, может быть, стоит его развивать? И Студию можно будет перепилить под работу в Вебе. В результате получим аналог Cloud9 IDE для восьмиразрядных машин. Можно будет кодить хоть с утюга, главное чтобы доступ в Инет был. И даже на iPad'е! :wink:

_________________
Carthago delenda est, Carthaginem delendam esse


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: DprToLvt (PasToLvt)
СообщениеДобавлено: 05 июн 2012, 11:33 
Не в сети
Site Admin
Аватар пользователя

Зарегистрирован: 24 июл 2008, 12:05
Сообщений: 994
b2m писал(а):
sas9568635 писал(а):
LvivStudio, передавая её через определённый интерфейс отладки моему эмулятору. Этот интерфейс содержит все возможности управления отладкой внутри эмулятора (выдача/установка регистров, памяти, точек останова).


Вот-вот! И я про это уже давно говорю! Пора нам, Дмитрий, кооперироваться! Согласен поддержать любой предложенный интерфейс. Как я это видел - общение через порт, LvivStudio "дергает" методы, типа: устнови брикпоинты на адресса, дай занчение, не остановились ли мы где-то и т.п.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 214 ]  На страницу 1, 2, 3, 4, 5 ... 15  След.

Forum Games WEB Tape Loader Twitter RSS

Часовой пояс: UTC + 2 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Free counters!
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB