Разработка эмулятора Altair 8800 на Arduino

Компьютеры прошлого, не попавшие в другие разделы

Moderator: Shaos

User avatar
Icer
Senior
Posts: 163
Joined: 21 Aug 2018 07:39
Location: Кемеровская обл.

Re: Разработка эмулятора Altair 8800 на Arduino

Post by Icer »

Barmaley wrote:Меня этот эмулятор привлёк тем, что вызывает выполнение команд не через CASE, а через массив адресов функций. Так должно работать быстрее.
Наверно быстрее будет разобраться с этим эмулятором. Постараться запустить тесты CPU и поправить команды.
User avatar
Icer
Senior
Posts: 163
Joined: 21 Aug 2018 07:39
Location: Кемеровская обл.

Re:

Post by Icer »

barsik wrote:Эти адреса подпрограмм CP/M-BIOS начинаются с оффсетом $4C30 от начала кода (т.е не считая 4 байта адреса в начале RKR-файла). И естественно, там стоят 16 стандартных JMP-ов CP/M-BIOS-а.
Не подскажете, где можно взять полное описание и адреса эти подпрограмм?
Это пока все что удалось наковырять:

Code: Select all

0xf86c - возврат управления в командную строку
7436
f812
f803 ожидание нажатия клавиши
f809
741a
f8c6
User avatar
barsik
Doomed
Posts: 585
Joined: 19 Feb 2017 03:46
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь

Post by barsik »

Icer wrote:
barsik wrote:Эти адреса подпрограмм CP/M-BIOS
Не подскажете, где можно взять полное описание и адреса этих подпрограмм?
Описание подпрограмм BIOS у меня есть лишь на бумаге, но это даже не особо надо, т.к это требуется лишь когда делаешь адаптацию CP/M под конкретное железо, а это всегда делается из прототипа, т.е готового исходника и если вдруг захочется что-нибудь узнать, то это сразу видно из листинга. Потому никаких описаний CP/M не имею, но это не проблема, т.к сейчас в Интернете изобилие информации о CP/M, легко находится гуглением. При переделке программ для работы без DOS вам интересны только отмеченные звёздочкой консольные подпрограммы 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)

Если у Вас проблемы с использованием какой-либо корректной 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.
User avatar
Icer
Senior
Posts: 163
Joined: 21 Aug 2018 07:39
Location: Кемеровская обл.

Re:

Post by Icer »

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)
Благодарю, это то что нужно. Эмулятор приложенный 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.

Не очень понятно, что тест хочет сказать, но уже хоть что-то.
User avatar
barsik
Doomed
Posts: 585
Joined: 19 Feb 2017 03:46
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь

Post by barsik »

Icer wrote:REGISTER f CONTAINS 80H
BUT SHOULD CONTAIN 50H
С этим же регистром F (флаги процессора) проблемы у всех эмуляторов, которые этот тест не проходят. Но это вовсе не значит, что реальные программы работать не будут. Потому и не факт, что проблема с бейсиком из-за ошибок модуля эмуляции CPU. Тест, делая PUSH AF -- POP BC, считывает регистр флагов и определяет, что неиспользуемые биты регистра флагов не совпадают с реальным процессором. Трудно придумать как использовать излишние биты регистра флагов, потому в программах это не использовалось.

Блоки эмуляции процессоров написанные на ассемблере (т.е в 80-тые и 90-тые годы) прогоняют вместо команд 8080 команды 8086, отчего неиспользуемые биты регистра F не совпадают с реалом. А модули эмуляции CPU написанные в XXI веке на Си уже сами имитируют работу процессора, потому и могут эмулировать все нюансы работы процессора.
Icer wrote:Address function 0xC809 not support
Halt on addr: 0xC809
А вот это как раз мой косяк. Очевидно переделывая версию блочка эмуляции функций BDOS для Специалиста в универсальную версию, я в одном месте не заменил один вызов C809 (это Conout в ПЗУ Специалиста) на вызов BIOS+0CH, что надо было сделать, чтобы при перенастройке кодов под другое железо было достаточно менять только 4 адреса в коде. Сделайте такую замену, - от этого тест вряд-ли пойдёт дальше, зато Halt на C809 исчезнет.
Barmaley
Writer
Posts: 20
Joined: 03 May 2020 08:31
Location: Мытищи

Re: Разработка эмулятора Altair 8800 на Arduino

Post by Barmaley »

Чтобы запустить тест процессора я поправил в исходном тексте на ассемблере "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 минут, выводится правильная сумма, но со знаком "минус".
User avatar
Icer
Senior
Posts: 163
Joined: 21 Aug 2018 07:39
Location: Кемеровская обл.

Re: Разработка эмулятора Altair 8800 на Arduino

Post by Icer »

Barmaley wrote:Тест запускается, выводит нужные сообщения, но выдаёт ошибку процессора. (если интересно могу выложить сюда его сообщения).
Конечно интересно. На моей адаптации эмулятора бейсик показывает "0 BYTES FREE", а тест "CPU HAS FAILED! ERROR EXIT=0536".
Barmaley
Writer
Posts: 20
Joined: 03 May 2020 08:31
Location: Мытищи

Re: Разработка эмулятора Altair 8800 на Arduino

Post by Barmaley »

Работа бейсика на STM с эмулятором i8080 взятом из проекта Emu80 (автор Viktor Pykhonin viewtopic.php?f=43&t=17234):

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
ERROR READ MEM: - ошибка которую эмулятор памяти выдаёт
Icer wrote: а тест "CPU HAS FAILED! ERROR EXIT=0536".
EXIT = PC когда тест решил что, что-то пошло не так. Тут надо учесть, я гружу тест с 0 адреса, и немного подправил исходник.
0х536-0х434 = 0x102, я как раз добавил одну команду out, и один символ в текстовой строке, так что вылетает в одном и том же месте.
User avatar
Icer
Senior
Posts: 163
Joined: 21 Aug 2018 07:39
Location: Кемеровская обл.

Re: Разработка эмулятора Altair 8800 на Arduino

Post by Icer »

Рад что у вас получилось!
А я еще малость поковыряюсь, может найду где собаку зарыли. :mrgreen:
Barmaley
Writer
Posts: 20
Joined: 03 May 2020 08:31
Location: Мытищи

Re: Разработка эмулятора Altair 8800 на Arduino

Post by Barmaley »

Icer, спасибо!

LCD 128x64 модуль. 21х10 символов.
You do not have the required permissions to view the files attached to this post.
Barmaley
Writer
Posts: 20
Joined: 03 May 2020 08:31
Location: Мытищи

Re: Разработка эмулятора Altair 8800 на Arduino

Post by Barmaley »

https://youtu.be/6O4_DnGQNkY
Видео 30 сек, вычисление числа PI на бейсике.
Длительность вычисления 9мин 33сек.

видео открывается только в новом окне