Программное перемещение видеопамяти в РК-совместимых компах

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Программное перемещение видеопамяти в РК-совместимых компах

Post by Shaos »

Вот как Монитор РК-86 настраивает ВГ75 и ВТ57 (с моими комментариями):

Code: Select all

FACE:           entry_video:                            ; -- start video
FACE: E5                        push    h               ; CODE XREF: F82Dj F83Ep F858p F9AAp FB75j FC38p
FACF: 2101C0                    lxi     h, 0C001h ; VG75+1
FAD2: 3600                      mvi     m, 0 ; format screen
FAD4: 2B                        dcx     h ; VG75+0
FAD5: 364D                      mvi     m, 4Dh ; S=0 (all columns) H=4Dh=77 (width=77+1=78)
FAD7: 361D                      mvi     m, 1Dh ; V=00 (vertical blank 1T) P=1Dh=29 (height=29+1=30)
FAD9: 3699                      mvi     m, 99h ; U=9 (underline at 10th line) L=9 (10 lines per character)
FADB: 3693                      mvi     m, 93h ; M=1 (offset 1) F=0 (invisible attributes) C=01 (cursor is blinking line) Z=3 (horizontal blank 8Tclk)
FADD: 23                        inx     h ; VG75+1
FADE: 3627                      mvi     m, 27h ; start video (S=001 - DMA time 7clk, B=11 - 8 bytes per DMA packet)
FAE0: 7E                        mov     a, m
FAE1:           loc_0_FAE1:
FAE1: 7E                        mov     a, m            ; CODE XREF: FAE4j
FAE2: E620                      ani     20h
FAE4: CAE1FA                    jz      loc_0_FAE1      ; wait for start video
FAE7: 2108E0                    lxi     h, 0e008h ; VT57+8
FAEA: 3680                      mvi     m, 80h ; AL
FAEC: 2E04                      mvi     l, 4 ; VT57+4 ; CH-2 DMA Address
FAEE: 36D0                      mvi     m, 0D0h ; <<<<<<<<<<<<<< LO BYTE
FAF0: 3676                      mvi     m, 76h  ; <<<<<<<<<<<<<< HI BYTE
FAF2: 2C                        inr     l ; VT57+5 ; CH-2 Terminal Count
FAF3: 3623                      mvi     m, 23h ; Clow=23h
FAF5: 3649                      mvi     m, 49h ; Rd=F Wr=T Chi=09h (C=923h=2339=N-1 so N=2340 or 78x30)
FAF7: 2E08                      mvi     l, 8 ; VT57+8
FAF9: 36A4                      mvi     m, 0A4h ; AL+EW+TC2
FAFB: E1                        pop     h
FAFC: C9                        ret
(я пометил стрелочками где адрес экрана 76D0h задаётся)

Вот тут обсуждалось почему эта подпрограмма вызывается дважды при инициализации периферии после включения РК.

Программно можно не только адрес видеопамяти, ширину и высоту экрана настраивать, но также количество строк в знакоместе - при этом надо следить, чтобы размер экрана в настройках ПДП совпадал с размером экрана в настройках ВГ75 и потом есть ещё трюки, например для укорочения строки видеопамяти в конце видимой части каждой строки ставят код F1, который останавливает ПДП (т.е. на хвост строки можно не тратить видеопамять). Потом я для своих РК-поделок буду делать режим с видимыми атрибутами как в Апогее (чтобы экран не съезжал и не нужно было заморачиваться с тонкой настройкой ПДП при раскрашивании картинки) для этого по адресу FADC вместо 93h надо записать D3h, что приведёт к тому, что атрибуты будут видны как пробелы.

Путём перепрограммирования адреса начала видеопамяти можно делать вертикальный или горизонтальный скролл с шагом в размер знакоместа (высоту которого можно настраивать программно от обычных 10 вниз вплоть до 4, но не ширину, которая в РК-совместимых компьютерах всегда равна 6 пикселам).

P.S. Однако в "расширенных" до VGA новоделах (типа Микрокома или Пальмиры) ширина символа равна 8 пикселам...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Alikberov »

Пользовать утилитой можно следующим образом:
  • «G» - восстановление режима по умолчанию
  • «G,,<адрес_буфера_экрана>» - где адрес должен быть больше 0100 и меньше 8000
  • «G,<высота><ширина>» - где ширина и высота указываются слитно
  • «G,<высота><ширина>,<адрес_буфера_экрана>»
Например:
  • «G,1E4E» - размер экрана по умолчанию 78x30 (30 = 0x1E, 78 = 0x4E)
  • «G,,76D1» - где 76D1 сдвинут на 1 позицию относительно основного буфера
  • «G,194E,77C2» - почти идеальный режим! :mrgreen:
You do not have the required permissions to view the files attached to this post.
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by shiny »

не знаком с монитором, но похоже, что G - это вызов адреса?
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

Универсальная утилита для управления буфером экрана

Post by Alikberov »

Двоично-десятичный вариант
Пользоваться утилитой можно следующим образом:
  • «G» - восстановление режима по умолчанию
  • «G,,<адрес_буфера_экрана>» - где адрес должен быть больше 0100 и меньше 8000
  • «G,<высота><ширина>» - где ширина и высота указываются в двоично-десятичном виде
  • «G,<высота><ширина>,<адрес_буфера_экрана>»
Например:
  • «G,3078» или «G,30 78» - размер экрана по умолчанию 78x30
  • «G,,76D1» - где 76D1 сдвинут на 1 позицию относительно основного буфера
  • «G,2578,77C2» или «G,25 78,77C2» - почти идеальный режим! :mrgreen:
shiny wrote:не знаком с монитором, но похоже, что G - это вызов адреса?
Передача управления и параметров коду по указанному адресу и указание точки остановки для отладки с последующим изучением/изменением регистров в директиве X.
You do not have the required permissions to view the files attached to this post.
Last edited by Alikberov on 19 Feb 2024 11:02, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Ещё бы высоту символов задавать :)
Или она автоматом рассчитывается?
Ещё вот такой настройщик был: http://www.nedopc.org/forum/viewtopic.php?p=159826#p159826
А так с примерами кода надо - вечерком подберу из разных источников и прицеплю в первое сообщение топика…
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Shaos wrote:А так с примерами кода надо - вечерком подберу из разных источников и прицеплю в первое сообщение топика…
Пока прицепил как в классическом мониторе РК-86 было
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Вот интересный пример от vinxru, который я переработал под pdp11asm85 и сделал совместимым с Emu80 v.4 - пример показывает как можно в пределах той же области экрана 76D0...7FF3 сделать режим 64x31 (внутри режима 78х37x8@51Гц) программируя только ВГ75 (и форматируя экран обрезанными с правой стороны строчками) и не трогая ВТ57:

Code: Select all

; Пример псевдографического режима
; (с) 17-04-2012 vinxru

; Converted to pdp11asm85 by Shaos on 21-Feb-2024

                .i8080

start:          ; Ждем обратный ход

                lxi h, 0C001h   ; для Апогея 0EF01h
                mov a,m
wait1:          mov a,m
                ani 20h
                jz wait1

                ; Вырубаем видео

                mvi m, 0h

                ; Устаналиваем режим

                lxi h, 0C000h   ; для Апогея 0EF00h
                mvi m, 04Dh     ; 78 символов
                mvi m, 36       ; 37 линий
                mvi m, 7        ; Высота символа 8
                mvi m, 003h

                ; Заполняем видеопамять (из за байта F1 это надо делать пока видео выключено)

                lxi b, data
                lxi h, 76D0h ; для Апогея 0E1D0h
copy:           ldax b
                cpi 0FFh
                jz endCopy
                mov m,a
                inx b
                inx h
                jmp copy
endCopy:

                ; Врубаем видео

                lxi h, 0C001h
                mvi m, 27h

                ; Висим

                jmp $

data:           db 0,0F1h,0,0F1h,0,0F1h
                db 0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0F1h ; 0
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 1
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 2
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 3
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 4
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 5
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 6
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 7
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 8
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 9
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 10
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 11
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 12
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 13
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 14
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 15
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 16
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 17
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 18
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 19
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 20
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 21
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 22
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 23
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 24
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 25
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 26
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 27
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 28
                db 0,0,0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 29
                db 0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0F1h ; 30
                db 0,0F1h,0,0F1h,0,0F3h

dataEnd:
                .blkb 34

                db 0FFh

                make_radio86rk_rom "test_vinxru.rkr"
Screenshot from 2024-02-21 02-00-37.png

Code: Select all

Archive:  test_vinxru.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       47  2024-02-21 01:49   test_vinxru_mk
     2400  2024-02-21 02:00   test_vinxru.rkr
     6009  2024-02-21 02:00   test_vinxru.lst
     4373  2024-02-21 02:00   test_vinxru.asm
---------                     -------
    12829                     4 files
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Shaos wrote:Вот интересный пример от vinxru, который я переработал под pdp11asm85 и сделал совместимым с Emu80 v.4 - пример показывает как можно в пределах той же области экрана 76D0...7FF3 сделать режим 64x31 (внутри режима 78х37x8@51Гц) программируя только ВГ75 (и форматируя экран обрезанными с правой стороны строчками) и не трогая ВТ57
Если сделать 38 строк, то частота кадров станет 49.69 Гц (но количество активных строк всё также будет 31 т.к. нам надо оставаться в пределах той же экранной области):
Screenshot from 2024-02-21 02-12-07.png
По идее можно сдвинуть активные строки на 2 символа влево (на 1 не выходит - строки разъезжаются), тогда их количество можно увеличить до 32:

 test_vinxru32.asm

Code: Select all

; Пример псевдографического режима
; (с) 17-04-2012 vinxru

; Converted to pdp11asm85 by Shaos on 21-Feb-2024

		.i8080

start:		; Ждем обратный ход

		lxi h, 0C001h   ; для Апогея 0EF01h
		mov a,m
wait1:		mov a,m
		ani 20h
		jz wait1

                ; Вырубаем видео

		mvi m, 0h

		; Устаналиваем режим

		lxi h, 0C000h	; для Апогея 0EF00h
		mvi m, 04Dh	; 78 символов
		mvi m, 37	; 38 линий
		mvi m, 7	; Высота символа 8
		mvi m, 003h

                ; Заполняем видеопамять (из за байта F1 это надо делать пока видео выключено)

		lxi b, data
		lxi h, 76D0h ; для Апогея 0E1D0h
copy:		ldax b
		cpi 0FFh
		jz endCopy
		mov m,a
		inx b
		inx h
		jmp copy
endCopy:

		; Врубаем видео

		lxi h, 0C001h
		mvi m, 27h

		; Висим

		jmp $

data:		db 0,0F1h,0,0F1h,0,0F1h
		db 0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0F1h ; 0
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 1
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 2
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 3
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 4
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 5
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 6
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 7
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 8
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 9
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 10
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 11
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 12
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 13
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 14
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 15
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 16
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 17
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 18
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 19
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 20
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 21
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 22
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 23
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 24
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 25
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 26
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 27
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 28
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 29
		db 0,0,0,0,0,0,0, 5,'12345678901234567890123456789012345678901234567890123456789012',5,0F1h ; 30
		db 0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0F3h ; 31
dataEnd:
		db 0FFh

		make_radio86rk_rom "test_vinxru32.rkr"

Screenshot from 2024-02-21 02-32-02.png
Что даёт возможность рисовать псевдографику 128x64

P.S. Ну или переместить экран в другую часть памяти, чтобы не было ограничений на размер...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by shiny »

Shaos wrote:Что даёт возможность рисовать псевдографику 128x64...
рисовать символами псевдографики или переопределять данные шрифта? А это возможно вообще - переопределить шрифт?
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

В шрифте РК есть 16 символов псевдографики 2х2 (в скриншоте видно один из них по краям)
Переопределять шрифт можно только в продвинутых клонах типа Северной Пальмиры
А так это обычно один шрифт в ПЗУ 1КБ либо 2 шрифта в ПЗУ 2КБ
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by shiny »

Кстати, а какой формат удобнее - .rk или .rkr? Эмуль ест всё.
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

shiny wrote:Кстати, а какой формат удобнее - .rk или .rkr? Эмуль ест всё.
.rkr это вроде конкретно РК-86, а .rk - любой РК-совместимый компьютер (т.е. подразумевается работа только через подпрограммы монитора)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Shaos wrote:Путём перепрограммирования адреса начала видеопамяти можно делать вертикальный или горизонтальный скролл с шагом в размер знакоместа (высоту которого можно настраивать программно от обычных 10 вниз вплоть до 1, но не ширину, которая в РК-совместимых компьютерах всегда равна 6 пикселам).
Кстати если сделать спец-шрифт высотой в 1 линию с 6 пикселами, то 64-мя символами можно перебрать все комбинации, получив по сути растровую видеопамять - размещемые в ней байты будут кодировать комбинации пикселов по 6 пикселов на байт дав нам настоящие 384 х 248 монохромных пикселов, правда памяти это займёт ну очень много: 24*2 + 74*31*8 + 24*2 = 18448 байт :o
shaos384x248.gif
P.S. Хотя не - не выйдет т.к. для ВГ75 количество текстовых строк не может превышать 64, что ограничивает нас четырьмя пикселами по высоте:
Screenshot from 2024-02-22 00-18-55.png
Вот и в в Апогее был шрифт псевдографики высотой в 4 пиксела, что давало возможность рисовать псевдопикселами 2х2, что по ширине будет 64*3=192, а по высоте наверное порядка 104:
shaos234x104.gif
Памяти при этом надо 12*2 + 52*74 = 3872 байта

P.P.S. Кстати у vinxru была демка 192х104 для Апогея как раз на этот второй шрифт рассчитанная:
Screenshot from 2024-02-22 00-38-17.png
P.P.P.S. Хотя тут некоторые линии чётче чем 192x104 нарисованы т.к. для них использовалась нижняя часть шрифта, где линии в 1 пиксел:
Screenshot from 2024-02-22 00-42-37.png
Исходник в мнемониках Z80 под спойлером:

 test102x104.asm

Code: Select all

; Пример псевдографического режима
; (с) 17-04-2012 vinxru
; Используется компилятор sjasm

VG75_ADDR = 0EF00h
VT57_ADDR = 0F000h
VIDEOMEM_ADDR = 08000h
VIDEOMEM_SIZE = 78*64

		device zxspectrum48

		; Заголовок RKA файла

hdr:		db start>>8, start&0xFF
		dw 0

start:		; Ждем обратный ход

		ld hl, VG75_ADDR+1
		ld a, (hl)
wait1:		ld a, (hl)
		and 20h
		jp z, wait1

		; Выключаем видео и устаналиваем режим 

		ld hl, VG75_ADDR+1
		ld (hl), 0
		dec hl
		ld (hl), 77     ; 78 символов
		ld (hl), 63	; 64 линии
		ld (hl), 3	; Высота символа 4
		ld (hl), 053h

                ; Включаем альтернативный знакогенератор

		ei

		; Устаналиваем положение и размер видеопамяти

                ld hl, VT57_ADDR+8
		ld (hl), 80h

                ld l, 4
		ld (hl), VIDEOMEM_ADDR & 0xFF
		ld (hl), VIDEOMEM_ADDR >> 8
 	
                inc l
		ld (hl), (VIDEOMEM_SIZE-1) & 0xFF
		ld (hl), 40h | ((VIDEOMEM_SIZE-1) >> 8)

                ld l, 8
		ld (hl), 0A4h		

                ; Очищаем видеопамять

		ld hl, VIDEOMEM_ADDR
		ld bc, VIDEOMEM_SIZE
		ld a, 0
clearMem:	ld (hl), a
		inc hl
		dec c		
		jp nz, clearMem
		dec b
		jp nz, clearMem

		; Включаем видео

		ld hl, VG75_ADDR+1
		ld (hl), 27h

                ; Копируем в видеопамять

		ld hl, VIDEOMEM_ADDR + 78*6 + 9
		ld bc, screen
		ld d, 52
loop1:		ld e, 64
loop2:		ld a, (bc)
		inc bc
		ld (hl), a
		inc hl
		dec e		
		jp nz, loop2
		push de
		ld de, 14
		add hl, de
		pop de
		dec d
		jp nz, loop1

		; Висим

		jp $

;----------------------------------------------------------------------------

A = 5Eh
B = 58h
C = 60h
D = 52h
E = 57h
F = 5Fh
G = 5Bh
H = 61h
I = 15h
J = 2Ah
K = 7Fh
L = 67h
M = 45h
N = 4Ch
O = 4Eh
P = 43h
Q = 68h
R = 65h
S = 64h
T = 7Ah
U = 7Bh
V = 7Ch
W = 4Eh
X = 4Ch
Y = 43h
Z = 45h
_ = 0

screen:		db A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,C
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,R,B,B,B,B,B,B,B,B,B,C,_,_,T,T,T,T,T,T,T,T,T,T,_,_,W,W,W,W,W,W,W,W,W,W,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,_,L,_,_,L,_,_,L,_,E,_,_,U,U,U,U,U,U,U,U,U,U,_,_,X,X,X,X,X,X,X,X,X,X,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,M,_,N,E,_,D,M,_,N,E,_,_,V,V,V,V,V,V,V,V,V,V,_,_,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,O,_,P,E,_,D,O,_,P,E,_,_,T,T,T,T,T,T,T,T,T,T,_,_,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,_,Q,_,_,Q,_,_,Q,_,E,_,_,U,U,U,U,U,U,U,U,U,U,_,_,W,W,W,W,W,W,W,W,W,W,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,F,G,G,G,_,_,_,G,G,G,S,_,_,V,V,V,V,V,V,V,V,V,V,_,_,X,X,X,X,X,X,X,X,X,X,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,_,_,_,_,X,_,Z,_,_,_,_,_,_,T,T,T,T,T,T,T,T,T,T,_,_,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,_,_,_,_,Y,_,W,_,_,_,_,_,_,U,U,U,U,U,U,U,U,U,U,_,_,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,R,B,B,B,_,_,_,B,B,B,C,_,_,V,V,V,V,V,V,V,V,V,V,_,_,W,W,W,W,W,W,W,W,W,W,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,_,L,_,_,L,_,_,L,_,E,_,_,T,T,T,T,T,T,T,T,T,T,_,_,X,X,X,X,X,X,X,X,X,X,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,M,_,N,E,_,D,M,_,N,E,_,_,U,U,U,U,U,U,U,U,U,U,_,_,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,O,_,P,E,_,D,O,_,P,E,_,_,V,V,V,V,V,V,V,V,V,V,_,_,Z,Z,Z,Z,Z,Z,Z,Z,Z,Z,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,D,_,Q,_,_,Q,_,_,Q,_,E,_,_,T,T,T,T,T,T,T,T,T,T,_,_,W,W,W,W,W,W,W,W,W,W,_,_,E
		db D,_,I,J,I,J,I,J,I,J,I,J,_,_,K,K,K,K,K,K,K,K,K,K,_,_,F,G,G,G,G,G,G,G,G,G,S,_,_,U,U,U,U,U,U,U,U,U,U,_,_,X,X,X,X,X,X,X,X,X,X,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db D,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,E
		db F,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,G,H
		
end:		savebin "test.rka",hdr,end-hdr

P.P.P.P.S. На стандартном РК-86 можно попробовать интерполировать картинки верхушками букв стандартного шрифта (вроде на зхпк чото такое проскакивало уже):
Screenshot from 2024-02-22 01-15-59.png
P.P.P.P.P.S. А вот режим со смещением на 1 пиксел (эмулятор правда вращает в пределах тех же 4 линий похоже - надо на реале поглядеть):
rk-4pixels-plus1.png
test_vinxru_.zip
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24067
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Shaos wrote:Image

Хотя не - не выйдет т.к. для ВГ75 количество текстовых строк не может превышать 64, что ограничивает нас четырьмя пикселами по высоте:
А вот если поставить ДВЕ ВГ75 цепочкой друг за другом :o
Тогда можно уменьшить высоту символа до 2 и показывать экран два раза по 64 строки, тогда можно псевдографику с точностью до пиксела по высоте показывать, однако по ширине всё также придётся парами пикселы кодировать, что даст видимое разрешение 192x208 :lol:

Где-то я про две ВГ75 уже читал...
а блин вот жеж у нас в сентябре 2013 было :mrgreen:
(там правда про 8-битные символы, а не про более чёткую псевдографику)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by shiny »

Видел статьи про доработки для цветов
http://www.radioliga.com/RL_91-95/3.2.htm

Такое делали вообще?