[abc80] Högupplösningsgrafik på ABC806

Ola Andersson ola at organ.su.se
Tors Jan 25 04:10:30 PST 2018


Ja, det är väldigt bra att ha en bra emulator.
Jag har fått till det så att jag kan generera .bac-filer direkt från min 
utvecklingsmiljö (kör SublimeText 3), men det är ju lite jobb att sen 
fixa en .dsk-fil i ABCExplorer och sen starta i ABCWin.
Om man skulle få önska så vore det nice att kunna skicka in en bac-fil 
direkt som argument till ABCWin. Eller går det redan?

Jag kan testa dina 806-program åt dig tills vidare om du vill.

On 2018-01-25 12:45, Andreas Gustafsson wrote:
> Suveränt att du fortsätter uppdatera emulatorn, den är ovärderlig vid
> utveckling!
> 
> Jag tror nästan att jag ska ta och vänta in att jag får tag på en riktig
> 806a nu innan jag experimenterar vidare, känns som det vore bra att ha den
> och provköra och verifiera på allteftersom. Jag kommer säkert stöta på
> massor med problem, 99% kommer vara jag som klantat till det och 1% kommer
> kanske vara att det är något som saknas i emulatorn, så för att undvika att
> rapportera massa falska issues vill jag kunna testa själv först!
> 
> /Andreas
> 
> 2018-01-24 20:47 GMT+01:00 Erik Isaksson <exon at lysator.liu.se>:
> 
>> 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>:
>>
>>> 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 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
>>>>>> http://www.abc80.org/mailman/listinfo/abc80
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> 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
> 


-- 
Ola Andersson
Organisk Kemi
Stockholms Universitet
08-163743


More information about the ABC80 mailing list