Комментарии 80
Да :)
В моем случае это был Turbo Basic 1.1. Там можно было ассемблерные вставки писать!
Сейчас вот проверил. BEEP и SOUND не работают у него. Делают вид, что выполняются, и молчат. Думаю, скоро починят.
однако, к сожалению, исходный код от него был потерян из-за дерьмовых дискет, которые однажды не прочитались… рабочий вариант программы сохранился благодаря тому, что несколько копий у людей стояли…
Да, я тоже подобное делал (не коммандер, а UI тулкит), только в стиле нортон-утилит, с тенюшками. Даже мышка работала :-)
Жаль, те пятидюймовые дискеты давно утеряны, было бы интересно почитать этот, кхм. код, я бы даже дисковод где-нибудь нашел) хотя за это время наверняка дискеты сдохли бы в любом случае.
О, первый basic, который я увидел на PC на компе с процессором 80286. До этого были БК-0010-01, а потом ZX-Spectrum дома и ДВК в школе.
P.S. Обратите внимание, как мало ОЗУ он видит. Более чем в 10 раз меньше, чем «хватит всем».
Те, кто писал под REAL MODE не удивлены. 64КБ это ровно 1 сегмент, который легко адресовать. А почему меньше — ну дык служебные данные самого Барсика тоже нужно где-то хранить.
В студенческие года, это примерно 1987-88, пара студентов чуть старше меня переделали Basic на отечественной машине СМ-1800 в многотерминальный. СМ скорее промышленный компьютер, этакий шкаф с рост человека, с памятью всего 64k. В институте использовались в учебном классе, к каждому было подключено по 5 терминалов, система получилась вполне пригодна для учебных целей — одновременно пять человек вводили и запускали программы и ничего не тормозило. Разумеется, доработка писалась на ассемблере (как тогда поправляли, правильно 'на языке ассемблера'), я немного был к этому привлечен и быстро выучил почти все мнемоники 580ВМ80
Ещё этот режим называют «плоским» (aka Flat Mode).
Это ограничение для индексных регистров в 16 бит, включая IP. А там разные хаки типа сегментных регистров, чтоб преобразовать в 20 бит адреса.
Это com, емнип, там ещё и ОС память забирает. 100h байт первых, стэка чуть, может ещё что. Хотя стэк, может и в отдельном сегменте, но вроде в com все *P регистры в 0 были
Похоже опубликованный код уже в .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).
Ну вот посмотрев немного исходники, сложилось впечатление, что изначально он был com, а потом перевели в exe. Уж не тот ли это бэйсик под CP/M, который Гейтс по легенде в самолёте дописывал перед "демо" :)
Только GW-BASIC 16-битный изначально. А на 8-битном ПК8000 что-то самодельное, заточенное на совместимость текстов программ с GW-BASIC и MSX-BASIC.
MSX-BASIC же восьмибитный был… Может просто порт самодельный?
Не бєйсик, но кое-что я так портировал )
Компилятор C
Причём дважды пришлось. Сначала чтобы он запустился на i8080, но внезапно оказалось, что генерит он тоже Z80. Сейчас смешно, что не подумал, а тогда чуть свою Микрошу не сломал.
Ещё был КА1843ВГ1, это вообще уникальная вещь, добавляешь к 8086, и получается медленный, но работающий аналог 80286. Было ли что-нибудь похожее, добавляемое к 8080 и делающее его совместимым с Z80? Или было проще поставить переходную плату с Z80 — довольно известный способ модернизации «Ориона»?
Типа, "я не понимаю, что там дальше написано, но всё равно выполню"?
А с кодами которые не понимает 8080 обычно обрабатывались как операция NOP, и брался следующих за ним код. Но иногда (в некоторых случаях) портились/менялись флаги/регистры. И тогда эта инструкция становилась недокументированной но описанной.
Источник
* — 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. Или же просто подсунуть кусок кода, более оптимальный для обнаруженного процессора.
В девяностых доступность Z80 всех видов, включая Т34ВМ1, возросла резко, он больше не был дороже ВМ80. Ну и с ним весь "Орион" начинал бодро работать от одного напряжения +5 В. Переделывали и РК, но реже.
Зато в АОНах Z80 применялся не очень долго, года четыре, не больше — было много жалоб на перегрев БП. Как перешли на 8051, жалобы исчезли.
Вот тут Совместимость Z80 и i8080 (580ВМ80) это очень подробно обсуждалось, как и почему.
(в исходниках MAME):
* — Undocumented i8080 opcodes added:
* 08h, 10h, 18h, 20h, 28h, 30h, 38h — NOP
* 0CBh — JMP
* 0D9h — RET
* 0DDh, 0EDh, 0FDh — CALL
Я на ZX.PK разибрал транзисторную схему ВМ80 и подтверждаю выше сказанное — дешифратор всё именно так и делает.
Более того они хотят получать эти деньги и сейчас, к примеру Кэй Ниши освободил (снял требования роялити) стандарт MSX (архитектуру/биос и тд), но microsoft желает и сегодня с каждой новой машины стандарта MSX получить свои 20$ за использование MSX BASIC.
нет, простая растровая графика типа спектрумовской, только получше — не одно знакоместо одним цветом, а 1 байт. В 8 раз цветнее :)
Графика в ПК8000 именно тайловая, просто в одном из режимов тайлов предусмотрено так много, что можно использовать его также как графический, обновляя тайлы на ходу. А можно — и как тайловый, не обновляя тайлы, а меняя их местами, со всеми преимуществами такого подхода: быстродействие и др.
То есть, это тот же NES, со следующими отличиями:
- Нет спрайтов и аппаратной плавной прокрутки.
- Тайлы хранятся в ОЗУ, поэтому переключать их наборы нельзя, зато вносить изменения в имеющиеся — можно.
Типично тайловая игра для ПК8000 — "Питон", есть на YouTube. Сама игра идёт в тайловом режиме, а в заставке в один и тот же тайл непрерывно вносят изменение, заставляя одновременно много точек на экране плавно ползти.
Тайлы хранятся в ОЗУ, поэтому переключать их наборы нельзя, зато вносить изменения в имеющиеся — можно.
PPU у NES не запрещает подключение ОЗУ вместо ПЗУ. Собственно, большая часть игр так и делают, есть семейство мапперов AxROM, там в CHR вместо большого ПЗУ 8КБ ОЗУ.
Более того, последнее поколение мультиигровок, так называемые «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 не отключается.
Вместо CPLD тут FPGA и ОЗУ по обоим фронтам. Всё прогружается контроллером на старте. Маленькая CPLD — это синхронизатор CPU. Обратную сторону картриджа могу сфотать, но там кроме STM32 ничего интересного. Этот картридж грузит одну игру за раз, но позволяет применять абсолютно любой маппер. ОЗУ по PRG и CHR 2МБайт, что покрывает весь сэт, главное — сделать мапперы. Они доступны на ramfactory у со-создателя.
Что касается Сюбора, то в адресном пространстве есть дырка на 8КБайт: 6000H-7FFFH. Эта область используется картриджами с батарейкой и в том числе картриджем с бейсиком для Сюбора. Ничего особенного.
У полновесного Quick Basic, обрезки которого под именем QBASIC MS включили в состав MS-DOS 5 ещё и компилятор был. Честно говоря, из синтаксических особенностей вспоминаются только опциональная нумерация строк и переходы по меткам.
GW-BASIC под лицензией MIT форкнут и доработан до компилируемого состояния, но работает пока не всё