Вход

Просмотр полной версии : Программирование Турбо 2+ в режиме 320x200x16



norduk
06.09.2019, 22:08
Может быть есть какие-то куски примеров кода как инициализировать графический режим АТМки 320x200x16, как установить палитру, как нарисовать точку или что-то вроде того (или исходники какие-нибудь)? И ещё софт (редактор, компилятор) если порекомендуете, был бы рад. Хоть TASiS, хоть TR-DOS, вообще не важно.

Вообще непонятно с чего начать. Курить книжку по АТМке пытался, там ни черта непонятно. Дизассемблировать прошу не отправлять)

Максагор
07.09.2019, 00:26
Может быть есть какие-то куски примеров кода как инициализировать графический режим АТМки 320x200x16, как установить палитру, как нарисовать точку или что-то вроде того (или исходники какие-нибудь)?

Ну, давай начнем просто с включения режима 320х200 (остальное как-нибудь в следующий раз):


;включение графического режима 320х200 в ATM-turbo 2+ из обычной конфигурации TR-DOS:

LD A,%10101000 ;биты 4-7 обязательны именно в таком
;виде, бит 3=1 – турбо включено
;биты 0-2 код экрана - %000 – режим 320x200
;соответственно %10100000 тоже самое, но с
;выключенной турбой, а %10101011 – ZX-экран
LD BC,retadr ;адрес возврата из TR-DOS
PUSH BC ;на стек
LD BC, #2A53 ;адрес подпрограммы в TR-DOS с командой OUT (C),A:RET
PUSH BC ;на стек
LD BC, #FF77 ;скрытый системный порт ATM
JP # 3D2F ;переходим в TR-DOS для доступа к скрытому порту
retadr … ;здесь продолжается программа пользователя


;включение графического режима 320х200 в ATM-turbo 2+ из ОС TASiS:

XOR A ;задание режима системному вызову на получение
INC A ; в HL’ адрес спецблока системных переменных OS TASiS
LD C,#79 ;задаем номер системного вызова(рестарта) $PAL
RST #10 ;получаем их адрес
EXX
PUSH HL
POP IX ;перекидываем адрес блока в индексный регистр
LD A, %10101011 ;задаем экран 320х200 (значение байта точно как и выше)
LD (IX+55),A ;ставим номер экрана в «экранную» переменную
XOR A ;режим «восстановления» для следующего рестарта
LD BC,#007B ;рестарт #7B $set_pg (в регистре B один из режимов работы)
RST #10 ;меняем экран
… ;продолжение программы пользователя

P.S. В этом примере изменится экран только в программе пользователя, а при выходе из нее в систему
восстановится «системный» экран (сейчас по умолчанию текстовый). Чтобы поменять системный экран,
используйте (IX+54).

norduk
07.09.2019, 10:58
Ну, давай начнем просто с включения режима 320х200
Так. Решил попробовать. Скачал SJAsm с редактором вот отсюда (https://vtrd.in/pcutilz/SJ_ED.zip), взял где-то в ютубе пример простейшей программки



device atmturbo512
org 30000

TVFL equ 5C3Ch

start:
xor a
ld(TVFL),a
ld a,'*'
rst 16
ret

rep:
jp rep
end

savesna "test.sna",start

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

(device atmturbo512 - это, как я понимаю, указание компилятору под какую адресацию генерировать .sna)

И вот с чем столкнулся. Если я указываю device zxspectrum48, то генерируемый .sna в эмуляторе, который прилагается в данном пакете запускается, а если выбираю нужный мне atmturbo512, то результат не работает (как, кстати и при указании zxspectrum128).

Я понимаю, что в АТМке (как и в 128 машине) адресация более сложная и, тем не менее, непонятно, почему простейшая программа не запускается в данном пакете.

Что я делаю не так?

И есть ли какой-нибудь настроенный пакет для кросс-разработки именно под АТМ? А-то, судя по всему, эмулятор Speccy, который запускает SJAsm из данного пакета режимы АТМки не понимает.

norduk
07.09.2019, 20:16
Ну и, вообще, было бы круто сделать сборку пакета для кросс-разработки и разместить на сайте. UnrealSpeccy умеет из командной строки цеплять бинарник и запускать сразу? Ищу, пока не вижу такой возможности...

NEO SPECTRUMAN
08.09.2019, 01:27
Что я делаю не так?
1. зачем то юзаешь процедуры ПЗУ-шки
когда нормальные люди так обычно не делают

2. sna врятли поддерживает 512к АТМ-ки
да и вообще есть ли хоть какой то формат снапшотов поддерживающих больше 128?

3. ну и скорей всего проблема в не инициализированных системных переменных
(по моему в sjasm-е есть такоя)
и выходит она из пункта 1

4. после того ret-a произойдет возврат в бейсик или в некуда
до jp rep проц не дойдет



лучше для начала
попикай бипером
а потом лезь в экран

- - - Добавлено - - -

у себя нормально скомпилировал и запустил

device zxspectrum128
org 30000

TVFL equ 5C3Ch

start:
xor a
ld (TVFL),a
ld a,'*'
rst 16
ret

rep:
jp rep
; end

savesna "test.sna",start

- - - Добавлено - - -

сейчас я в основном пользуюсь z00m-овской веткой сджасма
https://github.com/z00m128/sjasmplus/releases
правда на нее усердно ругается антивирусник

- - - Добавлено - - -


UnrealSpeccy умеет из командной строки цеплять бинарник и запускать сразу?
бинарник не знаю
а sna вполне запускает

например тем же батником что и компилить сорец

sjasmplus test.asm
"Q:\SomeFolders\us\unreal.exe" test.sna

norduk
08.09.2019, 10:04
Результат пока такой: https://www.screencast.com/t/yFvZikJua
Анрил настроен как Турбо 2+. Какие системные переменные и как нужно инициализировать для того, чтобы эта же программа заработала на Турбе?

- - - Добавлено - - -


лучше для начала
попикай бипером
а потом лезь в экран
Задача инициализировать экран АТМ и в нём порисовать. Бипер не требуется.

norduk
08.09.2019, 16:35
Так.
1) SJAsm умеет генерить бинарник и класть в сразу в .trd, что значительно облегчило запуск программы в UnrealSpeccy
2) Включение режима АТМ 320x200 в эмуляторе отработало, появились характерные цветные полоски (https://www.screencast.com/t/wKkQNpZO).


device atmturbo512
org 25000

start:
LD A,%10101000
LD BC, #2A53
PUSH BC
LD BC, #FF77
JP #3D2F

rep:
jp rep
end

emptytrd "test.trd"
savetrd "test.trd","1.C",25000,$1000;

Открытые вопросы:
1) Как очистить экран? Из каких кусков (страниц), вообще, состоит данный режим АТМ? И где они лежат и как к ним обращаться? (Максагор?)
2) Как автоматом создать .trd и закинуть туда бинарник я уже придумал, остаётся найти решение с каким-нибудь универсальным бутом, который появлялся бы внутри свежесозданного .trd и запускал программку, которую туда положил компилятор.

goodboy
08.09.2019, 16:54
Как автоматом создать .trd и закинуть туда бинарник я уже придумал
бинарник можно загрузить и через отладчик (находясь в нём alt+r)

norduk
08.09.2019, 17:32
бинарник можно загрузить и через отладчик (находясь в нём alt+r)
Ага, вижу, спасибо.
Только смысл в том, чтобы править в редакторе, жать на компайл, ран и получать запущенный эмулятор с программой. В крайнем случае, запускать батник Unreal Speccy руками. Чего я практически добился. Только непонятно в каком формате у UnrealSpeccy в сборке с сайта Максагора (http://atmturbo.nedopc.com/emulator/unreal/us0381.zip) лежит boot6.$b. Это бут, который эмулятор автоматом подкладывает в .trd, если там бута нет. Вместо него хочу запихать свой басик-файл для запуска поделки, которая прилетает из SJAsm'а.

- - - Добавлено - - -

Кажется он в формате hobeta.

goodboy
08.09.2019, 18:40
как вариант
" unreal.exe prog.$B prog.$C <- будут помещены на один диск"
и в настройках можно выбрать имя для программы которая будет boot`ом
"BOOT=name.$b"

NEO SPECTRUMAN
08.09.2019, 19:34
2) Как автоматом создать .trd и закинуть туда бинарник я уже придумал, остаётся найти решение с каким-нибудь универсальным бутом, который появлялся бы внутри свежесозданного .trd и запускал программку, которую туда положил компилятор.
sjasm может добавлять в готовый трд
ничего не мешает в компилирующий батник добавить
1. удаления старого трд
2. копирование на его место трд с бутлодером который может лежать неподалеку с другим именем
3. начать компилировать в этот трд

norduk
09.09.2019, 14:27
давай начнем просто с включения режима 320х200
Это получилось. Как теперь его очистить? Как и к каким, вообще, обращаться страницам, которые содержат данный об изображении?

goodboy
09.09.2019, 14:40
к каким, вообще, обращаться страницам, которые содержат данный об изображении?
все? ответы есть в книжке на сайте у Макса
http://atmturbo.nedopc.com/inf/books/turbo2/turbo2.zip
тут вроде качество получше
http://atmturbo.nedopc.com/inf/books/nedopc/atm_hard.zip

norduk
09.09.2019, 15:11
все? ответы есть в книжке на сайте у Макса
Тогда уж скорее http://atmturbo.nedopc.com/inf/books/nedopc/atm_hard.zip
Только без практических примеров это всё мне непонятно. Понятно только то, что адресация мудрёная.

Например, читаю в разделе 5.4.EGA-режим 320х200(x16): Страницы #05 и #01 ОЗУ при D3=0 порта #7FFD или страница #07 и #03 ОЗУ при D3=1 порта #7FFD. Пропорции пикселей 1:1. Размер экрана 32000 байт (разделен на 4 независимые группы).

Я как бы понимаю, что нужно к этим страницам как-то обратиться, но далее этого моя соображалка не работает. И потом, почему D3 может быть 0, а может быть и 1 - тоже не ясно. В этом же документе читаю про адресацию в АТМ и вообще перестаю что-либо понимать))

Я для того и создал тему, чтобы если кому-то не будет очень лень, показали практические примеры. Это не отменяет чтения данной литературы.

goodboy
09.09.2019, 15:25
Я как бы понимаю, что нужно к этим страницам как-то обратиться, но далее этого моя соображалка не работает.
не знаешь как z80 пишет в порт ?

NEO SPECTRUMAN
09.09.2019, 20:57
И потом, почему D3 может быть 0, а может быть и 1 - тоже не ясно.
а потому что если строить изображение прямо в одном экране
сначала рисовать фон потом рисовать поверх спрайты итд
все на экране будет жестко мигать тк видео контролер будет все время читать и пулять на экран еще не готовое изображение

для этого и запилена двойная буферизация
есть 2 экрана
в один мы рисуем
другой щас отображается видео контроллером

а 3-м битом порта 7FFD
мы вибираем от куда видео контроллер будет читать данные

так 2 экрана переключаются еще со времен спектрум 128...

norduk
10.09.2019, 13:23
не знаешь как z80 пишет в порт ?
Вероятно,

LD A, %00001000
OUT (#7FFD), A

так?! :)

- - - Добавлено - - -


так 2 экрана переключаются еще со времен спектрум 128...
Уже яснее.

Правильно ли я понимаю, что раз страниц аж 4, то каждая размером 16000 байт? (Раз весь экран это 32000, а у нас двойная буферизация)

- - - Добавлено - - -

https://www.screencast.com/t/983Sa2akeES
Правильно ли я понимаю, что активные страницы располагаются по адресам #0000 и #2000?

NEO SPECTRUMAN
10.09.2019, 13:43
LD A, %00001000
OUT (#7FFD), A

так?!

скорей так
ld bc,$7FFD
out (c),a

Sayman
10.09.2019, 16:22
А чем плох вариант Evo SDK? Для людей плохо знающих работу АТМ самое оно. Или SDK обычные Турбо 2+ не поддерживает?

norduk
10.09.2019, 17:34
А чем плох вариант Evo SDK? Для людей плохо знающих работу АТМ самое оно. Или SDK обычные Турбо 2+ не поддерживает?
На самом деле почти в точку. Я на него наткнулся буквально пару дней назад, но сюда не стал писать, так как есть ещё мечты разобраться на низком уровне.

А поддерживать - поддерживает. По-крайней мере примеры из SDK, которые я скомпилил и перенёс на АТМ3 (не путать с Evo), отлично работают.

- - - Добавлено - - -

Ну разве что скорость ниже, но в целом вполне приемлемо.

Sayman
10.09.2019, 20:25
norduk, тогда ты уже можешь заглянуть в исходники этого СДК и увидеть, как там с экраном и палитрой и с памятью работают. там всё наглядно.
Если в кратце - экран у АТМ, который 320на200, устроен аналогично экрану Профи - т.е. побит на чётные и не чётные столбцы. Когда включаешь в 3е окно, на адрес с000, то, если я не ошибаюсь, первым будет столбец с адреса е000, потом с000, потом е001, потом с001. через 6й бит адреса, если не ошибаюсь. На счёт третей экрана по подобию 128го экрана. не знаю....
Всего экрана 2. один теневой, другой который ты видишь на текущий момент. У каждого экрана есть 2 страницы.

Но лучше загляни в сорец. там всё есть.

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

P.S. [шопотом] ПССССТЬ, эй, парень, бросай эту атм и пошли кодить на Спринтере;) тока тссс, никому, а то набегут щас тут...)))

norduk
10.09.2019, 23:05
P.S. [шопотом] ПССССТЬ, эй, парень, бросай эту атм и пошли кодить на Спринтере тока тссс, никому, а то набегут щас тут...)))
АТМ это травма детства)

Максагор
11.09.2019, 13:57
На самом деле почти в точку. Я на него наткнулся буквально пару дней назад, но сюда не стал писать, так как есть ещё мечты разобраться на низком уровне.

А поддерживать - поддерживает. По-крайней мере примеры из SDK, которые я скомпилил и перенёс на АТМ3 (не путать с Evo), отлично работают.


А я только хотел после нескольких дней отсутствия на форуме привести в пример EVO-SDK (тем более, что там через условную компиляцию можно компилировать как под АТМ, так и под EVO), но ты сам нашел. ))


Это получилось. Как теперь его очистить? Как и к каким, вообще, обращаться страницам, которые содержат данный об изображении?

Вроде бы тебе ответили, и доки ты нашел. Разобрался?
А так - нулевой экран - это страницы 5 и 1, а первый - страницы 7 и 3.

В моем спектрумистском детстве на ПК Байт-48 я постиг структуру экрана спектрума заполняя 6912 байт области начиная с адреса 16384 в цикле каким либо числом, или случайным числом по RND в цикле FOR...NEXT бейсика. Попробуй очистить экран (заполни 7 и 3 нулями - 5 и 1 не стоит, ибо из бейсика это не получится - сотрешь его системные переменные), а затем заполняй это пространство циклом. Занятное зрелище... )))

- - - Добавлено - - -


P.S. [шопотом] ПССССТЬ, эй, парень, бросай эту атм и пошли кодить на Спринтере тока тссс, никому, а то набегут щас тут...)))

Набигать не будем... :)
Просто выскажем недоумение - зачем искусственно создавать противопоставление "или....или". Почему для того, чтобы что-то написать под Спринтер, надо обязательно "идти и бросить АТМ"? Разве одно мешает другому? Вот отсюда все срачи. ))

Sayman
11.09.2019, 14:24
ачем искусственно создавать противопоставление "или....или"
топик стартер явно не силён в железе атм, в доках особо не может разобраться (но если честно, там действительно весьма мудрёно написано). вот я и предложил бросать тут и поднять там))) чё сразу под срач всё зачёсывать? никакого срача. атм - детская мечта автора первопоста. услышал, замолчал.

norduk
11.09.2019, 20:36
А я только хотел после нескольких дней отсутствия на форуме привести в пример EVO-SDK
Да, это самый крутой вариант. И написать что-то простое можно, и поглазеть как оно ассемблируется потом, и подебажить. Да и сами исходники много информации дают.

Разобрался?
А так - нулевой экран - это страницы 5 и 1, а первый - страницы 7 и 3.
С EVO-SDK, вероятно, разберусь. Если не разберусь - продолжу задавать тупые вопросы предметно) С примерами кода из SDK.

В моем спектрумистском детстве на ПК Байт-48 я постиг структуру экрана спектрума заполняя 6912 байт области начиная с адреса 16384 в цикле каким либо числом, или случайным числом по RND в цикле FOR...NEXT бейсика.
Со спектрумовским экраном более-менее понятно. Это науку я тоже уже постиг)

- - - Добавлено - - -


атм - детская мечта автора первопоста.
Не мечта, а травма) Которая оставила неизгладимый отпечаток в мозгах тогда ещё, в 94)

msd888
15.09.2019, 16:39
Режим 640х200 попроще будет в освоении, рекомендую начать с него.