Войти
ФлеймФорумЖелезо

Блеск и нищета 8/16-битных консолей и ПК (134 стр)

Страницы: 1133 134 135 136 137 Следующая »
#1995
10:21, 15 ноя 2023

Напрягли старичка i4040 для расчёта  числа Pi - https://habr.com/ru/articles/773780/

#1996
14:09, 24 ноя 2023

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#1997
4:25, 25 ноя 2023

0iStalker

Хехе. Я даже не знал, что FDS был по физике процесса даже не дисковод, а стример и чтобы читать/писать нужно было сперва спозиционироваться на начало диска и потом от начала размотать спираль по которой идёт головка чтения/записи чтобы выполнить процесс в нужном месте. Мде...

#1998
(Правка: 19:28) 19:25, 14 дек 2023

Внезапно сегодня наткнулся на одну странную странность из самых оснований истории домашних ПК.
Microsoft Basic как известно стал первое время как бы операционной системой для огромной части домашних ПК и был в очень разных машинах.
Начался он на Altair 8800 и я нагуглил дизассемблирование этого чуда (по преданию его отлаживали на созданном эмуляторе под PDP-11): https://github.com/option8/Altair-BASIC/blob/master/BASIC%20disas… ly-source.txt
Интересует следующий фрагмент кода:

FAddMantissas  MOV A,M  
  ADD E  
  MOV E,A  
  INX H  
  MOV A,M  
  ADC D  
  MOV D,A  
  INX H  
  MOV A,M  
  ADC C  
  MOV C,A  
  RET  

Речь пойдёт про формат вещественных чисел в Microsoft Basic для 8-битных компов.
Про это дело есть статья на вики (англ.): https://en.wikipedia.org/wiki/Microsoft_Binary_Format
Откуда можно почерпнуть, что в начале времён MS Basic исповедовал 32-битный формат: 1 байт под экспоненту и 3 байта под мантиссу. Его еще там называют "BASIC 6 цифр", видимо по среднему числу значащих разрядов.
Код выше как раз складывает мантиссы и мы действительно видим три сложения ADD/ADC который держит в регистровой триаде CDE что-то что складывает с содержимым памяти куда смотрит регистр HL (M в операндах это как бы [HL], а INX H это инкремент HL).
Логично, запруфено.
Здесь еще сразу замечу, что архитектура процедур типа FAdd (частью которой является FAddMantissas) складывает числа откуда то из памяти с переменной FACCUM (4 байта), что есть "аккумулятор для флоатов".

Далее с годами последуют порты MS Basic на MOS 6502 где хорошо повлияют на индустрию порты на PET/Commodore и Apple II и вот опять таки археораскопки модуля работы с вещественными оттуда - аналогичный кусок кода: https://github.com/mist64/msbasic/blob/master/float.s

FADD4:
        adc     ARGEXTENSION
        sta     FACEXTENSION
.ifndef CONFIG_SMALL
        lda     FAC+4
        adc     ARG+4
        sta     FAC+4
.endif
        lda     FAC+3
        adc     ARG+3
        sta     FAC+3
        lda     FAC+2
        adc     ARG+2
        sta     FAC+2
        lda     FAC+1
        adc     ARG+1
        sta     FAC+1
        jmp     NORMALIZE_FAC5

Тут видно, что имя переменной FACCUM превратилось в FAC, но по сути происходит то же самое, за одним исключением - в некоторых портах MS увеличивает мантиссу до четырёх байт и получает так называемый "BASIC 9 цифр" (5 байт на флоат). В данной реконструкции которая пытается все версии собрать воедино этот фактик контролируется #ifdef-ом.
Важно заметить, что нигде в этом исходном коде не встречается инструкция SED, что будет важно несколько ниже.

Но тут еще можно вспомнить, что пытаясь простимулировать общедоступный открытый компьютер Microsoft плотно участвовала в создании ПК MSX - в том числе и своим бейсиком тоже.
Вернее его вариантом дизассемблинг которого можно найти тут: https://github.com/apoloval/msx-system/blob/master/base200/basic1.asm
Интересует следующий фрагмент еще не проанализированного толком кода:

C2759:  LD  HL,ARG+7
        LD  DE,DAC+7
        LD  B,7

;  Subroutine  __________________________
;  Inputs    ________________________
;  Outputs    ________________________

C2761:  XOR  A
J2762:  LD  A,(DE)
        ADC  A,(HL)
        DAA
        LD  (DE),A
        DEC  DE
        DEC  HL
        DJNZ  J2762
        RET

Тут своеобразная распрыжка где по умолчанию в цикловой регистр B зашивается 7 и потом идёт сложение по нисходящей семи байт по адресам DAC и ARG с откладыванием суммы в DAC.
Но результат пропускается через DAA - десятичная коррекция результатов.
А начальные процедуры прямо помечены, что DAC это Decimal Accumulator.
Decimal, мать твою, что сорцом подтвержается и подтвержается еще здесь: https://www.msx.org/wiki/BASIC_Routines_In_Main-ROM

Single and double precision digits are stored in BCD format

Внезапно, на MSX мантисса вещественных хранится в BCD и имеется два формата: одинарной и двойной точности. Один байт и там и там под экспоненту и три байта ровно преровно под 6 десятичных цифр в 32-битном формате и ровно 14 цифр в 64-битном формате.
И вот это престранно - никакой десятичной арифметики на i8080 и на MOS 6502 не было! Хотя они на это способны. Но ни десятичной инструкции DAA в сорцах под Altair не встречается как и не встречается инструкции переключения в десятичный режим SED в сорцах под 6502.

Очень странно - в MSX Microsoft почему то переключились на десятичный формат вещественных чисел. Однако! При этом в статье на вики никаких упоминаний про это нет. Вдвойне странно.

#1999
19:46, 14 дек 2023

=A=L=X=
> И вот это престранно - никакой десятичной арифметики на i8080 и на MOS 6502 не
> было! Хотя они на это способны

Я твою мысль не понял. В Basic для i8080 мантиссы хранятся как обычные двоичные 24-бит, на MSX Basic - как BCD. В чем именно недоразумение?

#2000
19:49, 14 дек 2023

Dmitry_Milk
> В чем именно недоразумение?

Так а зачем? Какой смысл вообще прибегать к BCD в вещественных? Видно даже, что им пришлось увеличить разрядность до 7 байт на мантиссу чтобы повысить упавшую точность.
Есть только один смысл ныне - для бухгалтерской арифметики - как тип Decimal в современном C#.
Но разве MSX преследовал своей целью быть бухгалтерской машиной?

#2001
19:54, 14 дек 2023

Насчет зачем перешли на BCD - резон есть, если чаще происходит перевод из строки в плавучку (а в бейсике для i8080, насколько я помню, все чиcла были только плавучкой), чем просто вычисления над плавучкой. Потому что если обычное двоичное представление мантиссы, то перевод из/в строку потребует совершать кучу умножений/делений на 10, а это очень дорого для восьмибиток, не имевших даже умножения байт на байт, а тут еще 24-битное целое. Тогда как для BCD нужно будет только поставить точку в правильном месте и скорректировать порядок.

#2002
7:20, 15 дек 2023

Dmitry_Milk

> резон есть, если чаще происходит перевод из строки в плавучку

Мне не кажется, что в алгоритмах перевод из числа в строку или обратно это прям какое то слабое место, имхо сами вычисления должны быть наскипидарены, а перевод это уже когда ввод/вывод и не должно быть местом преткновения.
Кстати про перевод я там еще вчера заметил интересную табличку:

J3030:  DEFW  -10000
        DEFW  -1000
        DEFW  -100
        DEFW  -10
        DEFW  -1

Она используется в процедуре с заголовком

;  Subroutine  convert to single precision real
;  Inputs    HL = integer value

и собственно располагается сразу после тела этой процедуры.
Это явно классический алгоритм двоично-десятичной конверсии когда мы вычитаем порядки десятков наращивая цифру пока не пробиваем ниже нуля чтобы вычислить эту цифру порядка и перейти к следующему разряду.
А всё дело в том, что в MSX числа могут быть аж в трёх форматах - integer, single и double и integer это честное двухбайтовое двоичное число.

The values type must be specified to 0F663h (VALTYP). Value type practically describes how many bytes are used from memory.
VALTYP  Description
2  Integer
3  String
4  Single precision number
8  Double precision number

Теперь я понял, что алгоритмы сложения допустим мантисс просто извлекают в регистр счётчика B из VALTYP и так определяют сколько цифр надо в мантиссе той же складывать если это вещественные числа. Но числодробилка их могла обрабатывать намного быстрее целые числа, зато вот при конверсиях возникала теперь задача целые превращать в вещественные медленным алгоритмом.
В общем забавно, забавно.
Для меня это выглядит крайне странно, что в какой то момент MS прямо вот полностью изменила стратегию работы с вещественными на BCD и на 8-битной машине ввела 64-битные double у которых ровно 14 десятичных цифр мантиссы. Это очень по бухгалтерски, как будто машина задумывалась как инструмент работы с финансами, а не просто какой то домашний комп.

В принципе даже в i8087 был некий BCD-формат, но никогда с ним не работал, х/з что там.

#2003
11:34, 20 дек 2023

Оффтоп конечно, но все равно к ретро относится (эмуляторы).

Изображение

Прикупил себе консольку миниатюрную, слайдер а-ля PSP Go. Функционал конечно интересный: помимо эмуляции игр с NES, консоль умеет:

1. Видосы, музыку, картинки. 2Гб памяти + слот SD.
2. Работать как вебка (есть камера)
3. Работать как диктофон
4. Работать как портативный дисплей с возможностью подключить тюльпанами двд, видик или тв бокс
5. Выводить картинку на телик
6. Читать электронные книги

За 100 баксов в 2007-2009 годах эт отличный функционал. Мне же девайс достался за 250 рублей.

#2004
11:23, 21 дек 2023

Vodo4ka
А внутри что за процессор и сколько памяти?
Эмулятор андроид?

#2005
11:24, 21 дек 2023

revollwars
Не, консоль не на дроиде.
Процессор SPMP4k - предшественник SPMP8k. Судя по всему, MIPS.

#2006
(Правка: 15:16) 15:11, 21 дек 2023

Проект под названием Hasm - Human Assembler
В примерах Rom ZX-Spectrum переписана на нём и монитор от Apple I (WozMon)

P.S. Но, с именем Hasm есть и другие языки как к примеру представленный на площадке Tio
https://tio.run/#hasm

+ Hello
#2007
18:34, 21 дек 2023

Vodo4ka
> Прикупил себе консольку миниатюрную
А что там с консолью своими руками?

#2008
3:12, 22 дек 2023

master-sheff
> А что там с консолью своими руками?
Проект всё ещё существует, есть несколько предзаказов. Потихоньку в работе, хотелось бы софтварное тридэ туда добавить, дабы была фишка по сравнению с другими похожими DIY-консолями.

#2009
13:35, 22 дек 2023

Статья на Хабре, от Shiru, о подходе к графике на ретро-платформах

https://habr.com/ru/companies/ruvds/articles/775200/
https://habr.com/ru/companies/ruvds/articles/775202/

Страницы: 1133 134 135 136 137 Следующая »
ФлеймФорумЖелезо