nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 22 Oct 2018 01:45



This topic is locked, you cannot edit posts or make further replies.  [ 6 posts ] 
6502 Assembler in BASIC 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Попалась мне по ходу дела тут одна статейка древняя: Full text of "6502 Assembler in BASIC",
и сразу-то она меня никак не удивила: у многих компьютеров тех времен ассемблер был написан
на BASIC, ибо BASIC был зачастую встроенным в ПЗУ языком - М$ во всю старалась...

Но зацепило мне меня в тексте, что этот "6502 Assembler" написан на Hewlett-Packard 2000 series F BASIC ,
и я решил взглянуть, что же за зверь такой - Hewlett-Packard 2000 F ? :roll:
http://www.decodesystems.com/hp2000/#photos

ImageImageImage

Прикольные, кстати, прически у древних "Адок Лавлейс", а Hewlett-Packard 2000 F - ну почти PDP-8 на вид. :wink:

Автор в статье пишет об особенностях Hewlett-Packard 2000 series F BASIC и обещает привести
версию и для M$ BASIC.
Я не знаю, выполнил ли он своё обещание, но стало мне интересно, что аж на таких древних "холодильниках"
брались за программирование 6502 на ассемблере! :o
Поэтому я решил оригинал оцифровать и попробовать на ВАСЮКЕ от M$.

Здесь оригинал, если приспичит свериться:
Attachment:
6502_Assembler_in_BASIC.zip [1.92 MiB]
Downloaded 6 times

Здесь мой OCR оригинала с переводом на русский и довольно прилично
вычищенным текстом исходника на Hewlett-Packard 2000 series F BASIC :
Attachment:
6502_Assembler_BAS.zip [23.55 KiB]
Downloaded 9 times

Если текст исходника загрузить в M$ QBasic, то так примерно пяток мелких ошибок он находит,
они вычищаются легко...
Но самое неприятное оказалось в структуре файлов последовательного доступа этого самого
Hewlett-Packard 2000 series F BASIC :
Attachment:
HP_Files.gif
HP_Files.gif [ 7.1 KiB | Viewed 640 times ]

На Hewlett-Packard 2000 series F BASIC, оказывается, можно открыть файл на запись, записать вперемешку
численные и строковые переменные, потом позиционировать на начало и в той же последовательности считать их.

У M$ QBasic такой фокус не проходит, если RANDOM ACCESS файл, то запись должна быть фиксированной длины.
Если файл на запись, то чтобы читать его, надо закрыть и открыть на чтение что в этом коде
пришлось бы делать постоянно.

Ну и еще один хитрый трюк есть у Hewlett-Packard 2000 series F BASIC : кроме постоянной метки
конца файла, есть текущая метка. И BASIC, встретив эту метку передает управление на условленный адрес,
т.е. дописывать в файл можно "как по прерыванию" (так в оригинале написано), безо всяких там SEEK
и прочих финтов с позиционированием, как у M$.

В общем с наскоку посмотреть прелести "6502 Assembler in НР 2000 F BASIC" не случилось. :-?
Но поскольку раритет интересный - решил выложить здесь.

Свой вариант из-под M$ QBasic не выкладываю, т.к. уже сильно "шашкой порубил" пока не пришла
ко мне умная мысль:"А не почитать ли, что действительно делали файловые команды НР 2000 F BASIC ?" 8)
http://www.decodesystems.com/hp2000/
https://www.mrynet.com/hp2000/documentation.html

_________________
iLavr


27 Sep 2018 17:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Кстати, когда ищешь Гуглем что-то типа "Ассемблер исходный код" или "Assembler source code",
то довольно часто натыкаешься на Quick and Dirty 8080 Assembler written in BASIC.

Этот артефакт написан на BASIC Tandy/Radio Shack TRS-80 Model 4 или TRS-80 Model 100.
Он под М$ QBasic адаптируется довольно легко, и как-то довольно давно я это пробовал.

По возможностям и структуре кода - это действительно Quick and Dirty 8080 Assembler... :lol:

Но пусть ссылочка будет здесь для коллекции Assembler-ов written in BASIC. :wink:

http://nemesis.lonestar.org/computers/tandy/software/apps/m4/qd/

Вдруг с кем-либо произойдёт вот такая же превратная ситуация, и понадобятся ассемблеры на BASIC! :mrgreen:
Несколько лет назад мой товарищ был направлен в командировку на Север, совсем недалеко от полярного круга, для решения проблем, возникших в одной из сейсмических партий. В ходе работы понадобилось написать программу, а его любимого С++ под рукой не оказалось. В полевых условиях удаленной местности достать где-то необходимый компилятор не было возможности. А без решения этой проблемы партия простаивала — напомню, что в условиях болотистой местности можно работать только лишь зимой. Суть проблемы заключалась в информационных файлах навигации (привязки) на местности. Поэтому ему пришлось вспомнить Бейсик и написать на нем свою программу, и это несмотря на его предубеждение, что нечего путного на Бейсике написать нельзя.

Как мой товарищ потом говорил, он был приятно удивлен возможностями Бейсика, и это — Qbasic 1.1 ! После этого он любит пошутить: "хорошо знать иностранные языки".

_________________
iLavr


28 Sep 2018 09:25
Profile
Novelist

Joined: 31 May 2007 09:23
Posts: 29
Location: Украина
>>такой фокус не проходит, если RANDOM ACCESS файл, то запись должна быть фиксированной длины.

может, попробовать
open "" for BINARY as #1
?
разную длину можно сделать как
dim a as string*1
dim b as string*8
..
get #1, position, b
put #1, position, a


28 Sep 2018 14:28
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Можете так попробовать, если есть интерес, я все материалы здесь выложил.

Хотя из общих соображений, если уж:

open "" for BINARY as #1 - размер записи в 1 байт

то и читать надо 1 байт:

dim a as string*1
get #1, position, a
- пройдет нормально.

А если
dim b as string*8
то
get #1, position, b - выдаст ошибку

b, как 8-байтное, превышает размер записи в 1 байт и считывать его надо в цикле по 1 байту.

Не проверял, но, кажется, так... for BINARY - по умолчанию размер записи в 1 байт.

_________________
iLavr


29 Sep 2018 12:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
2_zooleek:
Не сразу случилось попробовать, то что Вы посоветовали, поскольку убрал уже было этот материал
у себя в архив.
Но Ваш вариант работоспособный в принципе.

Другое дело, что там строковые переменные разной длины, но это решаемо.

В принципе я тут никого не собирался удивить ассемблером, написанным на Бейсике, и уж тем
более дорабатывать этот вариант до чего-либо работоспособного.
Просто ассемблер для 6502, написанный на Hewlett-Packard 2000 series F BASIC меня
действительно удивил, как артефакт, и я проверил, как он "взыграет" под MS Basic.
Мой жизненный опыт в этой сфере подсказывает мне что программы на Васиках почему-то
легче переносятся между платформами, нежели программы на С и С++, тем более в случаях
когда на С и С++ исходника и в принципе быть не могло. :wink:

А провести поиск в Гугл меня вынудила потребность закрыть лично для себя вопрос, который мы
не раз на форуме обсуждали, но явного ответа не нашли: разбор длинной строки аргумента,
включающей скобки, метки и математические операции
.

Я нашел алгоритмы обpатной польской нотации и парсинг с помощью метода рекурсивного спуска.
Но это выходит за рамки данного топика.

_________________
iLavr


02 Oct 2018 06:45
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Полезную подсказку по сабжу упомянул barsik:
barsik wrote:
Есть ассемблер даже на TINY-бейсике (менее 300 операторов), написанный когда DOS ещё не было.

Я про такой ассемблер не слышал, и поскольку ни ссылок, ни исходников barsik не привел,
я потратил время на поиски, поскольку в рамках сабжа это может быть интересно, хотя я
и не искал специально ассемблеры на Бейсике для 6502.

В архиве: описание TINY BASIC, его исходный код, и исходник TINY BASIC IL ASSEMBLER.
Attachment:
TINY_BASIC_ASSM.zip [36.64 KiB]
Downloaded 8 times

Сам TINY BASIC позиционируется следующим образом:
Quote:
TINY BASIC in the 6800 and 6502 was designed to be a small but powerful language for hobbyists.
It allows the user to write and debug quite a variety of programs in a language more "natural" than hexadecimal
absolute, and programs written in TINY are reasonably compact. Because the language is small it is not as
convenient for some applications as perhaps a larger BASIC might be, but the enterprising programmer will
find that there is very little that cannot be done from TINY with only occasional recourse to machine language.
This is, in fact, as it should be: The high level language provides the framework for the whole program, and
the individual esoteric functions done in machine language fill in the gaps.

TINY BASIC IL ASSEMBLER содержит вызовы подпрограмм в машинном коде 6502, поэтому
пробовать его под MS Basic априори бесполезно без некоторой предварительной работы по
его адаптации.

Но, мне кажется, что на Proteus модели Apple_I этот код должен заработать без изменений,
почему я и счел нужным потратить время на его поиск.


P.S. Да, и я подзабыл, что у нас не все владеют английским и переводчиком google:
Quote:
TINY BASIC (КРОШЕЧНЫЙ БЕЙСИК) микропроцессоров 6800 и 6502 был разработан как небольшой, но мощный язык для любителей. Он позволяет пользователю писать и отлаживать множество программ на языке, более «естественном», чем абсолютные шестнадцатеричные коды, а программы, написанные на TINY, достаточно компактны. Поскольку язык мал, он не так удобен для некоторых приложений, как, возможно, более крупный BASIC, но предприимчивый программист увидит, что очень немного задач невозможно сделать с TINY с использованием время от времени подпрограмм на машинном языке.
На самом деле, так и должно быть: язык высокого уровня обеспечивает основу для всей программы, а отдельные эзотерические функции, выполняемые в машинном языке, заполняют его пробелы.

_________________
iLavr


03 Oct 2018 06:11
Profile
Display posts from previous:  Sort by  
This topic is locked, you cannot edit posts or make further replies.   [ 6 posts ] 

Who is online

Users browsing this forum: No registered users and 1 guest


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.