100 STRING 78,76 105 PRINT:PRINT "**HEX FILE LOAD**" 106 INPUT "MEMORY OFFSET? ",MOS 110 PRINT : PRINT "SEND FILE..." 120 INPUT $(0) : IF ASC($(0),1)=ASC( : ) THEN 140 : REM CHECK COLON 130 PRINT "BAD CARD IMAGE, MUST START WITH ':' -ABORT" : END 140 A=ASC($(0),2) : B=ASC($(0),3) : REM # DATA BYTES 150 PUSH A : GOSUB 310 : POP A : PUSH B : GOSUB 310 : POP B 160 CNTB=(B+(A*16)) 170 ZZZ=CNTB : CNT=CNTB*2 : CIDX=1 175 IF CNTB=0.AND.ASC($(0),9)=31H THEN 360 180 FOR I=4 TO CNT+8 STEP 2 : REM CONV ALL but CHECKSUM 190 A=ASC($(0),I) : PUSH A 195 GOSUB 310 : POP A : REM 1ST NIBBLE 200 B=ASC($(0),I+1) : PUSH B 205 GOSUB 310 : POP B : REM 2ND NIBBLE 210 C=16*A+B : ZZZ=ZZZ+C 215 ASC($(0),CIDX)=C : CIDX=CIDX+1 : NEXT I 220 A=ASC($(0),CNT+10) : B=ASC($(0),CNT+11) : REM CHECKSUM 230 PUSH A : GOSUB 310 : POP A : PUSH B : GOSUB 310 : POP B 240 CCC=B+(A*16) 250 ZZZ=ZZZ.AND.0FFH : ZZZ=ZZZ.XOR.0FFH : ZZZ=ZZZ+1 : CHK=ZZZ.AND.0FFH 260 IF CHK<>CCC THEN GOTO 350 270 MEM=ASC($(0),1) : MEM=MEM*256+ASC($(0),2) 280 MEM=MEM+MOS : IF MEM>MTOP THEN 300 290 PRINT "IMAGE+OFFSET ADDRESS < OR = MTOP...ABORT" : END 300 MEM=MEM-4 : FOR I=4 TO CNTB+3 : XBY(MEM+I)=ASC($(0),I) : NEXT I 305 GOTO 120 310 REM HEX TO BIN 320 POP AA : IF AA>60H THEN AA=AA-20H : REM TO UPPER CASE 330 AA=AA-30H : IF AA>10H THEN AA=AA-7 : REM ASCII BIAS 340 PUSH AA : RETURN 350 PRINT "CKSUM=", : PH0. CCC, : PRINT "COMPUTED=", : PH0. CHK : END 360 PRINT:PRINT "**PROGRAMMING EPROM**": REM get the prog params 370 DBY(26H)=DBY(26H).AND.0F7H : DBY(40H)=76 : DBY(41H)=0 380 PRINT : INPUT "Starting RAM Address,Ending Ram Address? (S,E) ",S,E 390 IF S0FFFFH THEN 380 400 T=((E-S)*.05)/60 : IF S>E THEN 380 410 PRINT : INPUT "EPROM Starting Address?",P 420 IF P<8000H.OR.P>0FFFFH THEN 410 430 PUSH (E-S)+1 : GOSUB 590 : POP G1 435 DBY(31)=G1 : POP G1 : DBY(30)=G1 440 PUSH (P-1) : GOSUB 590 : POP G1 445 DBY(26)=G1 : POP G1 : DBY(24)=G1 450 PUSH S : GOSUB 590 : POP G1 : DBY(27)=G1 455 POP G1 : DBY(25)=G1 460 PRINT : PRINT "Type a 'CR' when ready to program!" 470 X=GET : IF X<>0DH THEN 470 480 PRINT : PRINT "Programming", : PRINT (E-S)+1, 490 PRINT " Bytes-Should take about ", 500 PRINT USING(###.#),T, : PRINT " minutes" 510 REM prog the sucker! 520 PGM 530 REM CHECK FOR ERRORS 540 IF (DBY(30).OR.DBY(31))=0 THEN PRINT "Done" : END 550 PRINT "******ERROR** programming EPROM******" 560 S1=DBY(25)+256*DBY(27) : S1=S1-1 : D1=DBY(24)+256*DBY(26) 570 PH0. "THE VALUE",XBY(S1), 575 PH1. " WAS READ AT LOCATION",S1 : PRINT 580 PH0. "THE EPROM READ",XBY(D1), 585 PH1. " AT LOCATION",D1 : END 590 POP G1 : PUSH (G1.AND.0FFH) : PUSH (INT(G1/256)) : RETURN