100 '■ GAME BASIC for SEGASATURN で 110 '■ プレステのメモリーカードをよむサンプルプログラム 115 '■ とりあえず動作するかの確認なのでソースが汚いです m(_ _)m 120 KLOAD 130 SCREEN 0:DIM PAL(16) 140 OPEN "COM:TERMINAL:" AS #1 150 ' 160 FWRITE #1,"S" 170 KPRINT "" 180 LINE (0,20)-(319,21),RGB(0,0,31),BF 190 WY=30 200 FOR W=1 TO 15 210 BLOCK_NO = W 220 FRAME_NO = 0 230 GOSUB *PSM_RD 240 IF LEFT$(PSM_DATA$,4)<>"5343" THEN *LP_END 250 GOSUB *GET_TITLE 260 KPRINT (16,WY),STR$(W)+" "+U$,,13 270 GOSUB *GET_PALETTE:OFS=0 280 FOR K=1 TO ICON:FRAME_NO = K 290 GOSUB *PSM_RD 300 GOSUB *GET_ICON 310 OFS=OFS+24:NEXT 320 WY=WY+40:T=T+1 330 *LP_END 340 NEXT 350 LINE (0,WY)-(319,WY+1),RGB(0,0,31),BF 360 KPRINT (16,WY+3),STR$(T)+" file(s) found.",,16 370 END 1000 '------ TITLE NAME ------- 1010 *GET_TITLE 1020 ICON=VAL("&H"+MID$(PSM_DATA$,6,1)) 1030 P=9:U$="" 1040 *GET_TITLE_2 1050 A=VAL("&H"+MID$(PSM_DATA$,P,2)) 1060 IF A=0 THEN RETURN 1070 B=VAL("&H"+MID$(PSM_DATA$,P+2,2)) 1080 U$=U$+CHR$(A)+CHR$(B) 1090 P=P+4 1100 GOTO *GET_TITLE_2 1110 END 1120 '------ PALETTE DATA ------- 1130 *GET_PALETTE 1140 FOR GET_PAL_I=0 TO 15 1150 PAL(GET_PAL_I)=VAL("&H"+MID$(PSM_DATA$,GET_PAL_I*4+&H60*2+1,2))+VAL("&H"+MID$(PSM_DATA$,GET_PAL_I*4+&H60*2+3,2))*256 1160 'LINE (0,GET_PAL_I+32)-(255,GET_PAL_I+32),PAL(GET_PAL_I) AND 32767 1170 NEXT 1180 RETURN 1190 '------ ICON DATA ------ 1200 *GET_ICON 1210 GI_C=1 1220 FOR GI_Y=0 TO 15 1230 FOR GI_X=0 TO 15 STEP 2 1240 C1=VAL("&H"+MID$(PSM_DATA$,GI_C,1)) 1250 C2=VAL("&H"+MID$(PSM_DATA$,GI_C+1,1)) 1260 PSET (51+GI_X+OFS,WY+20+GI_Y),PAL(C1) AND 32767 1270 PSET (50+GI_X+OFS,WY+20+GI_Y),PAL(C2) AND 32767 1280 GI_C=GI_C+2 1290 NEXT 1300 NEXT 1310 RETURN 1320 '------------------------ 1330 *PSM_RD 1340 PSM_DATA$="" 1350 FWRITE #1,"s": ' <-- SEL = 'L' 1360 PSM_CMD$="81":GOSUB *PSM_WR 1370 PSM_CMD$="52":GOSUB *PSM_WR 1380 PSM_CMD$="00":GOSUB *PSM_WR 1390 PSM_CMD$="00":GOSUB *PSM_WR 1400 PSM_ADR=BLOCK_NO*64+FRAME_NO 1410 PSM_TMP$=HEX$(PSM_ADR,1) 1420 PSM_CMD$=MID$(PSM_TMP$,3,2) 1430 GOSUB *PSM_WR 1440 PSM_CMD$=MID$(PSM_TMP$,5,2) 1450 GOSUB *PSM_WR 1460 PSM_CMD$="00":GOSUB *PSM_WR 1470 PSM_CMD$="00":GOSUB *PSM_WR 1480 PSM_CMD$="00":GOSUB *PSM_WR 1490 PSM_CMD$="00":GOSUB *PSM_WR 1500 ' 1510 FOR PSM_I=0 TO 127 1520 PSM_CMD$="00":GOSUB *PSM_WR 1530 PSM_DATA$=PSM_DATA$+PSM$ 1540 NEXT 1550 PSM_CMD$="00":GOSUB *PSM_WR 1560 PSM_CMD$="00":GOSUB *PSM_WR 1570 FWRITE #1,"S" 1580 RETURN 1590 '----------------------- 1600 *PSM_WR 1610 FWRITE #1,PSM_CMD$ 1620 FOR PSM_WR_I=0 TO 200:NEXT 1630 FREAD #1,PSM$,2 1640 FOR PSM_WR_I=0 TO 200:NEXT 1650 RETURN