nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 13:28



Reply to topic  [ 41 posts ]  Go to page Previous  1, 2, 3
Разработка эмулятора Altair 8800 на Arduino 
Author Message
Senior
User avatar

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


14 May 2020 06:56
Profile
Senior
User avatar

Joined: 21 Aug 2018 07:39
Posts: 164
Location: Кемеровская обл.
Reply with quote
Post Re:
barsik wrote:
Эти адреса подпрограмм CP/M-BIOS начинаются с оффсетом $4C30 от начала кода (т.е не считая 4 байта адреса в начале RKR-файла). И естественно, там стоят 16 стандартных JMP-ов CP/M-BIOS-а.
Не подскажете, где можно взять полное описание и адреса эти подпрограмм?
Это пока все что удалось наковырять:
Code:
0xf86c - возврат управления в командную строку
7436
f812
f803 ожидание нажатия клавиши
f809
741a
f8c6


16 May 2020 07:58
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Icer wrote:
barsik wrote:
Эти адреса подпрограмм CP/M-BIOS
Не подскажете, где можно взять полное описание и адреса этих подпрограмм?
Описание подпрограмм BIOS у меня есть лишь на бумаге, но это даже не особо надо, т.к это требуется лишь когда делаешь адаптацию CP/M под конкретное железо, а это всегда делается из прототипа, т.е готового исходника и если вдруг захочется что-нибудь узнать, то это сразу видно из листинга. Потому никаких описаний CP/M не имею, но это не проблема, т.к сейчас в Интернете изобилие информации о CP/M, легко находится гуглением. При переделке программ для работы без DOS вам интересны только отмеченные звёздочкой консольные подпрограммы BIOS.
Code:
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.



16 May 2020 10:10
Profile
Senior
User avatar

Joined: 21 Aug 2018 07:39
Posts: 164
Location: Кемеровская обл.
Reply with quote
Post Re:
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.
Не очень понятно, что тест хочет сказать, но уже хоть что-то.


16 May 2020 17:21
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
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 исчезнет.


16 May 2020 23:02
Profile
Writer

Joined: 03 May 2020 08:31
Posts: 20
Location: Мытищи
Reply with quote
Чтобы запустить тест процессора я поправил в исходном тексте на ассемблере "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
Profile
Senior
User avatar

Joined: 21 Aug 2018 07:39
Posts: 164
Location: Кемеровская обл.
Reply with quote
Barmaley wrote:
Тест запускается, выводит нужные сообщения, но выдаёт ошибку процессора. (если интересно могу выложить сюда его сообщения).
Конечно интересно. На моей адаптации эмулятора бейсик показывает "0 BYTES FREE", а тест "CPU HAS FAILED! ERROR EXIT=0536".


17 May 2020 06:17
Profile
Writer

Joined: 03 May 2020 08:31
Posts: 20
Location: Мытищи
Reply with quote
Работа бейсика на STM с эмулятором i8080 взятом из проекта Emu80 (автор Viktor Pykhonin http://www.nedopc.org/forum/viewtopic.php?f=43&t=17234):

Code:
 - работа эмулятора 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:
 - работа эмулятора в котором бейсик постоянно выдаёт ?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, и один символ в текстовой строке, так что вылетает в одном и том же месте.


17 May 2020 07:03
Profile
Senior
User avatar

Joined: 21 Aug 2018 07:39
Posts: 164
Location: Кемеровская обл.
Reply with quote
Рад что у вас получилось!
А я еще малость поковыряюсь, может найду где собаку зарыли. :mrgreen:


17 May 2020 08:44
Profile
Writer

Joined: 03 May 2020 08:31
Posts: 20
Location: Мытищи
Reply with quote
Icer, спасибо!

LCD 128x64 модуль. 21х10 символов.


Attachments:
lcd.jpg
lcd.jpg [ 195.58 KiB | Viewed 5573 times ]
17 May 2020 09:09
Profile
Writer

Joined: 03 May 2020 08:31
Posts: 20
Location: Мытищи
Reply with quote
https://youtu.be/6O4_DnGQNkY
Видео 30 сек, вычисление числа PI на бейсике.
Длительность вычисления 9мин 33сек.

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


24 May 2020 09:00
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 41 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: No registered users and 7 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.