NewsProductsSprinterSupportDownloadSprinter ForumAbout usLinksSite map Russian site

Russian
   >> Программирование для компьютера Sprinter
Thread views: 232 View all threadsNext thread*Threaded Mode

Pages in this thread: 1 | 2 | 3 | 4 | (show all)
cr0acker
(member)
2003/05/27 15:25
Графика Reply to this post

Это покажите как работать с сабжем, а то после прочтения немалого обьема документациия я понял следущее.
1)ВидеОЗУ является теневым.
2)Цвет #FF является прозрачным.



uzWer
(stranger )
2003/05/27 16:24
Re: Графика new [re: cr0acker]Reply to this post

аналогично.... НУЖНА библиотека.



MacBuster
(Registered Developer)
2003/05/27 16:56
Re: Графика new [re: uzWer]Reply to this post

> НУЖНА библиотека.

Ага. Ещё художник в берете с мольбертом, палитрой и кисточкой что-бы медленнее работало.



uzWer
(stranger )
2003/05/27 17:06
Re: Графика new [re: MacBuster]Reply to this post

>> Ага. Ещё художник в берете с мольбертом, палитрой и кисточкой что-бы медленнее работало.

1.c функцией вывода точки
2. произвольной линии
3. произвольного прямоугольника

и это для начала будет imho достаточно.



MacBuster
(Registered Developer)
2003/05/27 17:44
Re: Графика new [re: uzWer]Reply to this post

Вывод точки и прямоугольника есть в форуме. Произвольная прямая легко модифицируется из любого исходника на ассемблере Z80 для любой платформы заменой подпрограммы вывода точки.



cr0acker
(member)
2003/05/27 20:18
Re: Графика new [re: MacBuster]Reply to this post

Нафиг библиотека! Вы обьясните как блин там всё рабтает! Как память организована, как синхронизировать! Какой байт пямяти отвечает за какую точку! Как к видеозу образатся если ВидеоОЗУ больше адресного простраснва?



Denis ParinovVIP
(Sprinter Team)
2003/05/27 21:03
Re: Графика new [re: cr0acker]Reply to this post

Там все просто. :)


;
LD A,#50
OUT (#E2),A ;открыли видео ОЗУ в третьем окне #C000
;
LD A,y-coord ;0 - 255
OUT (#89),A ;выбрали Y-координату
;
LD HL,x_coord ;0 - 319 (320x256) или 639 (640x256)
LD A,color ;0 - 255
;
LD (HL),A ;поставили точку.
;





cr0acker
(member)
2003/05/27 21:50
Re: Графика new [re: Denis Parinov]Reply to this post

А как устроино ВидеОЗУ? Те как хранятся там Цвета и поллитра :)



cr0acker
(member)
2003/05/27 21:51
Re: Графика new [re: cr0acker]Reply to this post

И можно ли видео ОЗУ открыть под адересу #4000



Shaos
(Registered Developer)
2003/05/27 22:19
Re: Графика new [re: cr0acker]Reply to this post

> А как устроино ВидеОЗУ? Те как хранятся там Цвета и поллитра :)

Открываешь исходники SPRINT-а и внимательно изучаешь :)


Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(member)
2003/05/27 22:40
Re: Графика new [re: Shaos]Reply to this post

>Открываешь исходники SPRINT-а и внимательно изучаешь :)
А вы батенька Недописишник:)



Shaos
(Registered Developer)
2003/05/27 22:41
Re: Графика new [re: cr0acker]Reply to this post

> И можно ли видео ОЗУ открыть под адересу #4000

Если я правильно понимаю политику партии, то открыть можно в любом из четырех окон

Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

Shaos
(Registered Developer)
2003/05/27 22:45
Re: Графика new [re: cr0acker]Reply to this post

>>Открываешь исходники SPRINT-а и внимательно изучаешь :)
>А вы батенька Недописишник:)

В свое время, чтобы раскусить формат текстовой видеопамяти, мне пришлось дизассемблировать форт для спринтера :)
Дизассемблировал я его естественно с помощью SPRINT-а!



Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(member)
2003/05/27 22:47
Re: Графика new [re: Shaos]Reply to this post

Я же не буду спрайты по точкам выводить:) Хочу с помошью акселератора спрвайтами кидаться:)



cr0acker
(member)
2003/05/27 23:08
Re: Графика new [re: cr0acker]Reply to this post

Чё то я ещё не понимаю. Вот в режиме 320*256 одна точка занимает оддин байт. Если умножить 320*256=81920 байт, те 81Кб, отсюда вопрос как 81Кб запихался в 16Кбйтовове окно:)



Shaos
(Registered Developer)
2003/05/27 23:13
Re: Графика new [re: cr0acker]Reply to this post

> вопрос как 81Кб запихался в 16Кбйтовове окно:)

а никак - одна строка только в окно запихивается
и переключается по порту 89h (см. BACK_SP.A)

Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(member)
2003/05/28 00:19
Re: Графика new [re: Shaos]Reply to this post

Вот блин нету документацаи:( Вот как фигово:(



Shaos
(Registered Developer)
2003/05/28 01:31
Re: Графика new [re: cr0acker]Reply to this post

> Вот блин нету документацаи:( Вот как фигово:(

Есть она - внимательнее читать надо ;)

Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(member)
2003/05/28 01:43
Re: Графика new [re: Shaos]Reply to this post

>Есть она - внимательнее читать надо ;)
Хде? Ткни мне ей?



Shaos
(Registered Developer)
2003/05/28 08:06
Re: Графика new [re: cr0acker]Reply to this post

> Ткни мне ей?

http://petersplus.ru/sprinter/arhitecture.htm

и вот еще цитата из форума:


Функции для работы с экраном:


Сейчас DOS поддерживает четыре режима экрана.
Два текстовых:
40x32 символов c 16 цветами (режим 02h);
80x32 символов c 16 цветами (режим 03h);
и два графических:
320x256 точек с 256 цветами (режим 81h);
640x256 точек с 16 цветами (режим 82h);
Основным режимом является текстовый режим 80x32 (03h), если вашапрограмма
работает в другом режиме, то вам следует перед переключением
режимаполучить
номер текущего режима функцией 51h GETVMOD и сохранить его, а
передзавершением
программы восстановить его.

Например:

LD C,51h ;получить режим экрана
RST 10h
LD C,A ;поместить номер режима экрана в регистр C
PUSH BC ;и сохранить на стеке (B - страница, C - режим)
.
. ;ваша программа
.

POP BC ;взять со стека режим экрана
LD A,C ;поместить номер режима экрана в регистр A
LD C,50h ;установить режим экрана
RST 10h
LD C,41h ;завершить программу.
RST 10h

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

LD HL,STRING ;указатель на строку символов
LD C,5Ch ;вывод строки символов
RST 10h

STRING DB "Thank you for using my program..." ;текстовая строка
DB 13,10 ;символы возврата каретки и перевода строки
DB 0 ;символ конца строки

Для вывода на графический экран, вам необходимо подключить видео память
водно
из трех окон памяти 04000h-07FFFh, 08000h-0BFFFh, 0C000h-0FFFFh.
Этоосуществля-
ется выводом значения 50h в соответствующий порт 0A2h, 0C2h или 0E2h в
зависимости от окна памяти. При подключении обратите внимание на то,
чтобыстек
вашей программы не попадал в это адресное пространство.

Например, если вам нужно поставить точку на экране, то подпрограмма
длярежима
81h будет выглядеть так:

; HL - горизонтальная координата
; DE - вертикальная координата

IN A,(0E2h) ;считать из порта номер страницы подключенной в
;третье окно памяти
LD C,A ;запомнить в регистре C
LD A,50h ;страница видео памяти
OUT (0E2h),A ;подключение видео памяти
LD A,E ;поместить вертикальную координату в регистр A.
OUT (89h),A ;выдать в порт
LD DE,0C000h ;адрес начала третьего окна памяти
ADD HL,DE ;получить адрес точки (адрес начала окна +
;горизонтальная координата)
LD A,255 ;цвет выводимой точки (от 0 до 255)
LD (HL),A ;вывод точки на экран
LD A,C ;вспомнить номер страницы памяти
OUT (0E2h) ;подключить страницу памяти вместо страницы видео
;памяти

Перед выводом точек следует установить необходимые цвета в
палитре.Различные
режимы вывода на экран задаются номером видео страницы от 50h до
5Fh.Подробнее
о режимах вывода вы можете прочитать в описании архитектуры компьютера.

50h (80) SETVMOD (Выбор режима экрана)

входные данные:

A - режим экрана
02h - текстовый 40x32x16 цветов
03h - текстовый 80x32x16 цветов
81h - графический 320x256x256 цветов
82h - графический 640x256x16 цветов
B - страница экрана 0/1
C - 50h

выходные данные:

A - код ошибки, если CF=1

Функция устанавливает режим экрана. Седьмой бит режима экрана установлен
для графических режимов и сброшен для текстовых. Существуют два
текстовыхрежима
и два графических.


51h (81) GETVMOD (Получить текущий режим экрана)

входные данные:

C - 51h

выходные данные:

A - текущий режим экрана
B - страница экрана 0/1

Функция возвращает текущий режим экрана и номер страницы экрана.




Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(member)
2003/05/28 10:33
Re: Графика new [re: Shaos]Reply to this post

Вот сейчас MacBuster^xtm сказал, что мол 256 строк подрубается только оддна строка за раз по Y_Port, и с ней уже ведётся работа! Вот и всё что я хотел услышать:)



Anonymous
(Unregistered)
2003/05/28 16:51
Re: Графика new [re: cr0acker]Reply to this post

спрайты то рулез.... но и произвольные линии не меньший рулез... вот идея есть .CHR(borland BGI) шрифты на Спринтер перевести. Они векторные, масштабируемые и главное МАЛЕНЬКИЕ (4-20 кб). так для их реализации акселератора недостаточно.

идея как?



Shaos
(Registered Developer)
2003/05/28 18:04
Re: Графика new [re: cr0acker]Reply to this post

> Вот сейчас MacBuster^xtm сказал, что мол 256 строк подрубается только оддна строка за раз по Y_Port,
> и с ней уже ведётся работа! Вот и всё что я хотел услышать:)

Ну дык я то же самое и сказал :)

> одна строка только в окно запихивается
> и переключается по порту 89h (см. BACK_SP.A)



Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

Shaos
(Registered Developer)
2003/05/28 18:05
Re: Графика new [re: Anonymous]Reply to this post

> вот идея есть .CHR(borland BGI) шрифты на Спринтер перевести
> идея как?

супергут!


Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(member)
2003/05/28 19:18
Re: Графика new [re: Shaos]Reply to this post

Ладно верю!



Ivan_MakVIP
(Sprinter Team)
2003/05/28 22:23
Re: Графика new [re: cr0acker]Reply to this post

Вот примеры программ для акселератора и графики
(исходники для свободного использования)



;**************************
; Use Sprinter Accelerator
; for Line & Restangles.
; (c) Peters Plus Ltd.
;**************************
;
; Interrupt - enable
; Stack, Program & Data - in (8000h..BFFFh)
; Video-RAM - in (C000h..FFFFh)
; Video-Data - (0000h..BFFFh)
;
;*******************************************
; This codes is not a library
; It is illustration of Accelerator use only!
; Errors may exists
;*******************************************

Screen_offset EQU 0C000h ; or 0C140h for second graphic screen

Video_Data EQU *** ; 0000h..BFFFh
Color_for_fill EQU *** ; 0..255

Horizontal_offset EQU *** ; 0...319
Vertical_offset EQU *** ; 0...255
Horizontal_size EQU *** ; 1...256
Vertical_size EQU *** ; 1...256

;**************************

Open_video_page:
IN A,(PORT_Y)
LD (SAVE_PY),A ; save port_y
IN A,(PAGE3)
LD (SAVE_PG3),A ; save page3
LD A,50h ; Use 50h for normal mode
; 54h for "no copy in main shadow RAM" mode
; 58h for "FF is transparent" mode
; 5Ch for "no copy in main shadow RAM" and
; "FF is transparent" mode
OUT (PAGE3),A
RET

SAVE_PG3: DB 0FFh
SAVE_PY: DB 0C0h

;**************************

Close_video_page:
LD A,(SAVE_PG3)
OUT (PAGE3),A
LD A,(SAVE_PY)
OUT (PORT_Y),A
RET

;**************************

Horizontal_Line_copy:
LD HL,Video_Data
LD DE,Screen_Offset+Horizontal_Offset
LD A,Vertical_Offset
OUT (PORT_Y),A ; Set vertical offset
DI
LD D,D ; Start Accelerator to
; "Set Accelerator Length" mode
LD A,Horizontal_size ; Use direct data or (HL),(BC),(DE) only!
; !!! not ld A,C !!!
LD B,B ; Stop Accelerator
LD L,L ; Start Accelerator to
; "Copy Line" mode
LD A,(HL) ; Get data line
LD (DE),A ; Put data line
LD B,B ; Stop Accelerator
EI
RET

;**************************

Vertical_Line_copy:
LD HL,Video_Data
LD DE,Screen_Offset+Horizontal_Offset
LD A,Vertical_Offset
OUT (PORT_Y),A ; Set vertical offset
DI
LD D,D ; Start Accelerator to
; "Set Accelerator Length" mode
LD A,Vertical_size ; Use direct data or (HL),(BC),(DE) only!
; !!! not ld A,C !!!
LD B,B ; Stop Accelerator
LD A,A ; Start Accelerator to
; "Copy Vertical Line" mode
LD A,(HL) ; Get data line
LD (DE),A ; Put data line
LD B,B ; Stop Accelerator
EI
RET

;**************************

Horizontal_Line_Fill:
LD DE,Screen_Offset+Horizontal_Offset
LD A,Vertical_Offset
OUT (PORT_Y),A ; Set vertical offset
DI
LD D,D ; Start Accelerator to
; "Set Accelerator Length" mode
LD A,Horizontal_size ; Use direct data or (HL),(BC),(DE) only!
; !!! not ld A,C !!!
LD B,B ; Stop Accelerator
LD A,Color_for_fill
LD C,C ; Start Accelerator to
; "Fill Line" mode
LD (DE),A ; Put line of color
LD B,B ; Stop Accelerator
EI
RET

;**************************

Vertical_Line_Fill:
LD DE,Screen_Offset+Horizontal_Offset
LD A,Vertical_Offset
OUT (PORT_Y),A ; Set vertical offset
DI
LD D,D ; Start Accelerator to
; "Set Accelerator Length" mode
LD A,Vertical_size ; Use direct data or (HL),(BC),(DE) only!
; !!! not ld A,C !!!
LD B,B ; Stop Accelerator
LD A,Color_for_fill
LD E,E ; Start Accelerator to
; "Fill Vertical Line" mode
LD (DE),A ; Put line of color
LD B,B ; Stop Accelerator
EI
RET

;**************************

Draw_Restangle_Data:
LD HL,Video_Data
LD DE,Screen_Offset+Horizontal_Offset
LD A,Vertical_Offset
OUT (PORT_Y),A ; Set vertical offset
LD B,Vertical_size ; 0 is 256
LD C,Horizontal_Size ; 0 is 256

DI
LD D,D ; Start Accelerator to
; "Set Accelerator Length" mode
LD A,Horizontal_Size ; Use direct data or (HL),(BC),(DE) only!
; !!! not ld A,C !!!
LD B,B ; Stop Accelerator
EI

drd_loop:
DI
LD L,L ; Start Accelerator to
; "Copy Line" mode
LD A,(HL) ; Get data line
LD (DE),A ; Put data line
LD B,B ; Stop Accelerator
EI

LD A,C ; Next line data
AND A
JR Z,drd_inc
ADD A,L
LD L,A
JR NC,drd_no_inc
drd_inc:
INC H
drd_no_inc:

IN A,(PORT_Y) ; Next line
INC A
OUT (PORT_Y),A

DJNZ drd_loop ; Sycle

RET

;**************************

Draw_Restangle_Fill:
LD HL,Screen_Offset+Horizontal_Offset
LD A,Vertical_Offset
OUT (PORT_Y),A ; Set vertical offset
LD B,Vertical_size ; 0 is 256

DI
LD D,D ; Start Accelerator to
; "Set Accelerator Length" mode
LD A,Horizontal_Size ; Use direct data or (HL),(BC),(DE) only!
; !!! not ld A,C !!!
LD B,B ; Stop Accelerator
EI

LD C,Color_for_fill

IN A,(PORT_Y)
drf_loop:
DI
LD L,L ; Start Accelerator to
; "Line Line" mode
LD (HL),C ; Put data line
LD B,B ; Stop Accelerator
EI
INC A
OUT (PORT_Y),A
DJNZ drf_loop ; cycle

RET

;**************************




Shaos
(Registered Developer)
2003/05/29 07:36
Re: Графика new [re: Ivan_Mak]Reply to this post

> 54h for "no copy in main shadow RAM" mode

что бы это значило?

Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

Alex_GoryachevAdministrator
(Sprinter Team)
2003/05/29 14:31
Re: Графика new [re: Shaos]Reply to this post

Эти примеры присутствуют в доке по акселератору http://www.petersplus.com/sprinter/accel.htm

---
Sprinter Team
PETERS PLUS LTD

Ivan_MakVIP
(Sprinter Team)
2003/05/29 19:46
Re: Графика new [re: Shaos]Reply to this post

Эти значит, что данные попадают в видео-ОЗУ,
но не попадают в основное ОЗУ, соответствующее видео-памяти.
Т.е. программа может записать на экран новые данные,
а считываться из того же адреса будут старые.

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




cr0acker
(enthusiast)
2003/07/17 21:21
Re: Графика new [re: Ivan_Mak]Reply to this post

Рещил я тута переделать одну софтинку с расширенного экрана GMX на расщиренный экран спринтера. И сразу же наткнулся на грабля, вот типа две фции готорые включют/выключают рсширенный экран! Чё то не пашут.

gmxon ld, a,0
out(#7c),a
ld c, #0a
ld a,1
ld b,2
call #3d13
ld a,0
in a,(#82)
ld (oldwin1),a
in a,(#a2)
ld (oldwin2),a
in a,(#c2)
ld (oldwin3),a
in a,(e2)
ld (oldwin4),a
in a,(#c9)
ld (oldmod),a
ld a,#50
out (#ea2),a
ld a,123
out (#89),a
ld hl,32
ld a,5
ld (hl),a
ld a,(#82)
out (#c9),a
ret

Вместо выполнения фции выше, нас ждёт зависонс



MacBuster
(Registered Developer)
2003/07/18 09:13
Re: Графика new [re: cr0acker]Reply to this post

Это что такое -> <out (#ea2),a> и <in a,(e2)> ???




cr0acker
(enthusiast)
2003/07/18 14:44
Re: Графика new [re: MacBuster]Reply to this post

Порт #е2, управляет 3 окном ЦП. Сначала типа оттуда читаю текущую подрубленную страницу. Потом ставлю страницу видеоОЗУ



Shaos
(Registered Developer)
2003/07/18 15:50
Re: Графика new [re: cr0acker]Reply to this post

> Порт #е2, управляет 3 окном ЦП
in a,(e2) или in a,(#e2) ???

Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(enthusiast)
2003/07/18 17:27
Re: Графика new [re: Shaos]Reply to this post

in a,(#e2)
конечно:) Просто я текст с аласмовскго экрана перепичатывал:)




Pages in this thread: 1 | 2 | 3 | 4 | (show all)
View all threadsNext thread*Threaded Mode
Jump to