Autor Wątek: Programowanie MSX assembler - pytania, hello-world  (Przeczytany 361 razy)

siudym

  • *
  • Wiadomości: 32
Programowanie MSX assembler - pytania, hello-world
« dnia: 2021.11.22, 11:45:06 »
Czy ktoś programuje MSX ? Jaki jest najpopularniejszy assembler dla MSX - z tego co widzę VASM_Z80 ?
Informacji jest dosyć sporo na temat architektury, ale nie znalazłem ani jednego sensownego "hello world" który można by przeanalizować.

Próbowałem przepisać kod z tego tutoriala ale nic nie działa:
https://www.youtube.com/watch?v=jqL9zCZoWUU

Znacie jakieś przykładowe źródła?

tooloud

  • Moderator
  • *****
  • Wiadomości: 3031
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Programowanie MSX assembler - pytania, hello-world
« Odpowiedź #1 dnia: 2021.11.23, 15:07:39 »
pasmo --msx

i da radę. Ten hello world Ci nie działa?

prosty tutek krok po kroku, nie da się pomylić :)
https://tooloudtoowide.com/dev/hello-world-of-msx-czyli-assembler-starter/
« Ostatnia zmiana: 2021.11.23, 18:01:13 wysłana przez tooloud »
dużo sprzętu mało czasu.

siudym

  • *
  • Wiadomości: 32
Odp: Programowanie MSX assembler - pytania, hello-world
« Odpowiedź #2 dnia: 2021.11.25, 14:14:12 »
Super, dzięki.  :) A jak się ma sprawa z kodem ale bootowany z kartridża ? Jako pierwszy cel chciałbym:

1. Pominąć czcionki z BIOS/ROM, użyć je z osobnego pattern table (tilebased) czyli sam narysuje grafiki.
2. Ekran narysowany będzie na bazie tilesów 8x8 z pattern table używając TileMap pod adresem $1800-1AFF (768 bajtów = jeden bajt na 8x8 tile = 256x192)

Z tego co widzę MSX VDP jest podobny do tego z 8-bitowych konsol SEGA:

0000   07FF   VRAM: Main Tile Patterns (1/3)
0800   0FFF   VRAM: Extra Tile Patterns (2/3)
1000   17FF   VRAM: Extra Tile Patterns (3/3)
1800   1AFF   VRAM: Tilemap
1B00   1B7F   VRAM: Sprite Attributes
1B80   1BAF   VRAM: Palette Table
2000   37FF   VRAM: Colormap
3800   3FFF   VRAM: Sprite Patterns

- TileMap ma 768 tilesów 8x8 (256x192) i jest jedno-bajtowa czyli jeden bajt jednego tile zawiera w sobie numer 0-255 grafiki 8x8 z pattern table.
- Paleta jest 16 kolorówa i jest z tego co czytam sztywna i sprzętowo określone kolory ?
- Jeden tile z TileMap ma głębię kolorów 2-bitowa? (2bpp) ? czyli kolor0 + 3 pozostałe ?
- Sprites 32 sztuki, po 4 bajty na jeden (X,Y,pattern,ex-color) czyli 128 bajtów w VRAM ($3800- 3FFF)

- Ogólnie jak jest z dostępem do VDP/VRAM ? Czy można mieć dostęp w dowolnej chwili np. w pętli procesora, czy trzeba wykonywać zapis/odczyt podczas jakiegoś przerwania np. VBLANK ?

tooloud

  • Moderator
  • *****
  • Wiadomości: 3031
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Programowanie MSX assembler - pytania, hello-world
« Odpowiedź #3 dnia: 2021.11.25, 16:12:52 »
Z MSX i jego właściwościami nie pomogę, interesuje mnie tylko od MSX2 w górę. Pewne rzeczy ogólne są takie same w MSX1/2:

Kartów były x rodzajów, do MSX jedynki zwykle 16 albo 32k, najprostszy 16k raw binary ma taki nagłówek:
db "AB" ; to jest ID dla tzw. "additional ROM"
dw Runadr       ; adres startu kodu przy autostarcie carta
dw 0 ; pomijasz, chyba, ze z BASICa przez CALL chcesz cos wywolywac z karta
dw 0 ; ten adresik jest dla obslugi dodatkowych "device" dodawanych do systemu przez cart np. jak robisz karta który jest kontrolerem dysku etc.
dw 0 ; tutaj wrzucasz adresik programu w BASICu, jeżeli zaszywasz go w ROMie.
dw 0,0,0      ; nieużywane

pamiętając, że musisz wygenerować plik wielkości ROMu, w tym wypadku 16k czyli na końcu dodajesz odpowiednio

DEFS adreskońcowyROM, 255
aha - kompilujesz pod $4000.

1. mode 0 do grafiki (czyli screen1 z BASICa), 32x24x8 czyli 256x192px Aha - masz w tym trybie colorclasha czyli max 2 kolory z 16 ze stałej dla MSX1 palety.
2. szukaj manuali do gfx na Coleco, TI99/4A bo tam jest ten sam VDP czyli TMS9918A.
3. max 32 sprite'y ale w poziomie na raz na linię tylko 4. Spirte'y są jednokolorowe, efekt nakładania nie ma OR, to dopiero w MSX2.
4. VRAM masz 16k albo 4k, te starsze MSX1 tak miały.

ogólnie: http://bifi.msxnet.org/msxnet/tech/tms9918a.txt

poczytaj najpierw o architekturze MSXa, nie u tego człowieka do którego kanału linkowałeś, bo on nie bardzo chyba Ci wyjaśnia co i dlaczego, poczytaj o dostępie do VDP (koderzy zwykle robią go sekwencyjnie), na których bitach jakiego rejestru VDP włącza się np. przerwania, kiedy jak procek uaktualnia sprite'y VDP, o strukturze slotów RAM etc. Generalnie do MSX1 jest mniej materiałów w sieci, ale w sumie się nie dziwię - mnie ta generacja totalnie nie zachwyciła i ją olewam.

Na Segach się nie znam, nie pomogę. Powodzenia!
« Ostatnia zmiana: 2021.11.25, 16:27:48 wysłana przez tooloud »
dużo sprzętu mało czasu.

rzookol

  • ***
  • Wiadomości: 212
  • Miejsce pobytu:
    Lublin/Stasin
Odp: Programowanie MSX assembler - pytania, hello-world
« Odpowiedź #4 dnia: 2021.11.25, 19:20:35 »
MSX jest prawie kompatybilny z Sega SG-1000 (mają ten sam VDP są konwertery na format MSX), a że MasterSystem jest prawie kompatybilny z MSX to można konwertować z MSX na MasterSystem
+2, +3, CPC128Plus, kilka Amigi, kilkadziesiąt Maków, walające się Commodore

siudym

  • *
  • Wiadomości: 32
Odp: Programowanie MSX assembler - pytania, hello-world
« Odpowiedź #5 dnia: 2021.11.26, 09:46:40 »
To już spora pomoc, dzięki. Za jakiś czas zabiorę się za temat i w razie problemów będę pisał :) Co do filmiku i samej stronki "ChibiAkumas" to podchodzę ze sporym dystansem bo tam sporo informacji jakby po łebkach przekazywane i mocno na ilość systemów idą (masowe hello-worldy). Nawet mając już spore doświadczenie z 6502/NES byłem zakręcony czytając tutorial o nim :)