DECLARE SUB RunCmd (cmd$,base2%,offset2%) DECLARE SUB Dump (base0%, offset0%) REM $INCLUDE: '7188.bi' REM $INCLUDE: 'printf.bas' DIM idx, quit, key1, i, j, c, temp AS INTEGER DIM cmd AS STRING DIM base1%, offset1%,id% DIM ChangeLine$ ChangeLine$ = CHR$(10) + CHR$(13) InitLib ' driver initial Init5DigitLed ' 5-digit LED initial temp = InstallCom(4, 57600, 8, 0, 1) base1% = &HE000 offset1% = 0 cmd="" quit = 0 idx = 0 Prompt$ = ChangeLine$ + "Demo9>" InitLib temp = print4(ChangeLine$ + "Demo9 for FlashRom byte write,sector Erase.") temp = print4(ChangeLine$ + "Command: Erase --> Erase 0xE0000-0xEFFFF to 0xFF") temp = print4(ChangeLine$ + " W offset(Hex),data(Hex) --> Write byte E000:offset") temp = print4(ChangeLine$ + " D offset(Hex) --> Dump data(64 bytes) from E000:offset") temp = print4(ChangeLine$ + " Enter --> Dump next 64 bytes") temp = print4(ChangeLine$ + " 'u','U' --> Dump Last 64 bytes") temp = print4(ChangeLine$ + " 'q','Q' --> quit to ROM-DOS") id% = FlashReadId temp = print4(ChangeLine$ + "Flash ID=&H" + HEX$(id%)) IF (id% = &HB001) THEN temp = print4("--> size=256K") ELSE temp = print4("--> Unknown type") END IF temp = print4(ChangeLine$) temp = print4(Prompt$) LOOP0: key1 = IsCom(4) IF key1 = 0 GOTO LOOP0 key1 = ReadCom(4) temp = ToCom(4, key1) IF (key1 = 13) THEN temp = print4(ChangeLine$) if idx<>0 then IF (ASC(cmd) = ASC("q") OR ASC(cmd) = ASC("Q")) THEN GOTO endprogram endif call RunCmd (cmd,base1%,offset1%) cmd = "" idx = 0 temp = print4(Prompt$) ELSEIF (key1 = 8) THEN IF idx <> 0 THEN idx = idx - 1 cmd = LEFT$(cmd, idx) END IF ELSE cmd = cmd + CHR$(key1) idx=idx+1 END IF IF (quit = 0) THEN GOTO LOOP0 endprogram: temp = RestoreCom(4) ' if you want write to segment 0xD000 --> set base 0xD000, ' but must make sure your ROM-DISK.IMG size <= 64K bytes ' or when you erase sector 0xD000,ROM Disk(A:) will be damaged. ' ** base can be 0xD000 or 0xE000. SUB Dump (base0%, offset0%) STATIC i, j AS INTEGER STATIC value AS INTEGER FOR j = 0 TO 3 temp = print4("[" + HEX$(base0%) + ":" + HEX$(offset0%) + "] ") FOR i = 0 TO 15 value = FlashRead(base0%, offset0%) IF value < 16 THEN temp = print4("0") temp = print4(HEX$(value)) offset0% = offset0% + 1 temp = print4(" ") NEXT i temp = print4(" ") offset0% = offset0% - 16 FOR i = 0 TO 15 value = FlashRead(base0%, offset0%) IF (value < &H20) THEN temp = ToCom(4, ASC(".")) ELSE temp = ToCom(4, value) END IF offset0% = offset0% + 1 NEXT i temp = print4(CHR$(10) + CHR$(13)) NEXT j END SUB SUB RunCmd (cmd$,base2%,offset2%) STATIC dataoffset, data1 AS INTEGER dataoffset = 0 if cmd$<>"" then data1 = ASC(cmd$) IF (cmd$ = "") THEN CALL Dump(base2%, offset2%) ELSEIF data1 = ASC("d") OR data1 = ASC("D") THEN IF MID$(cmd$, 2) = "" THEN offset2% = 0 ELSE offset2% = VAL(MID$(cmd$, 2)) END IF CALL Dump(base2%, offset2%) ELSEIF data1 = ASC("w") OR data1 = ASC("W") THEN dataoffset=VAL(MID$(cmd$, 2)) temp=INSTR(cmd$,",") if temp > 0 then data1=VAL(MID$(cmd$,temp+1)) else data1=&HFF end if temp = print4("offset=&H" + HEX$(dataoffset)+" data=&H"+HEX$(data1)) temp = FlashWrite(base2%, dataoffset, data1) ELSEIF data1 = ASC("s") OR data1 = ASC("S") THEN base2% = VAL(MID$(cmd$, 2)) temp = print4("Set seg=" + HEX$(base2%)) temp = print4(CHR$(10) + CHR$(13)) ELSEIF data1 = ASC("u") OR data1 = ASC("U") THEN offset2% = offset2% - 128 CALL Dump(base2%, offset2%) ELSEIF data1 = ASC("e") OR data1 = ASC("E") THEN IF cmd$ = "ERASE" THEN tmp = FlashErase(base1) END IF END SUB