1 REM Ins{nd av: Kristoffer Eriksson <5357> 1988-04-11 02.23.43 (WRITE) 20 ! Program HEXTOFIL f|r ABC800 ver 3 30 ! 40 ! Konverterar en hexfil till en vanlig fil. Finns det en checksumma sist 50 ! s} kontrolleras den. Programmet klarar {ven av att konvertera hexfiler 60 ! med en punkt mellan varje byte. Ingen kontroll ut|ver checksumman av 70 ! att det verkligen {r siffror i filen. Om det filtrerar bort vissa 80 ! |verf|ringsfel, s} {r det v{l ingen som blir ledsen. FILTOHEX och ABC- 90 ! klubbens monitor l{gger alltid till en checksumma i slutet av filen. 100 ! 110 ! Orginal HEXTOABS av L-O Larsson <5499> 1985-01-25 120 ! [ndrad av A Franz`n <5258> 1985-05-03 (ABC80 version) 130 ! [ndrad av B Kullmar <1789> 1985-05-04 ABC800 140 ! [ndrad av K Eriksson<5357> 1986-08-20 Snabbare med maskinkod 150 ! [ndrad av K Eriksson<5357> 1988-04-10 Kraschar inte p} udda antal siffror 160 ! 170 ! Anv{ndningsomr}den: 180 ! - Konvertera en hexfil tillbaka till orginalfilen. 190 ! - M|jlighet att patcha i en 8-bitars fil med en vanlig editor. 200 ! 210 ! Id` till f|rb{ttring: Buffring av filhanteringen, s} inte driven m}ste 220 ! v{xla mellan filerna s} ofta. B|r ge stor snabbhets|kning. 230 ! 240 ! 250 INTEGER : EXTEND 260 DIM Buffer$=160,Ut$=80 270 ; CHR$(12) 'HEXTOFIL' : ; : ; 280 ; 'Programmmet konverterar en HEX-fil i textformat tillbaka till orginalet.' 290 ; 'Orginalet m}ste vara skapat med programmet FILTOHEX. Om s} {r fallet' 300 ; 'finns filnamnet lagrat i HEX-filen, s} att r{tt filnamn erh}lles p} utfilen.' 310 ; 'Anger man en enhet i infilen s} f}r utfilen samma enhet.' : ; 320 ; 'Extension ".HEX" {r default, dvs om man inte skriver en extension i infilen' 330 ; 's} antas ".HEX" som extension.' 340 ; 350 INPUT 'Ange infil: 'Infil$ 360 IF Infil$=SPACE$(LEN(Infil$)) THEN 650 ! END 370 Punkt=INSTR(1,Infil$,'.') : IF Punkt=0 Infil$=Infil$+'.HEX' 380 OPEN Infil$ AS FILE 1 390 ! 400 INPUT #1,Utfil$ 410 IF Utfil$=SPACE$(LEN(Utfil$)) THEN 400 420 Kolon=INSTR(1,Infil$,':') : IF Kolon Utfil$=LEFT$(Infil$,Kolon)+Utfil$ 430 ON ERROR GOTO 450 440 OPEN Utfil$ AS FILE 2 : CLOSE 2 : ; 'Filen ' Utfil$ ' finns redan! Ta bort den f|rst!' : GOTO 650 ! END 450 ON ERROR GOTO 620 460 PREPARE Utfil$ AS FILE 2 470 ; 'Utfil: ' Utfil$ 480 ! 490 Buffer$=" " : Ut$=" " ! Allokera utrymme 500 Z=FNAsminit(VAROOT(Buffer$),VAROOT(Ut$)) 510 WHILE -1 520 INPUT #1,Buffer$ 530 WHILE LEN(Buffer$)<10 540 IF Buffer$=SPACE$(LEN(Buffer$)) THEN 610 550 IF NOT FNChecksum ; 'Checksummafel !' CHR$(7) 560 GOTO 640 ! END 570 IF 0 WEND 580 Summa=Summa+CALL(VARPTR(Asm$)) 590 PUT #2 Ut$ 600 ! ; Buffer$ 610 WEND 620 IF ERRCODE<>34 ; 'Fel nr' ERRCODE CHR$(7) : GOTO 640 630 ; 'Checksumma saknas !' CHR$(7) 640 ; "Antal skapade block = ";INT((POSIT(2)+252)/253) 650 CLOSE 660 END 670 ! 680 DEF FNChecksum 690 ON ERROR GOTO 710 700 IF VAL(Buffer$)<>Summa RETURN 0 ELSE RETURN -1 710 RETURN 0 720 FNEND 730 ! 740 DEF FNAsminit(In,Ut) 750 DIM Asm$=100 760 Asm$=" " ! Allokera utrymme 770 A=VARPTR(Asm$) 780 ! 790 REM ASSEMBLERING AV HEXTOBIN.ASM 1988-04-10 800 POKE 0+A,33,0,0,35,35,94,35,86,35,78,35,70,33,0,0,35,35,126,35,229,102,111,229,217,33,0,0,217,205,A+71,SWAP%(A+71),40,26,135,135,135,135,229 810 POKE 38+A,111,205,A+71,SWAP%(A+71),40,14,230,15,181,225,119,35,217,95,22,0,25,217,24,226,225,209,167,237,82,235,225,35,115,35,114,217,201,121 820 POKE 72+A,176,200,26,19,11,254,32,40,246,254,46,40,242,254,65,216,198,9,201 830 ! 840 POKE A+1,In,SWAP%(In) 850 POKE A+13,Ut,SWAP%(Ut) 860 RETURN 0 870 FNEND