epbas.lgb.hu :: Enterprise-128 EXOS file analyzer, lister and disassembler
File name: /tmp/phpq1F9ZS (11253 bytes)
Options: bin=None cset='UK' dasm='' html='' info='' out='/tmp/phpq1F9ZS.out'
EP-ASCII: UK
EXOS header pos/serial: #0 at 0x0
EXOS type/header: 0x4 [00 04 D5 2B 00 00 00 00 00 00 00 00 00 00 00 00]
EXOS type determined: IS-BASIC program (single)
Program: 0x0, size: 0x2bd5 bytes.
100 PROGRAM "FDISK.BAS"
110 PRINT "FDISK version 0.7"
120 ALLOCATE 9
130 CODE GETSEGMENT=HEX$("F7,18,67,69,C9")
140 CODE FREESEGMENT=HEX$("4D,F7,19,C9")
150 LET WS=USR(GETSEGMENT,0)
160 LET DEMO=0
170 TEXT 40
180 WHEN EXCEPTIONUSENINCSIDE
190 EXT "IDEINFO "&HEXA$(WS,2)&",3FF0"
200 END WHEN
210 LET MAXDRIVE=SPEEK(WS,16374)
220 IF MAXDRIVE=0THEN
230 PRINT "No Harddisk!"
240 GOTO 2400
250 END IF
260 PRINT AT22,1:"IDE ROM at "&HEXA$(SPEEK(WS,16369),2)
270 PRINT "RAM area from "&HEXA$(SPEEK(WS,16370),2)&":"&HEXA$(SPEEK(WS,16372),2)&HEXA$(SPEEK(WS,16371),2)
280 PRINT "Detected: ";SPEEK(WS,16373);"controllers, ";MAXDRIVE;"disks";
290 NUMERIC LBA(0TOMAXDRIVE-1),CHS(0TOMAXDRIVE-1,1TO3)
300 SET VIDEOX40
310 SET VIDEOY1
320 SET VIDEOMODE2
330 FOR I=0TOMAXDRIVE-1
340 OPEN #50+I:"video:"
350 PRINT #50+I:CHR$(27);"o";
360 SET #50+I:PALETTEBLACK,GREEN,BLACK,CYAN,BLACK,YELLOW,BLACK,RED
370 DISPLAY #50+I:ATI+1FROM1TO1
380 SET #50+I:INK5
390 PRINT #50+I:"HDD-";I;
400 IF DEMO=0THEN
410 EXT "IDEIDENTIFY "&HEXA$(WS,2)&",0000,"&HEXA$(I,1)
420 ELSE
430 EXT "sl £"&HEXA$(WS,2)&",0,511,"id."&HEXA$(I,2)&"""
440 END IF
450 PRINT #50+I,AT1,20:;
460 SET #50+I:INK3
470 FOR N=0TO39STEP2
480 PRINT #50+I:CHR$(SPEEK(WS,55+N));CHR$(SPEEK(WS,54+N));
490 NEXT
500 PRINT #50+I,AT1,60:;
510 SET #50+I:INK7
520 FOR N=0TO19STEP2
530 PRINT #50+I:CHR$(SPEEK(WS,21+N));CHR$(SPEEK(WS,20+N));
540 NEXT
550 IF BIT(1,SPEEK(WS,106))=1THEN
560 LET LBA(I)=SPEEK32(114)
570 IF BIT(1,SPEEK(WS,99))=1THENLET LBA(I)=SPEEK32(120)
580 IF BIT(2,SPEEK(WS,173))=1THEN
590 LET LBA(I)=SPEEK32(200)
600 IF SPEEK16(204)>0THENLET LBA(I)=4294967295
610 END IF
620 LET CHS(I,1)=SPEEK16(108)
630 LET CHS(I,2)=SPEEK16(110)
640 LET CHS(I,3)=SPEEK16(112)
650 ELSE
660 LET CHS(I,1)=SPEEK16(2)
670 LET CHS(I,2)=SPEEK16(6)
680 LET CHS(I,3)=SPEEK16(12)
690 LET LBA(I)=CHS(I,1)*CHS(I,2)*CHS(I,3)
700 END IF
710 SET #50+I:INK1
720 PRINT #50+I,AT1,8,USING"£££££££":IP(LBA(I)/2048);
730 SET #50+I:INK5
740 PRINT #50+I:"Mb";
750 NEXT
760 NUMERIC AKTIV(1TO28),KEZDET(1TO28),TIPUS(1TO28),MERET(1TO28)
770 LET DRV=0
780 DO
790 SET #50+DRV:PALETTEBLUE,GREEN,BLUE,CYAN,BLUE,YELLOW,BLUE,RED
800 LET KEY$=INKEY$
810 IF KEY$=""THENGOTO 800
820 SELECT CASEORD(KEY$)
830 CASE 13
840 SET #50+DRV:PALETTEBLACK,GREEN,BLACK,CYAN,BLACK,YELLOW,BLACK,RED
850 DISPLAY TEXT
860 CLEAR SCREEN
870 PRINT AT1,2:"Selected drive:"
880 DISPLAY #50+DRV:AT2FROM1TO1
890 CALL MBR
900 DISPLAY TEXT
910 FOR I=0TOMAXDRIVE-1
920 DISPLAY #50+I:ATI+1FROM1TO1
930 NEXT
940 CASE 176
950 SET #50+DRV:PALETTEBLACK,GREEN,BLACK,CYAN,BLACK,YELLOW,BLACK,RED
960 LET DRV=DRV-1
970 IF DRV<0THENLET DRV=MAXDRIVE-1
980 CASE 180
990 SET #50+DRV:PALETTEBLACK,GREEN,BLACK,CYAN,BLACK,YELLOW,BLACK,RED
1000 LET DRV=DRV+1
1010 IF DRV=MAXDRIVETHENLET DRV=0
1020 CASE ELSE
1030 END SELECT
1040 LOOP UNTILKEY$=CHR$(27)
1050 DEF MBR
1060 STRING KEY$*1
1070 NUMERIC PART,J,SZABAD(1TO5,1TO2),SZ,SZM
1080 PRINT AT3,1:"BOOT TYPE START SIZE";
1090 CALL READS(0,DRV,0,1)
1100 IF SPEEK16(510)<>43605THEN
1110 FOR I=0TO509
1120 SPOKE WS,I,0
1130 NEXT
1140 CALL SPOKE16(510,43605)
1150 END IF
1160 SET VIDEOMODE0
1170 FOR J=1TO4
1180 OPEN #J:"video:"
1190 PRINT #J:CHR$(27);"o";
1200 SET #J:PALETTEBLACK,YELLOW,BLACK,CYAN
1210 DISPLAY #J:ATJ+3FROM1TO1
1220 CALL PGET(0,J,J)
1230 CALL INFO(J)
1240 NEXT
1250 LET SZ=1
1260 LET SZABAD(SZ,2)=SZABADKA(1)
1270 IF SZABAD(SZ,2)>0THEN
1280 LET SZABAD(SZ,1)=1
1290 LET SZ=SZ+1
1300 END IF
1310 FOR J=1TO4
1320 IF TIPUS(J)<>0THEN
1330 LET SZABAD(SZ,2)=SZABADKA(KEZDET(J)+MERET(J)+1)
1340 IF SZABAD(SZ,2)>0THEN
1350 LET SZABAD(SZ,1)=KEZDET(J)+MERET(J)
1360 LET SZ=SZ+1
1370 END IF
1380 END IF
1390 NEXT
1400 FOR J=SZTO5
1410 LET SZABAD(J,2)=0
1420 LET SZABAD(J,1)=0
1430 NEXT
1440 PRINT AT9,1:"Free space"
1450 PRINT AT9,20:"START";
1460 PRINT AT9,31:"SIZE";
1470 LET SZM=SZ-1
1480 FOR J=1TOSZM
1490 OPEN #J+40:"video:"
1500 PRINT #J+40:CHR$(27);"o";
1510 SET #J+40:PALETTEBLACK,WHITE,BLACK,CYAN
1520 DISPLAY #J+40:ATJ+9FROM1TO1
1530 SET #J+40:INK3
1540 PRINT #J+40,AT1,1:J;".";
1550 PRINT #J+40,AT1,16,USING"£££££££££":SZABAD(J,1);
1560 SET #J+40:INK1
1570 PRINT #J+40,AT1,27,USING"£££££££££":ROUND(SZABAD(J,2)/2,0);
1580 PRINT #J+40:"Kb";
1590 NEXT
1600 LET PART=1
1610 DO
1620 SET #PART:PALETTEBLUE,YELLOW,BLUE,CYAN
1630 LET KEY$=INKEY$
1640 IF KEY$=""THENGOTO 1630
1650 SELECT CASEORD(KEY$)
1660 CASE 13
1670 IF TIPUS(PART)=5ORTIPUS(PART)=15THEN
1680 CALL EXTENDED(KEZDET(PART))
1690 END IF
1700 LET KEY$=CHR$(27)
1710 CASE 176
1720 SET #PART:PALETTEBLACK,YELLOW,BLACK,CYAN
1730 LET PART=PART-1
1740 IF PART<1THENLET PART=4
1750 CASE 180
1760 SET #PART:PALETTEBLACK,YELLOW,BLACK,CYAN
1770 LET PART=PART+1
1780 IF PART=5THENLET PART=1
1790 CASE 99,67
1800 IF SZABAD(1,2)>0THEN
1810 LET SZ=1
1820 DO
1830 SET #SZ+40:PALETTEBLUE,WHITE,BLUE,CYAN
1840 LET KEY$=INKEY$
1850 IF KEY$=""THENGOTO 1840
1860 SELECT CASEORD(KEY$)
1870 CASE 176
1880 SET #SZ+40:PALETTEBLACK,WHITE,BLACK,CYAN
1890 LET SZ=SZ-1
1900 IF SZ<1THENLET SZ=SZM
1910 CASE 180
1920 SET #SZ+40:PALETTEBLACK,WHITE,BLACK,CYAN
1930 LET SZ=SZ+1
1940 IF SZ=SZM+1THENLET SZ=1
1950 CASE ELSE
1960 END SELECT
1970 LOOP UNTILKEY$=CHR$(13)
1980 DISPLAY TEXT
1990 CLEAR SCREEN
2000 PRINT "Please enter values for new partition (ENTER for default value)."
2010 PRINT "Default values: 1=FAT12, first sector of free area, 65535"
2020 LET TIPUS(PART)=INP("type",0,255,1)
2030 LET KEZDET(PART)=INP("start",SZABAD(SZ,1),SZABAD(SZ,1)+SZABAD(SZ,2)-4,SZABAD(SZ,1))
2040 LET MERET(PART)=INP("size",4,SZABAD(SZ,2),65535)
2050 CALL PPUT(0,PART,PART)
2060 CALL WRITES(0,DRV,0,1)
2070 LET KEY$=CHR$(27)
2080 END IF
2090 CASE 162
2100 SET #102:INK3
2110 PRINT AT8,1:"Press 'Y' to delete partiton!";
2120 SET #102:INK1
2130 DO
2140 LET KEY$=INKEY$
2150 LOOP UNTILKEY$<>""
2160 IF KEY$="Y"THEN
2170 LET TIPUS(PART)=0
2180 LET AKTIV(PART)=0
2190 LET KEZDET(PART)=0
2200 LET MERET(PART)=0
2210 CALL PPUT(0,PART,PART)
2220 CALL WRITES(0,DRV,0,1)
2230 LET KEY$=CHR$(27)
2240 ELSE
2250 LET KEY$=CHR$(162)
2260 PRINT AT8,1:" ";
2270 END IF
2280 CASE ELSE
2290 END SELECT
2300 LOOP UNTILKEY$=CHR$(27)
2310 FOR J=1TO4
2320 CLOSE #J
2330 NEXT
2340 FOR J=1TOSZM
2350 CLOSE #J+40
2360 NEXT
2370 CLEAR TEXT
2380 END DEF
2390 TEXT 40
2400 CALL USR(FREESEGMENT,WS)
2410 END
2420 DEF PGET(CIM,PART,SORSZAM)
2430 LET MUTATO=CIM+446+(PART-1)*16
2440 LET AKTIV(SORSZAM)=SPEEK(WS,MUTATO)
2450 LET TIPUS(SORSZAM)=SPEEK(WS,MUTATO+4)
2460 LET KEZDET(SORSZAM)=SPEEK32(MUTATO+8)
2470 LET MERET(SORSZAM)=SPEEK32(MUTATO+12)
2480 END DEF
2490 DEF PPUT(CIM,PART,SORSZAM)
2500 LET MUTATO=CIM+446+(PART-1)*16
2510 SPOKE WS,MUTATO,AKTIV(SORSZAM)
2520 SPOKE WS,MUTATO+4,TIPUS(SORSZAM)
2530 CALL SPOKE32(MUTATO+8,KEZDET(SORSZAM))
2540 CALL SPOKE32(MUTATO+12,MERET(SORSZAM))
2550 END DEF
2560 DEF INFO(S)
2570 SET #S:INK3
2580 IF AKTIV(S)=0THEN
2590 PRINT #S:" NO ";
2600 ELSE
2610 PRINT #S:" YES ";
2620 END IF
2630 SET #S:INK1
2640 SELECT CASETIPUS(S)
2650 CASE 0
2660 PRINT #S:"Undefinied",
2670 CASE 1,17,141,170,193,209,225
2680 PRINT #S:"FAT-12 ",
2690 CASE 4,20,134,144,154,182,198,212
2700 PRINT #S:"FAT-16 ",
2710 CASE 11,12,27,28,139,140,151,152,188,203,204
2720 PRINT #S:"FAT-32 ",
2730 CASE 5,15,145,155,197,213,225,228
2740 PRINT #S:"Extended",
2750 CASE 6,14,22,30,146,154,206,214
2760 PRINT #S:"BigDOS ",
2770 CASE 7,39,135,183,199
2780 PRINT #S:"NTFS ",
2790 CASE 65,67,130,131,133,136,138,142,147,194,195,240,253
2800 PRINT #S:"Linux ",
2810 CASE ELSE
2820 PRINT #S:"Other ",
2830 END SELECT
2840 IF TIPUS(S)<>0THEN
2850 SET #S:INK3
2860 PRINT #S,USING"££££££££££":KEZDET(S);
2870 PRINT #S:" ";
2880 SET #S:INK1
2890 PRINT #S,USING"££££££££££":ROUND(MERET(S)/2,0);
2900 PRINT #S:"Kb";
2910 ELSE
2920 END IF
2930 END DEF
2940 DEF HEXA$(SZAM,HOSSZ)
2950 NUMERIC I,M
2960 STRING H$*8
2970 LET H$=""
2980 FOR I=1TOHOSSZ
2990 LET M=MOD(SZAM,16)
3000 LET SZAM=(SZAM-M)/16
3010 IF M<10THEN
3020 LET H$=CHR$(M+48)&H$
3030 ELSE
3040 LET H$=CHR$(M+55)&H$
3050 END IF
3060 NEXT
3070 LET HEXA$=H$
3080 END DEF
3090 DEF READS(C,D,SS,SN)
3100 IF DEMO=0THEN
3110 EXT "IDEREAD "&HEXA$(WS,2)&","&HEXA$(C,4)&","&HEXA$(D,1)&","&HEXA$(SS,8)&","&HEXA$(SN,2)
3120 ELSE
3130 EXT "sl £"&HEXA$(WS,2)&",£"&HEXA$(C,4)&",£"&HEXA$(C+511,4)&",""&HEXA$(SS,8)&"."&HEXA$(D,2)&"""
3140 END IF
3150 END DEF
3160 DEF SPEEK32(M)
3170 LET SPEEK32=SPEEK(WS,M)+SPEEK(WS,M+1)*256+SPEEK(WS,M+2)*65536+SPEEK(WS,M+3)*16777216
3180 END DEF
3190 DEF SPEEK16(M)
3200 LET SPEEK16=SPEEK(WS,M)+SPEEK(WS,M+1)*256
3210 END DEF
3220 DEF WRITES(C,D,SS,SN)
3230 IF DEMO=0THEN
3240 EXT "IDEWRITE "&HEXA$(WS,2)&","&HEXA$(C,4)&","&HEXA$(D,1)&","&HEXA$(SS,8)&","&HEXA$(SN,2)
3250 ELSE
3260 EXT "ss £"&HEXA$(WS,2)&",£"&HEXA$(C,4)&",£"&HEXA$(C+511,4)&",""&HEXA$(SS,8)&"."&HEXA$(D,2)&"""
3270 END IF
3280 END DEF
3290 DEF SPOKE16(M,N)
3300 NUMERIC X
3310 LET X=MOD(N,256)
3320 SPOKE WS,M,X
3330 LET N=(N-X)/256
3340 SPOKE WS,M+1,N
3350 END DEF
3360 SPOKE WS,M,N
3370 DEF SPOKE32(M,N)
3380 NUMERIC X,I
3390 FOR I=0TO3
3400 LET X=MOD(N,256)
3410 SPOKE WS,M+I,X
3420 LET N=(N-X)/256
3430 NEXT
3440 END DEF
3450 DEF INP(SZ$,MIN,MAX,DEFAULT)
3460 STRING N$
3470 NUMERIC N
3480 DO
3490 INPUT PROMPTSZ$&":":N$
3500 LET N=VAL(N$)
3510 IF N$=""THENLET N=DEFAULT
3520 LOOP UNTIL(N<=MAXANDN>=MIN)
3530 LET INP=N
3540 END DEF
3550 DEF SZABADKA(N)
3560 NUMERIC P,F
3570 LET F=LBA(DRV)-N
3580 LET P=1
3590 DO
3600 IF TIPUS(P)>0THEN
3610 IF N>=KEZDET(P)ANDN<=(KEZDET(P)+MERET(P))THEN
3620 LET F=0
3630 ELSE
3640 IF N<KEZDET(P)THENLET F=MIN(F,KEZDET(P)-N)
3650 END IF
3660 END IF
3670 LET P=P+1
3680 LOOP UNTILF=0ORP=5
3690 IF F<4THENLET F=0
3700 LET SZABADKA=F
3710 END DEF
3720 DEF BIT(B,N)
3730 NUMERIC I,A
3740 LET I=-1
3750 DO
3760 LET I=I+1
3770 LET A=MOD(N,2)
3780 LET N=(N-A)/2
3790 LOOP UNTILI=B
3800 LET BIT=A
3810 END DEF
3820 HANDLER NINCSIDE
3830 LET DEMO=1
3840 EXT "sl £"&HEXA$(WS,2)&",£3ff0,£3ff7,"info""
3850 CONTINUE
3860 END HANDLER
3870 DEF EXTENDED(CIM)
3880 STRING KEY$*1
3890 NUMERIC PART,J,SZABAD(1TO50,1TO2),SZ,SZM,TCIM,PCIM(5TO28),ECIM
3900 LET TCIM=0
3910 LET ECIM=CIM
3920 LET J=5
3930 SET VIDEOMODE0
3940 PRINT AT3,1:"BOOT TYPE","START SIZE";
3950 DO
3960 LET TCIM=TCIM+512
3970 CALL READS(TCIM,DRV,ECIM,1)
3980 IF SPEEK16(TCIM+510)<>43605THEN
3990 FOR I=TCIMTOTCIM+509
4000 SPOKE WS,I,0
4010 NEXT
4020 CALL SPOKE16(TCIM+510,43605)
4030 END IF
4040 CALL PGET(TCIM,1,J)
4050 IF TIPUS(J)>0THEN
4060 OPEN #J:"video:"
4070 PRINT #J:CHR$(27);"o";
4080 SET #J:PALETTEBLACK,YELLOW,BLACK,CYAN
4090 DISPLAY #J:ATJ-1FROM1TO1
4100 CALL PGET(TCIM,1,J)
4110 LET PCIM(J)=TCIM
4120 LET KEZDET(J)=KEZDET(J)+ECIM
4130 CALL INFO(J)
4140 LET J=J+1
4150 END IF
4160 CALL PGET(TCIM,2,J)
4170 LET ECIM=CIM+KEZDET(J)
4180 LOOP UNTILTIPUS(J)=0ORJ=27
4190 LET J=J-1
4200 LET PART=5
4210 DO
4220 SET #PART:PALETTEBLUE,YELLOW,BLUE,CYAN
4230 LET KEY$=INKEY$
4240 IF KEY$=""THENGOTO 4230
4250 SELECT CASEORD(KEY$)
4260 CASE 176
4270 SET #PART:PALETTEBLACK,YELLOW,BLACK,CYAN
4280 LET PART=PART-1
4290 IF PART<5THENLET PART=J
4300 CASE 180
4310 SET #PART:PALETTEBLACK,YELLOW,BLACK,CYAN
4320 LET PART=PART+1
4330 IF PART=J+1THENLET PART=5
4340 CASE ELSE
4350 END SELECT
4360 LOOP UNTILKEY$=CHR$(27)
4370 FOR PART=5TOJ
4380 CLOSE #PART
4390 NEXT
4400 END DEF
EXOS header pos/serial: #1 at 0x2be5
EXOS type/header: 0xa [00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
EXOS type determined: End of module
End of FILE parsing, because: End-of-module header got (type=10)
Enterprise-128 EXOS file analyzer, lister and disassembler v0.5.8 ©2012,2013 "LGB" Gábor Lénárt (lgb at-sign lgb dot hu)