2024/06/27

Játékkonzolos ötletem

Már jó sok éve akarok egy játékkonzolt építeni. (2021. novembere óta azt hiszem). De valamiért minden verziót abbahagytam a tervezési fázisnál.

Természetesen azt lehet gondolni, hogy csak venni kell egy alaplapot, merevlemezt, meg minden szirszart, pont úgy, ahogy egy PC-t építene valaki.

Viszont nem ilyen konzolt szerettem volna mindig is csinálni, hanem egy olyat, aminek teljesen saját hardvere van. Egy ehhez hasonlót. Arra aztán tényleg büszke lehet lenni.

Azonban mivel nem gyártanak nagyon sok olyan chipet, amivel le tudnám a hardver tervezési idejét rövidíteni (és semmiképp sem szeretnék olyan hardvert használni, amit nem gyártanak, és nincs alternatíva), ezért saját szintetizátort és videokimenetet kell készítenem.

Itt vannak potenciális specifikációk, amiket el szeretnék érni:
    ¤ Intel 8051-es mikrokontroller főprocesszorként (IC)
        ¤ 32kB 64kB extra RAM
        ¤ 32kB 64kB külső ROM
        ¤ 10MHz frekvencia
        ¤ Scanline és időzítőalapú megszakítás
        ¤ (Esetleg még pár időzítő a beépítetteken kívül)
    ¤ SID-szerű PSG (IC×4, 4 oszcillátor, 4 modulátor)
        ¤ 4 hangcsatorna
        ¤ FM és AM modulálhatóak, mindegyik külön-külön
        ¤ Felfutás-Tartás-Lecsengés (ASR) hangerőszabályozó
        ¤ Áteresztő szűrők (alul, felül)
        ¤ Előre definiált dobkészlet (szűrős zajgenerátorral megoldva)
        ¤ 256 darab frekvencia (f=16×? Hz, ahol a "?" a 256 érték egyike)
        ¤ Pulzus, háromszög, szinusz, fűrészjel (ezeket invertálni is lehet)
        ¤ LFSR zajgenerátor
        ¤ Külső hangbemenet
        ¤ Monó hangkimenet, és bemenet
        ¤ Leolvasható hangcsatornák, és ASR értékek
    ¤ Megadrive-szerű videogenerátor
        ¤ PAL szabvány
        ¤ Komponens (component) videokimenet, hasonlít az AV kompozithoz.
        ¤ 256 szín, ahol a színbyte-ok így néznek ki helyiértékenként:
            ¤ 128: fényerő×2
            ¤ 64: fényerő
            ¤ 32: kék különbség×4
            ¤ 16: kék különbség×2
            ¤ 8: kék különbség
            ¤ 4: piros különbség×4
            ¤ 2: piros különbség×2
            ¤ 1: piros különbség
        ¤ 3 rétegű játékmező
            ¤ Objektumréteg
            ¤ Merev háttér (nem alkalmazható rá semmiféle torzítás)
            ¤ Hajlékony háttér (alkalmazható rá vektormátrixos torzítás)
            ¤ Minden rétegnek egy 16 színű paletta áll rendelkezésre
            ¤ A két háttérréteg 40×30 egységből áll, mindkettő pixelenként eltolható jobbra
            ¤ Egy egység 8×8 pixeles, minden pixel 4 bites (a 16 színű paletta miatt), vagyis egy teljes egység 4×8=32 byteos
            ¤ Ki lehessen kapcsolni a kimenetet, így a processzor irányítja a megjelenő színt
            ¤ Le lehessen takarni a képernyő minden széléről 1 egységet
    ¤ Hardver
        ¤ Két Atari2600 kompatibilis joystick (4 iránygomb, egy tűzgomb)
        ¤ Külső hangbemenet a játékkártya-porton van
        ¤ Extra kommunikációs és soros port, a CPU 1-es portjára kötve
        ¤ Felfüggesztő kapcsoló, ami az órajelet kikapcsolja, és a hangot is lenémítja, illetve a kommunikációs porton is jelet ad
        ¤ Sztereó hangkimenet kapcsoló, amivel az egyik csatorna hangját el lehet tolni, 0,02sec-mal
        ¤ 3,5mm jack hangcsatlakozó
    ¤ Kiegészítők
        ¤ Majd a legtávolabbi jövőben egy CD-s készülék
        ¤ Toldalék a kártyaportra, amivel mikrofont lehet a külső hangbemenetre kötni, így gameplayt lehessen felvenni rögzítőkártyával

2024/06/17

C64 VIC-2 átmappelés

 Visszatértem jejeje.

Megint gyakoroltam assemblyt. C64C emulátorban természetesen.
Egy egész délutánt kínlódtam rá, de sikerült megalkotni egy kis programot (utility).
Annyit csinál, hogy a VIC-2 chipet átmappeli a RAM $4000-$7FFF blokkjába, és kiveszi a beépített karaktertárolót, és a BASIC-et is. Ez utóbbinak ugyan nincs hatása valamiért, majd esetleg utánanézek, vagy (mivel kirakom ide a forráskódot, hogy másoljad lefele) esetleg te is megpróbálhatod, ha értesz hozzá. Itt van a segítség.

A program eredménye

*a program NEM tartalmaz karakterkészletet, azt utánpótolni kell. Pl. innen.

Forráskód itt érhető el.

2024/06/09

6510-es assembly gyakorlás

 Elég sok ideje nem volt rovat, szóval most írok egyet.

 Gyakoroltam 6510-es assembly (6502-esként többen ismerik), emulált Commodore 64C környezetben. Egy olyan programot írtam, ami diszkós/karneválos fényeket idéz elő, és garantált epilepsziarohammal jár együtt :-). Kipróbáltam volna egy igazi konzolon is (mert hogy nekem van biza), csak mivel nincs a 64-ben beépített assembler de még RAM monitor sem (aminek egyáltalán nem örülök), ezért minden gépi kódos progit egy saját BASIC programmal kell betölteni bájtról bájtra. És mivel a diszkó.bin (maga a 6510-es program) 145 bájtos, ezért 145× nagyobb a hibalehetőség, mintha egy bájtos lenne.

Alább van videós demonstráció is.