-------------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