-------------TOS-14-------------
;+++グラフィック画面左上のデータを外部RAM6116に書き込む+++
ADDRESS = 0EAD0H
*TOS14	PUSH AF
	PUSH BC
	PUSH DE
	PUSH HL
	PUSH IY
	LD IY,0528H	;グラフィックRAMアドレス
	CALL *WR128	;128行書き込みルーチンへ
	CALL *INIT8255	;8255の初期化
	LD IY,0528H	;グラフィックRAMアドレス
	LD H,6
	DI		;割り込み禁止(高速化のため)
	LD A,0DDH
	OUT(0F0H),A	;I/Oアドレス0FOHに0DDHを書き込み
	LD B,2
*L2	LD L,0
*L1	LD D,(IY+0)
	CALL*WR6116	;外部RAM6116に1バイト書き込み
	INC IY
	INC L
	JP NZ,*L1	;LOOP L1
	INC H
	DEC B
	JP NZ,*L2	;LOOP L2
	LD A,11H
	OUT (0F0H),A	;I/Oアドレス0FOHに011Hを書き込み
	EI		;割り込み許可
	CALL *ON_LED	;8255初期ルーチンその2
	POP IY
	POP DE
	POP BC
	POP AF
	RET

;+++ワークエリア+++
ADDRESS = 0EB20H
*DATA1	82,05,00,0B

;+++8255初期化モジュール+++
;I/Oポート73Hに4バイトデータを書き込む
ADDRESS = 0EB30H
	PUSH AF
	PUSH BC
	PUSH HL
	LD C,73H
	LD B,4
	LD HL, *DATA1
	OUTIR
	POP HL
	POP BC
	POP AF
	RET

;+++グラフィック画面データをTOS専用データに変換し一時パソコン上のメモリに格納する。+++
;IYレジスタ+0600HのアドレスにDレジスタを書き込む。
ADDRESS = 0EB40H
*SET_BUFF
	LD IY,0528H	;グラフィックRAMアドレス
	PUSH AF
	PUSH BC
	LD A,H
	SUB 6
	LD B,A
	LD C,L
	ADD IY,BC
	LD (IY+0),D	;(IY + HL + 0600H),D
	POP BC
	POP AF
	RET

;+++8255初期値データ+++
; 80H	モード0、ポートA,B,C出力
; 04H	RAMリード=LOW
; 02H	RAMライト=LOW
; 0AH	クリア=LOW
ADDRESS = 0E970H
*DATA2	80,04,02,0A

;I/Oポート73Hに4バイトデータを書き込む
ADDRESS = 0E980H
*INIT8255
	PUSH AF
	PUSH BC
	PUSH HL
	LD C,73H
	LD B,4
	LD HL,*DATA2
	OUTIR
	POP HL
	POP NC
	POP AF
	RET

;+++128行書き込みルーチン+++
ADDRESS = 0E9A0H
*WR128	PUSH AF
	PUSH BC
	PUSH DE
	PUSH HL
	PUSH IX
	DI		;割り込み禁止
	LD A,0DDH
	OUT (0F0H),A
	LD IX,0
	LH H,7
	LD L,0FCH
	CALL *WR1	;1行書き込みルーチンへ
	LH H,6
	LD L,0
	CALL *WR7	;7行書き込みルーチンへ
	INC IX
	CALL *WR56	;56行書き込みルーチンへ
	CALL *WR1	;1行書き込みルーチンへ
	LD H,7
	CALL *WR7	;7行書き込みルーチンへ
	INC IX
	CALL *WR56	;56行書き込みルーチンへ
	LD A,11H
	OUT (0F0H),A
	EI		;割り込み許可
	POP IX
	POP HL
	POP DE
	POP BC
	POP AF
	RET

;7行分書き込みルーチン
*WR7	PUSH BC
	LD B,7		;7回ループ{
*LA1	CALL *WR1	;1行書き込みルーチンへ
	DEC B
	JP NZ,+L1	:}
	POP BC
	RET

;56行分書き込みルーチン
*WR56	PUSH BC
	LD B,7		;7回ループ{
*LA3	LD C,8			;8回ループ{
*LA2	CALL *WR1			;1行書き込みルーチンへ
	DEC C
	JP NZ,*LA2		;}
	INC IX
	DEC B
	JP NZ,*LA3	;}
	POP BC
	RET

;1行分(32ビット)書き込みルーチン
*WR1	PUSH BC
	PUSH IX
	LD B,4		;4回ループ{
*LA5	LD C,8			;8回ループ{
*LA4	RLC (IX+0)		;1画素づつをデータを取り込む
	RL D
	PUSH BC
	LD BC,28H
	ADD IX,BC
	POP BC
	DEC C
	JP NZ,*LA4		;}
	CALL *SET_BUFF		;1バイトデータをバッファへ格納
	INC L
	DEC B
	JP NZ,*LA5	;}
	POP IX
	POP BC

;1バイト外部RAM書き込みルーチン
;アドレス=HLレジスタ、データ=Dレジスタ
*WR6116	PUSH AF
	PUSH BC
	LD C,73H
	OUT (C),H	;I/O 73H <- H
	LD A,L
	OUT (70H),A	;I/O 70H <- L
	LD A,1
	OUT (C),A	;I/O 73H <- 1
	LD A,D
	OUT (71H),A	;I/O 70H <- D
	LD A,3
	OUT (C),A	;I/O 73H <- 3
	LD A,2
	OUT (C),A	;I/O 73H <- 2
	POP BC
	POP AF
	RET