Temat: Karta VGA czyli NOVA, Panther i inne takie

Witam

Czy mógłby mnie ktoś naprostować w temacie VGA ?

Napiszę pierwej co zrobiłem:
-ściągnąłem przykład w C jak przełaczyć kartę VGA w tryb 12h, czyli 640x480x16 kolorów,
-wywaliłem z niego co się dało, nawet czyszczenie pamięci, aby był mozliwie najkrótszy,
-komplilacja pod DOS (Borland Turbo C) i uruchomienie,
-karta przełacza się i na ekranie rysują się dwie linie (są też śmieci, gdyż nie ma czyszczenia).

Tyle w temacie DOS. Program nie używa programowych przerwań BIOS-u VGA, tylko operuje na rejestrach karty:

unsigned char g_640x480x16[] =
{
/* MISC */
    0xE3,
/* SEQ */
    0x03, 0x01, 0x08, 0x00, 0x06,
/* CRTC */
    0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E,
    0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xEA, 0x0C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3,
    0xFF,
/* GC */
    0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x05, 0x0F,
    0xFF,
/* AC */
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
    0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
    0x01, 0x00, 0x0F, 0x00, 0x00
};

Krok następny - Atari:
- wrzucam wspomniany program do AHCC i tutaj kilka zmian
- korekta adresów na wartości z adaptera Atari np:
#define    VGA_AC_INDEX 0x3C0 (zmiana na REG_BASE+0x3C0)
- polecenia inportb i outportb zastąpione peek i poke:
void    poke(WORD adr, UBYTE dat)
{
      *((UBYTE*)adr+REG_BASE)=dat;
}
UBYTE    peek(WORD adr)
{
    return(*((UBYTE*)adr+REG_BASE));
}
- program się kompiluje, odpalam i brak reakcji.

Czy aby cokolwiek się zadziało Atari (GEM) musi "przełaczyć się" na kartę ?
Pewnie bez tego karta jest "wyłączona" i nie będzie żadnej reakcji.
Nie znam się więc pytam.

W uzupełnieniu: nie liczę na to, że pokaże się pulpit smile aż tak ciemny nie jestem. Chodzi o "zapalenie piksela" na karcie.

Ostatnio edytowany przez artik-wroc (2018-07-05 14:37:50)

Było miło :) Do widzenia.

2

Odp: Karta VGA czyli NOVA, Panther i inne takie

Jesteś pewien, że to wszystko co trzeba? BIOS karty nie robi na PC żadnych magicznych rzeczy? Z tego co pamiętam sprzęt pod DOS miał często magiczne kombinacje, które udblokowywały zapisa do karty (chyba w celu ochorony przed nieświadomymi programami?).

What can be asserted without proof can be dismissed without proof.

3

Odp: Karta VGA czyli NOVA, Panther i inne takie

Po dodaniu procedury odczytu rejestrów widać, że wszystkie wartości są wpisane prawidłowo.
Jednak na Atari najwyraźniej tak się nie da i potrzebna jest jeszcze ingerencja w GEM.

EDIT: To co pisałem wcześniej dotyczyło ET4000, teraz sprawdziłem ATI i program nie zmienia wartości rejestrów.

Ostatnio edytowany przez artik-wroc (2018-07-05 16:27:50)

Było miło :) Do widzenia.

Odp: Karta VGA czyli NOVA, Panther i inne takie

Może są problemy związane z endianess?

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

5

Odp: Karta VGA czyli NOVA, Panther i inne takie

Wszystkie operacje odczytu i zapisu są wykonywane po 1 bajcie.

Było miło :) Do widzenia.

Odp: Karta VGA czyli NOVA, Panther i inne takie

Może kolejność zapisywania bajtów do rejestrów szerszych niż bajt (jeśli takie są) jest niewłaściwa?

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

7

Odp: Karta VGA czyli NOVA, Panther i inne takie

Najpierw jest numer indeksu (bajt, pod jeden adres) potem wartość (bajt, pod inny adres).

Pytanie techniczne, jak to zapisać aby było zjadliwe dla AHCC/PureC (w tej chwili jest błąd przy kompilacji w zaznaczonym miejscu):

struct tPictureInfo{
   unsigned long   infoType;
   unsigned long   vMemSize;
   unsigned long   infoWidth;
   unsigned long   infoHeight;
   unsigned long   infoRefresh;
}; typedef struct tPictureInfo PICTUREINFO; typedef struct tPictureInfo* PPICTUREINFO;


struct tvmode{
   PICTUREINFO    info;
   unsigned char   extReg[EXTCOUNT];
   unsigned char   crtReg[CRTCOUNT];
   unsigned char   seqReg[SEQCOUNT];
   unsigned char   atrReg[ATRCOUNT];
   unsigned char    gfxReg[GFXCOUNT];
} video_vmode[] = {
   {          <-- w tym miejscu jest błąd (nie oczekiwano klamry)
      .info = {
         .infoType = PICTURE_GFX4BPP6BPC,
         .vMemSize = (640*480/2),
         .infoWidth = 640,
         .infoHeight = 480,
         .infoRefresh = 0
      },
      .extReg = {0x01|0xC0|CLK_25},
      .crtReg = {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,0x0,0x80,0xe,0xf,0x0,0x0,0x0,0x20,0x9c,0x8e,0x8f,0x28,0x7f,0x96,0xb9,0xff,0xff},
      .seqReg = {0xff, 0x0, 0xff, 0x0, 0x4},
      .atrReg = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0x1,0x0,0xff,0x00},
      .gfxReg = {0xff,0,0,0,0,0,0x01,0x00,0xff}
   },
   {
      .info = {
         .infoType = PICTURE_TEXT1C1A,
         .vMemSize = (80*20*2),
         .infoWidth = 80,
         .infoHeight = 20,
         .infoRefresh = 0
      },
      .extReg = {0x03|0xC0|CLK_25},
      .crtReg = {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,0x00,0x4f,0x0e,0x0f,0x00,0x00,0x02,0x30,0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,0xff},
      .seqReg = {0x03,0x00,0x03,0x00,0x02},
      .gfxReg = {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x0f,0x0ff},
      .atrReg = {0,1,2,3,4,5,0x14,7,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,0x0C,0x00,0x0F,0x08}
   }
};

Ostatnio edytowany przez artik-wroc (2018-07-06 19:23:06)

Było miło :) Do widzenia.

Odp: Karta VGA czyli NOVA, Panther i inne takie

Wydaje mi się że takiego rodzaju inicjalizacji po prostu AHCC nie obsługuje, musiałbys to w kodzie zrobić. Pytałeś Henka Robbersa?

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

9

Odp: Karta VGA czyli NOVA, Panther i inne takie

Jest jeszcze jedna kwestia leżąca u podstaw całej sprawy smile Mianowicie adresy w pamięci dla konkretnych adapterów.
Mało jest informacji. W linku jaki mi podesłano na atari-forum.com:
https://github.com/emutos/emutos/blob/m … ios/nova.c
widać po jakich adresach EmuTOS szuka adaptera NOVA.

/* Mach32(?) in Atari TT */
regbase = 0xFE900000
membase = 0xFE800000
/* Nova in Atari MegaSTE */
regbase = 0x00DC0000
membase = 0x00C00000
/* ET4000 in Atari TT */
regbase = 0xFEDC0000
membase = 0xFEC00000

odpaliłem wczoraj novą na MSTE (Mach32) i sprawdziłem u siebie (XBIOS(2)), pokazał adres 0xA00000 więc nie pokrywa się to z powyższymi informacjami. Akurat pod kątem rejestrów bardziej interesuje mnie regbase, lecz jak membase jest inny to i ten drugi pewnie też.
Co do Panther instrukcja podaje regbase=0xFEA00000, ale bez pewności zmiana rejestrów będzie jak strzelanie ślepakami.
Najpierw więc ustalę jaki jest faktyczny adres i zobaczę czy to coś zmieni.
Powoli, powoli może coś z tego będzie smile

Było miło :) Do widzenia.

Odp: Karta VGA czyli NOVA, Panther i inne takie

Nie przywiązywałbym wago do tego co zwraca XBIOS(2) w kontekście kart graficznych.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

11

Odp: Karta VGA czyli NOVA, Panther i inne takie

Napisałem krótki programik odczytujący rejestr z informacjami o karcie i wyszło mi coś takiego:

czyli nic się nie zgadza: magistrala, DAC, pamięci. Zgadza się VGA smile

POPRAWKA:
Zapomniałem o tym co pisałeś wcześniej, a ten rejestr to 2 bajty.

Adam Klobukowski napisał/a:

Może są problemy związane z endianess?

Po korekcie nabiera to sensu wink Akurat wszystkie karty Mach32 które mam posiadają ten sam DAC.

Ostatnio edytowany przez artik-wroc (2018-07-08 18:26:19)

Było miło :) Do widzenia.

12

Odp: Karta VGA czyli NOVA, Panther i inne takie

Z kronikarskiego obowiązku. Adres jest OK, o ile dane o karcie mogą być z pewnymi odchyłkami, o tyle rozdzielczość odczytana z rejestrów daje z grubsza pewność.
PunBB mach32
Jeżeli ktoś posiada Panther/2 (NOVA ma inny adres) i kartę Mach32(tylko) to jest i programik.
http://atari.wroclaw.pl/pliki/ATI_M32.PRG

EDIT: Jest przełom w sprawie !! A nawet dwa przełomy smile

Ostatnio edytowany przez artik-wroc (2018-07-08 21:50:14)

Było miło :) Do widzenia.

13

Odp: Karta VGA czyli NOVA, Panther i inne takie

Czy w kontekście tego wątku przyda się komuś taka pozycja?

Post's attachments

IMG_20180715_191544m.jpg 209.33 kb, nikt jeszcze nie pobierał tego pliku. 

IMG_20180715_191721m.jpg 176.67 kb, nikt jeszcze nie pobierał tego pliku. 

IMG_20180715_191745m.jpg 158.55 kb, nikt jeszcze nie pobierał tego pliku. 

Tylko zalogowani mogą pobierać załączniki.
Nie wstydzę się: 65XEN/1MB/4OS/AKI/1084ST/inne fajne zabawki

14

Odp: Karta VGA czyli NOVA, Panther i inne takie

Mejl poszedł smile

Było miło :) Do widzenia.