forum speccy.pl

Komputery z Z80 => MSX => Wątek zaczęty przez: siudym w 2021.11.22, 11:45:06

Tytuł: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 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?
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: tooloud w 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/ (https://tooloudtoowide.com/dev/hello-world-of-msx-czyli-assembler-starter/)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 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 ?
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: tooloud w 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 (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!
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: rzookol w 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
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 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 :)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2021.12.04, 13:28:17
Dosyc to wszystko skomplikowane, ale w sumie to moj pierwszy komputer, widac konsole sa znacznie prosciej zaprojektowane.

Przykladowy kod zapisu czegos do VRAM - rozumiem, ze do "C" pobierany jest adres portu/rejestru "VDP writing port#1" na poczatku z $0007 ?
Bo na koncu w C znajduje sie juz VDP writing port#0 - zostal od pobrany ze zmniejszonej wartosci "C" o jeden i z portu 1 zrobil sie 0?


;-------------------------------
; Write a byte in VRAM routine
;
; Entry : BHL = VRAM address
;         D = Value
; Modify: AF, C
;-------------------------------
WRTVRM:
ld a,(0007h) ; Main-ROM must be selected on page 0000h-3FFFh
inc a
ld  c,a ; C = CPU port #99h (VDP writing port#1)
 
; -> Sets the bits a16-a14 to r#14 (MSX2 or newer, remove these 9 lines if MSX1)
ld  a,h
and a,0c0h
or  a,b
rlca
rlca
 
di ; Interrupts must be disabled here
out (c),a
ld  a,080h+14
out (c),a
; <-
 
ld  a,h
and a,03fh
or  a,040h
out (c),l ; Sets the bits a7-a0 to the port#1
out (c),a ; Sets the bits a13-a8 to the port#1
ei
dec c ; C = CPU port #98h (VDP port #0)
out (c),d ; Write the value to the port#0
ret
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2021.12.05, 13:57:25
Sorki, za posty pod postem ale nie mam edycji:

Muszę poprosić o pomoc w sprawie SLOT'ów w MSX.
W Sega Master System było to dosyć jasne i proste:

$0000-$3FFF to SLOT 0 (ROM 16KB)
$4000-$7FFF to SLOT 1 (ROM 16KB)
$8000-$BFFF to SLOT 2 (ROM16KB)
$C000-$FFFF to SLOT 3 (RAM 16KB a dokladnie 8KB WRAM ($C000-$DFFF) z mirrorem na $E000-$FFFF

W przypadku MSX jest niby podobnie, ale nieco dla mnie niejasne:

- mamy 32KB MAIN ROM (BIOS), ktory jest zamapowany pod $0000-$3FFF oraz $4000-$7FFF czyli SLOT 0 i SLOT 1 - zgadza sie?
- SLOT 1 i 2 to tzw "CARTRIDGE SLOTS" - tu niejasne bo SLOT 0/1 zajmuje MAIN ROM i nie wiem czy druga czesc MAIN ROM
  jest wtedy nieuzywana i SLOT 1 zwalnia sie dla ROM w kartridzu?
- SLOT 3 to WRAM ? - tu takze nie mam jasnosci, bo gdy MSX ma 8KB WRAM to wtedy ta pamiec jest pod $E000-FFFF
  a co znajduje sie wtedy w $C000-$DFFF?
- gdy msx ma 64KB to SLOT 3 musi byc przelaczany na SUB-SLOT'y po 16KB ? (cztery banki RAM)

Ciezko to ogarnac :)

EDIT:

Zerkajac na PCB MSX to widze zlacza CARTRIDGE opisane SLOT 1 i SLOT 2. Domyslam sie teraz, ze SLOT 1 zawierajacy cartridge mapuje sie pod $4000 jednoczesnie zabierajac jakas czesc MAIN ROM / BIOS ? Natomiast zlacze SLOT 3 to pewnie expansion WRAM, czyli 8KB na plycie zamapowane pod E000 po wsadzeniu expa 8KB zamapuje sie pod C000 ?
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2021.12.16, 11:47:30
Sorki za posty pod postem.  ;)

Więc tak... Maszynka ogarnięta w stopniu mnie zadowalającym. Wysyłam proste test-demko gry platformowej, grafika MODE 0 (SCREEN 1), ROM 32KB, asembler TNIASM - nie testowane na realnym MSX:

https://dl.dropboxusercontent.com/s/cyompte6mj3j1xm/msxdemo.rom

Filmek:
https://www.youtube.com/watch?v=Kk1MtXMFPhU

Na chwilę obecną temat leci do archiwum i czeka na jakąś nieznaną jeszcze chwilę, gdy do niego wrócę i może jakąś prostą grę napiszę :)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: Tygrys w 2021.12.16, 17:19:11
Fajny sampel miejętności ;)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2021.12.18, 14:02:13
Z ciekawości poczytałem o Sega SG-1000 i przepisałem kod na ten system (jest identyczny, bo to w sumie MSX ale mający tylko 1KB WRAM).

https://dl.dropboxusercontent.com/s/4jxilxumeyvkbjy/sg1000demo.sg

Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2021.12.28, 12:43:32
Muszę powiedzieć, że MSX baardzo mi się spodobał :) Chyba największym plusem wg. mnie jest VDP oraz VRAM,
do których można zapisywać w sumie w dowolnej chwili (jedynie zwracać uwagę na wolniejszy zapis niż do WRAM),
a nie jak przyzwyczaił mnie wcześniej NES/Famicom - jedynie w czasie VBLANK lub gdy PPU jest wyłączony.
To spory plusik.

Kolejne demko, gra bombermanopodobna, dodatkowo pierwsze użycie muzyki w kodzie (prosta melodia napisana w minutę)

https://dl.dropboxusercontent.com/s/djvb13lhhfgpdns/msxbomberdemo.rom
https://dl.dropboxusercontent.com/s/h5n67zb70nsoa4d/sg1000bomberdemo.sg (dodatkowo link wersja na SG-1000)

Kursory - Sterowanie, Spacja - Bomba.

Filmik MSX:
https://www.youtube.com/watch?v=k-YXsmuMHdc

Muszę jeszcze ogarnąć MegaROM'y aby mieć możliwość użycia większego niż 32KB ROM'u cartridge. :)

Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: tooloud w 2021.12.29, 00:48:26
http://bifi.msxnet.org/msxnet/tech/megaroms.html
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2021.12.31, 11:48:29
Znam, znam  ;)

Kolejne demko, prosta gra, zbieramy serca unikając przeciwnika, który jednocześnie nam je podkrada:

ROM:
https://dl.dropboxusercontent.com/s/0q7s8otiv2txlzt/msxjalgdemo.rom

ps. Mechaniki mają błędy, trzeba nieco posiedzieć nad kodem jeszcze.

(https://i.postimg.cc/dVzRwzks/jalgdemo.jpg)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: paroos w 2021.12.31, 14:35:55
Nawet na screenie robi wrażenie. Szybko ci to idzie :D
Raz-dwa i gra go-to-wa ;)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.01.26, 18:11:13
Foryster - prosta gra na MSX1 oraz SG-1000. Kilka poziomów testowo.

Muszę jeszcze posiedzieć nad kodem MSX, zwłaszcza pod kątem muzyki (brak SFX w tej wersji bo jeszcze nie jest temat ogarnięty).

MSX ROM:
https://dl.dropboxusercontent.com/s/pqcv8rjxvga6g17/foryster_msx.rom

Sega SG-1000 ROM:
https://dl.dropboxusercontent.com/s/ihnsxgwdgy2x6zt/foryster_sg1000.sg

MSX:
(https://i.postimg.cc/c4pksCrx/Foryster-MSX.jpg)

SG-1000:
(https://i.postimg.cc/pXh1bzVc/Foryster-SG.jpg)


MSX Video:
https://www.youtube.com/watch?v=pD5JPiLqrHg

SG-1000 Video:
https://www.youtube.com/watch?v=0cVN8jLDzQ8

Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: skoti w 2022.01.26, 20:24:14
Wrzuciłem sobie na carta i pograłem przez chwilę. Fajne. Przydało by się, żeby border był w kolorze tła bo trochę przeszkadza.
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: Maryjan w 2022.01.27, 00:31:35
Fajny pomysł.
Montezuma w innym wydaniu :)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.01.27, 13:36:05
Fajnie, że działa na prawdziwym sprzęcie, bo na SG-1000 mam problemy (na każdym emu super, na konsoli problemy).

Btw: Utworek z ekranu tytułowego to mój MOD napisany w 1998 roku na Amidze z OctaMED Pro :)

https://www.youtube.com/watch?v=lWBe_gYFBDY

 
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: Maryjan w 2022.01.27, 13:45:53
Pamiętam, że w wieku szkolnym wraz z kolegą - właścicielem Atari 800 XL - graliśmy praktycznie codziennie, po lekcjach w "Montezuma Revenge". Ale to były czasy :)
Szczególnie piękny był czas, gdy gra wczytywała się z magnetofonu bez żadnego "Turbo".  :D
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.01.27, 17:55:01
Uwielbiam Jet Set Willy i Montezuma's Revenge :)

Jakiś czas temu na NES napisałem silnik wzorowany na M.R. - przepisze go pewnie za jakiś czas pod Z80:
https://www.youtube.com/watch?v=e-mi3l57ouQ

Na razie stoi projekt na etapie silnika... ::)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: Maryjan w 2022.01.27, 18:33:01
Zajefajne :)
Trzymam kciuki, że się uda zrealizować projekt w wersji dla Z80.
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.01.27, 19:49:24
Drobna zmiana - sterowanie Joystick Port 1 Fire A (na emu działa, nie wiem jak na maszynie)

https://dl.dropboxusercontent.com/s/abw7ntbkryieya3/foryster_msx_joy.rom

Poprzednia wersja na kursorach jest Online na:

https://homebrew.file-hunter.com/index.php?id=foryster
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: Kacper w 2022.01.27, 22:06:41
Z czego odpalasz rom?
Ja mam problem z mapper em bo mi nie otwiera pliku
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.01.27, 22:09:29
Mi działa na OpenMSX, BlueMSX, Emulicious, fMSX, RuMSX - takie mam. Mappera nie ma, to standardowy cartridge 32KB tryb MSX1 z dowolną pamięcią (użyte niecałe 1KB WRAM).
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: Kacper w 2022.01.27, 22:31:56
Mapper miałem na myśli ten co składa Zaxon. Z niego takie pliki 32kb startują bez problemu. Stare gry uruchamiam właśnie z niego. Nic to spróbuję jeszcze raz jutro :)
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.01.31, 22:07:21
Doszło kilka zmian np. możliwość wyboru typu sterowania na ekranie startowym (klawiatura lub joy)

https://dl.dropboxusercontent.com/s/pqcv8rjxvga6g17/foryster_msx.rom
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.05.09, 11:29:40
Ma ktoś z userów MSX kartridż "ASCII" ? Nie wiem jak dokładnie te ustrojstwo się zwie, ale chodzi o mapper  "MegaROM ASCII ASC 16KB".
Pisze silnik wielo-komnatowy, niestety na niekrtórych emulatorach (emulicious) zawiesza się gdy zejdę na ekran niżej:

https://dl.dropboxusercontent.com/s/i4p27jvfiy9b7wd/msx_engine_test.rom

Grom wie czy to wina akurat tego emu, ale fajnie sprawdzić to na realnej maszynie. Silnik dopiero w powijakach.
Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: siudym w 2022.05.13, 08:52:49
Update silnika, sporo problemów naprawione. Ale dalej nie było to odpalone na Realnym MSX:

Filmik:
https://www.youtube.com/watch?v=sn19PLKZABs

MegaROM ASCII ASC16:
https://dl.dropboxusercontent.com/s/mw0tu67yv6rht5n/msx_engine_v2.rom

Gdyby ktoś miał możliwość odpalenia na MSX to proszę dawać znać w razie zauważonych problemów :)

Tytuł: Odp: Programowanie MSX assembler - pytania, hello-world
Wiadomość wysłana przez: tooloud w 2022.05.13, 19:12:53
@siudym, jestem niestety "zarobiony" więc nie bardzo mam czas na testowanie, ale kibicuję :)