Наверно быстрее будет разобраться с этим эмулятором. Постараться запустить тесты CPU и поправить команды.Barmaley wrote:Меня этот эмулятор привлёк тем, что вызывает выполнение команд не через CASE, а через массив адресов функций. Так должно работать быстрее.
Разработка эмулятора Altair 8800 на Arduino
Moderator: Shaos
-
- Senior
- Posts: 163
- Joined: 21 Aug 2018 07:39
- Location: Кемеровская обл.
Re: Разработка эмулятора Altair 8800 на Arduino
-
- Senior
- Posts: 163
- Joined: 21 Aug 2018 07:39
- Location: Кемеровская обл.
Re:
Не подскажете, где можно взять полное описание и адреса эти подпрограмм?barsik wrote:Эти адреса подпрограмм CP/M-BIOS начинаются с оффсетом $4C30 от начала кода (т.е не считая 4 байта адреса в начале RKR-файла). И естественно, там стоят 16 стандартных JMP-ов CP/M-BIOS-а.
Это пока все что удалось наковырять:
Code: Select all
0xf86c - возврат управления в командную строку
7436
f812
f803 ожидание нажатия клавиши
f809
741a
f8c6
-
- Doomed
- Posts: 585
- Joined: 19 Feb 2017 03:46
- Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Описание подпрограмм BIOS у меня есть лишь на бумаге, но это даже не особо надо, т.к это требуется лишь когда делаешь адаптацию CP/M под конкретное железо, а это всегда делается из прототипа, т.е готового исходника и если вдруг захочется что-нибудь узнать, то это сразу видно из листинга. Потому никаких описаний CP/M не имею, но это не проблема, т.к сейчас в Интернете изобилие информации о CP/M, легко находится гуглением. При переделке программ для работы без DOS вам интересны только отмеченные звёздочкой консольные подпрограммы BIOS.Icer wrote:Не подскажете, где можно взять полное описание и адреса этих подпрограмм?barsik wrote:Эти адреса подпрограмм CP/M-BIOS
Code: Select all
BIOS: JP COLDST ; ХОЛОДНАЯ ЗАГРУЗКА
JP WBOOT * ; ГОРЯЧАЯ ЗАГРУЗКА
JP CONST * ; СТАТУС КОНСОЛИ
JP CONIN * ; ВВОД СИМВОЛА С КОНСОЛИ
JP CONOUT * ; ВЫВОД СИМВОЛА НА КОНСОЛЬ
JP @RET ; ВЫВОД НА ПРИНТЕР
JP @RET ; ВЫВОД НА УСТРОЙСТВО ВЫВОДА
JP READER ; ВВОД С УСТРОЙСТВА ВВОДА
JP HOME ; УСТАНОВКА ГОЛОВКИ НА НУЛЕВУЮ ДОРОЖКУ
JP SELDSK ; ВЫБОР ДИСКОВОДА
JP SETTRK ; УСТАНОВКА ГОЛОВКИ НА ЗАДАННЫЙ ТРЕК
JP SETSEC ; УСТАНОВКА НОМЕРА СЕКТОРА
JP SETDMA ; УСТАНОВКА АДРЕСА БУФЕРА ОБМЕНА
JP READ ; ЧТЕНИЕ СЕКТОРА
JP WRITE ; ЗАПИСЬ СЕКТОРА
JP LSTSTS ; СТАТУС ПРИНТЕРА
JP SECTRN ; ПЕРЕКОДИРОВКА НОМЕРА СЕКТОРА
WBOOT - F86C (Warm Boot монитора РК86)
CONST - F812 (Статус клавиатуры в РК86, выход А=0/FF)
CONIN - F803 (Ввод в рег.А символа с клавиатуры в РК86)
CONOUT - F809 (Вывод символа на экран из рег.С в РК86)
PS. При написании CP/M-программ в 90-тые было удобно использовать описание CP/M от АТМ-Турбо, этого мне вполне хватало http://atmturbo.nedopc.com/inf/bios_cpm.htm#71. Эта тонкая брошюрка формата А4 продавалось в фирме АТМ-Турбо с 1991 и видимо она стала самой массовой и доступной информацией о CP/M доступной в то время, т.к переводная документация от Digital Research была доступна только специалистам имеющим дело с CP/M.
Last edited by barsik on 16 May 2020 22:35, edited 1 time in total.
-
- Senior
- Posts: 163
- Joined: 21 Aug 2018 07:39
- Location: Кемеровская обл.
Re:
Благодарю, это то что нужно. Эмулятор приложенный Barmaley, перекроил под винду и есть возможность сделать перехваты обращений по адресам.barsik wrote: При переделке программ для работы без DOS вам интересны только отмеченные звёздочкой консольные подпрограммы BIOS.
JP WBOOT * ; ГОРЯЧАЯ ЗАГРУЗКА
JP CONST * ; СТАТУС КОНСОЛИ
JP CONIN * ; ВВОД СИМВОЛА С КОНСОЛИ
JP CONOUT * ; ВЫВОД СИМВОЛА НА КОНСОЛЬ
WBOOT - F86C (Warm Boot монитора РК86)
CONST - F812 (Статус клавиатуры в РК86, выход А=0/FF)
CONIN - F803 (Ввод в рег.А символа с клавиатуры в РК86)
CONOUT - F809 (Вывод символа на экран из рег.С в РК86)
Так что нужды править исходник нет и нет нужды в заглушках, всё сделает "host-машина".
Не очень понятно, что тест хочет сказать, но уже хоть что-то.
-
- Doomed
- Posts: 585
- Joined: 19 Feb 2017 03:46
- Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
С этим же регистром F (флаги процессора) проблемы у всех эмуляторов, которые этот тест не проходят. Но это вовсе не значит, что реальные программы работать не будут. Потому и не факт, что проблема с бейсиком из-за ошибок модуля эмуляции CPU. Тест, делая PUSH AF -- POP BC, считывает регистр флагов и определяет, что неиспользуемые биты регистра флагов не совпадают с реальным процессором. Трудно придумать как использовать излишние биты регистра флагов, потому в программах это не использовалось.Icer wrote:REGISTER f CONTAINS 80H
BUT SHOULD CONTAIN 50H
Блоки эмуляции процессоров написанные на ассемблере (т.е в 80-тые и 90-тые годы) прогоняют вместо команд 8080 команды 8086, отчего неиспользуемые биты регистра F не совпадают с реалом. А модули эмуляции CPU написанные в XXI веке на Си уже сами имитируют работу процессора, потому и могут эмулировать все нюансы работы процессора.
А вот это как раз мой косяк. Очевидно переделывая версию блочка эмуляции функций BDOS для Специалиста в универсальную версию, я в одном месте не заменил один вызов C809 (это Conout в ПЗУ Специалиста) на вызов BIOS+0CH, что надо было сделать, чтобы при перенастройке кодов под другое железо было достаточно менять только 4 адреса в коде. Сделайте такую замену, - от этого тест вряд-ли пойдёт дальше, зато Halt на C809 исчезнет.Icer wrote:Address function 0xC809 not support
Halt on addr: 0xC809
-
- Writer
- Posts: 20
- Joined: 03 May 2020 08:31
- Location: Мытищи
Re: Разработка эмулятора Altair 8800 на Arduino
Чтобы запустить тест процессора я поправил в исходном тексте на ассемблере "MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC VERSION 1.0 (C) 1980", чтобы он запускался без ОС, загружаясь с нулевого адреса.
Тест запускается, выводит нужные сообщения, но выдаёт ошибку процессора. (если интересно могу выложить сюда его сообщения).
Теперь я имею ситуацию: есть непроверенный эмулятор аппаратного окружения Altair, неизвестно работающий ли эмулятор i8080, и тест процессора откомпилировавшийся, но неизвестно насколько корректно я отредактировал его исходник. И всё это надо отлаживать одновременно.
На форуме "amperka.ru" автор про свой код пишет "Это очень старый код, я много поменял в последних версиях.
Но самое забавное вот что - в старом коде была ошибка в эмуляции, из-за которой не проходили некоторые тесты. Я ее исправил в новой версии, но перед этим я изменил структуру эмулятора,
так что непосредственно сопоставлять два исходника проблематично. И ... забыл, что именно я исправил:).
И похоже на то, что по этой причине ошибка в старом коде так и останется неисправленной -
заставить себя сопоставлять эмуляцию всех команд в двух исходниках я врядли смогу."
т.е. вдвойне не понятно насколько рабочий эмулятор i8080 - скорее всего, что нет.
Поэтому я решил взять эмулятор заведомо работающий "emu80". Изначально я его не брал, т.к. он мне показался громоздким, и избыточным для микроконтроллера. Сейчас его адаптирую под STM.
PS в бейсике я попробовал сделать следующее:
A=RND(A)
PRINT A - работает правильно, но подвисает перед выводом на 7 минут. выводится число " .xyz"
B=A+A
PRINT B - опять подвисает на 7 минут, выводится правильная сумма, но со знаком "минус".
Тест запускается, выводит нужные сообщения, но выдаёт ошибку процессора. (если интересно могу выложить сюда его сообщения).
Теперь я имею ситуацию: есть непроверенный эмулятор аппаратного окружения Altair, неизвестно работающий ли эмулятор i8080, и тест процессора откомпилировавшийся, но неизвестно насколько корректно я отредактировал его исходник. И всё это надо отлаживать одновременно.
На форуме "amperka.ru" автор про свой код пишет "Это очень старый код, я много поменял в последних версиях.
Но самое забавное вот что - в старом коде была ошибка в эмуляции, из-за которой не проходили некоторые тесты. Я ее исправил в новой версии, но перед этим я изменил структуру эмулятора,
так что непосредственно сопоставлять два исходника проблематично. И ... забыл, что именно я исправил:).
И похоже на то, что по этой причине ошибка в старом коде так и останется неисправленной -
заставить себя сопоставлять эмуляцию всех команд в двух исходниках я врядли смогу."
т.е. вдвойне не понятно насколько рабочий эмулятор i8080 - скорее всего, что нет.
Поэтому я решил взять эмулятор заведомо работающий "emu80". Изначально я его не брал, т.к. он мне показался громоздким, и избыточным для микроконтроллера. Сейчас его адаптирую под STM.
PS в бейсике я попробовал сделать следующее:
A=RND(A)
PRINT A - работает правильно, но подвисает перед выводом на 7 минут. выводится число " .xyz"
B=A+A
PRINT B - опять подвисает на 7 минут, выводится правильная сумма, но со знаком "минус".
-
- Senior
- Posts: 163
- Joined: 21 Aug 2018 07:39
- Location: Кемеровская обл.
Re: Разработка эмулятора Altair 8800 на Arduino
Конечно интересно. На моей адаптации эмулятора бейсик показывает "0 BYTES FREE", а тест "CPU HAS FAILED! ERROR EXIT=0536".Barmaley wrote:Тест запускается, выводит нужные сообщения, но выдаёт ошибку процессора. (если интересно могу выложить сюда его сообщения).
-
- Writer
- Posts: 20
- Joined: 03 May 2020 08:31
- Location: Мытищи
Re: Разработка эмулятора Altair 8800 на Arduino
Работа бейсика на STM с эмулятором i8080 взятом из проекта Emu80 (автор Viktor Pykhonin viewtopic.php?f=43&t=17234):
ERROR READ MEM: - ошибка которую эмулятор памяти выдаёт
0х536-0х434 = 0x102, я как раз добавил одну команду out, и один символ в текстовой строке, так что вылетает в одном и том же месте.
Code: Select all
- работа эмулятора Emu80
MEMORY SIZE? 8192
TERMINAL WIDTH? 80
WANT SIN? Y
4822 BYTES FREE
BASIC VERSION 3.2
[4K VERSION]
OK
100 PRINT A
10 A=6
RUN
6
PRINT 1/3
.333333
OK
Icer wrote: Конечно интересно
Code: Select all
- работа эмулятора в котором бейсик постоянно выдаёт ?SN ERROR
MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC VERSION 1.0 (C) 1980
CPU:
ERROR READ MEM: out of memory.adr=EF01
CPU HAS FAILED! ERROR EXIT=0434
EXIT = PC когда тест решил что, что-то пошло не так. Тут надо учесть, я гружу тест с 0 адреса, и немного подправил исходник.Icer wrote: а тест "CPU HAS FAILED! ERROR EXIT=0536".
0х536-0х434 = 0x102, я как раз добавил одну команду out, и один символ в текстовой строке, так что вылетает в одном и том же месте.
-
- Senior
- Posts: 163
- Joined: 21 Aug 2018 07:39
- Location: Кемеровская обл.
Re: Разработка эмулятора Altair 8800 на Arduino
Рад что у вас получилось!
А я еще малость поковыряюсь, может найду где собаку зарыли.
А я еще малость поковыряюсь, может найду где собаку зарыли.

-
- Writer
- Posts: 20
- Joined: 03 May 2020 08:31
- Location: Мытищи
Re: Разработка эмулятора Altair 8800 на Arduino
Icer, спасибо!
LCD 128x64 модуль. 21х10 символов.
LCD 128x64 модуль. 21х10 символов.
You do not have the required permissions to view the files attached to this post.
-
- Writer
- Posts: 20
- Joined: 03 May 2020 08:31
- Location: Мытищи
Re: Разработка эмулятора Altair 8800 на Arduino
https://youtu.be/6O4_DnGQNkY
Видео 30 сек, вычисление числа PI на бейсике.
Длительность вычисления 9мин 33сек.
видео открывается только в новом окне
Видео 30 сек, вычисление числа PI на бейсике.
Длительность вычисления 9мин 33сек.
видео открывается только в новом окне