home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
trs80coco.tar.gz
/
trs80coco.tar
/
ccexbin.bas
next >
Wrap
BASIC Source File
|
2011-08-08
|
2KB
|
82 lines
110 ' EXBIN - CONVERT S-RECORD FORMAT TO BINARY
120 '
130 PCLEAR 1
140 CLEAR 200,&H1FFF
150 DIM V(50)
160 AL=64*1024 ' LOWEST ADDRESS
170 AU=0 ' HIGHEST ADDRESS
180 AX=0 ' EXEC ADDRESS
190 AM=&H2000 ' MIN ALLOWED
200 SF=1
210 CLS
220 PRINT"EXBIN"
230 PRINT"CONVERT S-RECORD FILE TO BINARY"
240 '
250 INPUT"S-FILE";NM$
260 OPEN"I",SF,NM$
270 '
280 NREC=0
290 '
300 ' MAIN LOOP - READ RECORD AND CONVERT IT
310 INPUT#SF,DL$: NREC=NREC+1
320 IF LEFT$(DL$,1)="S" THEN 380
330 PRINT "FILE IS NOT IN S-RECORD FORMAT."
340 PRINT "LINE";NREC
350 PRINT DL$
360 STOP
370 ' RECORD TYPE (0,1 OR 9)
380 TYPE=VAL(MID$(DL$,2,1))
390 ' RECORD LENGTH
400 LN=VAL("&H"+MID$(DL$,3,2))
410 ' ADDRESS FIELD
420 ADR=VAL("&H"+MID$(DL$,5,4))
430 ' COMPUTE CHECKSUM
440 CK=LN+INT(ADR/256)+ADR-256*INT(ADR/256)
450 ' DATA BYTES
460 IF LN<=3 THEN 510
470 FOR I=1 TO LN-3
480 V(I)=VAL("&H"+MID$(DL$,7+2*I,2))
490 CK=CK+V(I)
500 NEXT I
510 CK=255-(CK-256*INT(CK/256))
520 CS=VAL("&H"+RIGHT$(DL$,2))
530 IF CK=CS THEN 580
540 PRINT"CHECKSUM ERROR AT LINE";NREC
550 PRINT DL$
560 PRINT "COMPUTED ";HEX$(CK);" FOUND ";HEX$(CS)
570 STOP
580 IF TYPE=9 THEN TYPE=2
590 IF TYPE<0 OR TYPE>2 THEN PRINT"UNKNOWN RECORD TYPE ";TYPE:PRINT DL$:STOP
600 ON TYPE+1 GOSUB 640,720,840
610 IF TYPE<2 THEN GOTO 310
620 END
630 '
640 ' FILE NAME RECORD
650 BN$=""
660 FOR I=1 TO LN-3
670 BN$=BN$+CHR$(V(I))
680 NEXT I
690 PRINT"OUTPUT FILE = ";BN$
700 RETURN
710 '
720 ' DATA RECORD
730 IF ADR>=AM THEN 770
740 PRINT"ADDRESS ";HEX$(ADR);" LESS THAN ";HEX$(AM)
750 PRINT"AT LINE ";NREC
760 STOP
770 FOR I=0 TO LN-4
780 POKE ADR+I,V(I+1)
790 NEXT I
800 IF ADR<AL THEN AL=ADR
810 IF ADR+LN-4>AU THEN AU=ADR+LN-4
820 RETURN
830 '
840 ' EXECUTION ENTRY RECORD
850 AX=ADR
860 PRINT"BINARY FILE = ";BN$
870 PRINT"LOW ADDRESS = &H";HEX$(AL)
880 PRINT"HIGH ADDRESS = &H";HEX$(AU)
890 PRINT"EXEC ADDRESS = &H";HEX$(AX)
900 SAVEM BN$,AL,AU,AX
910 RETURN