; 仮想EMM ; 00H OUT A0-A7 ; 01H OUT A8-A15 ; 02H OUT A16-A23 ; 03H IN READ DATA (アドレスはオートインクリメント) BLNK EQU 0DA6h ; ?BLNK ORG 01200H ; START DI ; F3 ; SELECT IPL AND VRAM OUT (0E2h),A ; D3 E2 OUT (0E3H),A ; D3 E3 ; FILL VRAM LD HL,0D000H ; 21 00 D0 LD DE,0D001H ; 11 01 D0 LD BC,03E7H ; 01 E7 03 LD (HL),07BH ; 36 7B 5A? LDIR ; ED B0 LD HL,0D800H ; 21 00 D8 LD DE,0D801H ; 11 01 D8 LD BC,03E7H ; 01 E7 03 LD (HL),00H ; 36 00 LDIR ; ED B0 ; RESET EMM ADDRESS LD A,0H ; 3E 00 OUT (00H),A ; D3 00 OUT (01H),A ; D3 01 OUT (02H),A ; D3 02 ; SET SP POINTER TO V=204 LD IY,01466H ; FD 21 66 14 ; WAIT VBLANK CALL BLNK ; CD A6 0D ; SKIP 4 LINES LD A,(0D000H) ; 3A 00 D0 (13) HBLANK #1 POP HL ; E1 (10) 70 CLOCKS > 62 POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) LD A,(0D000H) ; 3A 00 D0 (13) HBLANK #2 POP HL ; E1 (10) 70 CLOCKS > 62 POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) LD A,(0D000H) ; 3A 00 D0 (13) HBLANK #3 POP HL ; E1 (10) 68 CLOCKS > 62 POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) LD C,03H ; 0E 03 (7) EXX ; D9 (4) LD C,03H ; 0E 03 (7) LD A,(0D000H) ; 3A 00 D0 (13) HBLANK #4 ; 1ライン辺りのクロック数 ; 166 + 62 = 228 ; ; #1 168+48 ; #2 164+59 ; #3 164+59 ; #4 158+58 TOP: ; HDISP #1 (22+26+16+104=168) IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD SP,IY ; FD F9 (10) SP <- [IY] POP HL ; E1 (10) LD SP,HL ; F9 (6) BIT 7,H ; CB 7C (8) IF V=252 GOTO NUL JP Z,NUL ; CA 00 13 (8) IN H,(C) ; ED 60 (12) READ ATTRIB IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) EXX ; D9 (4) IN H,(C) ; ED 60 (12) IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) EXX ; D9 (4) ; HBLANK #1 (48) PUSH HL ; E5 (11) WRITE ATTRIB PUSH DE ; D5 (11) EXX ; D9 (4) PUSH HL ; E5 (11) PUSH DE ; D5 (11) ; HDISP #2 (22+142=164) IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD C,03H ; 0E 03 (7) READ ATTRIB IN H,(C) ; ED 60 (12) IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) EXX ; D9 (4) LD C,03H ; 0E 03 (7) IN H,(C) ; ED 60 (12) IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) IN B,(C) ; ED 40 (12) IN C,(C) ; ED 48 (12) EXX ; D9 (4) ; HBLANK #2 (59) PUSH HL ; E5 (11) WRITE ATTRIB PUSH DE ; D5 (11) EXX ; D9 (4) PUSH HL ; E5 (11) PUSH DE ; D5 (11) PUSH BC ; C5 (11) ; HDISP #3 (22+142=164) IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD C,03H ; 0E 03 (7) READ ATTRIB IN H,(C) ; ED 60 (12) IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) EXX ; D9 (4) LD C,03H ; 0E 03 (7) IN H,(C) ; ED 60 (12) IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) IN B,(C) ; ED 40 (12) IN C,(C) ; ED 48 (12) EXX ; D9 (4) ; HBLANK #3 (59) PUSH HL ; E5 (11) WRITE ATTRIB PUSH DE ; D5 (11) EXX ; D9 (4) PUSH HL ; E5 (11) PUSH DE ; D5 (11) PUSH BC ; C5 (11) ; HDISP #4 (22+18+118=158) IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) INC IYL ; FD 2C (9) IY = IY + 2 INC IYL ; FD 2C (9) LD C,03H ; 0E 03 (7) READ ATTRIB IN H,(C) ; ED 60 (12) IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) EXX ; D9 (4) LD C,03H ; 0E 03 (7) IN H,(C) ; ED 60 (12) IN L,(C) ; ED 68 (12) IN D,(C) ; ED 50 (12) IN E,(C) ; ED 58 (12) EXX ; D9 (4) ; HBLANK #4 (48+10=58) PUSH HL ; E5 (11) WRITE ATTRIB PUSH DE ; D5 (11) EXX ; D9 (4) PUSH HL ; E5 (11) PUSH DE ; D5 (11) JP TOP ; C3 52 12 (10) GO TO TOP NUL: ORG 01300H ; V=252 LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=253 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=254 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=255 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=256 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=257 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=258 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=259 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=260 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 60 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) POP HL ; E1 (10) ; V=261 IN A,(03H) ; DB 03 (11) OUTPUT PCM LD (0E007H),A ; 32 07 E0 (11) LD A,(0D000H) ; 3A 00 D0 (13) WAIT HBLANK POP HL ; E1 (10) 30 CLOCKS POP HL ; E1 (10) POP HL ; E1 (10) LD IY,01400H ; FD 21 00 14 (14) JP TOP ; C3 52 12 (10) GO TO TOP ORG 01400H ; ATTRIBUTE ADDRESS TABLE DW 0D828H ; 28 D8 DW 0D828H ; 28 D8 DW 0D850H ; 50 D8 DW 0D850H ; 50 D8 DW 0D878H ; 78 D8 DW 0D878H ; 78 D8 DW 0D8A0H ; A0 D8 DW 0D8A0H ; A0 D8 DW 0D8C8H ; C8 D8 DW 0D8C8H ; C8 D8 DW 0D8F0H ; F0 D8 DW 0D8F0H ; F0 D8 DW 0D918H ; 18 D9 DW 0D918H ; 18 D9 DW 0D940H ; 40 D9 DW 0D940H ; 40 D9 DW 0D968H ; 68 D9 DW 0D968H ; 18 D9 DW 0D990H ; 90 D9 DW 0D990H ; 90 D9 DW 0D9B8H ; B8 D9 DW 0D9B8H ; B8 D9 DW 0D9E0H ; E0 D9 DW 0D9E0H ; E0 D9 DW 0DA08H ; 08 DA DW 0DA08H ; 08 DA DW 0DA30H ; 30 DA DW 0DA30H ; 30 DA DW 0DA58H ; 58 DA DW 0DA58H ; 58 DA DW 0DA80H ; 80 DA DW 0DA80H ; 80 DA DW 0DAA8H ; A8 DA DW 0DAA8H ; A8 DA DW 0DAD0H ; D0 DA DW 0DAD0H ; D0 DA DW 0DAF8H ; F8 DA DW 0DAF8H ; F8 DA DW 0DB20H ; 20 DB DW 0DB20H ; 20 DB DW 0DB48H ; 48 DB DW 0DB48H ; 48 DB DW 0D828H ; 28 D8 V=168 DW 0D850H ; 50 D8 DW 0D878H ; 78 D8 DW 0D8A0H ; A0 D8 DW 0D8C8H ; C8 D8 DW 0D8F0H ; F0 D8 DW 0D918H ; 18 D9 DW 0D940H ; 40 D9 DW 0D968H ; 68 D9 DW 0D990H ; 90 D9 V=204 DW 0D9B8H ; B8 D9 DW 0D9E0H ; E0 D9 DW 0DA08H ; 08 DA DW 0DA30H ; 30 DA DW 0DA58H ; 58 DA DW 0DA80H ; 80 DA DW 0DAA8H ; A8 DA DW 0DAD0H ; D0 DA DW 0DAF8H ; F8 DA DW 0DB20H ; 20 DB DW 0DB48H ; 48 DB DW 00000H ; 00 00 V=252-261