nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 25 Sep 2017 15:02



Reply to topic  [ 94 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7  Next
Программная модель Intel 8080/КР580ВМ80А 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15504
Location: Colorado
Reply with quote
Post 
Если "васюк" написан правильно (а микрософские бейсики были написаны правильно), то он не юзает DAA, т.к. с числами идёт работа в бинарном представлении с плавающей точкой. Команду DAA юзает BCD математика, которой скорее всего пользуется финансовый софт, т.к. по какому то старому американскому закону требуется, чтобы финансовое программное обеспечение считало деньги в ДЕСЯТИЧНОЙ системе с точностью до центов - без всяких там плавающих точек и переполнений...

_________________
:eugeek: https://twitter.com/Shaos1973


12 Sep 2012 15:40
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
от CP/M ему нужна только функция печати, доступная по обычному адресу 5 ...

Quote:
BDOS function 5 (L_WRITE) - Printer output
Supported by: All versions

Entered with C=2, E=ASCII character.

If the printer is permanently offline or busy, this call can hang.

Может всё-же перенаправить печать на 0C809H?
Где ж я ему принтер в эмуляторе возьму?
Или я что-то не так понял?

_________________
iLavr


12 Sep 2012 15:57
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15504
Location: Colorado
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
от CP/M ему нужна только функция печати, доступная по обычному адресу 5 ...

Quote:
BDOS function 5 (L_WRITE) - Printer output
Supported by: All versions

Entered with C=2, E=ASCII character.

If the printer is permanently offline or busy, this call can hang.

Может всё-же перенаправить печать на 0C809H?
Где ж я ему принтер в эмуляторе возьму?
Или я что-то не так понял?


Напиши перехватчик, который будет перенаправлять и размести его по адресу 5 :)

_________________
:eugeek: https://twitter.com/Shaos1973


12 Sep 2012 16:03
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
По времени - тест длительный? Вроде как ЗетХники жаловались, что он долгий....

_________________
iLavr


12 Sep 2012 16:06
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15504
Location: Colorado
Reply with quote
Post 
Lavr wrote:
По времени - тест длительный? Вроде как ЗетХники жаловались, что он долгий....


автор пишет про 3 часа, но его можно укоротить убрав один самый длинный этап

_________________
:eugeek: https://twitter.com/Shaos1973


12 Sep 2012 16:15
Profile WWW
Senior

Joined: 22 Aug 2012 20:06
Posts: 100
Location: 188.220.42.216
Reply with quote
Post 
Кстати, я тут поерзал немного в плане исследования, где больше всего код моего эмулятора тормозит, работая на PIC32.

Выводы не самые утешительные. Для начала, компилятор XC32 (хотя, я думаю это проблема языка С в целом) совершенно не умеет инлайнить, если функция в другом модуле. Я тупо слил два исходника (которые активно вызывают друг друга) в один и сразу получил _видимое_ ускорение, так как компилятор начал активного инлайнить.

Я читал, что в новых GCC где-то есть так называемая link optimization, но, думаю, в XC32, хоть он и на базе GCC, этого точно нет.

Посему второй вывод. Как это и не голимо, использовать макросы, но так как они инлайняться по определению, то проблем с разбиением на модули не будет. Увы, трейдофф между "правильным программированием" и реализациями для недо-железок.


13 Sep 2012 11:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
begoon wrote:
begoon wrote:
Потому что компилятор C развернет этот длинный switch в jump table,
...
Фактически, этот switch будет реализован одним jmp'ом.

... для PIC'ов обычно применяются более менее стандартные приемы оптимизации для языка C. Но ты всегда можешь глянуть код, который генерит твой компилятор. Вот, например, что генерит XC32 с -O3 для моего файла i8080.c. 100% это jump table.

А под PIC16 ты не сможешь компильнуть свой исходник?
Я ориентируюсь на прототип, написанный на ассемблере,
там разбор идёт через старшие 2 бита, как я и спрашивал здесь...
Интересно бы глянуть - насколько лучше язык C делает код...

Если что, PIC-декомпилятор у меня есть...

_________________
iLavr


17 Sep 2012 16:29
Profile
Senior

Joined: 22 Aug 2012 20:06
Posts: 100
Location: 188.220.42.216
Reply with quote
Lavr wrote:
А под PIC16 ты не сможешь компильнуть свой исходник?
Я ориентируюсь на прототип, написанный на ассемблере,
там разбор идёт через старшие 2 бита, как я и спрашивал здесь...
Интересно бы глянуть - насколько лучше язык C делает код...

Если что, PIC-декомпилятор у меня есть...

А сам? ;-) Все, что нужно сделать, это поставить компилятор, взять файл https://github.com/begoon/i8080-core/blob/master/i8080.c и сказать
Code:
cc -O3 -S i8080.c
, где
Code:
cc
заменить на путь к компилятору. Итак, кто будет компилятор ставить: я или ты?


17 Sep 2012 16:36
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
begoon wrote:
Итак, кто будет компилятор ставить: я или ты?

Я надеялся, компилятор у тебя стоит уже...
begoon wrote:
Кстати, я тут поерзал немного в плане исследования, где больше всего
код моего эмулятора тормозит, работая на PIC32.
Я несколько опасаюсь его (компилятора) нелюбви к Венде 98,
под которой я работаю...

Файл-то i8080.c я давно уж взял и почитал... а вот с компилятором у меня... :(

_________________
iLavr


17 Sep 2012 16:42
Profile
Senior

Joined: 07 Aug 2006 13:18
Posts: 186
Reply with quote
Post 
begoon wrote:
Посему второй вывод. Как это и не голимо, использовать макросы, но так как они инлайняться по определению, то проблем с разбиением на модули не будет. Увы, трейдофф между "правильным программированием" и реализациями для недо-железок.
А ты попробуй в хидере определять inline функции, примерно так:
Code:
static inline int add(int a, int b) {
    return a + b;
}
Тут есть один минус: если функция большая или по каким-то другим причинам не инлайнится, то в результате в бинаре будет несколько одинаковых функций. Но тут уже просто мозгом думать придётся: что инлайнить, а что нет.


18 Sep 2012 22:00
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
begoon wrote:
Shaos wrote:
А как кстати прерывания реализовать при данном интерфейсе?

Четкого интерфейса для прерываний у меня нет, так как в РК их реально нет.

Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...

А если всё-же есть прерывание, ну, скажем, как в "ЮТ-88" ?

_________________
iLavr


19 Sep 2012 16:14
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15504
Location: Colorado
Reply with quote
Post 
Lavr wrote:
begoon wrote:
Shaos wrote:
А как кстати прерывания реализовать при данном интерфейсе?

Четкого интерфейса для прерываний у меня нет, так как в РК их реально нет.

Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...

А если всё-же есть прерывание, ну, скажем, как в "ЮТ-88" ?


А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызывает нужную подпрограммку, которая в свою очередь может вернутся куда угодно...

_________________
:eugeek: https://twitter.com/Shaos1973


19 Sep 2012 17:13
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Lavr wrote:
Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...

А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызывает
нужную подпрограммку, которая в свою очередь может вернутся куда угодно...

Ну это и дураку понятно, что железный i8080 встаёт...
А кто подсовывает нужную подпрограммку и откуда?
И как эмулируется этот механизм прерываний?
А вот вернутся куда угодно - непонятно мне вообще... :(

_________________
iLavr


19 Sep 2012 17:25
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15504
Location: Colorado
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
Lavr wrote:
Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...

А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызывает
нужную подпрограммку, которая в свою очередь может вернутся куда угодно...

Ну это и дураку понятно, что железный i8080 встаёт...
А кто подсовывает нужную подпрограммку и откуда?
И как эмулируется этот механизм прерываний?
А вот вернутся куда угодно - непонятно мне вообще... :(


Дык и софтверный 8080 встанет точно также :)
А кто подсовывает и откуда - это зависит от программы эмулятора, в которой можно накодить всё что угодно - хоть RST7, хоть ВН59...
Вернутся куда угодно может подпрограмма поменявшая SP - соответственно по RET она уже не попадёт на HLT и сможет продолжить работу - так?
P.S. Хм, а тут кстати в моих знаниях пробел - а что будет если она таки вернётся по RET? Пойдёт на следующую команду после HLT?

_________________
:eugeek: https://twitter.com/Shaos1973


19 Sep 2012 17:35
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Хм, а тут кстати в моих знаниях пробел - а что будет если она таки вернётся по RET?
Пойдёт на следующую команду после HLT?

Именно так.
Но из ваших исходников мне с HLT нифига непонятно... :(

А сказки и трололо я при случае рассказывать тоже - ой как умею!

_________________
iLavr


19 Sep 2012 17:57
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 94 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7  Next

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:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.