tanamの日記

2018-07-07

MSX/SG-1000カートリッジ開発その4

18:31

どんな感じで実装して行くかメモしておきます。

BYTE/TEXTはdb、DATAはdwで書けます

MP0RLE:db   080h,0FFh,080h,086h,001h,002h,080h,040h
       db   003h,004h,005h,006h,080h,03Eh,003h,004h
       db   087h,001h,005h,006h,008h,009h,00Ah,000h
       db   008h,009h,00Ah,000h,008h,009h,00Ah,000h
       db   008h,080h,02Fh,00Bh,00Ch,087h,003h,00Dh
       db   00Eh,00Fh,010h,000h,011h,00Fh,010h,000h
       db   011h,00Fh,010h,000h,011h,080h,02Eh,012h
       db   013h,087h,005h,014h,015h,016h,017h,018h
       db   095h,007h,080h,02Dh,019h,01Ah,087h,013h
       db   080h,02Ch,012h,013h,087h,014h,080h,02Bh
       db   012h,013h,087h,015h,080h,02Ah,019h,01Ah
       db   087h,016h,080h,029h,00Bh,00Ch,087h,017h
       db   080h,028h,003h,004h,087h,018h,080h,027h
       db   00Bh,00Ch,087h,019h,080h,026h,019h,01Ah
       db   087h,01Ah,095h,026h,01Bh,087h,0E7h,080h
       db   000h

(省略)

SPRPAT:
SHPB0:	dw 00000h,00000h,00000h,00104h	;* Color 15
	dw 02001h,00800h,00000h,00000h
	dw 00000h,00007h,00301h,0D937h
	dw 0D82Fh,07101h,00307h,00000h

(省略)

TXTHSR: db "- HIGH SCORE RANKING -"
TXT1ST: db "1ST"
TXT2ND: db "2ND"
TXT3RD: db "3RD"
TXT4TH: db "4TH"
TXT5TH: db "5TH"
TXT6TH: db "6TH"
TXT7TH: db "7TH"
TXT8TH: db "8TH"
TXTPTS: db "PTS"
TXTSPO: db "SPEECH OFF"

2018-07-06

MSX/SG-1000カートリッジ開発その3

10:59

どんな感じで実装して行くかメモしておきます。

JMP/B/BLはシンプルです。

;	B @START
	jmp	START

(省略)

;	   JMP	MAIN4
	jmp	MAIN4

(省略)

;*	   Init graphics mode
;	   BL	@GMODE
	call	GMODE

(省略)

;*********************************************************************
;*
;* Set graphics mode
;*
GMODE:  ;MOV  R11,*R10+			* Push return address onto the stack

;	   LI	R0,>0000			* Reg 0: Graphics 1 mode,
	lxi	h,00000h

;	   BL   @VWTR				* external video off.
	call	VWTR

(省略)

;	   DECT R10					* Pop return address off the stack
;	   MOV  *R10,R11
;	   B	*R11
	ret

;*// GMODE

2018-07-05

MSX/SG-1000カートリッジ開発その2

10:45

きっかけはTI-99/4AのHomebrew作品でした。

http://atariage.com/forums/topic/158467-pitfall-binaries-and-source-code/

COLECOVISIONのPITFALL!を解析してTI-99/4Aで動かしたとのことです。

その後でMSX(Z80)のドアドアを解析して、ぴゅう太(TMS9995)で動かす人も現れました。

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

そこでぴゅう太プログラムを解析して、MSXで動かせるんじゃないかという疑問がわきました。

どんな感じで実装して行くかメモしておきます。まずはレジスタR0〜R15の表現方法です。Z80ではSPはそのまま使おうと思います。

;	   LWPI	WRKSP			* >F000
;	   LI	R10,STACK 

R0	EQU	0F000h
R1	EQU	0F002h
R2	EQU	0F004h
R3	EQU	0F006h
R4	EQU	0F008h
R5	EQU	0F00Ah
R6	EQU	0F00Ch
R7	EQU	0F00Eh
R8	EQU	0F010h
R9	EQU	0F012h
R10	EQU	0F014h
R11	EQU	0F016h
R12	EQU	0F018h
R13	EQU	0F01Ah
R14	EQU	0F01Ch
R15	EQU	0F01Eh

;	   MOV	R0,R1
	lhld	R0
	shld	R1

2018-06-30

MSX/SG-1000カートリッジ開発

16:24

MEGA MSX ADAPTERをつかって、MSX/SG-1000カートリッジを開発しようと思います。プログラムは、Absolute assembler for i8080/i8085にて実装していきます。

まずはMSX/SG-1000の両方で動かせるメモリーマップを考えてみました。

メモリーマップ

0000-3FFF CART
4000-7FFF RAM
8000-BFFF CART(EXT)
C000-FFFF RAM

ORG 0000でプログラム開発(0000-7FFF)して、MSX8000からSG-1000は0000から実行します。ブートストラップで8000-BFFFを4000-7FFFにコピーすることで、サブルーチンおよび初期値をもった値を実現します。またワークRAMはC000-FFFFを利用します。

これでI/Oを除けば、ほぼ共通のプログラムで開発できると思います。このような変則的なメモリーマップは、普通のカートリッジエミュレータでは実行できないのですが、SG-1000 Loaderカートリッジのメモリマッパーを書き換えることで実現しようと思っています。

http://www.geocities.jp/parallel_computer_inc/msx.html

もちろんMSX-DOSでローダーをつくれば、MEGA MSX ADAPTERやSG-1000 Loaderカートリッジなしでも実行できるはずです。

mosakumosaku 2018/06/30 21:21 MSX/SG-1000の両方で動作するとはユニークなアイディアですね。MSXもSG/SCも似たようなハードなので共通化できる部分は多いかと思います。また似たようなハードを持つゲーム機も多かったですので利用できる処理も多くなりそうです。わたしもtanamさん紹介のサイトを見てSG/SCのプログラミングを始めたところです。これをきっかけに有志の方々が増えればよいですね

tanamtanam 2018/07/05 10:32 MSX/SG-1000の両方で動作するアイデアは、MEGA MSX ADAPTERをMSX-DOSなしで使うSG-1000 Loaderをi8080で書いて行けそうだと思いました。
http://d.hatena.ne.jp/tanam/20180610/1528620839

2018-06-14

ぴゅう太勉強会その2

07:34

ぴゅう太でオリジナルカートリッジをつくる勉強会アジェンダです。

メモリーマップ

http://www43.tok2.com/home/cmpslv/Pyuuta/EnrPt.htm

0000-3FFF BIOS
4000-7FFF CART(EXT)
8000-BFFF CART
C000-DFFF FREE
E000-EFFF I/O
F000-F0FF RAM
F100-FFEF UNUSE
FFF0-FFFF CPU
  • ぴゅう太/mk2では拡張16KB RAM(6000-7FFF/C000-DFFF)が、Jrでは拡張8KB RAM(6000-7FFF)が利用可能です

8/16KB ROMカートリッジ

8000-9FFF 8KB
8000-BFFF 16KB

24/32KB ROMカートリッジ(要ゲームアダプタ)

4000-5FFF/8000-BFFF 24KB (RAM&MEGAROMカートリッジ)
4000-BFFF 32KB (32KBフラッシュメモリカートリッジ)

ぴゅう太mk2で動かすために以下のマジックナンバーを埋め込みました

5344 BYTE  >00,>02,>20,>34

TMS9918 グラフィックII

http://www43.tok2.com/home/cmpslv/Sg1000/9918m1.htm

0000-17FF VDP_REG_PDT パターンテーブル
1800-1BFF VDP_REG_SDT スプライトパターンテーブル
1C00-1EFF VDP_REG_SIT ネームテーブル
1F00-1FFF VDP_REG_SAL スプライト属性テーブル
2000-37FF VDP_REG_CT カラーテーブル
3800-3FFF G-BASIC プログラム

テープゲームのROM

http://d.hatena.ne.jp/tanam/20180216/1518774706

GAMELIB16ゲーム開発

http://d.hatena.ne.jp/tanam/20180304/1520119296

16色のBMPファイルをRAM&ROMカートリッジ2を使ったGAMELIB16用に取り込むツール(gfx2bin)も開発しました

http://d.hatena.ne.jp/tanam/20180301/1519904076

>bmp2swan.exe fonts.bmp
>gfx2bin.exe fonts.gfx
----------------
8000 8FFF GAME
----------------
9000 9FFF DCSG
----------------
A000 B7FF REG_PDT
----------------
B800 BFFF UNUSE
----------------
4000 57FF REG_CT
----------------
5800 5FFF UNUSE
----------------

スプライト機能

http://d.hatena.ne.jp/tanam/20180108/1515378755

メガロム開発

http://d.hatena.ne.jp/tanam/20180505/1525497380

ぴゅう太BIOSの音楽演奏機能を使ってみる

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