[abc80] Högupplösningsgrafik på ABC806
Erik Isaksson
exon at lysator.liu.se
Ons Jan 24 11:47:44 PST 2018
Jaha, ser man på, där hittade du en brist i implementationen. Jag har
visst gjort ett ful-hack som ignorerar adressen och bara räknar upp
palette-indexet för varje skrivning :-( Funkar ok så länge man bara
använder BASICens FGCTL som alltid skriver alla 16 register...
Fixar, om du inte tänker hitta något mer när du ändå håller på :-)
mvh Erik
On 2018-01-24 16:04, Andreas Gustafsson wrote:
> Riktigt trevlig dokumentation ser det ut att bli, tummen upp!
>
> När det gäller palett-register så tolkade jag också
> servicemanual-texten så som du skrev, men jag var tveksam för jag har
> inte läst tidigare något om att out (c) på z80 skulle ta hänsyn till
> b-registret, men det kanske är så.
> Dock verkar det inte fungera, för följande kod:
>
> ld b,0
> ld c,7
> ld a,0x00
> out (c),a
>
> ld b,1
> ld c,7
> ld a,0x77
> out (c),a
>
> Ger *inte* samma resultat som:
>
> ld b,1
> ld c,7
> ld a,0x77
> out (c),a
>
> ld b,0
> ld c,7
> ld a,0x00
> out (c),a
>
> Dvs. i bägge fallen vill jag sätta färg 0 till svart och 1 till vit,
> det enda som skiljer är ordningen vilken jag gör det i.
> Men i de nedre fallet verkar färg 0 bli vit, precis som om b-registret
> ignorerades.
>
> /Andreas
>
>
>
> 2018-01-24 15:43 GMT+01:00 Erik Isaksson <exon at lysator.liu.se
> <mailto:exon at lysator.liu.se>>:
>
> Man måste använda instruktionen OUT (C), r som också lägger ut
> B-registret på de höga adressbitarna och används för att välja
> register.
>
> Jag håller precis på att dokumentera funktionen i emulatorn, och
> kommit ungefär så här långt:
>
>
> Hi-Res Graphics
>
> 512x240 pixels, 2 bits/pixel, gives 30kBytes.
>
> Visible 32k-page selected by HRC-reg bits 3—0, active 32k-page
> selected by HRC-reg bits 7—4.
>
> Bit
>
>
>
> 7
>
>
>
> 6
>
>
>
> 5
>
>
>
> 4
>
>
>
> 3
>
>
>
> 2
>
>
>
> 1
>
>
>
> 0
>
> Page
>
>
>
> Active Page 0—15
>
>
>
> Visible Page 0—15
>
> HRC-reg written using OUT 6,<val>.
>
> Each nibble of video memory serves as an index into the palette
> registers, which gives 4-bit color values for two pixels.
>
> Bit
>
>
>
> 7
>
>
>
> 6
>
>
>
> 5
>
>
>
> 4
>
>
>
> 3
>
>
>
> 2
>
>
>
> 1
>
>
>
> 0
>
> Pixels
>
>
>
> 0-1
>
>
>
> 2-3
>
> Palette registers 0—15:
>
> Bit
>
>
>
> 7
>
>
>
> 6
>
>
>
> 5
>
>
>
> 4
>
>
>
> 3
>
>
>
> 2
>
>
>
> 1
>
>
>
> 0
>
> Color
>
>
>
> P
>
>
>
> B
>
>
>
> G
>
>
>
> R
>
>
>
> P
>
>
>
> B
>
>
>
> G
>
>
>
> R
>
> Pixel
>
>
>
> 0
>
>
>
> 1
>
> Palette registers are written using LD B,<idx>; LD C,7; LD
> r,<val>, OUT (C),r
>
> 128k of Video Unit Memory (VUMEM) is available through one of
> three mechanisms: 4k, 30k, or 32k paging.
>
>
> 4k-paging
>
> Enabled by EME-bit in MISC-reg.
>
>
> 30k-paging
>
> Enabled by executing code from 7800h—8000h (HR-opt). Active page
> available at 0000h—7800h.
>
>
> 32k-paging
>
> Enabled by DART chB DTR. Active page available at 0000h—8000h.
>
>
>
> mvh Erik
>
>
> On 2018-01-24 13:01, Andreas Gustafsson wrote:
>> Inser nu att jag nog inte riktigt förstått mig på
>> palett-systemet, jag kan sätta upp färgerna genom att skicka
>> saker till port 7, men hur väljer man *vilket* av de 16
>> palette-entryna man vill påverka?
>> Servicemanualen börjar nämna lite om det på sida 122 men hänvisar
>> sedan "(se teknisk beskr.)" och någon sådan hittar jag inte!
>>
>> 2018-01-23 23:46 GMT+01:00 Erik Isaksson <exon at lysator.liu.se
>> <mailto:exon at lysator.liu.se>>:
>>
>> Kul att det rör på sig! Jag hoppas jag har fått rätt funktion
>> på sakerna i emulatorn, bra om du kan verifiera med en riktig
>> maskin om jag gjort rätt :-)
>>
>> Bit 3 (P) i palettvärdet bestämmer väl dessutom om text eller
>> grafik ska synas givet en viss färg; börjar man blanda borde
>> det bli riktigt psykedeliskt!
>>
>>
>> / E
>>
>>
>> On 2018-01-23 23:33, Andreas Gustafsson wrote:
>>> Tack Ola och Erik!
>>>
>>> Med hjälp av port 6 för att mappa in vilket minnesområde jag
>>> peta på samt visa på skärmen, port 35 för att aktivera
>>> 32kb-mappningen samt port 7 för att sätta upp paletten så
>>> har jag nu fått igång hires-grafik, funkar fint!
>>> Intressant lösning att den lägger sig ovanpå det vanliga
>>> text-grafiken, det här öppnar upp för skojiga effekter!
>>> Har massor av idéer på vad man skulle kunna göra, men ska
>>> försöka hålla mig lite i skinnet tills jag har en riktig
>>> maskin på plats också så att man kan verifiera allt till 100% :)
>>>
>>> /Andreas
>>>
>>>
>>>
>>> 2018-01-23 19:22 GMT+01:00 Erik Isaksson
>>> <exon at lysator.liu.se <mailto:exon at lysator.liu.se>>:
>>>
>>> Det finns visst tre olika sätt att komma åt grafikminnet
>>> (128k) på 806:
>>>
>>> - 30k-blocking: 30k kopplas in på 0x0000--0x7800 vid
>>> exekvering av kod på adress 0x7800--0x7fff
>>>
>>> - 32k-blocking: 32k kopplas in på 0x0000-0x8000 vid
>>> aktivering av DART ChB DTR
>>>
>>> -4k-blocking: godtyckligt 4k-block kan kopplas in på
>>> "godtycklig" plats i minnet, aktiveras av EME i
>>> MISC-registret (out 54,128)
>>>
>>> Känns ju som enklaste sättet om man kör från egen
>>> assembler är 32k-blocking...?
>>>
>>>
>>> mvh Erik
>>>
>>>
>>>
>>> On 2018-01-23 00:07, H. Peter Anvin wrote:
>>>
>>> On 01/22/18 09:50, Andreas Gustafsson wrote:
>>>
>>> Ja, nu är jag igång och spammar stackars
>>> ABC80-listan igen!
>>>
>>> Nu har jag hyfsad koll på hur
>>> textmode/attribut-färger etc. fungerar, och
>>> med Eriks hjälp har jag även lyckats vänta på
>>> VSYNC så att mina
>>> uppdateringar sker en gång per frame, vilket man
>>> givetvis vill för att få
>>> mjuk och fin animation.
>>>
>>> Nu skulle jag vilja börja leka med
>>> hiresgrafiken! Finns den beskriven
>>> någonstans?
>>> Har förstått så mycket som att man kan switcha
>>> in block av Video-RAM nere
>>> på 0000->7800 på något sätt, men hittar inte
>>> någon dokumentation på hur man
>>> gör detta (antar att det är någon OUT-port som
>>> styr det).
>>> Sedan vill jag även enabla grafikmoden på något
>>> sätt, och välja vilken av
>>> de fyra bitmapparna som får plats i VRAMet som
>>> ska visas inte heller detta
>>> har jag hittat hur man gör.
>>> I servicemanualen finns det lite exempel, men de
>>> använder bara tråkig
>>> BASIC, jag vill ju koda rätt "to the metal" i
>>> assembler!
>>> I värsta fall kanske man kan ge sig på att
>>> disassemblera basic-kommando för
>>> att hitta vad de gör?
>>>
>>> Bit för bit beskriver grafiken för ABC800C/M, men
>>> tyvärr inte ABC806 som
>>> kom ut senare. Tyvärr är kretsschemat inte så
>>> användbart heller,
>>> eftersom ABC806 använde en hel del PAL-kretsar, som
>>> då hade blivit
>>> tillgängliga.
>>>
>>> Det finns troligen något i ABC-bladen och/eller
>>> ABC-klubbens MSG, och
>>> kanske i någon annan manual. Det kanske går att
>>> hitta en manual
>>> och/eller simulator som klurat ut det, med, och
>>> tracea vad ROMmen
>>> faktiskt gör.
>>>
>>> ABC800C/Ms HR-grafik var rätt annorlunda; den
>>> kopplades automatiskt in
>>> på 0-16K plus ett PROM på 30-32K om CPUn började
>>> köra kod på de senare
>>> addresserna (M1 + MREQ användes för att klocka en
>>> vippa som lagrade
>>> A[15:11] = 01111). ABC806 hade ju 128K, dock.
>>>
>>> ABC802 hade RAM på 0-32K som kunde kopplas in via en
>>> statussignal från
>>> en av SIO-kretsarna (lite som A20 på PC
>>> kontrollerades via
>>> tangentbordskontrollern.) Jag vet att det interfacet
>>> stöddes också på
>>> ABC806, men jag tror också att det gick att
>>> kontrollera i finare detalj.
>>>
>>> -hpa
>>>
>>> _______________________________________________
>>> ABC80 mailing list
>>> ABC80 at abc80.org <mailto:ABC80 at abc80.org>
>>> http://www.abc80.org/mailman/listinfo/abc80
>>> <http://www.abc80.org/mailman/listinfo/abc80>
>>>
>>>
>>> _______________________________________________
>>> ABC80 mailing list
>>> ABC80 at abc80.org <mailto:ABC80 at abc80.org>
>>> http://www.abc80.org/mailman/listinfo/abc80
>>> <http://www.abc80.org/mailman/listinfo/abc80>
>>>
>>>
>>
>>
>
>
More information about the ABC80
mailing list