OldComp.cz
https://www.oldcomp.cz/

Oh!X 1988/8 - seriál o programování her v assembleru
https://www.oldcomp.cz/viewtopic.php?f=135&t=10428
Stránka 11

Autor:  vaclavpe [ 08.10.2021, 19:08 ]
Předmět příspěvku:  Oh!X 1988/8 - seriál o programování her v assembleru

Ahoj, na twitteru jsem našel jednu horizontální střílečku pro MZ-700 s komentářem, že je dělaná podle seriálu v Oh!X. Takže to zkouším louskat. Je tam popis, jakým způsobem funguje zobrazení na různých Sharpech.

Zatím jsem se prokousal MZ-700 - to známe, VRAM je od adresy D000h - a Sharp X1.
Tam je textová VRAM umístěna na portech od adresy 3000h. Tj. LD BC,vramaddr; LD A,asciiznak; OUT (C),A

Na MZ-2000, 2200, 2500 se přepínají banky.

Ten seriál je vlastně kurz pro začátečníky, tak kdybyste se někdo chtěli začít učit assembler Z80, tak se zkuste přes Google translator podívat. Je tam spousta kvízů.

Autor:  Stano [ 11.10.2021, 09:13 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Dobrý deň,

Oh!X je toto?

Autor:  vaclavpe [ 11.10.2021, 09:17 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Stano píše:
Dobrý deň, Oh!X je toto?


Ano, je, ale začátek seriálu je tady: https://archive.org/details/OhX_1988-08

Autor:  Stano [ 11.10.2021, 09:35 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Ďakujem :)

Autor:  vaclavpe [ 11.10.2021, 10:35 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Jen pro zajímavost, jakým způsobem se tiskne v ASM znak A do levého horního rohu na různých platformách Sharp:

MZ-700 asi mnoho z nás dobře zná - nepoužívá se ASCII, ale tzv. display code:
Kód:
      LD   HL,D000H
      LD   A,01    ; 'A' v display kodu MZ700
      LD   (HL),A
      RET

X1 má VRAM na portech:
Kód:
      LD   BC,3000H
      LD   A,'A'   ; ASCII znak
      OUT  (C),A
      RET

MZ200 má přepínání bank na portu E8 (tam se nastavují i RGB roviny pro grafickou VRAM)
Kód:
      CALL VOPEN   ; prepnout banku na VRAM
      LD   HL,D000H
      LD   A,'A'   ; ASCII znak
      LD   (HL),A
      CALL VCLOSE  ; prepnout VRAM zpet na RAM
      RET
VOPEN:
      DI
      IN   A,(0E8H)
      OR   0C0H    ; textova VRAM
      OUT  (0E8H),A
      RET
VCLOSE:
      IN   A,(0E8H)
      AND  07FH
      OUT  (0E8H),A
      EI
      RET

Finálně MZ-2500 používá segmenty podobně jako MemExt k MZ-800, až na to, že my MemExt přepínáme trochu jinak:
Kód:
      CALL VOPEN   ; prepnout banku na VRAM
      LD   HL,E000H
      LD   A,'A'   ; ASCII znak
      LD   (HL),A
      CALL VCLOSE  ; prepnout VRAM zpet
      RET
VOPEN:
      DI
      LD   A,07   
      OUT  (0B4H),A  ; sedmy segment E000-FFFF
      IN   A,(0B5H)
      LD   (OLDMB),A ; ulozit aktualni mapovani stránky
      LD   A,07   
      OUT  (0B4H),A
      LD   A,38H     ; na 38H je textova VRAM
      OUT  (0B5H),A
      RET
VCLOSE:
      LD   A,07   
      OUT  (0B4H),A  ; do 7. segmentu
      LD   A,(OLDMB) ; nastavime
      OUT  (0B5H),A  ; puvodni stranku
      EI
      RET
OLDMB:DEFB 0

Pěkné, což ? ;)

Autor:  dex [ 11.10.2021, 11:18 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Hlavně u té X1 asi někdo přemýšlel.
64K RAM k dispozici, a VRAM, byť je celkem malá, v ní nezabírá místo.
A komunikace s ní je rychlejší, než v případě TMS 9929A, která taky visí na portech.

Autor:  vaclavpe [ 11.10.2021, 11:36 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

dex píše:
Hlavně u té X1 asi někdo přemýšlel.
64K RAM k dispozici, a VRAM, byť je celkem malá, v ní nezabírá místo.
A komunikace s ní je rychlejší, než v případě TMS 9929A, která taky visí na portech.

Možná proto byl Sharp X1 později výrazně oblíbenější, než řada MZ. jak se komunikuje s TMS9929 ?

Autor:  dex [ 11.10.2021, 12:33 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Třeba http://map.grauw.nl/articles/vdp_tut.php (popis čipu ZDE).
Například zápis na adresu do VRAM - musím natříkrát poslat adresu (protože sedmibitově - 7+7+2 bity, u V9938 pak 7+7+5, protože větší RAM) s příznakem zápisu nebo čtení (každý zápis jsou dva OUTy - nejprve zapisovaná hodnota, pak číslo registru, do kterého patří), takže jen nastavení adresy je řada několika OUTů a to ještě pořád není zapsaná žádná hodnota, to se pak provede na jiném portu.
A během práce musí být zakázané přerušení, aby se během něj nezměnily zapsané hodnoty :) (neplatí pro v9938).

Autor:  vaclavpe [ 12.10.2021, 13:35 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Ahoj, tak tady je pokračování - attributová VRAM:

MZ700 - od adresy D800h:
bit 2..0 barva pozadí
bit 6..4 barva znaku
bit 7 přepínání banky CGROM

X1 - porty od adresy 2000h:
bit 2..0 barva znaku
bit 3 - inverze barev
bit 4 - blikání
bit 5 - PCG/ROMCG
bit 6 - dvojnásobná výška
bit 7 - dvojnásobná šířka

X1turbo má navíc na portech od 3800h bit 7 jako Kanji přepínač

MZ-2000 - je černobílý, tam barva nefunguje (MZ-2200 už je barevný, ale dělá se to tam nějak komplikovaně, textová VRAM snad atributy nemá, ale používá se přebarvení v grafické VRAM)

MZ2500 - opět v bloku 38h, offset 800h:
bit 2..0 barva znaku
bit 3 - osmibarevný PCG
bit 5..4 - selektor PCG0-PCG3
bit 6 - inverze barev
bit 7 - blikání
Od offsetu 1000h je bit 7 přepínač ROMCG/PCG

Jak se zdá, jediný MZ-700 umí nastavit barvu znaku i barvu pozadí. U ostatních se to zřejmě dělá přes grafický overlay. Ale dál jsem se zatím neprokousal.

Autor:  vaclavpe [ 01.11.2021, 23:41 ]
Předmět příspěvku:  Re: Oh!X 1988/8 - seriál o programování her v assembleru

Tak jen pro zajímavost - dostal jsem se do prosincového čísla seriálu - čtení klávesnice na Sharp X1 (používá se sub-CPU 80c49):
Kód:
1) počkej až bit 6 portu 1A01h spadne do 0.
2) pošli E6h na port 1900h.
3) počkej až bit 5 portu 1A01h spadne do 0.
4) IN data z portu 1900h. funčkní bajt (GRAPH,CAPSLOCK,KANA,SHIFT,CTRL...)
5) znovu počkej až bit 5 portu 1A01h spadne do 0.
6) IN data z portu 1900h.ASCII kód klávesy
Pro zvídavé - více informací o komunikaci s 80c49 je v SHARPX1TecRef na archive.org od strany 78. Komunikace s X1Turbo je trošičku jiná.

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/