а другие на ретро-железках еще и деньги зарабатывают, с каждой копии своей программы по 100 сантиков:
http://www.cdadapter.com/cross32.htm
Вот нам и Licensing Best Practices в действии.
а другие на ретро-железках еще и деньги зарабатывают, с каждой копии своей программы по 100 сантиков:
http://www.cdadapter.com/cross32.htm
Вот нам и Licensing Best Practices в действии.
Последний раз редактировалось perestoronin; 01.01.2016 в 16:31.
Ретрокладовая продажи
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Как вижу, деление работает с любым делителем до 2^16, это действительно необходимо? Уменьшение диапазона в два раза позволит выкинуть половину кода, а из оставшейся половину условных переходов. Вроде бы алгоритму "краника" деления на числа до 2^15 хватает для вычисления 4930 десятичных знаков.
Когда у меня недавно были проблемы с архивным десктопом, тоже искал tasm32 - и не нашел. Про исходники не знаю.
Благодарю, действительно table driven, сюда по компонентам.
Правильное наименование TASM - the Telemark Assembler
и по такому ключу находится у калькуляторщиков http://www.ticalc.org/archives/files...250/25051.html
А также
http://old-dos.ru/files/file_1385.html
А здесь есть страничка с документацией онлайн
http://www.cpcalive.com/docs/TASMMAN.HTM
Также нашел полную версию документации в pdf.
Эта pdf спрятана на сайте проекта sl100. На заметку, в состав борды SL100 входят модули и на Z80 и на 8080.
Сказано что кроме DOS версии, есть еще и Linux сборка, а возможно и даже и исходники. Никому не попадались ?
А здесь сказано, что был далее использован в новых разработках:
http://tistory.wikidot.com/tasm
In the early days of the TI community, TASM was the most popular assembler that was used by Z80 assembly programmers.
Later it was superceded by IDE's such as Assembly Studio 8x and SPASM, however in some cases it is still used to this day.
Assembly Studio 8x:
описание
http://tistory.wikidot.com/assembly-studio-8x
а скачать дистрибутив можно по другой ссылкеAssembly Studio 8x v4.0
A full featured Win32 assembler and IDE for z80 calculator
http://www.ticalc.org/archives/files...158/15892.html
Есть контакты автора Jeremy Goetsch (jeremy@acz.org)
Проект судя по всему заброшен, вместе с доменом acz.org, может кто уже сталкивался с этим проектом и выпрашивал исходники у автора?
SPASM:
https://github.com/alberthdev/spasm-ngSPASM-ng is a z80 assembler with extra features to support development for TI calculators.
Попутно откопал такое ретро-чудо, но уже для IBM360:
http://www.jaymoseley.com/hercules/compilers/spasm.htm
Пусть этот оффтопик побудет некоторое время в этой теме, позже его уберу в копилку знаний http://zx-pk.ru/wiki, кто-то же должен её пополнять.
А здесь еще масса ретро-инструментов для ретро-процессоров упоминается, жаль что отчасти с битыми ссылками:
http://wiki.nesdev.com/w/index.php/Tools
Последний раз редактировалось perestoronin; 01.01.2016 в 13:21.
Ретрокладовая продажи
Благодарю, все еще в поиске исходника tasm или хотя бы linux версии, на данный момент нашел вот такой архив, в нем есть документация в pdf по программированию для процессора 6502, думаю может быть полезна для тех, кто разрабатывает версию программы расчета числа Пи под процессор 6502 (NES, Агаты, Анюша, Apple 1).
Левенталь 6502 Подпрограммы на ассемблере (книга на английском).
в том же архиве находится и сам tasm 3.2, но с таблицей только для 6502.
Подумалось, что наверное не так сложно будет мне расковырять tasm с целью получить fork в исходниках, а сами таблички-то просто текстовые файлы, их можно использовать будет без изменений в авторской редакции.
tasm мега компилятор с ассемблера, и сразу под массу процессоров, среди которых есть почти все нужные нам ретро-процессоры.
Не представляется сложным написать самим таблички под какие-то другие более экзотичные процессоры, для этого и программирование даже знать и не нужно
Не особенно тщательно искал но на той же страничке проекта много чего выложено, может еще что-то найдется в тех архивах уникальное, как к примеру выше упомянутая версия книги Левенталя для 6502, дайте знать и мне.
Ждем теперь оптимизированную версию расчета чиста Пи по неоптимальному алгоритму и для процессора 6502![]()
Последний раз редактировалось perestoronin; 01.01.2016 в 13:53.
Ретрокладовая продажи
Судя по времени работы текущая версия litwr весьма оптимизирована:
Это большой плюс tasma, который перевешивает (для меня) его недостатки.
- - - Добавлено - - -
Да, старший бит делителя бывает единичным. Диапазоны чисел я проверял, в умножении учет диапазона хорошо помог, а в делении, к сожалению, нет.
? Не могу сообразить, за счет чего можно выкинуть половину кода при уменьшении диапазона в два раза. На каждый бит делимого приходится 8 строк.
- - - Добавлено - - -
Это Вы наверно про исходный, а здесь то "4х циферный"
Последний раз редактировалось ivagor; 01.01.2016 в 15:51. Причина: исправил опечатки и ошибки
весьма вероятно что это так, но цифры уж очень близки к версии для 8080, поэтому думаю что это именно весьма неоптимизированная версия, при равной частоте с 8080, должна получаться версия быстрее для 6502.
память можно рассматривать и как массив байт и как массив бит, другое дело что обращение к памяти как к массиву бит потребует накладных расходов, тут нужно внимательно смотреть сколько выигрываем и сколько проиграем в производительности и объеме памяти.
В дополнение старый список инструментов для компиляции программ под ретропроцессоры
http://www.z80.info/z80sdt.htm
увы ни исходника tasm, ни версию для linux, я не нашел, но зато нашел другой ассемблер и тоже управляемый таблицами и причем с исходными кодами самого ассемблера:
http://www.penguin.cz/~niki/tdasm/
думаю будет полезен и для Z80, тем более что таблица (хотя и неполная) для z80 прилагается, а полные таблицы и отсутствующие таблички можно попробовать портировать для tdasm из архива tasm, но форматы таблиц различны.
PS. В целом мне кажется tdasm не дотягивает до уровня tasm, поэтому ищу исходники или версию tasm под linux дальше.
еще наткнулся на vasm, тоже достоен внимания http://sun.hasenbraten.de/vasm/index.php?view=relsrc
Последний раз редактировалось perestoronin; 01.01.2016 в 16:04.
Ретрокладовая продажи
В версии для 8080 "удвоенное" количество кода вызвано отсутствием команды HL=HL+RP+флаг переноса. В вариантах для 8085 и z80 код почти как у Вас, только с переходами по переносу, а не знаку.
- - - Добавлено - - -
Поправлюсь - на каждый бит делимого
- - - Добавлено - - -
Уф, это я опять про делимое, а не про делитель. Максимальный делитель для 1000 - 6999, для 100 - 699. Не думаю, что это можно использовать для сокращения процедуры при расчете 1000 или 100 цифр. Вот если бы делимое, которое я как раз имел в виду, тогда другое дело.
Последний раз редактировалось ivagor; 01.01.2016 в 16:01.
8080 гадость конечно редкостная, но даже для него с делением не всё так плохо:
#define ADC8(a,b) do{a=(a&255)+(b&255)+C; C=a>>8; a&=255;}while(0)
#define ADD16(a,b) do{a=(a&65535)+(b&65535); C=a>>16; a&=65535;}while(0)
//BC - делитель, должен быть в диапазоне от 256 до 32768
//DE = -BC
//HL < BC - старшие два байта делимого
//SP - младший байт делимого расширенный нулём
//A - частное
//деление производится по формуле A=HL*256/BC; HL=HL*256%BC; HL+=SP; if(HL>=BC) {HL-=BC; ++A;}
void div_8080(int &hl, int &a, int &bc){
int sp=a;
int de=-bc;
int C=0;
ADD16(hl,hl); ADD16(hl,de); if(!C) goto A1;
S1: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A2;
S2: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A3;
S3: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A4;
S4: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A5;
S5: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A6;
S6: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A7;
S7: ADC8(a,a); ADD16(hl,hl); ADD16(hl,de); if(!C) goto A8;
S8: ADC8(a,a); ADD16(hl,sp); ADD16(hl,de); if(!C) goto A9;
S9: ADC8(a,0);
return;
A1: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S2;
A2: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S3;
A3: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S4;
A4: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S5;
A5: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S6;
A6: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S7;
A7: ADC8(a,a); ADD16(hl,hl); ADD16(hl,bc); if(C) goto S8;
A8: ADC8(a,a); ADD16(hl,sp); if(C) goto S9;
A9: ADD16(hl,bc);
return;
}
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)