6502 Assembler in BASIC

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

6502 Assembler in BASIC

Post by Lavr »

Попалась мне по ходу дела тут одна статейка древняя: 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$.

Здесь оригинал, если приспичит свериться:
6502_Assembler_in_BASIC.zip
Здесь мой OCR оригинала с переводом на русский и довольно прилично
вычищенным текстом исходника на Hewlett-Packard 2000 series F BASIC :
6502_Assembler_BAS.zip
Если текст исходника загрузить в M$ QBasic, то так примерно пяток мелких ошибок он находит,
они вычищаются легко...
Но самое неприятное оказалось в структуре файлов последовательного доступа этого самого
Hewlett-Packard 2000 series F BASIC :
HP_Files.gif
На 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
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

Кстати, когда ищешь Гуглем что-то типа "Ассемблер исходный код" или "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/t ... pps/m4/qd/

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

Как мой товарищ потом говорил, он был приятно удивлен возможностями Бейсика, и это — Qbasic 1.1 ! После этого он любит пошутить: "хорошо знать иностранные языки".
iLavr
zooleek
Fanat
Posts: 53
Joined: 31 May 2007 08:23
Location: Украина

Re: 6502 Assembler in BASIC

Post by zooleek »

>>такой фокус не проходит, если 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
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

Можете так попробовать, если есть интерес, я все материалы здесь выложил.

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

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
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

2_zooleek:
Не сразу случилось попробовать, то что Вы посоветовали, поскольку убрал уже было этот материал
у себя в архив.
Но Ваш вариант работоспособный в принципе.

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

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

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

Я нашел алгоритмы обpатной польской нотации и парсинг с помощью метода рекурсивного спуска.
Но это выходит за рамки данного топика.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

Полезную подсказку по сабжу упомянул barsik:
barsik wrote:Есть ассемблер даже на TINY-бейсике (менее 300 операторов), написанный когда DOS ещё не было.
Я про такой ассемблер не слышал, и поскольку ни ссылок, ни исходников barsik не привел,
я потратил время на поиски, поскольку в рамках сабжа это может быть интересно, хотя я
и не искал специально ассемблеры на Бейсике для 6502.

В архиве: описание TINY BASIC, его исходный код, и исходник TINY BASIC IL ASSEMBLER.
TINY_BASIC_ASSM.zip
Сам TINY BASIC позиционируется следующим образом:
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:
TINY BASIC (КРОШЕЧНЫЙ БЕЙСИК) микропроцессоров 6800 и 6502 был разработан как небольшой, но мощный язык для любителей. Он позволяет пользователю писать и отлаживать множество программ на языке, более «естественном», чем абсолютные шестнадцатеричные коды, а программы, написанные на TINY, достаточно компактны. Поскольку язык мал, он не так удобен для некоторых приложений, как, возможно, более крупный BASIC, но предприимчивый программист увидит, что очень немного задач невозможно сделать с TINY с использованием время от времени подпрограмм на машинном языке.
На самом деле, так и должно быть: язык высокого уровня обеспечивает основу для всей программы, а отдельные эзотерические функции, выполняемые в машинном языке, заполняют его пробелы.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Assembler in BASIC

Post by Lavr »

Я тут почитывал форум http://forum.6502.org/ на тему 6502 emulation on Gigatron,
ну и всё сопутствующее по этому форуму просматривал...

И вдруг попадается мне ссылочка: http://archive.6502.org/appnotes/6502_a ... _basic.pdf :roll:
Я сразу про наш этот топик вспомнил и ссылочку скачал, а это, действительно, про этот самый
6502 Assembler in BASIC, про который я тут упоминал! :o

В общем, там всё с подробностями расписано, если кому этот топик был интересен:
6502_assembler_in_basic.zip
You do not have the required permissions to view the files attached to this post.
iLavr