Программная модель Intel 8080/КР580ВМ80А
Moderator: Shaos
-
- Admin
- Posts: 24080
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Если "васюк" написан правильно (а микрософские бейсики были написаны правильно), то он не юзает DAA, т.к. с числами идёт работа в бинарном представлении с плавающей точкой. Команду DAA юзает BCD математика, которой скорее всего пользуется финансовый софт, т.к. по какому то старому американскому закону требуется, чтобы финансовое программное обеспечение считало деньги в ДЕСЯТИЧНОЙ системе с точностью до центов - без всяких там плавающих точек и переполнений...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Shaos wrote:от CP/M ему нужна только функция печати, доступная по обычному адресу 5 ...
Может всё-же перенаправить печать на 0C809H?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.
Где ж я ему принтер в эмуляторе возьму?
Или я что-то не так понял?
iLavr
-
- Admin
- Posts: 24080
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Напиши перехватчик, который будет перенаправлять и размести его по адресу 5Lavr wrote:Shaos wrote:от CP/M ему нужна только функция печати, доступная по обычному адресу 5 ...Может всё-же перенаправить печать на 0C809H?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.
Где ж я ему принтер в эмуляторе возьму?
Или я что-то не так понял?

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
-
- Admin
- Posts: 24080
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Senior
- Posts: 147
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Кстати, я тут поерзал немного в плане исследования, где больше всего код моего эмулятора тормозит, работая на PIC32.
Выводы не самые утешительные. Для начала, компилятор XC32 (хотя, я думаю это проблема языка С в целом) совершенно не умеет инлайнить, если функция в другом модуле. Я тупо слил два исходника (которые активно вызывают друг друга) в один и сразу получил _видимое_ ускорение, так как компилятор начал активного инлайнить.
Я читал, что в новых GCC где-то есть так называемая link optimization, но, думаю, в XC32, хоть он и на базе GCC, этого точно нет.
Посему второй вывод. Как это и не голимо, использовать макросы, но так как они инлайняться по определению, то проблем с разбиением на модули не будет. Увы, трейдофф между "правильным программированием" и реализациями для недо-железок.
Выводы не самые утешительные. Для начала, компилятор XC32 (хотя, я думаю это проблема языка С в целом) совершенно не умеет инлайнить, если функция в другом модуле. Я тупо слил два исходника (которые активно вызывают друг друга) в один и сразу получил _видимое_ ускорение, так как компилятор начал активного инлайнить.
Я читал, что в новых GCC где-то есть так называемая link optimization, но, думаю, в XC32, хоть он и на базе GCC, этого точно нет.
Посему второй вывод. Как это и не голимо, использовать макросы, но так как они инлайняться по определению, то проблем с разбиением на модули не будет. Увы, трейдофф между "правильным программированием" и реализациями для недо-железок.
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: эмуляция 8080
А под PIC16 ты не сможешь компильнуть свой исходник?begoon wrote:... для PIC'ов обычно применяются более менее стандартные приемы оптимизации для языка C. Но ты всегда можешь глянуть код, который генерит твой компилятор. Вот, например, что генерит XC32 с -O3 для моего файла i8080.c. 100% это jump table.begoon wrote:Потому что компилятор C развернет этот длинный switch в jump table,
...
Фактически, этот switch будет реализован одним jmp'ом.
Я ориентируюсь на прототип, написанный на ассемблере,
там разбор идёт через старшие 2 бита, как я и спрашивал здесь...
Интересно бы глянуть - насколько лучше язык C делает код...
Если что, PIC-декомпилятор у меня есть...
iLavr
-
- Senior
- Posts: 147
- Joined: 22 Aug 2012 17:06
- Location: 188.220.42.216
Re: эмуляция 8080
А сам?Lavr wrote:А под PIC16 ты не сможешь компильнуть свой исходник?
Я ориентируюсь на прототип, написанный на ассемблере,
там разбор идёт через старшие 2 бита, как я и спрашивал здесь...
Интересно бы глянуть - насколько лучше язык C делает код...
Если что, PIC-декомпилятор у меня есть...

Code: Select all
cc -O3 -S i8080.c
Code: Select all
cc
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: эмуляция 8080
Я надеялся, компилятор у тебя стоит уже...begoon wrote:Итак, кто будет компилятор ставить: я или ты?
Я несколько опасаюсь его (компилятора) нелюбви к Венде 98,begoon wrote:Кстати, я тут поерзал немного в плане исследования, где больше всего
код моего эмулятора тормозит, работая на PIC32.
под которой я работаю...
Файл-то i8080.c я давно уж взял и почитал... а вот с компилятором у меня...

iLavr
-
- Senior
- Posts: 185
- Joined: 07 Aug 2006 10:18
А ты попробуй в хидере определять inline функции, примерно так:begoon wrote:Посему второй вывод. Как это и не голимо, использовать макросы, но так как они инлайняться по определению, то проблем с разбиением на модули не будет. Увы, трейдофф между "правильным программированием" и реализациями для недо-железок.
Code: Select all
static inline int add(int a, int b) {
return a + b;
}
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Джентльмены, а как тогда обрабатывать HLT ?begoon wrote:Четкого интерфейса для прерываний у меня нет, так как в РК их реально нет.Shaos wrote:А как кстати прерывания реализовать при данном интерфейсе?
Ну по RESET понятно -> INIT_CPU...
А если всё-же есть прерывание, ну, скажем, как в "ЮТ-88" ?
iLavr
-
- Admin
- Posts: 24080
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызывает нужную подпрограммку, которая в свою очередь может вернутся куда угодно...Lavr wrote:Джентльмены, а как тогда обрабатывать HLT ?begoon wrote:Четкого интерфейса для прерываний у меня нет, так как в РК их реально нет.Shaos wrote:А как кстати прерывания реализовать при данном интерфейсе?
Ну по RESET понятно -> INIT_CPU...
А если всё-же есть прерывание, ну, скажем, как в "ЮТ-88" ?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия
Ну это и дураку понятно, что железный i8080 встаёт...Shaos wrote:А в чём проблема? Эмулятор встречает HLT и встаёт, а по прерыванию - вызываетLavr wrote:Джентльмены, а как тогда обрабатывать HLT ?
Ну по RESET понятно -> INIT_CPU...
нужную подпрограммку, которая в свою очередь может вернутся куда угодно...
А кто подсовывает нужную подпрограммку и откуда?
И как эмулируется этот механизм прерываний?
А вот вернутся куда угодно - непонятно мне вообще...

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

А кто подсовывает и откуда - это зависит от программы эмулятора, в которой можно накодить всё что угодно - хоть RST7, хоть ВН59...
Вернутся куда угодно может подпрограмма поменявшая SP - соответственно по RET она уже не попадёт на HLT и сможет продолжить работу - так?
P.S. Хм, а тут кстати в моих знаниях пробел - а что будет если она таки вернётся по RET? Пойдёт на следующую команду после HLT?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16689
- Joined: 21 Oct 2009 08:08
- Location: Россия