Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Поиск (http://zx-pk.ru/forumdisplay.php?f=78)
-   -   ПК Поиск - Эмуляция (http://zx-pk.ru/showthread.php?t=7491)

Tronix 19th December 2013 18:33

1 Attachment(s)
Quote:

Originally Posted by b2m (Post 653907)
Если другой BIOS рассчитан на другой контроллер - то понятно. А если на такой-же, то выкладывай свой BIOS, я поковыряю-потрассирую.

Ну ВГ93 она ж вроде и в африке ВГ93. Порты то не меняются, а как я понимаю, контроллер через них с вгшкой общается. Вот три разных BIOS от флоповых контролллеров, во всех случаях эмуль вываливается в монитор (F1 - работа с кассетой, F2 - работа с ПЗУ). Я понимаю, если бы вис или там с дискеты не грузился, но это странное поведение какое-то.

b2m 19th December 2013 20:14

Все три работают, вот только контрольная сумма у всех трёх 0EDh, а не ноль. Биос их даже не пытается запустить. Если подправить регистр al после суммирования - всё работает. Подозреваю, рассчитаны на другой биос, который иначе считает КС.

---------- Post added at 20:14 ---------- Previous post was at 19:46 ----------

А, я понял. Третий байт ПЗУ - длина (количество блоков по 512 байт), в этих ПЗУ указано 16 блоков, хотя реально лишь 4 блока. Если просуммировать 4 блока, то будет ноль. Я разместил ПЗУ подряд, а реально было видимо с дырками, заполненными байтом FF. Если дополнительно просуммировать 256*n байт FF, то КС не изменится.

Тогда вопрос - по каким адресам реально были размещены ПЗУ?

Tronix 19th December 2013 20:17

Контрольная сумма у всех трех = 00h. Считается сложением всех байт файла (последний байт тоже считается). Опкод OR AL,AL устанавливает флаги ZF?

Ща посмотрю на Поиске по каким адресам

Tronix 19th December 2013 20:46

2 Attachment(s)
E000:0 - FDD
E200:0 - HDD

Но я чото запутался, да, FDD репортует о 8кб, и типа если читать 8 кб из памяти - то FDD BIOS там несколько раз повторяется. Наверное такая дешифрация. У HDD все нормально, 2 Kb. На всякий случай снял дамп вот этой прогой: http://www.mess.org/_media/dumping/dumppc.zip - файл DUMP.BIN, а так же своей поделкой - файлы E000.rom и E200.rom

UPD: Заработал мой файл-командер. Пока с ним разбирался заметил, что: diet v1.44 (упаковщик EXE файлов) неправильно сжимает EXE - во первых результативный файл больше по размеру чем если его же сжимать на Поиске, во вторых такой файл конечно не запускается а виснет. И еще наблюдаю иногда глюки с неправильными аттрибутами символов в коммандере.

shattered 19th December 2013 22:56

Quote:

Originally Posted by Tronix (Post 653918)
Ну ВГ93 она ж вроде и в африке ВГ93. Порты то не меняются, а как я понимаю, контроллер через них с вгшкой общается. Вот три разных BIOS от флоповых контролллеров,

А чем они друг от друга отличаются?

Tronix 19th December 2013 23:04

Quote:

Originally Posted by shattered (Post 654032)
А чем они друг от друга отличаются?

А хз. :)

shattered 19th December 2013 23:11

А прошивка КЖД версии 1.7 есть? :)

Tronix 19th December 2013 23:12

Quote:

Originally Posted by shattered (Post 654041)
А прошивка КЖД версии 1.7 есть? :)

Ну вон же она, несколькими постами выше. E200h.rom

Tronix 22nd December 2013 13:59

Короче хотел воспроизвести ошибку, по которой падает Checkit в бенчмарке с
Code:

run-time error M6104: MATH
- floating point error: overflow

checkit, согласно http://thomas.fach-pedersen.net/compiler-copyrights.txt , скомпилен Microsoft C 5.1, о чем говорит строка с копирайтом в EXE:
Code:

MS Run-Time Library - Copyright (c) 1988, Microsoft Corp\x11
Установил MS C 5.1 (еле нашел), компилял какую-то писькомерку, перемножающую массив рандомных чисел несколько раз:
Code:

/*
 * ATFLOAT -- PC Tech Journal Floating-Point Performance Test
 *
 * Version 1.01
 * Last modified 11/04/86
 * Copyright (c) 1986, Ziff Communications Company
 * Program by: Paul Pierce, Ted Forgeron, Steven Armbrust
 *
 * Measures the time it takes to multiply two matrices of
 * double-precision floating-point numbers and compares it
 * to the time it takes an 8MHz PC/AT with an 80287 math
 * coprocessor to do the same.
 */

#include <stdio.h>
#include <time.h>

/* Number of iterations the test runs for. */
#define TRIALS 10

/* Dimension of the matrix */
#define SIZE 20

unsigned rand();

double drand()
{

        return (double)rand() / 32767;
}

double a[SIZE][SIZE];
double b[SIZE][SIZE];

main()
{
        int i;
        register j, k;
        int n;
        unsigned long start;
        unsigned long total;
        unsigned trials;
        double t;

        trials = TRIALS;

        /*
        * Fill matrix with random numbers.
        */

        for (i = 0; i < SIZE; i++)
                for (j = 0; j < SIZE; j++)
                        a[i][j] = drand();

        /*
        * Repeatedly multiply the matrices and
        * report the relative and absolute times.
        */

        start = time(NULL);
        printf("\nATFLOAT -- PC Tech Journal AT Floating-Point");
        printf(" Performance Test\n");
        printf("Version 1.01, Copyright (c) 1986 Ziff ");
        printf("Communications Co.\n");
        printf("\nThis test runs for %d iterations ...\n", trials);
        for (n = 1; n <= trials; n++) {
                printf("%d\r", n);
                for (i = 0; i < SIZE; i++) {
                        for (j = 0; j < SIZE; j++) {
                                t = 0;
                                for (k = 0; k < SIZE; k++)
                                        t += a[k][j] * a[i][k];
                                b[i][j] = t;
                        }
                }
        }
        total = time(NULL) - start;
        printf("\rElapsed time is %ld seconds.\n\n", total, trials);
        printf("Floating-point performance index relative\n");
        printf("to 8MHz IBM PC/AT with 80287 = %2.1f\n",
                94.0 / (float) total);

}

Значит у MS C 5.1 есть несколько вариантов как работать с вещественными:
Code:

/IFPa Produces floating-point calls and selects alternate math library
/IFPc Produces floating-point calls and selects emulator library
/IFPc87 Produces floating-point calls and selects 8087/80287/80387 library
/IFPi Produces in-line instructions and selects emulator library
/IFPi87 Produces in-line instructions and selects 8087/80287/80387 library.

Я пробовал компилить с /FPa, /FPc и соответственно с /FPi, который по дефолту. Все три варианта отрабатывают без ошибок :( Воспроизвести не смог.

Tronix 22nd December 2013 14:39

1 Attachment(s)
А не, как раз вариант с /FPi (дефолтный ключ) падает так:
Code:

run-time error M6101: MATH
- floating point error: invalid

Значит /FPi генерит прям в коде опкоды сопроцессора (fld, fmul и тд). Библиотека эмулятора смотрит - если есть сопроцессор, то оставляет все как есть, если нет - то эмулятор вроде устанавливается в NMI (int 02h) и когда происходит invalid opcode обрабатывает его. Самое интересное - исходники флоат пойнт эмулятора с этой ран тайм либы в архиве EMOEM.ASM
Code:

By default, IBM C/2 handles floating-point operations by generating
inline instructions (/FPi option). The emulator library is loaded, but if
a numeric coprocessor is present at run time, the coprocessor is
used instead of the emulator. This method of handling floating-point
operations works whether or not you have a coprocessor installed.


Так же в архиве ATFLOATI.EXE, ее листинг ATFLOAT.COD.


All times are GMT +4. The time now is 04:56.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.