Программная модель Intel 8080/КР580ВМ80А

8-битные микроконтроллеры и микропроцессоры от Intel и их клоны, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24078
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Если "васюк" написан правильно (а микрософские бейсики были написаны правильно), то он не юзает DAA, т.к. с числами идёт работа в бинарном представлении с плавающей точкой. Команду DAA юзает BCD математика, которой скорее всего пользуется финансовый софт, т.к. по какому то старому американскому закону требуется, чтобы финансовое программное обеспечение считало деньги в ДЕСЯТИЧНОЙ системе с точностью до центов - без всяких там плавающих точек и переполнений...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:от CP/M ему нужна только функция печати, доступная по обычному адресу 5 ...
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
User avatar
Shaos
Admin
Posts: 24078
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:от CP/M ему нужна только функция печати, доступная по обычному адресу 5 ...
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 :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

По времени - тест длительный? Вроде как ЗетХники жаловались, что он долгий....
iLavr
User avatar
Shaos
Admin
Posts: 24078
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:По времени - тест длительный? Вроде как ЗетХники жаловались, что он долгий....
автор пишет про 3 часа, но его можно укоротить убрав один самый длинный этап
Я тут за главного - если что шлите мыло на me собака shaos точка net
begoon
Senior
Posts: 147
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Post by begoon »

Кстати, я тут поерзал немного в плане исследования, где больше всего код моего эмулятора тормозит, работая на PIC32.

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

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

Посему второй вывод. Как это и не голимо, использовать макросы, но так как они инлайняться по определению, то проблем с разбиением на модули не будет. Увы, трейдофф между "правильным программированием" и реализациями для недо-железок.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: эмуляция 8080

Post by Lavr »

begoon wrote:
begoon wrote:Потому что компилятор C развернет этот длинный switch в jump table,
...
Фактически, этот switch будет реализован одним jmp'ом.
... для PIC'ов обычно применяются более менее стандартные приемы оптимизации для языка C. Но ты всегда можешь глянуть код, который генерит твой компилятор. Вот, например, что генерит XC32 с -O3 для моего файла i8080.c. 100% это jump table.
А под PIC16 ты не сможешь компильнуть свой исходник?
Я ориентируюсь на прототип, написанный на ассемблере,
там разбор идёт через старшие 2 бита, как я и спрашивал здесь...
Интересно бы глянуть - насколько лучше язык C делает код...

Если что, PIC-декомпилятор у меня есть...
iLavr
begoon
Senior
Posts: 147
Joined: 22 Aug 2012 17:06
Location: 188.220.42.216

Re: эмуляция 8080

Post by begoon »

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

Если что, PIC-декомпилятор у меня есть...
А сам? ;-) Все, что нужно сделать, это поставить компилятор, взять файл https://github.com/begoon/i8080-core/bl ... er/i8080.c и сказать

Code: Select all

cc -O3 -S i8080.c
, где

Code: Select all

cc
заменить на путь к компилятору. Итак, кто будет компилятор ставить: я или ты?
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: эмуляция 8080

Post by Lavr »

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

Файл-то i8080.c я давно уж взял и почитал... а вот с компилятором у меня... :(
iLavr
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

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

Code: Select all

static inline int add(int a, int b) {
    return a + b;
}
Тут есть один минус: если функция большая или по каким-то другим причинам не инлайнится, то в результате в бинаре будет несколько одинаковых функций. Но тут уже просто мозгом думать придётся: что инлайнить, а что нет.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

begoon wrote:
Shaos wrote:А как кстати прерывания реализовать при данном интерфейсе?
Четкого интерфейса для прерываний у меня нет, так как в РК их реально нет.
Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...

А если всё-же есть прерывание, ну, скажем, как в "ЮТ-88" ?
iLavr
User avatar
Shaos
Admin
Posts: 24078
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
begoon wrote:
Shaos wrote:А как кстати прерывания реализовать при данном интерфейсе?
Четкого интерфейса для прерываний у меня нет, так как в РК их реально нет.
Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...

А если всё-же есть прерывание, ну, скажем, как в "ЮТ-88" ?
А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызывает нужную подпрограммку, которая в свою очередь может вернутся куда угодно...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:
Lavr wrote:Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...
А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызывает
нужную подпрограммку, которая в свою очередь может вернутся куда угодно...
Ну это и дураку понятно, что железный i8080 встаёт...
А кто подсовывает нужную подпрограммку и откуда?
И как эмулируется этот механизм прерываний?
А вот вернутся куда угодно - непонятно мне вообще... :(
iLavr
User avatar
Shaos
Admin
Posts: 24078
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:
Lavr wrote:Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...
А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызывает
нужную подпрограммку, которая в свою очередь может вернутся куда угодно...
Ну это и дураку понятно, что железный i8080 встаёт...
А кто подсовывает нужную подпрограммку и откуда?
И как эмулируется этот механизм прерываний?
А вот вернутся куда угодно - непонятно мне вообще... :(
Дык и софтверный 8080 встанет точно также :)
А кто подсовывает и откуда - это зависит от программы эмулятора, в которой можно накодить всё что угодно - хоть RST7, хоть ВН59...
Вернутся куда угодно может подпрограмма поменявшая SP - соответственно по RET она уже не попадёт на HLT и сможет продолжить работу - так?
P.S. Хм, а тут кстати в моих знаниях пробел - а что будет если она таки вернётся по RET? Пойдёт на следующую команду после HLT?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Хм, а тут кстати в моих знаниях пробел - а что будет если она таки вернётся по RET?
Пойдёт на следующую команду после HLT?
Именно так.
Но из ваших исходников мне с HLT нифига непонятно... :(

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