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

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 :) aż tak ciemny nie jestem. Chodzi o "zapalenie piksela" na karcie.

Było miło :) Do widzenia.

2

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 Ostatnio edytowany przez artik-wroc (2018-07-05 16:27:50)

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.

Było miło :) Do widzenia.

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

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

Było miło :) Do widzenia.

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 Ostatnio edytowany przez artik-wroc (2018-07-06 19:23:06)

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}
   }
};

Było miło :) Do widzenia.

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

Jest jeszcze jedna kwestia leżąca u podstaw całej sprawy :) 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 :)

Było miło :) Do widzenia.

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 Ostatnio edytowany przez artik-wroc (2018-07-08 18:26:19)

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

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 ;) Akurat wszystkie karty Mach32 które mam posiadają ten sam DAC.

Było miło :) Do widzenia.

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

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

Było miło :) Do widzenia.

13

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

Post's attachments

IMG_20180715_191544m.jpg 209.33 kb, liczba pobrań: 1 (od 2018-07-15) 

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.

14

Mejl poszedł :)

Było miło :) Do widzenia.

15

Książka "poszedła" :)

16

Wiela wyszło ?

Było miło :) Do widzenia.

17

Cześć,

a takie coś dla ET4000 ściągnąłeś?

https://ia801004.us.archive.org/21/item … r_1990.pdf

pozdrawiam

Różne różności dla Atari i nie tylko - przydatne, bądź nie ale i tak warto zajrzeć...
http://atari.myftp.org  Atari - Power without price and necessary elements with some sh*t onboard
https://reversing.pl SSL enabled site

18

Oczywista, oczywistość :)
Akurat do Tseng'a to sterowniki są.

Było miło :) Do widzenia.

19

Komu, komu ... ludzie oszalałem :)

Post's attachments

IMG_20180929_230509 (Średni).jpg 272.24 kb, nikt jeszcze nie pobierał tego pliku. 

IMG_20180929_230700 (Średni).jpg 221.7 kb, nikt jeszcze nie pobierał tego pliku. 

IMG_20180929_230850 (Średni).jpg 167.04 kb, nikt jeszcze nie pobierał tego pliku. 

Tylko zalogowani mogą pobierać załączniki.