PC-01 Lviv

It is currently 28 Mar 2024, 19:35

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 215 posts ]  Go to page 1 2 3 4 515 Next
Author Message
 Post subject: DprToLvt (PasToLvt)
PostPosted: 04 Jun 2012, 22:06 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Написанные мной дизассемблер и ассемблер, все это «промежуточная фигня» по сравнению с Мировой революцией… :-) На них очень скоро я поставлю окончательную «точку».
Как я уже писал, что хотелось бы «прогнуть» среду Delphi (Pascal) под компиляцию для ПК-01 Львов.
Потихоньку начинаю пытаться реализовывать это.
Так как я не являюсь профессиональным программистом у меня естественно возникают вопросы.
Рассчитываю на вашу поддержку.
Хочу реализовать модуль в дельфи, где регистры и каждая команда процессора КР580 будет переведена («окутана») процедурой Дельфи, например:
Разметка регистров будет позаимствованная с исходников эмулятора Антона Игнатичева (http://lvovpc.cu.cc/)
Code:
  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; 	// Флаги
А команды ассемблера будут «окутаны» и подточены для возможности выполнения их в дельфи т.е. вот так вот:
Code:
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? Помогите.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 04 Jun 2012, 22:45 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
Quote:
Как я уже писал, что хотелось бы «прогнуть» среду Delphi (Pascal) под компиляцию для ПК-01 Львов.
Безумству храбрых поем мы песню! Но почему все-таки Дельфи? Под CP/M80 был ТурбоПаскаль 3.0, который отлично работал на ПК-02 с Z80. Сам по себе он был удобен в работе, выдавал приличный код (хотя рантайм был около 10-11 кб), но по быстродействию все равно пасовал перед ассемблером. Чтобы написать что-либо шустрое, нужно было обращаться к inline-вставкам машинных кодов. К чему это я пишу, - может, не стоит мучить старичка ПК-01? Какой результат мы ожидаем? Может, все-таки лучше ориентироваться на Си, как-никак этот язык ближе к железу, чем Паскаль при всем уважении к нему. :)

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 00:01 
Offline

Joined: 07 Dec 2010, 16:54
Posts: 227
честно говоря, мне раньше казалось, что я в жизни видел уже всё.... похоже, что я ошибался.....

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

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

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 00:29 
Offline
User avatar

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

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

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 00:53 
Offline

Joined: 07 Dec 2010, 16:54
Posts: 227
Если рассматривать вопрос с практической стороны, то:
для хостовой реализации Форт - это единственно возможный вариант (тем более что во встроенном бейсике есть и библиотека с плавающей точкой и графика и т.п. - достаточно просто их оттуда выковырять)
для кросс-компилятора - тут можно навернуть всё что угодно, вплоть до супероптимизатора на все 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 р.

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 01:01 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
Quote:
для хостовой реализации Форт - это единственно возможный вариант (тем более что во встроенном бейсике есть и библиотека с плавающей точкой и графика и т.п. - достаточно просто их оттуда выковырять)
Меня терзают смутные подозрения... Вроде бы я Вас уже спрашивал про сохранившиеся записи по дизассемблированию стандартного ПЗУ ПК-01? Что-то найти удалось?
Quote:
и это при том, что _уже_ можно пользоваться компиляторами для однокристалок и/или гнусью.
А какой-нибудь наглядный пример можно?
Quote:
тема раскрыта?
Для меня более чем! Уже не на шутку спать хочется. :D

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 01:15 
Offline

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

Попытаюсь рассказать свою задумку словами :-) насколько это возможно… :-)
Создаешь новый проект в дельфи (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.
Может что-то подобное уже есть? Где?
Code:
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.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 10:23 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
Под CP/M80 был ТурбоПаскаль 3.0, который отлично работал на ПК-02 с Z80.
Ссылку кинь, посмотрю, что это, если оно конечно запустится подвии, уменя например ( PC-01 Lvov emulator version 1.05 Copyright (c) Anton V. Ignatichev 1999-2002) под вин на ноуте не запускается видимо из-за граф.режима....
Quote:
Чтобы написать что-либо шустрое, нужно было обращаться к inline-вставкам машинных кодов.
Дак все таки... Если я напишу таким образом быстродествие будет меньше чем на ПК-01 ?
Quote:
Может, все-таки лучше ориентироваться на Си, как-никак этот язык ближе к железу, чем Паскаль при всем уважении к нему. :)
Язык Си мне попросту незнаком, реализовываю, то что знаю...
Quote:
Или эта любопытная задумка ценна прежде всего самой возможностью ее реализации? Искусство, так сказать, ради искусства? :wink:
Я думаю, что если это реализовать, даже хоть как-то, то можно это будет использовать это на всю катушку, создавать модули (библиотеки) процедур и функций разного назначения, где потом можно легко писать программы и легким нажатием скомпилировать в достаточного оптимальный код для ПК-01. Оптимальный код нужно будет закладывать в процедуры (и модули процедур unit)? вообщем, что-то подобное макроАсму, но в среде Дельфи... и я думаю это будет круче.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 10:32 
Offline

Joined: 29 Mar 2012, 21:35
Posts: 115
Quote:
1. Будет ли хватать быстродействия современных машин, если программу написать на таких процедурах, и чтобы она выполняясь не медленнее, чем на реальном асме (кодах) ПК-01?
Я думаю, будет даже гораздо быстрее, чем надо, и рано или поздно ты задумаешься о том, как сделать выполнение близким по скорости к реальному. Т.е. во всех процедурах нужно будет добавить увеличение глобального счётчика тактов, а где-то в глобальном цикле надо будет сделать пересчёт тактов в реальное время и задержку на это время (за вычетом времени, ушедшего на выполнение).

А если к твоей системе вместо отлаживаемой программы добавить дешифрацию команд i8080, то ты получишь вполне полноценный эмулятор. :)
Quote:
2. Незнаю как реализовать некоторые команды в Дельфи, например PUSH и POP? Помогите.
Например так:
Code:
 {PUSH B} //        'stack <- BC',
Procedure PUSHB;
begin
  RgSP := RgSP - 1;
  SetMem(RgSP, RgB);
  RgSP := RgSP - 1;
  SetMem(RgSP, RgC);
end;
Я намеренно заменил твоё RAM[RgSP] := ... на процедуру, поскольку все обращения к памяти нужно делать через общую процедуру, учитывающую раскладку памяти, и обновляющую точки экрана, если это необходимо.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 10:37 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
В исходном сообщении речь идёт про компилятор, а в примере в коде реализован интерпретатор (эмулятор).
Задумка в том, что в среде Дельфи программа будет работать как в интерпретаторе, а после "палировки" ее, можно будет компилировать отдельной утилитой в ПК-01. Понятно, что абсолютно все, что можна наваять в дельфи никакая утилита скомпилировать под ПК-01 (ЛВТ) не сможет, поэтому нужно будет в среде Дельфи окончальный вариант программы "подтачивать" (ну или сразу писать с таким расчетом) под то чтобы его можно было скомпилировать утилитой.
Ну это похоже как раньше было "интерпретатор-бейсика" и "Турбо-бейсик".


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 10:54 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
Добавлю пару слов. Что именно из Дельфи нам нужно?
Дельфи нам нужен ВЕСЬ :-) ну или как захочешь... :-) КАК ВСПОМАГЕТЕЛЬНЫЙ ИНСТРУМЕНТ ДЛЯ НАПИСАНИЯ И "ПАЛИРОВКИ" ПРОГРАММЫ!
Ну допустим ты пишиешь такое на дельфи: Скажем процедуру вывода спрайта...
Code:
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;

Так пишешь целую программ... подобие как Паскаль (Дельфи) с асм вставками...
Отпалировал, Запустил, работает! Далее, аккуратно и постепенно заменяешь процедуры конструкции котороем не могут быть скомпилированы, на аналогичные (асмовские) по ходу проверяя запуском проги правильность "подмены"...
Quote:
"Самолет хорошо, пароход хорошо, а олени лучше!", - может, все-таки Форт? :wink:
Ну не знаю Я "ФОРТы" "ЛИСПы" "СИшки" еще чего-то там...
ну... ...не виновата Я, он сам... :-) (из фильма "БР")


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 10:59 
Offline

Joined: 29 Mar 2012, 21:35
Posts: 115
Quote:
Возможность отрабатывать пошагово, наблюдая за всем, что только можно (регистрами, флагами процессора и т.д.), причем при необходимости, а такое бывает часто при отладке, можно в программе их изменять «в наглую» присвоив им нужное значение, причем в любом месте программы.
Но ведь это всё есть и в отладчике эмулятора!
Я предлагаю тебе сконцентрироваться на разработке ассемблера, потому что если твой ассемблер будет генерировать листинг в определённом формате, то его можно будет "подключить" к отладчику, и вместо дизассемблированного кода, в котором нет меток, ты увидишь текст твоей программы из листинга, со всеми метками и комментариями.

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 11:14 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
Я думаю, будет даже гораздо быстрее, чем надо, и рано или поздно ты задумаешься о том, как сделать выполнение близким по скорости к реальному....
Это конечно хорошо. Задержки писать думаю не проблема...
Quote:
А если к твоей системе вместо отлаживаемой программы добавить дешифрацию команд i8080, то ты получишь вполне полноценный эмулятор. :)
А поточнее можно?...
Quote:
Я намеренно заменил твоё RAM[RgSP] := ... на процедуру, поскольку все обращения к памяти нужно делать через общую процедуру, учитывающую раскладку памяти, и обновляющую точки экрана, если это необходимо.
Спасибо за содержательные ответы. Я так понял мне еще очень внимательно надо изучить принцип работы этих команд и стека и т.д. слава богу, думаю это можно будет проследить например в том же "Эмуляторе 3000". Спасибо.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 11:23 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
Quote:
В дальнейшем, если автор LvivStudio захочет, можно будет объеденить LvivStudio, твой ассемблер, и мой эмулятор в одну IDE, удобство пользования которой не будет уступать Дельфи.
Ого, идет Кутузов бить французов! Дмитрий, у Вас же есть интересный ассемблер на js, может быть, стоит его развивать? И Студию можно будет перепилить под работу в Вебе. В результате получим аналог Cloud9 IDE для восьмиразрядных машин. Можно будет кодить хоть с утюга, главное чтобы доступ в Инет был. И даже на iPad'е! :wink:

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 05 Jun 2012, 11:33 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
Quote:
Quote:
LvivStudio, передавая её через определённый интерфейс отладки моему эмулятору. Этот интерфейс содержит все возможности управления отладкой внутри эмулятора (выдача/установка регистров, памяти, точек останова).
Вот-вот! И я про это уже давно говорю! Пора нам, Дмитрий, кооперироваться! Согласен поддержать любой предложенный интерфейс. Как я это видел - общение через порт, LvivStudio "дергает" методы, типа: устнови брикпоинты на адресса, дай занчение, не остановились ли мы где-то и т.п.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 215 posts ]  Go to page 1 2 3 4 515 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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:
cron
Powered by phpBB® Forum Software © phpBB Limited