[abc80] Högupplösningsgrafik på ABC806

Andreas Gustafsson andreas.gustafsson at gmail.com
Ons Jan 24 07:04:02 PST 2018


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

> 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>:
>
>> 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>:
>>
>>> 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
>>>>>>>>>> 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
>>>> http://www.abc80.org/mailman/listinfo/abc80
>>>>
>>>
>>> _______________________________________________
>>> ABC80 mailing list
>>> ABC80 at abc80.org
>>> http://www.abc80.org/mailman/listinfo/abc80
>>>
>>
>>
>>
>
>


More information about the ABC80 mailing list