|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Разработка эмулятора Altair 8800 на Arduino
Author |
Message |
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
Наверно быстрее будет разобраться с этим эмулятором. Постараться запустить тесты CPU и поправить команды.
|
14 May 2020 06:56 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
Не подскажете, где можно взять полное описание и адреса эти подпрограмм? Это пока все что удалось наковырять:
|
16 May 2020 07:58 |
|
|
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
Описание подпрограмм BIOS у меня есть лишь на бумаге, но это даже не особо надо, т.к это требуется лишь когда делаешь адаптацию CP/M под конкретное железо, а это всегда делается из прототипа, т.е готового исходника и если вдруг захочется что-нибудь узнать, то это сразу видно из листинга. Потому никаких описаний CP/M не имею, но это не проблема, т.к сейчас в Интернете изобилие информации о CP/M, легко находится гуглением. При переделке программ для работы без DOS вам интересны только отмеченные звёздочкой консольные подпрограммы BIOS. Если у Вас проблемы с использованием какой-либо корректной CP/M-программы без DOS, то дайте исходник 4-х ваших подпрограмм (эквивалентов вышеописанных), и я странслирую под конкретный объём ОЗУ. Объём ОЗУ требуется знать потому, что имитатор BDOS+BIOS при старте программы копируется под RAMTOP (вершину достуного ОЗУ). 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.
|
16 May 2020 10:10 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
Благодарю, это то что нужно. Эмулятор приложенный Barmaley, перекроил под винду и есть возможность сделать перехваты обращений по адресам. Так что нужды править исходник нет и нет нужды в заглушках, всё сделает "host-машина". результат работы эмулятора File prg\TEST.RKS read:19858
DIAGNOSTICS II V1.2 - CPU TEST COPYRIGHT (C) 1981 - SUPERSOFT ASSOCIATES
ABCDEFGHIJKLMNOPQRSTUVWXYZ CPU IS 8080/8085 BEGIN TIMING TEST END TIMING TEST
CPU FAILED: ERROR COUNT 0000H
INSTRUCTION SEQUENCE WAS 800000H REGISTER f CONTAINS 80H BUT SHOULD CONTAIN 50H REGISTER VALUE BEFORE INSTRUCTION SEQUENCE WAS 90H TEST NUMBER 0070H
Address function 0xC809 not support
Halt on addr: 0xC809
Create 'dump.hex'...Done. Не очень понятно, что тест хочет сказать, но уже хоть что-то.
|
16 May 2020 17:21 |
|
|
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 583 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
|
С этим же регистром F (флаги процессора) проблемы у всех эмуляторов, которые этот тест не проходят. Но это вовсе не значит, что реальные программы работать не будут. Потому и не факт, что проблема с бейсиком из-за ошибок модуля эмуляции CPU. Тест, делая PUSH AF -- POP BC, считывает регистр флагов и определяет, что неиспользуемые биты регистра флагов не совпадают с реальным процессором. Трудно придумать как использовать излишние биты регистра флагов, потому в программах это не использовалось. Блоки эмуляции процессоров написанные на ассемблере (т.е в 80-тые и 90-тые годы) прогоняют вместо команд 8080 команды 8086, отчего неиспользуемые биты регистра F не совпадают с реалом. А модули эмуляции CPU написанные в XXI веке на Си уже сами имитируют работу процессора, потому и могут эмулировать все нюансы работы процессора. А вот это как раз мой косяк. Очевидно переделывая версию блочка эмуляции функций BDOS для Специалиста в универсальную версию, я в одном месте не заменил один вызов C809 (это Conout в ПЗУ Специалиста) на вызов BIOS+0CH, что надо было сделать, чтобы при перенастройке кодов под другое железо было достаточно менять только 4 адреса в коде. Сделайте такую замену, - от этого тест вряд-ли пойдёт дальше, зато Halt на C809 исчезнет.
|
16 May 2020 23:02 |
|
|
Barmaley
Writer
Joined: 03 May 2020 08:31 Posts: 20 Location: Мытищи
|
Чтобы запустить тест процессора я поправил в исходном тексте на ассемблере "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 минут, выводится правильная сумма, но со знаком "минус".
|
17 May 2020 03:28 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
Конечно интересно. На моей адаптации эмулятора бейсик показывает "0 BYTES FREE", а тест "CPU HAS FAILED! ERROR EXIT=0536".
|
17 May 2020 06:17 |
|
|
Barmaley
Writer
Joined: 03 May 2020 08:31 Posts: 20 Location: Мытищи
|
Работа бейсика на STM с эмулятором i8080 взятом из проекта Emu80 (автор Viktor Pykhonin http://www.nedopc.org/forum/viewtopic.php?f=43&t=17234): ERROR READ MEM: - ошибка которую эмулятор памяти выдаёт EXIT = PC когда тест решил что, что-то пошло не так. Тут надо учесть, я гружу тест с 0 адреса, и немного подправил исходник. 0х536-0х434 = 0x102, я как раз добавил одну команду out, и один символ в текстовой строке, так что вылетает в одном и том же месте.
|
17 May 2020 07:03 |
|
|
Icer
Senior
Joined: 21 Aug 2018 07:39 Posts: 163 Location: Кемеровская обл.
|
Рад что у вас получилось! А я еще малость поковыряюсь, может найду где собаку зарыли.
|
17 May 2020 08:44 |
|
|
Barmaley
Writer
Joined: 03 May 2020 08:31 Posts: 20 Location: Мытищи
|
Icer, спасибо!
LCD 128x64 модуль. 21х10 символов.
|
17 May 2020 09:09 |
|
|
Barmaley
Writer
Joined: 03 May 2020 08:31 Posts: 20 Location: Мытищи
|
https://youtu.be/6O4_DnGQNkYВидео 30 сек, вычисление числа PI на бейсике. Длительность вычисления 9мин 33сек. видео открывается только в новом окне
|
24 May 2020 09:00 |
|
|
Who is online |
Users browsing this forum: No registered users and 0 guests |
|
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
|
|