eBabbage-2nd (Z-80プログラミング実習)

素晴らしいものを発見!まずはeBabbage-2ndをダウンロード。BIOSがなくて一瞬とまどうが、MON.ROMを用意してあげれば良いと理解する。

http://homepage3.nifty.com/takeda-toshiya/babbage/index.html

アセンブラの使い方は以下を参考にしながら、「Z-80プログラミング実習」を見ながらBIOSを作成する。

http://randy3.hp.infoseek.sk/zaurus/wla/index.shtml

wla-z80.exe -o MON.ASM

wlalink.exe -v MON.LNK MON.ROM

copy MON.ROM <babbage2nd.exe 実行パス>

;****************************************
;*                                      *
;*     Babbage 2nd Monitor Program      *
;*           (c) 1986                   *
;*        Original by Takafumi Aihara   *
;*                                      *
;*   regenerated Z80 assembly source    *
;*                 by tanam             *
;*                                      *
;*      20110618 Initial Release        *
;*                                      *
;****************************************

.MEMORYMAP
SLOTSIZE $200
SLOT 0 $0000
DEFAULTSLOT 0
.ENDME

.ROMBANKMAP
BANKSTOTAL 1
BANKSIZE $200
BANKS 1
.ENDRO

.EQU STACK: $1800
.EQU DA: $17C0
.EQU AL: DA: + 1
.EQU ST: AL: + 2

.EQU PAD: $20
.EQU PAC: $21
.EQU PBD: $22
.EQU PBC: $23

.ORG $0000
JP MON

.ORG $0040
TBL1:	.db $BF, $86, $DB, $CF, $E6, $ED, $FD, $87, $FF, $E7, $F7, $FC, $B9, $DE, $F9, $F1

TBL2:	.db $4F, $87, $BC, $0F, $07, $00, $01, $00, $00, $00, $00, $10, $00

.ORG $0070
MON:	LD SP,STACK:
	LD A,$17
	LD I,A
	IM 2
;
	LD HL,TBL2
	LD BC,$0321
	OTIR
	LD BC,$0223
	OTIR
;
	LD DE,$17BC
	LD BC,$0008
	LDIR
	IN A,(PAD:)
;
	EI
	LD DE,TBL1
	LD C,PBD:
L2:	LD A,(ST:)
	BIT 5,A
	JP NZ,L0
	LD HL,(AL:)
	LD A,(HL)
	LD (DA:),A
	LD HL,DA:
	LD B,$01
L3:	LD A,B
	AND $2A
	JP NZ,L1
	LD A,(HL)
	AND $0F
L4:	CALL CONV
	RLC B
	BIT 6,B
	JP NZ,L2
	JP L3
L1:	LD A,(HL)
	AND $F0
	INC L
	RRCA
	RRCA
	RRCA
	RRCA
	JP L4
L0:	RES 5,A
	LD (ST:),A
	XOR A
	OUT (PBD:),A
	LD HL,(AL:)
	JP (HL)
;
CONV:	PUSH AF
	PUSH DE
	OR E
	LD E,A
	LD A,(DE)
	OUT (PBD:),A
	AND $7F
	OUT (PBD:),A
	OUT (C),B
	CALL TIME
	POP DE
	POP AF
	RET
;
TIME:	PUSH AF
	PUSH BC
	LD BC,$288
T1:	DEC BC
	LD A,B
	CP $0
	JP NZ,T1
	POP BC
	POP AF
	RET
;
.ORG $0100
	PUSH AF
	PUSH BC
	PUSH DE
	PUSH HL
	IN A,(PAD:)
	LD B,A
	LD HL,ST:
	BIT 7,(HL)
	JP NZ,DAIN
	BIT 6,(HL)
	JP NZ,ADIN
	CP $10
	JP Z,GO
	CP $11
	JP Z,ADL
	CP $12
	JP Z,DAL
	CP $13
	JP Z,ADINC
RT:	POP HL
	POP DE
	POP BC
	POP AF
	EI
	RETI
;
GO:	LD A,(ST:)
	SET 5,A
	LD (ST:),A
	JP RT
;
ADL:	LD A,$4F
L5:	LD (ST:),A
	JP RT
DAL:	LD A,$83
	JP L5
;
ADIN:	BIT 4,A
	JP NZ,RT
	BIT 3,(HL)
	JP NZ,ADIN1
	BIT 2,(HL)
	JP NZ,ADIN2
	BIT 1,(HL)
	JP NZ,ADIN3
	LD DE,AL:
	RES 6,(HL)
	RES 0,(HL)
L6:	CALL MIXR
	JP RT
ADIN3:	LD DE,AL:
	RES 1,(HL)
L7:	CALL MIXL
	JP RT
ADIN2:	LD DE,AL:+1
	RES 2,(HL)
	JP L6
ADIN1:	LD DE,AL:+1
	RES 3,(HL)
	JP L7
DAIN:	BIT 4,A
	JP NZ,RT
	BIT 1,(HL)
	JP NZ,DAIN1
	LD DE,DA:
	RES 7,(HL)
	RES 0,(HL)
	CALL MIXR
L8:	LD HL,(AL:)
	LD (HL),A
	JP RT
DAIN1:	LD DE,DA:
	RES 1,(HL)
	CALL MIXL
	JP L8
MIXR:	LD A,(DE)
	AND $F0
L9:	OR B
	LD (DE),A
	RET
MIXL:	RLC B
	RLC B
	RLC B
	RLC B
	LD A,(DE)
	AND $0F
	JP L9
ADINC:	LD HL,(AL:)
	INC HL
	LD (AL:),HL
	JP RT
;
END