Pull to refresh

Comments 80

UFO just landed and posted this here
Согласен, многие начинали с тех или иных BASIC-ов. Я — с Вильнюсовского. А литература была по «Микрону». Сопоставлял. Переделывал программы.

"Бейсик. Вильнюс, 1986" — это первое, что я увидел на экране компьютера, школьный УКНЦ в 1994 г.

Позанудствую, но вы немного путаете. Бейсик. Вильнюс, 1986 — это было у БК-0010. А у УКНЦ Бейсик был тоже Вильнюс, но 1988 года.
Скорее всего, да., запросто могу ошибаться, с тех пор с этой машиной ещё не сталкивался.
Я не осилил ассемблер. Но и на Бейсике интересные вещи делал. Довольно правдоподобно имитировал шипение ненастроенного радиоприёмника, выстрелы, стук пишущей машинки. Смещал верхнюю и нижнюю границы диапазона шума так, как будто у машинки работают разные рычаги. Не имея ни малейшего понятия о теории вероятности, распрелелениях и прочих сложных штуках.

Сейчас вот проверил. BEEP и SOUND не работают у него. Делают вид, что выполняются, и молчат. Думаю, скоро починят.
О я на нем тоже долго сидел, но потом удалось раздобыть PowerBasic который оказался значительно шустрей.
а я на Турбо Бейсике целый «коммандер» написал… почти как у Нортона :)), даже сейчас он работает и можно посмотреть его вот тут: gamecoffer.com/Article.asp?code=20130410171925030157
однако, к сожалению, исходный код от него был потерян из-за дерьмовых дискет, которые однажды не прочитались… рабочий вариант программы сохранился благодаря тому, что несколько копий у людей стояли…

Да, я тоже подобное делал (не коммандер, а UI тулкит), только в стиле нортон-утилит, с тенюшками. Даже мышка работала :-)


Жаль, те пятидюймовые дискеты давно утеряны, было бы интересно почитать этот, кхм. код, я бы даже дисковод где-нибудь нашел) хотя за это время наверняка дискеты сдохли бы в любом случае.

да, тогда Нортон утилиты в те времена выглядели так круто! а с программированием мышки были самые разные проблемы… даже в своём «коммандере» я с ней намучился, щелчок мышки там иногда «гуляет» плюс-минус одна позиция вверх или вниз от видимого курсора :)… и это поведение различно на разных машинах, где-то «гуляет», а где-то нет…
UFO just landed and posted this here
это правда… а какой же программист без большой мечты? Это как будущий космонавт не мечтающий полететь… и хотя на ОС я ни разу не рискнул замахнуться, но язык программирования я тоже придумал :) вот тут можно посмотреть, кому интересно… promcod.com.ua/cat.asp?cat=perfolenta-programmig-language
Ну вот, такое красивое название… и такой современный язык. Я думал, там типа Фортрана будет, но с переведёнными словами, как в Рапире.

О, первый basic, который я увидел на PC на компе с процессором 80286. До этого были БК-0010-01, а потом ZX-Spectrum дома и ДВК в школе.

P.S. Обратите внимание, как мало ОЗУ он видит. Более чем в 10 раз меньше, чем «хватит всем».

Те, кто писал под REAL MODE не удивлены. 64КБ это ровно 1 сегмент, который легко адресовать. А почему меньше — ну дык служебные данные самого Барсика тоже нужно где-то хранить.

В студенческие года, это примерно 1987-88, пара студентов чуть старше меня переделали Basic на отечественной машине СМ-1800 в многотерминальный. СМ скорее промышленный компьютер, этакий шкаф с рост человека, с памятью всего 64k. В институте использовались в учебном классе, к каждому было подключено по 5 терминалов, система получилась вполне пригодна для учебных целей — одновременно пять человек вводили и запускали программы и ничего не тормозило. Разумеется, доработка писалась на ассемблере (как тогда поправляли, правильно 'на языке ассемблера'), я немного был к этому привлечен и быстро выучил почти все мнемоники 580ВМ80

Я думал, это ограничение для процессоров с 16 линиями шины адреса. А тут 20.
о сколько Вам открытий чудных предоставит сегментная адресация памяти…
На i386 и выше, из REAL MODE входим в PROTECTED MODE, меняем лимиты сегментов на максимум, корректируем сегментные регистры и возвращаемся в REAL… Нет, уже не REAL а UNREAL MODE, который по сути REAL, только на стероидах, так как каждый сегмент умеет 4ГБайт. :) Когда-то баловался по книжке «Ассемблер для DOS, WINDOWS и UNIX», Зубкова С.В., она у меня есть в бумаге.
Страницы 497-499
image
image
image

Ещё этот режим называют «плоским» (aka Flat Mode).

Это ограничение для индексных регистров в 16 бит, включая IP. А там разные хаки типа сегментных регистров, чтоб преобразовать в 20 бит адреса.

Это com, емнип, там ещё и ОС память забирает. 100h байт первых, стэка чуть, может ещё что. Хотя стэк, может и в отдельном сегменте, но вроде в com все *P регистры в 0 были

Тогда не помню, COM ли это был. А эти чуваки теперь в EXE компилируют.

Похоже опубликованный код уже в .exe компилировался, но изначально под com писался. Активно работаю с сегметными регистрами, но:


;Initialize the jump vector for exit to MSDOS. MSDOS 2.0 requires that
; exit is made through the segment prefix table which is located at DS:0.
; For .EXE files, DS is not the same as CS at program initiation time (NOW).
JWasm может ещё и не уметь в COM сохранять.
Для COM все сегменты приравниваются к CS, сам COM грузится и стартует со смещения 0х0100 в сегменте CS, в резервных 256 байтах всякое системное, в том числе копия буфера командной строки, для парсинга параметров. А стэк определяется в конце этого сегмента. Учитывая, что сама программа занимает часть данных, то оставалось свободным бы гораздо меньше 62618 байт. Так что это скорее всего ЕХЕ, там сегмент данных отдельный.
В версии 3.23 это был таки GWBASIC.EXE и 80608 байт в несжатом виде. Такой COM бы просто не запустился, он весь должен поместиться в один сегмент 64К (да, вместе с PSP, который занимает первые 256 байт).

Ну вот посмотрев немного исходники, сложилось впечатление, что изначально он был com, а потом перевели в exe. Уж не тот ли это бэйсик под CP/M, который Гейтс по легенде в самолёте дописывал перед "демо" :)

Не тот, но сделан из него. Переведён из кодов 8080 в коды 8088 автоматическим транслятором. Ну и допилен.
Да, только в самолёте он допиливал не сам бейсик а его загрузчик. И да, как уже сказал tormozedison он был под Altair 8800, который был на 8ми битном i8080.
Верно. Гейтс в это время напивался в стрипбаре с Балмером и поклялся, что бросит Гарвард если у них всё выгорит с Альтаиром. И таки сдержал слово.
GW-BASIC — как раз такой был на моем первом компе ПК8000 Веста, она же Сура, она же не помню кто.
Это который с тайловой графикой, поэтому игры как бы в графическом режиме, а на самом деле это тайлы, как на NES, очень быстро работали.

Только GW-BASIC 16-битный изначально. А на 8-битном ПК8000 что-то самодельное, заточенное на совместимость текстов программ с GW-BASIC и MSX-BASIC.

MSX-BASIC же восьмибитный был… Может просто порт самодельный?

Но MSX-BASIC для Z80, а в ПК8000 8080. Такое проще заново написать, чем портировать, исключая отсутствующие инструкции. Вот если бы наоборот, оно бы вообще само заработало.

Не бєйсик, но кое-что я так портировал )

Компилятор C


Причём дважды пришлось. Сначала чтобы он запустился на i8080, но внезапно оказалось, что генерит он тоже Z80. Сейчас смешно, что не подумал, а тогда чуть свою Микрошу не сломал.

Интересно, а были ли программные эмуляторы Z80 для 8080, такие, чтобы хоть и с сильной потерей в производительности, давали коду возможность хотя бы запуститься? Были ведь резидентные программные эмуляторы математического сопроцессора 8087 для 8086/8088, лагали ужас как, но программы, требующие 8087, шли.

Ещё был КА1843ВГ1, это вообще уникальная вещь, добавляешь к 8086, и получается медленный, но работающий аналог 80286. Было ли что-нибудь похожее, добавляемое к 8080 и делающее его совместимым с Z80? Или было проще поставить переходную плату с Z80 — довольно известный способ модернизации «Ориона»?
Тут только интерпретаторы могут быть, и это будет ооооочень медленно. И к сожалению исключение «недопустимый код операции» у 8080 не было.

Типа, "я не понимаю, что там дальше написано, но всё равно выполню"?

Нет, интерпретатор может исполнить/интерпретировать только определенную область памяти заполненную кодами Z80. В принципе как интерпретируется токенезированый текст basic.
А с кодами которые не понимает 8080 обычно обрабатывались как операция NOP, и брался следующих за ним код. Но иногда (в некоторых случаях) портились/менялись флаги/регистры. И тогда эта инструкция становилась недокументированной но описанной.
Источник
Недокументированные инструкции
(в исходниках MAME):

* — Undocumented i8080 opcodes added:
* 08h, 10h, 18h, 20h, 28h, 30h, 38h — NOP
* 0CBh — JMP
* 0D9h — RET
* 0DDh, 0EDh, 0FDh — CALL
* Thanks for the info go to Anton V. Ignatichev.

Про 8085 там особо отмечено, у него другие команды с этими кодами. Комментарии разбросаны по коду, но вроде так:

#08 DSUB
#10 ASRH
#18 RLDE
#20 RIM
#28 LDEH nn
#2f CMA (устанавливает флаги, в отличии от 8080)
#30 SIM
#38 LDES nn
#CB RST 8 либо RST V (в зависимости от флага)
#D9 SHLX
#DD JNX nnnn
#ED LHLX
#FD JX nnnn

Что именно делают эти команды — можно посмотреть в коде эмулятора, но я вроде встречал в интернете инфу о недокументированных командах 8085.

у 6502 веселее было — дешифратор там был «хардварный» и по видимому оптимизированный только под корректное использование, поэтому по некоторым недокументированным командам он выполнял НЕСКОЛЬКО ДОКУМЕНТИРОВАННЫХ ОДНОВРЕМЕННО

Недокументированные команды i8080 помечены серым.


А ещё есть инструкции, которые Z80 выполняет иначе, чем 8080, отчего небольшой процент программ для 8080 глючит или не работает на Z80. С помощью этих же инструкций можно отличить Z80 от 8080, и, например, обнаружив 8080, сказать, что эта программа поддерживает только Z80. Или же просто подсунуть кусок кода, более оптимальный для обнаруженного процессора.

Самое забавное то, что если на машинку с ВМ80 (Орион 128, Специалист) установить Z80 то первыми глючат именно бэйсики. А глючат из-за команд, которые в Z80 зависят от флага N, которого нет у ВМ80. Самый яркий пример DAA. Но на самом деле там их пяток. Есть обход, но он требует вставлять команду, что достаточно трудно и иногда невозможно.

В девяностых доступность Z80 всех видов, включая Т34ВМ1, возросла резко, он больше не был дороже ВМ80. Ну и с ним весь "Орион" начинал бодро работать от одного напряжения +5 В. Переделывали и РК, но реже.


Зато в АОНах Z80 применялся не очень долго, года четыре, не больше — было много жалоб на перегрев БП. Как перешли на 8051, жалобы исчезли.

Я застал АОН и с ВМ80, и с Z80 и с ВЕ35. Вплоть до «Русь 27». Но реальный прорыв случился, когда появились с ЖК экраном и без БП. Но было слишком поздно, городские телефоны стали выходить из моды.

ВЕ35 — это же 8048? Таких не видел. Только на 8051 и подобных.

А, блин, опечатался. Да ВЕ35 это MCS48, в АОНах были ВЕ31. Там же просто снаружи большое ПЗУ висело, где голос записан.

ВЕ31 — другое дело, встречались в АОНах много раз.

(в исходниках MAME):

* — Undocumented i8080 opcodes added:
* 08h, 10h, 18h, 20h, 28h, 30h, 38h — NOP
* 0CBh — JMP
* 0D9h — RET
* 0DDh, 0EDh, 0FDh — CALL

Я на ZX.PK разибрал транзисторную схему ВМ80 и подтверждаю выше сказанное — дешифратор всё именно так и делает.
Снимаю шляпу перед проделанной вами работой, очень тонкая и кропотливая экзерциция. Что в планах распотрошить/выяснить истину (которая как всегда гдето рядом)?
Я лишь анализировал транзисторную схему. Фотографирование кристалла и восстановление транзисторной схемы не моя заслуга. Это началось обсуждаться тут 6 лет назад. А закончилось через год тут, т.е. 5 лет назад.
И тем не менее, от этого элегантность вашей работы ни уменьшилась ни на йоту. А за реверсом 8080 и ВМ80А я наблюдал с огромным удовольствие.
Это уже правдоподобнее. Для ПК8000 взяли самый старый мелкомягкий Бейсик, который для Альтаира на 8080, и переделали так, чтобы по синтаксису был совместим с Бейсиком для MSX.
Ну не все так печально, наврядли такой history source, был пущен в дело. Мелкомягкие в конце 70-х, начале 80-х прорывались (рубили бабло) за счет васиков которые они портировали на уйму машин. Сырки уже были достаточно причесаны, аппаратно зависимые части выделены в модули, и модификация на целевую платформу была рутинной. ЕМНП то тогда за каждую прошитую в ПЗУ копию васика они получали от производителя $10-$20.
Более того они хотят получать эти деньги и сейчас, к примеру Кэй Ниши освободил (снял требования роялити) стандарт MSX (архитектуру/биос и тд), но microsoft желает и сегодня с каждой новой машины стандарта MSX получить свои 20$ за использование MSX BASIC.
GR8BIT Евгения Брычкова, там в комплекте с железкой сертификаты на лицензии лежат.
Это который с тайловой графикой
нет, простая растровая графика типа спектрумовской, только получше — не одно знакоместо одним цветом, а 1 байт. В 8 раз цветнее :)

Графика в ПК8000 именно тайловая, просто в одном из режимов тайлов предусмотрено так много, что можно использовать его также как графический, обновляя тайлы на ходу. А можно — и как тайловый, не обновляя тайлы, а меняя их местами, со всеми преимуществами такого подхода: быстродействие и др.


То есть, это тот же NES, со следующими отличиями:


  1. Нет спрайтов и аппаратной плавной прокрутки.
  2. Тайлы хранятся в ОЗУ, поэтому переключать их наборы нельзя, зато вносить изменения в имеющиеся — можно.

Типично тайловая игра для ПК8000 — "Питон", есть на YouTube. Сама игра идёт в тайловом режиме, а в заставке в один и тот же тайл непрерывно вносят изменение, заставляя одновременно много точек на экране плавно ползти.

Тайлы хранятся в ОЗУ, поэтому переключать их наборы нельзя, зато вносить изменения в имеющиеся — можно.

PPU у NES не запрещает подключение ОЗУ вместо ПЗУ. Собственно, большая часть игр так и делают, есть семейство мапперов AxROM, там в CHR вместо большого ПЗУ 8КБ ОЗУ.
Не знал, спасибо. Думал, для тайлов можно использовать только отдельное ПЗУ, подключаемое вообще отдельными линиями. У меня был картридж с «Контрой» и ещё тремя играми. Одна линия не работала, каждый восьмой пиксель был битым. Но ничего не глючило, ибо код отдельно, тайлы отдельно.
Всё верно, это VROM/VRAM, они подключаются отдельно к шине PPU и у CPU доступ к ним строго через регистры PPU. У PPU адресное пространство 16КБ: младшие 8КБ это 2 знакогенератора по 4КБ, какой из них выбран для тайлов/спрайтов указывается битом в регистре управления PPU, а старшие 8КБ задействованы не полностью. 4КБ из них это 4 страницы отображаемого экрана (нужно для плавного бесшовного скроллинга) и остальные 4КБ частично доступны CPU (через регистры PPU, можно юзать как память с медленным доступом) — верхние 256 байт не вызывают активность шины так как дешифрируются во внутреннее ОЗУ палитры.
Получается, разработчик игры сам решает, что поместить в картридж для хранения тайлов: ОЗУ или ПЗУ? А если картридж с несколькими играми, то помещают всегда ОЗУ, и на лету загоняют туда тайлы выбранной игры?
Именно. Для многоигровок обычно подбирают игры одного маппера. Либо комбинируют один большой, вроде ММС3, и немного мелких (пираты в том числе и адаптировали под неродной маппер).

Более того, последнее поколение мультиигровок, так называемые «CoolBoy» картриджи, которые реально 160+ в 1, имеют сверхбольшое PRG ROM (до 64Мбайт, FLASH) и CHR VRAM на 256Кбайт. Этого достаточно для покрытия более 80% игр. Маппер построен на CPLD/ASIC и включает в себя пяток-десяток самых распространённых (MMC1, MMC3, AxROM и т.д.). Перед запуском игры программа-лончер заливает всю необходимую графику в CHR VRAM, блокирует запись в неё (сигнал записи PPU проходит через маппер, чтобы можно было эмулировать ПЗУ) и запускает игру прямо из PRG ROM. Для этого есть регистр супербанка. Игры в такое ПЗУ можно складывать наиболее оптимально, а графику даже пожать, но уже на 32МБайтах в этом смысла нет. Даже ClusterM, советуясь со мной, выпускал свою копию такого картриджа: CoolGirl, которая оказалась настолько удачной, что на Эмуленде есть несколько тем, где энтузиасты «прокачивают» мультимаппер на CPLD. Отличие от CoolBoy согласованием с 5в приставками, т.е. оно безопасно при использовании на оригиналах NES/FC или Денди.

Что-то ты путаешь. В кулбоях только MMC3. И запись в CHR RAM не отключается.

Самые последние — они практически клоны твоего. Там реальная плисина стоит.
Вот, например
image

И тут есть игры с VRAM. На счёт отключения записи — может и нету, не трассировал. Люди на Эмуленде уже прям делятся инфой, какой продаван банчит именно с плисинами варианты.

Ну это уже по сути не кулбои, а что-то новое.

Но меню у них кулбоевское. Не твоё. Но как быстрый девкит для Эмуленда разлетается как горячие пирожки.
Раз можно в картридж ОЗУ для тайлов поместить, значит, и для программ тоже? Разумеется, не во всё адресное пространство, а в его часть. Чтобы, например, программировать на Бейсике для «Сюбора» было просторнее. Там так сделано?
Да, это более старый проект, к которому я так же приложил кое-какие части своего тела. :)
image
Вместо CPLD тут FPGA и ОЗУ по обоим фронтам. Всё прогружается контроллером на старте. Маленькая CPLD — это синхронизатор CPU. Обратную сторону картриджа могу сфотать, но там кроме STM32 ничего интересного. Этот картридж грузит одну игру за раз, но позволяет применять абсолютно любой маппер. ОЗУ по PRG и CHR 2МБайт, что покрывает весь сэт, главное — сделать мапперы. Они доступны на ramfactory у со-создателя.

Что касается Сюбора, то в адресном пространстве есть дырка на 8КБайт: 6000H-7FFFH. Эта область используется картриджами с батарейкой и в том числе картриджем с бейсиком для Сюбора. Ничего особенного.
Только саму батарейку предусматривали не всегда.
Что там батарейку. Через меня проходил картридж с Ring of Power на Мегадрайв. С батарейкой, SRAM которая low power, всё норм. Только вот эта игра сохраняется в I2C EEPROM. Естественно она выдавала «Ошибка оборудования» и человек не мог нормально поиграть (без сохранения оно играется несколько дней). Потом я нашел что и как и заменил SRAM на I2C EEPROM и всё заработало как должно. Пути китайцев неисповедимы.
Что там Sega, оказывается, неоригинальные картриджи были для GBA. Видел с игрой Shrek. Картридж как картридж, даже не многоигровка, сразу и не поймёшь, что неоригинальный. А не сохраняет. Вот для SNES, думаю, не было такого, там что ни картридж — нестандартная железка внутри.
Первый бейсик… Вначале в радиотехникуме под msdos 3.30 на ЕС1840 с 512кб памяти… Потом, когда зачем-то пригласили преподавать спустя лет 15 — уже msdos 6.22 и первопни о 16Мб, но всё ещё тот же бейсик… Почему-то QBasic туда не попал, хотя был более продвинутым.
У меня QBASIC не вызывает ностальгии, ибо прошёл мимо.
qbasic и у меня не вызывает, только gw-basic, на котором учился. Просто непонятно, почему спустя 15 лет, уже в этом тысячелетии там был всё ещё gw-basic.

У полновесного Quick Basic, обрезки которого под именем QBASIC MS включили в состав MS-DOS 5 ещё и компилятор был. Честно говоря, из синтаксических особенностей вспоминаются только опциональная нумерация строк и переходы по меткам.

В QBASIC и Quick BASIC двумя главными нововведениями были: встроенный редактор и необязательность нумерации строк. Об остальном многие не подозревали, и этим не пользовались.
Sign up to leave a comment.

Other news