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