nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 07:45



Reply to topic  [ 48 posts ]  Go to page 1, 2, 3, 4  Next
Программное перемещение видеопамяти в РК-совместимых компах 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вот как Монитор РК-86 настраивает ВГ75 и ВТ57 (с моими комментариями):
Code:
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 пикселам...

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2024 09:46
Profile WWW
Online
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Пользовать утилитой можно следующим образом:
  • «G» - восстановление режима по умолчанию
  • «G,,<адрес_буфера_экрана>» - где адрес должен быть больше 0100 и меньше 8000
  • «G,<высота><ширина>» - где ширина и высота указываются слитно
  • «G,<высота><ширина>,<адрес_буфера_экрана>»
Например:
  • «G,1E4E» - размер экрана по умолчанию 78x30 (30 = 0x1E, 78 = 0x4E)
  • «G,,76D1» - где 76D1 сдвинут на 1 позицию относительно основного буфера
  • «G,194E,77C2» - почти идеальный режим! :mrgreen:


Attachments:
File comment: Образ загружаемого файла
SET8257-75.RKR.zip [281 Bytes]
Downloaded 18 times
File comment: Исходный текст утилиты
SET8257-75.ASM.zip [2.01 KiB]
Downloaded 15 times
19 Feb 2024 10:00
Profile WWW
Senior
User avatar

Joined: 14 Oct 2023 06:59
Posts: 104
Reply with quote
не знаком с монитором, но похоже, что G - это вызов адреса?


19 Feb 2024 10:09
Profile
Online
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Двоично-десятичный вариант
Пользоваться утилитой можно следующим образом:
  • «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.


Attachments:
File comment: Образ загружаемого файла
SET8257_75.RKR.zip [309 Bytes]
Downloaded 16 times
File comment: Исходный текст утилиты
SET8257_75.ASM.zip [2.3 KiB]
Downloaded 15 times


Last edited by Alikberov on 19 Feb 2024 11:02, edited 1 time in total.

19 Feb 2024 11:00
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ещё бы высоту символов задавать :)
Или она автоматом рассчитывается?
Ещё вот такой настройщик был: http://www.nedopc.org/forum/viewtopic.php?p=159826#p159826
А так с примерами кода надо - вечерком подберу из разных источников и прицеплю в первое сообщение топика…

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2024 11:01
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
А так с примерами кода надо - вечерком подберу из разных источников и прицеплю в первое сообщение топика…
Пока прицепил как в классическом мониторе РК-86 было

_________________
:dj: https://mastodon.social/@Shaos


19 Feb 2024 22:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вот интересный пример от vinxru, который я переработал под pdp11asm85 и сделал совместимым с Emu80 v.4 - пример показывает как можно в пределах той же области экрана 76D0...7FF3 сделать режим 64x31 (внутри режима 78х37x8@51Гц) программируя только ВГ75 (и форматируя экран обрезанными с правой стороны строчками) и не трогая ВТ57:

Code:
; Пример псевдографического режима
; (с) 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"


Attachment:
Screenshot from 2024-02-21 02-00-37.png
Screenshot from 2024-02-21 02-00-37.png [ 40.01 KiB | Viewed 713 times ]

Code:
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


Attachments:
test_vinxru.zip [2.37 KiB]
Downloaded 15 times

_________________
:dj: https://mastodon.social/@Shaos
21 Feb 2024 03:12
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Вот интересный пример от vinxru, который я переработал под pdp11asm85 и сделал совместимым с Emu80 v.4 - пример показывает как можно в пределах той же области экрана 76D0...7FF3 сделать режим 64x31 (внутри режима 78х37x8@51Гц) программируя только ВГ75 (и форматируя экран обрезанными с правой стороны строчками) и не трогая ВТ57
Если сделать 38 строк, то частота кадров станет 49.69 Гц (но количество активных строк всё также будет 31 т.к. нам надо оставаться в пределах той же экранной области):

Attachment:
Screenshot from 2024-02-21 02-12-07.png
Screenshot from 2024-02-21 02-12-07.png [ 40.52 KiB | Viewed 709 times ]

По идее можно сдвинуть активные строки на 2 символа влево (на 1 не выходит - строки разъезжаются), тогда их количество можно увеличить до 32:

 test_vinxru32.asm
Code:
; Пример псевдографического режима
; (с) 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"


Attachment:
Screenshot from 2024-02-21 02-32-02.png
Screenshot from 2024-02-21 02-32-02.png [ 40.79 KiB | Viewed 709 times ]

Что даёт возможность рисовать псевдографику 128x64

P.S. Ну или переместить экран в другую часть памяти, чтобы не было ограничений на размер...

_________________
:dj: https://mastodon.social/@Shaos


21 Feb 2024 03:47
Profile WWW
Senior
User avatar

Joined: 14 Oct 2023 06:59
Posts: 104
Reply with quote
Shaos wrote:
Что даёт возможность рисовать псевдографику 128x64...


рисовать символами псевдографики или переопределять данные шрифта? А это возможно вообще - переопределить шрифт?


21 Feb 2024 04:14
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
В шрифте РК есть 16 символов псевдографики 2х2 (в скриншоте видно один из них по краям)
Переопределять шрифт можно только в продвинутых клонах типа Северной Пальмиры
А так это обычно один шрифт в ПЗУ 1КБ либо 2 шрифта в ПЗУ 2КБ

_________________
:dj: https://mastodon.social/@Shaos


21 Feb 2024 11:15
Profile WWW
Senior
User avatar

Joined: 14 Oct 2023 06:59
Posts: 104
Reply with quote
Кстати, а какой формат удобнее - .rk или .rkr? Эмуль ест всё.


22 Feb 2024 00:04
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
shiny wrote:
Кстати, а какой формат удобнее - .rk или .rkr? Эмуль ест всё.

.rkr это вроде конкретно РК-86, а .rk - любой РК-совместимый компьютер (т.е. подразумевается работа только через подпрограммы монитора)

_________________
:dj: https://mastodon.social/@Shaos


22 Feb 2024 00:35
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Путём перепрограммирования адреса начала видеопамяти можно делать вертикальный или горизонтальный скролл с шагом в размер знакоместа (высоту которого можно настраивать программно от обычных 10 вниз вплоть до 1, но не ширину, которая в РК-совместимых компьютерах всегда равна 6 пикселам).

Кстати если сделать спец-шрифт высотой в 1 линию с 6 пикселами, то 64-мя символами можно перебрать все комбинации, получив по сути растровую видеопамять - размещемые в ней байты будут кодировать комбинации пикселов по 6 пикселов на байт дав нам настоящие 384 х 248 монохромных пикселов, правда памяти это займёт ну очень много: 24*2 + 74*31*8 + 24*2 = 18448 байт :o

Attachment:
shaos384x248.gif
shaos384x248.gif [ 19.89 KiB | Viewed 587 times ]


P.S. Хотя не - не выйдет т.к. для ВГ75 количество текстовых строк не может превышать 64, что ограничивает нас четырьмя пикселами по высоте:

Attachment:
Screenshot from 2024-02-22 00-18-55.png
Screenshot from 2024-02-22 00-18-55.png [ 36.62 KiB | Viewed 579 times ]

Вот и в в Апогее был шрифт псевдографики высотой в 4 пиксела, что давало возможность рисовать псевдопикселами 2х2, что по ширине будет 64*3=192, а по высоте наверное порядка 104:

Attachment:
shaos234x104.gif
shaos234x104.gif [ 13.14 KiB | Viewed 577 times ]

Памяти при этом надо 12*2 + 52*74 = 3872 байта

P.P.S. Кстати у vinxru была демка 192х104 для Апогея как раз на этот второй шрифт рассчитанная:

Attachment:
Screenshot from 2024-02-22 00-38-17.png
Screenshot from 2024-02-22 00-38-17.png [ 30.61 KiB | Viewed 577 times ]


P.P.P.S. Хотя тут некоторые линии чётче чем 192x104 нарисованы т.к. для них использовалась нижняя часть шрифта, где линии в 1 пиксел:

Attachment:
Screenshot from 2024-02-22 00-42-37.png
Screenshot from 2024-02-22 00-42-37.png [ 26.35 KiB | Viewed 575 times ]

Исходник в мнемониках Z80 под спойлером:

 test102x104.asm
Code:
; Пример псевдографического режима
; (с) 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 можно попробовать интерполировать картинки верхушками букв стандартного шрифта (вроде на зхпк чото такое проскакивало уже):

Attachment:
Screenshot from 2024-02-22 01-15-59.png
Screenshot from 2024-02-22 01-15-59.png [ 38.37 KiB | Viewed 570 times ]


P.P.P.P.P.S. А вот режим со смещением на 1 пиксел (эмулятор правда вращает в пределах тех же 4 линий похоже - надо на реале поглядеть):

Attachment:
rk-4pixels-plus1.png
rk-4pixels-plus1.png [ 37.41 KiB | Viewed 430 times ]


Attachment:
test_vinxru_.zip [393 Bytes]
Downloaded 10 times

_________________
:dj: https://mastodon.social/@Shaos


22 Feb 2024 01:09
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Image

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

Где-то я про две ВГ75 уже читал...
а блин вот жеж у нас в сентябре 2013 было :mrgreen:
(там правда про 8-битные символы, а не про более чёткую псевдографику)

_________________
:dj: https://mastodon.social/@Shaos


23 Feb 2024 20:37
Profile WWW
Senior
User avatar

Joined: 14 Oct 2023 06:59
Posts: 104
Reply with quote
Видел статьи про доработки для цветов
http://www.radioliga.com/RL_91-95/3.2.htm

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


23 Feb 2024 23:02
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 48 posts ]  Go to page 1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.