1000 CLEAR ,&H8FFF
1010 WIDTH 80
1020 GOSUB 2010
1030 GOSUB 9010
1040 IF VER<>5 THEN GOSUB 9010
1050 GOSUB 2110
1060 A=&HF000:CALL A
1070 S=VAL("&H"+DA$)
1080 GOSUB 3010
1090 PRINT "":PRINT "... "
1100 S=VAL("&H"+DA$)+VAL("&H"+TB$)-128
1110 GOSUB 3010
1990 END
2000 '--- Version Check ---
2010 P=PEEK(&HFFFB)
2020 IF P=&H58 THEN VER=1:PRINT"T-ROM Ver 1.0"
2030 IF P=&H0C THEN VER=2:PRINT"T-ROM Ver 1.1"
2040 IF P=&H76 THEN VER=3:PRINT"T-DISK Ver 1.0"
2050 IF P=&H45 THEN VER=4:PRINT"T-DISK Ver 2.0"
2060 IF P=&H84 THEN VER=5:PRINT"T-BASIC7 Ver 1.0"
2070 IF VER=0 THEN PRINT"Unknown Version"
2080 RETURN
2100 '--- Set Parameter ---
2110 A=&HF0F0
2200 PRINT"Memory Mode ";
2210 IF VER=5 THEN PRINT"(1:BIOS, 2:RAM, 4:V-RAM, 8:I/O Memory Mode)"; ELSE PRINT"(0bit:ROM[0:OnboardROM, 1:ROM Pack], 1bit:RAM[0:ROM Mode, 1:64KRAM Mode])";
2220 INPUT" &H",MM$
2300 POKE A+0, VAL("&H"+MM$) :'F0F0 メモリーモード 0bit:BIOS, 1bit:RAM, 2bit:V-RAM, 3bit:I/O Memory Mode
2310 POKE A+1, VAL("&H"+VS$) :'F0F1 V-RAM Select 11H:Blue, 22H:Red, 44H:Text/Green
2320 POKE A+2, VAL("&H"+RIGHT$(SD$,2)):'F0F2 転送元アドレス
2330 POKE A+3, VAL("&H"+LEFT$(SD$,2))
2340 POKE A+4, VAL("&H"+RIGHT$(DA$,2)):'F0F4 転送先アドレス
2350 POKE A+5, VAL("&H"+LEFT$(DA$,2))
2360 POKE A+6, VAL("&H"+RIGHT$(TB$,2)):'F0F6 転送バイト数
2370 POKE A+7, VAL("&H"+LEFT$(TB$,2))
2380 RETURN
3000 ' --- Display Memory ---
3010 FOR I=S TO S+127
3020 IF I MOD 16=0 THEN PRINT "":PRINT RIGHT$("000"+HEX$(I),4);": ";
3030 A=PEEK(I):PRINT RIGHT$("0"+HEX$(A),2);" ";
3040 NEXT I
3050 RETURN
9000 ' --- Set Data ---
9010 A=&HF000
9020 READ D$
9030 WHILE D$<>"END"
9040 POKE A,VAL("&H"+D$)
9050 A=A+1
9060 READ D$
9070 WEND
9080 RETURN
9100 ' --- Data ---
9200 ' Initialize
9210 DATA DB,22 :'F000 IN A,(22H) メモリーステータス取得 0bit:BIOS, 1bit:RAM
9220 DATA E6,03 :'F002 AND 03H マスクしてスタック
9230 DATA F5 :'F004 PUSH AF
9240 DATA 00,00,00,00,00,00,00:'F005-F00B NOP パソピア用のために空けておく
9300 'V-RAM Bank Switching
9310 DATA F3 :'F00C DI 割り込み禁止
9320 DATA 3A,F0,F0 :'F00D LD A,(0F0F0H)
9330 DATA D3,3C :'F010 OUT (3CH),A メモリモードセット
9340 DATA 3E,03 :'F012 LD A,03H
9350 DATA D3,0F :'F014 OUT (0FH),A 8255コントロールポート設定
9360 DATA 3A,F1,F0 :'F016 LD A,(0F0F1H)
9370 DATA D3,0C :'F019 OUT (0CH),A V-RAM面セレクト
9380 DATA 3E,08 :'F01B LD A,08H
9390 DATA D3,0D :'F01D OUT (0DH),A アトリビュート設定
9400 DATA FB :'F01F EI 割り込み許可
9500 ' Data Translate
9510 DATA 2A,F2,F0 :'F020 LD HL,(0F0F2H) HL:転送元アドレス
9520 DATA ED,5B,F4,F0:'F023 LD DE,(0F0F4H) DE:転送先アドレス
9530 DATA ED,4B,F6,F0:'F027 LD BC,(0F0F6H) BC:転送バイト数
9540 DATA ED,B0 :'F02B LDIR ブロック転送
9600 ' Restore Memory Bank
9610 DATA F3 :'F02D DI 割り込み禁止
9620 DATA F1 :'F02E POP AF
9630 DATA D3,3C :'F02F OUT (3CH),A メモリモードセット→V-RAMアクセス不可
9640 DATA 3E,02 :'F031 LD A,02H
9650 DATA D3,0F :'F033 OUT (0FH),A 8255コントロールポート設定
9660 DATA FB :'F035 EI 割り込み許可
9670 DATA C9 :'F036 RET
9680 DATA END
9700 ' Initialize for Pasopia T/5
9710 DATA DB,22 :'F000 IN A, (22H) メモリーステータス取得 2bit:RAM(0:ROMモード, 1:64KRAMモード), 3bit:ROM(0:本体ROM, 1:ROMパック)
9720 DATA E6,0C :'F002 AND 0CH 2, 3bitをマスク
9730 DATA 0F :'F004 RRCA Aを3回右ローテイト
9740 DATA 0F :'F005 RRCA
9750 DATA 0F :'F006 RRCA
9760 DATA 30,02 :'F007 JR NC,LF00B 2bit:CarryフラグにRAMの値。Cy=0でジャンプ
9770 DATA F6,02 :'F009 OR 02H 1bit:RAMをセット
9780 DATA F5 :'F00B LF00B: PUSH AF
9790 DATA END |