Windows PCとポケコンをUSBケーブルで接続。
USBシリアル変換のデバイスドライバをインストールすると、自分の環境ではCOM3と認識されたので、APLINKSはCOM3にして仮想ドライブLを作成
エミュレータで使うかもしれないので、ROMイメージを吸出し、仮想ドライブ経由でPCに転送
今度はFDDから読み込んだHeavy MetalのイメージをPCからポケコン実機に転送
20年ぶりくらいに、ゲームを動かしてみた。
相変わらず、このゲームは素晴らしい!
100 'Pasopia7 BIOS Call Test (C) 2015 zak
110 CLEAR ,&HEFFF 120 FOR I=&HF000 TO &HF02D 130 READ A$ 140 POKE I,VAL("&H"+A$) 150 NEXT I 160 FOR I=0 TO 6 170 IF I=5 THEN PRINT"H"; ELSE IF I=6 THEN PRINT"L"; ELSE PRINT CHR$(I+65); 180 INPUT " Register &H",A$ 190 POKE &HF034-I,VAL("&H"+RIGHT$("00"+A$,2)) 200 NEXT I 210 A=&HF000:CALL A 220 PRINT"-----" 230 FOR I=0 TO 6 240 IF I=5 THEN PRINT"H"; ELSE IF I=6 THEN PRINT"L"; ELSE PRINT CHR$(I+65); 250 A=PEEK(&HF034-I): 260 PRINT " Register &H";RIGHT$("0"+HEX$(A),2) 270 NEXT I 280 A=PEEK(&HF035) 290 PRINT "F Register &H";RIGHT$("0"+HEX$(A),2) 300 END 310 DATA C5 :'F000 PUSH BC 320 DATA D5 :'F001 PUSH DE 330 DATA E5 :'F002 PUSH HL 340 DATA F5 :'F003 PUSH AF 350 DATA 2A,2E,F0 :'F004 LD HL,(F02Eh) 360 DATA ED,5B,30,F0 :'F007 LD DE,(F030h) 370 DATA ED,4B,32,F0 :'F00B LD BC,(F032h) 380 DATA 3A,34,F0 :'F00F LD A,(F034h) 390 DATA CD,05,00 :'F012 CALL BIOS 400 DATA 32,34,F0 :'F015 LD (F034h),A 410 DATA ED,43,32,F0 :'F018 LD (F032h),BC 420 DATA ED,53,30,F0 :'F01C LD (F030h),DE 430 DATA 22,2E,F0 :'F020 LD (F02Eh),HL 440 DATA F5 :'F023 PUSH AF 450 DATA C1 :'F024 POP BC 460 DATA 79 :'F025 LD A,C 470 DATA 32,35,F0 :'F026 LD (F035h),A 480 DATA F1 :'F029 POP AF 490 DATA E1 :'F02A POP HL 500 DATA D1 :'F02B POP DE 510 DATA C1 :'F02C POP BC 520 DATA C9 :'F02D RET |
| クラスタ番号 | ヘッド | トラック | セクタ | サイズ | D88の並び順 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 1~8 | 単密度:128バイト | 0 |
| 1 | 1 | 1~8 | 倍密度:256バイト | 2 | |
| 2 | 0 | 9~16 | 単密度:128バイト | 1 | |
| 3 | 1 | 9~16 | 倍密度:256バイト | 3 | |
| 4 | 0 | 1 | 1~8 | 倍密度:256バイト | 4 |
| 5 | 1 | 1~8 | 6 | ||
| 6 | 0 | 9~16 | 5 | ||
| 7 | 1 | 9~16 | 7 | ||
| ・・・ | |||||
| 68 | 0 | 17 | 1~8 | 倍密度:256バイト | 68 |
| 69 | 1 | 1~8 | 70 | ||
| 70 | 0 | 9~16 | 69 | ||
| 71 | 1 | 9~16 | 71 | ||
| 72 | 0 | 18 | 1~8 | 倍密度:256バイト | 72 |
| 73 | 1 | 1~8 | 74 | ||
| 74 | 0 | 9~16 | 73 | ||
| 75 | 1 | 9~16 | 75 | ||
| ・・・ | |||||
| 136 | 0 | 34 | 1~8 | 倍密度:256バイト | 136 |
| 137 | 1 | 1~8 | 138 | ||
| 138 | 0 | 9~16 | 137 | ||
| 139 | 1 | 9~16 | 139 | ||
10 'XPAC2 Machine Language File Information (C) 2015 zak
20 INPUT"Device Number? (1 or 2) ",DEVICE 30 FIELD#0,255 AS FAT$ 40 FOR SECTOR=1 TO 12 50 FOR I=0 TO 15 60 T1$=DSKI$(DEVICE,0,18,SECTOR) 70 M=ASC(MID$(FAT$,I*16+1,1)) 80 IF (M<>0) AND (M<>255) AND(M<>58) THEN GOSUB 130 90 NEXT I 100 NEXT SECTOR 110 END 120 'Find File 130 PRINT MID$(FAT$,I*16+1,9);" "; 140 ATTR=ASC(MID$(FAT$,I*16+10,1)) 150 IF (ATTR=&H80) OR (ATTR=&H81) OR (ATTR=&H90) THEN PRINT"[BASIC]"; 160 IF (ATTR=&H01) OR (ATTR=&H11) THEN PRINT"[MachineLanguage]";:GOSUB 200 170 PRINT"" 180 RETURN 190 'Find Machine Language 200 CLUSTER=ASC(MID$(FAT$,I*16+11,1)) 210 TRACK=CLUSTER\4 220 TSECTOR=((CLUSTER MOD 4)\2)*8+1 230 THEAD=CLUSTER MOD 2 240 FIELD#0,4 AS SIZE$ 250 T2$=DSKI$(DEVICE,THEAD,TRACK,TSECTOR) 260 START=ASC(MID$(SIZE$,2,1))*256+ASC(MID$(SIZE$,1,1)) 270 LAST=ASC(MID$(SIZE$,4,1))*256+ASC(MID$(SIZE$,3,1)) 280 PRINT" START:&H";HEX$(START); 290 PRINT" SIZE:&H";HEX$(LAST-START); 300 RETURN |
| sv 3 text.rom |
| 10 'XPAC2 Display Kanji (C) 2015 zak 20 R$=CHR$(13)+CHR$(10) 30 INPUT"Width ";W:WIDTH W 40 PRINT"Select Slot Number." 50 PRINT"[3] 64KB MRAM (DEVICE 6)" 60 PRINT"[4] 64KB MRAM (DEVICE 5)" 70 PRINT"[5] 8KB SRAM" 80 PRINT"[6] 4KB SRAM" 90 PRINT"[7] 2KB SRAM" 100 INPUT S:IF S<3 OR S>7 GOTO 40 110 INPUT"Start Address &H",A$ 120 L=VAL("&H"+RIGHT$("00"+A$,2)) 130 H=VAL("&H"+LEFT$(RIGHT$("0000"+A$,4),2)) 140 LOCATE 0,24 150 OUT &H1B,S:OUT &H19,H:OUT &H18,L:A=INP(&H1A) 160 IF L<255 THEN L=L+1 ELSE L=0:H=H+1 170 OUT &H1B,S:OUT &H19,H:OUT &H18,L:B=INP(&H1A) 180 K=B*256+A:IF K=0 THEN PRINT R$:END 190 IF K=255 THEN X=0:PRINT R$:GOTO 220 200 PUT%(X,23),KANJI(K),7 210 IF X<W-2 THEN X=X+2 ELSE X=0:PRINT R$ 220 IF L<255 THEN L=L+1 ELSE L=0:H=H+1 230 GOTO 150 |
| 10 'XPAC2 Display Manual (C) 2015 zak 20 R$=CHR$(13)+CHR$(10) 30 WIDTH 80 40 LOCATE 0,24 50 READ K 60 IF K=0 THEN PRINT R$:END 70 IF K=255 THEN X=0:PRINT R$:GOTO 50 80 PUT%(X,23),KANJI(K),7 90 IF X<80-2 THEN X=X+2 ELSE X=0:PRINT R$ 100 GOTO 50 300 DATA 680,660,683,633,286,466,4440,650,714,691,642,283,672,313,499,491 ・・・(略) 2610 DATA 550,599,562,258,255,0 |
| I/Oポートアドレス | 内容 |
|---|---|
| 18h | 漢字ROM PAC2下位アドレス8ビット |
| 19h | 漢字ROM PAC2中位アドレス8ビット |
| 1Ah | 漢字ROM PAC2上位アドレス1ビット |
| 100 SCREEN 2:WIDTH 80 110 R$=CHR$(13)+CHR$(10) 120 FOR KU=1 TO 47 130 FOR TEN=1 TO 94 140 K=(KU-1)*94+(TEN-1)+256 150 PUT@(X,Y),KANJI(K),PSET 160 X=X+16 170 IF X>=640 THEN X=0:Y=Y+16 180 IF Y>=192 THEN Y=0 190 NEXT TEN 200 NEXT KU |