SCREEN _NEWIMAGE(93, 45, 0) _SCREENMOVE 250, 10 _TITLE "Bread Board Assembler V1.0 By Lee Trengove 2018" TYPE databar Address AS STRING * 3 labels AS STRING * 10 code AS STRING * 2 Instruction AS STRING * 30 format AS INTEGER RamLabel AS STRING * 11 copy_paste AS STRING * 30 code_paste AS STRING * 2 END TYPE TYPE SL Labels_SL AS STRING * 10 code_SL AS STRING * 2 Instruction_SL AS STRING * 30 ramlabels_SL AS STRING * 11 END TYPE TYPE dir dirs AS STRING * 41 format AS _BYTE '1=drives, 2=directories, 3=files click AS _BYTE ' 1=clicked 0=clear END TYPE DIM SHARED dirss(1000) AS dir DIM SHARED clipbord_items AS INTEGER DIM SHARED currentfile AS STRING DIM SHARED labelredraw DIM SHARED exitflag AS INTEGER DIM SHARED database(4096) AS databar DIM SHARED save_load(4096) AS SL DIM SHARED code$ DIM SHARED lab_dup_flag AS INTEGER DIM SHARED ram_dup_flag AS INTEGER DIM SHARED programfolder$ DIM SHARED filelist_length DIM SHARED cancel_exit programfolder$ = _CWD$ COLOR 7, 1 CLS CALL loadaddress CALL screenframe CALL drawmenues currentfile = "untitled" curposy = 4 redraw = 1 labelfeild = 1 DO oldoffset = offset DO WHILE _MOUSEINPUT 'get mouse data mx = _MOUSEX my = _MOUSEY leftbutton = _MOUSEBUTTON(1) rightbutton = _MOUSEBUTTON(2) offset = offset + _MOUSEWHEEL LOOP IF oldoffset <> offset THEN redraw = 1 IF offset < 0 THEN offset = 0 oldoffset = 0 END IF IF offset > 4058 THEN offset = 4058 oldoffset = 4058 END IF COLOR 0, 7 'highlight for menu butons IF my = 2 AND (mx > 75 AND mx < 85) THEN COLOR 7, 0 LOCATE 2, 76 PRINT " NEW " COLOR 0, 7 IF my = 6 AND (mx > 75 AND mx < 85) THEN COLOR 7, 0 LOCATE 6, 76 PRINT " OPEN " COLOR 0, 7 IF my = 10 AND (mx > 75 AND mx < 85) THEN COLOR 7, 0 LOCATE 10, 76 PRINT " SAVE " COLOR 0, 7 IF my = 14 AND (mx > 75 AND mx < 85) THEN COLOR 7, 0 LOCATE 14, 76 PRINT " SAVE AS " COLOR 0, 7 IF my = 18 AND (mx > 75 AND mx < 85) THEN COLOR 7, 0 LOCATE 18, 76 PRINT " COMPILE " COLOR 7, 1 LOCATE 21, 73 PRINT "<" LOCATE 21, 75 PRINT currentfile LOCATE 21, (LEN(currentfile) + 75) PRINT ".asm >" IF redraw = 1 THEN 'redraw databse FOR pages = 4 TO 41 COLOR 7, 1 LOCATE pages, 2, 0 pageoffset = (pages - 3) + offset PRINT database(pageoffset).Address LOCATE pages, 5 PRINT CHR$(179) LOCATE pages, 6 COLOR 10, 1 PRINT database(pageoffset).labels COLOR 7, 1 LOCATE pages, 17 PRINT CHR$(179) LOCATE pages, 18 COLOR 13, 1 PRINT database(pageoffset).code COLOR 7, 1 LOCATE pages, 21 PRINT CHR$(179) IF database(pageoffset).format = 1 THEN COLOR 1, 7 ELSE COLOR 7, 1 END IF LOCATE pages, 22 CALL color_print(pageoffset, pages) COLOR 7, 1 LOCATE pages, 53 PRINT CHR$(179) LOCATE pages, 54 COLOR 14, 1 PRINT database(pageoffset).RamLabel NEXT pages redraw = 0 END IF keys$ = INKEY$ IF keys$ = CHR$(0) + "H" THEN 'up arrow curposy = curposy - 1 IF curposy < 4 THEN curposy = 4 offset = offset - 1 redraw = 1 IF offset < 0 THEN offset = 0 END IF keys$ = "" END IF IF keys$ = CHR$(0) + "P" THEN 'down arrow curposy = curposy + 1 IF curposy > 41 THEN curposy = 41 offset = offset + 1 redraw = 1 IF offset > 4058 THEN offset = 4058 END IF keys$ = "" END IF IF keys$ = CHR$(0) + "R" THEN CALL Insert(curaddress) keys$ = "" redraw = 1 END IF IF keys$ = CHR$(0) + "M" THEN keys$ = "" 'right arrow IF keys$ = CHR$(0) + "K" THEN keys$ = "" 'right arrow IF keys$ = CHR$(0) + "Q" THEN 'PG down offset = offset + 38 'page down IF offset > 4057 THEN offset = 4057 redraw = 1 keys$ = "" END IF IF keys$ = CHR$(0) + "I" THEN 'PG up offset = offset - 38 'page up IF offset < 0 THEN offset = 0 redraw = 1 keys$ = "" END IF IF leftbutton = -1 THEN IF holddown2 = 1 THEN holddown2 = 0 CALL cleartextselect redraw = 1 END IF buttoncount = buttoncount + 1 IF my = 2 AND (mx > 75 AND mx < 85) THEN CALL newfile IF exitflag = 1 THEN exitflag = 0 END IF redraw = 1 DO WHILE _MOUSEINPUT LOOP rightbutton = 0 leftbutton = 0 COLOR 7, 1 CALL screenframe CALL drawmenues GOTO skip END IF IF my = 6 AND (mx > 75 AND mx < 85) THEN CALL openfile redraw = 1 DO WHILE _MOUSEINPUT LOOP rightbutton = 0 leftbutton = 0 COLOR 7, 1 CALL screenframe CALL drawmenues GOTO skip END IF IF my = 10 AND (mx > 75 AND mx < 85) THEN CALL savefile redraw = 1 DO WHILE _MOUSEINPUT LOOP rightbutton = 0 leftbutton = 0 COLOR 7, 1 CALL screenframe CALL drawmenues GOTO skip END IF IF my = 14 AND (mx > 75 AND mx < 85) THEN CALL save_asfile redraw = 1 DO WHILE _MOUSEINPUT LOOP rightbutton = 0 leftbutton = 0 COLOR 7, 1 CALL screenframe CALL drawmenues GOTO skip END IF IF my = 18 AND (mx > 75 AND mx < 85) THEN CALL compile redraw = 1 DO WHILE _MOUSEINPUT LOOP rightbutton = 0 leftbutton = 0 COLOR 7, 1 CALL screenframe CALL drawmenues GOTO skip END IF IF mx > 5 AND mx < 16 THEN 'click in labelfeild curposy = my labelfeild = 1 instfeild = 0 varbfeild = 0 END IF IF mx > 21 AND mx < 53 THEN 'click in instruction feild curposy = my labelfeild = 0 instfeild = 1 varbfeild = 0 END IF IF mx > 53 AND mx < 66 THEN 'click in variable feild curposy = my labelfeild = 0 instfeild = 0 varbfeild = 1 END IF IF curposy < 4 THEN curposy = 4 offset = offset - 1 _DELAY .1 redraw = 1 IF offset < 0 THEN offset = 0 END IF IF curposy > 41 THEN curposy = 41 offset = offset + 1 _DELAY .1 redraw = 1 IF offset > 4058 THEN offset = 4058 END IF END IF IF leftbutton = 0 THEN buttoncount = buttoncount - 5 IF buttoncount < 0 THEN buttoncount = 0 changecol = 0 IF holddown = 1 THEN holddown2 = 1 holddown = 0 END IF END IF IF leftbutton = -1 AND buttoncount > 30 THEN 'holding left mouse button down changecol = 1 buttoncount = 35 holddown = 1 END IF curaddress = (offset + curposy) - 3 IF rightbutton = -1 AND mx < 53 THEN 'right click CALL editdialog(mx, my, curaddress) redraw = 1 DO WHILE _MOUSEINPUT LOOP rightbutton = 0 leftbutton = 0 GOTO skip END IF 'Label feild IF labelfeild = 1 THEN ' tempstring1$ = RTRIM$(database(curaddress).labels) string1pos = LEN(tempstring1$) IF keys$ <> "" THEN IF keys$ = CHR$(8) THEN 'backspace string1pos = string1pos - 1 IF string1pos < 0 THEN string1pos = 0 tempstring1$ = LEFT$(tempstring1$, string1pos) ELSE IF keys$ = CHR$(13) THEN 'enter database(curaddress).labels = tempstring1$ curposy = curposy + 1 IF curposy > 41 THEN curposy = 41 offset = offset + 1 redraw = 1 IF offset > 4058 THEN offset = 4058 END IF redraw = 1 GOTO skip ELSE tempstring1$ = tempstring1$ + keys$ string1pos = string1pos + 1 redraw = 1 IF string1pos > 10 THEN string1pos = 10 END IF END IF END IF database(curaddress).labels = tempstring1$ CALL check_lab_dup(curaddress) COLOR 10, 1 IF lab_dup_flag = 1 THEN COLOR 12, 1 END IF LOCATE curposy, 6, 0 PRINT database(curaddress).labels LOCATE curposy, (6 + string1pos), 1, 0, 31 _LIMIT 50 END IF 'Instruction feild IF instfeild = 1 THEN tempstring1$ = RTRIM$(database(curaddress).Instruction) string1pos = LEN(tempstring1$) IF keys$ <> "" THEN IF keys$ = CHR$(8) THEN 'backspace string1pos = string1pos - 1 IF string1pos < 0 THEN string1pos = 0 CALL delete(curaddress) curposy = curposy - 1 IF curposy < 4 THEN curposy = 4 offset = offset - 1 redraw = 1 IF offset < 0 THEN offset = 0 END IF redraw = 1 GOTO skip END IF tempstring1$ = LEFT$(tempstring1$, string1pos) ELSE IF keys$ = CHR$(13) THEN 'enter database(curaddress).Instruction = tempstring1$ curposy = curposy + 1 IF curposy > 41 THEN curposy = 41 offset = offset + 1 redraw = 1 IF offset > 4058 THEN offset = 4058 END IF redraw = 1 GOTO skip ELSE IF keys$ = CHR$(32) THEN 'spcae tempstring1$ = tempstring1$ + CHR$(255) string1pos = string1pos + 1 redraw = 1 IF string1pos > 30 THEN string1pos = 30 ELSE tempstring1$ = tempstring1$ + keys$ string1pos = string1pos + 1 redraw = 1 IF string1pos > 30 THEN string1pos = 30 END IF END IF END IF END IF database(curaddress).Instruction = tempstring1$ CALL Instructiondecode(curaddress) LOCATE curposy, 22, 0 IF changecol = 1 THEN IF database(curaddress).format = 0 AND curposy = oldypos THEN database(curaddress).format = 1 ELSE IF database(curaddress).format = 1 AND curposy <> oldypos THEN database(curaddress).format = 0 database(oldaddress).format = 0 redraw = 1 END IF END IF oldaddress = curaddress oldypos = curposy END IF IF database(curaddress).format = 1 THEN COLOR 1, 7 ELSE COLOR 7, 1 END IF CALL color_print(curaddress, curposy) LOCATE curposy, (22 + string1pos), 1, 0, 31 _LIMIT 100 END IF 'variable feild IF varbfeild = 1 THEN ' tempstring1$ = RTRIM$(database(curaddress).RamLabel) string1pos = LEN(tempstring1$) IF keys$ <> "" THEN IF keys$ = CHR$(8) THEN 'backspace string1pos = string1pos - 1 IF string1pos < 0 THEN string1pos = 0 tempstring1$ = LEFT$(tempstring1$, string1pos) ELSE IF keys$ = CHR$(13) THEN 'enter database(curaddress).RamLabel = tempstring1$ curposy = curposy + 1 IF curposy > 41 THEN curposy = 41 offset = offset + 1 redraw = 1 IF offset > 4058 THEN offset = 4058 END IF redraw = 1 GOTO skip ELSE tempstring1$ = tempstring1$ + keys$ string1pos = string1pos + 1 redraw = 1 IF string1pos > 11 THEN string1pos = 11 END IF END IF END IF database(curaddress).RamLabel = tempstring1$ CALL check_ram_dup(curaddress) COLOR 14, 1 IF ram_dup_flag = 1 THEN COLOR 12, 1 END IF LOCATE curposy, 54, 0 PRINT database(curaddress).RamLabel LOCATE curposy, (54 + string1pos), 1, 0, 31 _LIMIT 50 END IF IF changecol = 0 THEN CALL re_order_labels IF labelredraw = 1 THEN redraw = 1 labelredraw = 0 END IF END IF skip: exitsystem = _EXIT IF exitsystem THEN CALL quit_program IF cancel_exit = 1 THEN CALL screenframe redraw = 1 cancel_exit = 0 END IF LOOP errhandler: RESUME NEXT END SUB loadaddress: FOR count = 1 TO 4096 database(count).labels = " " database(count).RamLabel = " " database(count).Instruction = " " database(count).copy_paste = " " database(count).format = 0 IF count < 17 THEN database(count).Address = "00" + HEX$((count - 1)) ELSEIF count >= 17 AND count < 257 THEN database(count).Address = "0" + HEX$((count - 1)) ELSE database(count).Address = HEX$((count - 1)) END IF NEXT count END SUB SUB screenframe COLOR 7, 1 LOCATE 1, 1 PRINT "ÚÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 2, 1 PRINT "³ADD³ Label ³OPC³ Instruction ³ Variable ³" LOCATE 3, 1 PRINT "ÃÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´" FOR a = 4 TO 41 LOCATE a, 1 PRINT "³ ³" NEXT a LOCATE 42, 1 PRINT "ÀÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÙ" END SUB SUB check_lab_dup (curaddress) lab_dup_flag = 0 temp$ = LCASE$(RTRIM$(database(curaddress).labels)) length = LEN(temp$) IF length = 0 THEN EXIT SUB FOR check = 1 TO 4096 tempstring$ = LCASE$(RTRIM$(database(check).labels)) IF check <> curaddress THEN IF tempstring$ = temp$ THEN lab_dup_flag = 1 EXIT SUB END IF END IF NEXT check END SUB SUB check_ram_dup (curaddress) ram_dup_flag = 0 temp$ = LCASE$(RTRIM$(database(curaddress).RamLabel)) length = LEN(temp$) IF length = 0 THEN EXIT SUB FOR check = 1 TO 4096 tempstring$ = LCASE$(RTRIM$(database(check).RamLabel)) IF check <> curaddress THEN IF tempstring$ = temp$ THEN ram_dup_flag = 1 EXIT SUB END IF END IF NEXT check END SUB SUB Insert (address) 'insert blank line IF address < 3841 THEN database(3841).labels = " " database(3841).Instruction = " " database(3841).code = " " FOR lp = 3840 TO (address) STEP -1 SWAP database(lp).labels, database(lp + 1).labels SWAP database(lp).Instruction, database(lp + 1).Instruction SWAP database(lp).code, database(lp + 1).code NEXT lp END IF IF address >= 3841 THEN database(4096).labels = " " database(4096).Instruction = " " database(4096).code = " " FOR lp = 4095 TO (address) STEP -1 SWAP database(lp).labels, database(lp + 1).labels SWAP database(lp).Instruction, database(lp + 1).Instruction SWAP database(lp).code, database(lp + 1).code NEXT lp END IF END SUB SUB cleartextselect 'clear selection FOR count = 1 TO 4096 database(count).format = 0 NEXT count END SUB SUB delete (curpos) 'delete line IF curpos < 3841 THEN database(3841).labels = " " database(3841).Instruction = " " database(3841).code = " " FOR lp = curpos TO 3840 SWAP database(lp + 1).labels, database(lp).labels SWAP database(lp + 1).Instruction, database(lp).Instruction SWAP database(lp + 1).code, database(lp).code NEXT lp END IF IF curpos >= 3841 THEN database(4096).labels = " " database(4096).Instruction = " " database(4096).code = " " FOR lp = curpos TO 4095 SWAP database(lp).labels, database(lp + 1).labels SWAP database(lp).Instruction, database(lp + 1).Instruction SWAP database(lp).code, database(lp + 1).code NEXT lp END IF END SUB SUB editdialog (mx, my, curaddress) mx = 30 IF my < 4 THEN my = 4 IF my > 35 THEN my = 35 COLOR 0, 7 LOCATE my, mx, 0 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE my + 1, mx PRINT "³ ³" + CHR$(219) + CHR$(219) LOCATE my + 2, mx PRINT "³ ³" + CHR$(219) + CHR$(219) LOCATE my + 3, mx PRINT "³ ³" + CHR$(219) + CHR$(219) LOCATE my + 4, mx PRINT "³ ³" + CHR$(219) + CHR$(219) LOCATE my + 5, mx PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) FOR shad = 2 TO 19 LOCATE my + 6, mx + shad PRINT CHR$(219) NEXT shad DO DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 COLOR 0, 7 LOCATE my + 1, mx + 2 COLOR 0, 7 IF newmy = (my + 1) AND newmx > 31 AND newmx < 47 THEN COLOR 7, 0 PRINT "< CUT > " LOCATE my + 2, mx + 2 COLOR 0, 7 IF newmy = (my + 2) AND newmx > 31 AND newmx < 47 THEN COLOR 7, 0 PRINT "< COPY > " LOCATE my + 3, mx + 2 COLOR 0, 7 IF newmy = (my + 3) AND newmx > 31 AND newmx < 47 THEN COLOR 7, 0 PRINT "< PASTE > " LOCATE my + 4, mx + 2 COLOR 0, 7 IF newmy = (my + 4) AND newmx > 31 AND newmx < 47 THEN COLOR 7, 0 PRINT "< DELETE > " IF leftbuton = -1 THEN IF newmy = (my + 1) AND newmx > 31 AND newmx < 47 THEN GOTO cut IF newmy = (my + 2) AND newmx > 31 AND newmx < 47 THEN GOTO copy IF newmy = (my + 3) AND newmx > 31 AND newmx < 47 THEN GOTO paste IF newmy = (my + 4) AND newmx > 31 AND newmx < 47 THEN GOTO deleted EXIT SUB END IF LOOP cut: FOR del = 1 TO 4096 ' clear clipboard database(del).copy_paste = " " database(del).code_paste = " " NEXT del address = 0 startaddress = 0 count = 0 DO 'Find first selected text count = count + 1 IF count = 4096 THEN EXIT SUB LOOP UNTIL database(count).format = 1 startaddress = count DO 'find last selected ext count = count + 1 IF count = 4096 THEN EXIT SUB LOOP UNTIL database(count).format = 0 endaddress = count - 1 count = 0 address = 0 FOR count = startaddress TO endaddress 'copy to clipboard address = address + 1 database(address).copy_paste = database(count).Instruction database(address).code_paste = database(count).code NEXT count clipbord_items = address address = 0 count = 0 address = startaddress 'delete selected text (cut) FOR count = startaddress TO endaddress database(count).format = 0 CALL delete(address) NEXT count EXIT SUB copy: FOR del = 1 TO 4096 ' clear clipboard database(del).copy_paste = " " database(del).code_paste = " " NEXT del address = 0 startaddress = 0 DO 'Find first selected text count = count + 1 IF count = 4096 THEN EXIT SUB LOOP UNTIL database(count).format = 1 startaddress = count DO 'find last selected ext count = count + 1 IF count = 4096 THEN EXIT SUB LOOP UNTIL database(count).format = 0 endaddress = count - 1 count = 0 address = 0 FOR count = startaddress TO endaddress 'copy to clipboard address = address + 1 database(address).copy_paste = database(count).Instruction database(address).code_paste = database(count).code NEXT count clipbord_items = address address = 0 count = 0 address = startaddress 'clear selected text (copy) FOR count = startaddress TO endaddress database(count).format = 0 NEXT count EXIT SUB paste: IF clipbord_items = 0 THEN EXIT SUB FOR count = clipbord_items TO 1 STEP -1 CALL Insert(curaddress) 'make new space database(curaddress).Instruction = database(count).copy_paste 'copy cliboard items one at a time in reverse order due to how insert routine works database(curaddress).code = database(count).code_paste NEXT count EXIT SUB deleted: count = 0 DO 'Find first selected text count = count + 1 IF count = 4096 THEN EXIT SUB LOOP UNTIL database(count).format = 1 startaddress = count DO 'find last selected text count = count + 1 IF count = 4096 THEN EXIT SUB LOOP UNTIL database(count).format = 0 endaddress = count - 1 count = 0 address = startaddress FOR count = startaddress TO endaddress database(count).format = 0 CALL delete(address) NEXT count END SUB SUB drawmenues COLOR 0, 7 LOCATE 1, 75 PRINT "ÚÄÄÄÄÄÄÄÄÄ¿" LOCATE 2, 75 PRINT "³ ³" 'new LOCATE 3, 75 PRINT "ÀÄÄÄÄÄÄÄÄÄÙ" LOCATE 5, 75 PRINT "ÚÄÄÄÄÄÄÄÄÄ¿" LOCATE 6, 75 PRINT "³ ³" 'open LOCATE 7, 75 PRINT "ÀÄÄÄÄÄÄÄÄÄÙ" LOCATE 9, 75 PRINT "ÚÄÄÄÄÄÄÄÄÄ¿" LOCATE 10, 75 PRINT "³ ³" 'save LOCATE 11, 75 PRINT "ÀÄÄÄÄÄÄÄÄÄÙ" LOCATE 13, 75 PRINT "ÚÄÄÄÄÄÄÄÄÄ¿" LOCATE 14, 75 PRINT "³ ³" 'save as LOCATE 15, 75 PRINT "ÀÄÄÄÄÄÄÄÄÄÙ" LOCATE 17, 75 PRINT "ÚÄÄÄÄÄÄÄÄÄ¿" LOCATE 18, 75 PRINT "³ ³" 'compile LOCATE 19, 75 PRINT "ÀÄÄÄÄÄÄÄÄÄÙ" END SUB SUB newfile COLOR 0, 7 LOCATE 8, 10, 0 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 9, 10 PRINT "³ Do you wish to save current file ? ³" + CHR$(219) + CHR$(219) LOCATE 10, 10 PRINT "³ < YES > < NO > < CANCELL > ³" + CHR$(219) + CHR$(219) LOCATE 11, 10 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) FOR shad = 1 TO 39 LOCATE 12, 12 + shad PRINT CHR$(219) NEXT shad DO DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 COLOR 0, 7 IF newmy = 10 AND (newmx > 13 AND newmx < 19) THEN COLOR 7, 0 LOCATE 10, 13 PRINT "< YES >" COLOR 0, 7 IF newmy = 10 AND (newmx > 25 AND newmx < 30) THEN COLOR 7, 0 LOCATE 10, 25 PRINT "< NO >" COLOR 0, 7 IF newmy = 10 AND (newmx > 36 AND newmx < 46) THEN COLOR 7, 0 LOCATE 10, 36 PRINT "< CANCELL >" IF leftbuton = -1 THEN IF newmy = 10 AND newmx > 13 AND newmx < 19 THEN GOTO yes IF newmy = 10 AND newmx > 25 AND newmx < 30 THEN GOTO no IF newmy = 10 AND newmx > 36 AND newmx < 46 THEN exitflag = 1 EXIT SUB END IF END IF LOOP yes: IF currentfile = "untitled" THEN CALL save_asfile ELSE pathfile$ = _CWD$ + "\" + currentfile + ".asm" OPEN pathfile$ FOR RANDOM AS #1 LEN = LEN(save_load(1)) FOR save = 1 TO 4096 save_load(save).Labels_SL = database(save).labels save_load(save).code_SL = database(save).code save_load(save).Instruction_SL = database(save).Instruction save_load(save).ramlabels_SL = database(save).RamLabel NEXT save FOR save = 1 TO 4096 PUT #1, save, save_load(save) NEXT save CLOSE #1 END IF no: FOR del = 1 TO 4095 database(del).labels = " " database(del).Instruction = " " database(del).code = " " database(del).RamLabel = " " NEXT del currentfile = "untitled" END SUB SUB openfile ON ERROR GOTO errhandler CALL newfile IF exitflag = 1 THEN exitflag = 0 EXIT SUB END IF cancell_open$ = _CWD$ startopen: CALL get_file_list re_draw = 1 COLOR 0, 7 LOCATE 4, 10 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ OPEN FILE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 5, 10 PRINT "³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³" + CHR$(219) + CHR$(219) LOCATE 6, 10 PRINT "³ File Name:³ ³.ASM ³" + CHR$(219) + CHR$(219) LOCATE 7, 10 PRINT "³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³" + CHR$(219) + CHR$(219) LOCATE 8, 10 PRINT "³ Path: ³" + CHR$(219) + CHR$(219) LOCATE 9, 10 PRINT "³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³" + CHR$(219) + CHR$(219) LOCATE 10, 10 PRINT "³ ³ ³ ³" + CHR$(219) + CHR$(219) FOR prnt = 11 TO 35 LOCATE prnt, 10 PRINT "³ ³ ³ ³" + CHR$(219) + CHR$(219) NEXT prnt LOCATE 36, 10 PRINT "³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³" + CHR$(219) + CHR$(219) LOCATE 37, 10 PRINT "³ < OPEN > < CANCELL > ³" + CHR$(219) + CHR$(219) LOCATE 38, 10 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) LOCATE 8, 17 PRINT _CWD$ FOR shad = 1 TO 49 LOCATE 39, 11 + shad PRINT CHR$(219) NEXT shad string1pos = LEN(currentfile) oldwheel = 0 wheel = 0 DO oldwheel = wheel DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 IF oldwheel <> wheel THEN re_draw = 1 IF wheel < 0 THEN wheel = 0 oldwheel = 0 END IF IF wheel > 975 THEN wheel = 975 oldwheel = 975 END IF IF re_draw = 1 THEN re_draw = 0 FOR f_list = 10 TO 35 pageoffset = (f_list - 9) + wheel COLOR 0, 7 LOCATE f_list, 14 PRINT " " IF dirss(pageoffset).click = 1 THEN COLOR 7, 0 LOCATE f_list, 14 PRINT RTRIM$(dirss(pageoffset).dirs) NEXT f_list END IF IF leftbuton = -1 THEN IF newmx > 13 AND newmx < 56 AND newmy > 9 AND newmy < 35 THEN 'click in filelist field oldaddress = curaddress curaddress = (wheel + newmy) - 9 IF curaddress > filelist_length THEN GOTO skip DO WHILE leftbuton = -1 DO WHILE _MOUSEINPUT leftbuton = _MOUSEBUTTON(1) LOOP LOOP IF oldaddress <> curaddress THEN 'single clicl CALL clear_click dirss(curaddress).click = 1 IF dirss(curaddress).format = 3 THEN length = LEN(RTRIM$(dirss(curaddress).dirs)) 'trim off file extension currentfile = LEFT$(RTRIM$(dirss(curaddress).dirs), length - 4) string1pos = LEN(currentfile) END IF END IF IF oldaddress = curaddress THEN 'double click IF dirss(curaddress).format = 2 THEN IF RTRIM$(dirss(curaddress).dirs) = ".." THEN CHDIR "..\" ELSE path$ = RTRIM$(dirss(curaddress).dirs) 'strip off the pathlen = LEN(path$) path$ = RIGHT$(path$, (pathlen - 6)) ' LOCATE 30, 60 ' PRINT _CWD$ + "\" + path$ CHDIR _CWD$ + "\" + path$ END IF GOTO startopen END IF IF dirss(curaddress).format = 3 THEN length = LEN(RTRIM$(dirss(curaddress).dirs)) 'trim off file extension currentfile = LEFT$(RTRIM$(dirss(curaddress).dirs), length - 4) GOTO opens END IF IF dirss(curaddress).format = 1 THEN path$ = RTRIM$(dirss(curaddress).dirs) 'strip off the spaces CHDIR path$ GOTO startopen END IF END IF re_draw = 1 END IF skip: IF newmy = 37 AND newmx > 20 AND newmx < 27 THEN GOTO opens 'Click on IF newmy = 37 AND newmx > 38 AND newmx < 48 THEN 'click on CHDIR cancell_open$ EXIT SUB END IF END IF COLOR 0, 7 IF newmy = 37 AND (newmx > 20 AND newmx < 27) THEN COLOR 7, 0 LOCATE 37, 20 PRINT "< OPEN >" COLOR 0, 7 IF newmy = 37 AND (newmx > 38 AND newmx < 48) THEN COLOR 7, 0 LOCATE 37, 38 PRINT "< CANCELL >" COLOR 0, 7 k$ = INKEY$ IF k$ <> "" THEN IF k$ = CHR$(8) THEN 'backspace string1pos = string1pos - 1 IF string1pos < 0 THEN string1pos = 0 currentfile = LEFT$(currentfile, string1pos) ELSE IF k$ = CHR$(13) THEN 'enter GOTO opens ELSE IF k$ = CHR$(32) THEN 'spcae string1pos = string1pos + 1 IF string1pos > 30 THEN string1pos = 30 IF string1pos < 30 THEN currentfile = currentfile + CHR$(32) ELSE string1pos = string1pos + 1 currentfile = currentfile + k$ IF string1pos > 30 THEN string1pos = 30 currentfile = LEFT$(currentfile, string1pos) END IF END IF END IF END IF END IF LOCATE 6, 23 PRINT " " LOCATE 6, 23 PRINT currentfile LOCATE 6, string1pos + 23, 1 LOOP opens: DO WHILE _MOUSEINPUT LOOP pathfile$ = _CWD$ + "\" + currentfile + ".asm" shell$ = "DIR " + pathfile$ + " /b > MYTEST.TXT" SHELL _HIDE shell$ OPEN "MYTEST.TXT" FOR APPEND AS #20 l = LOF(20) CLOSE #20 IF l = 0 THEN COLOR 0, 7 LOCATE 8, 10 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ OPEN FILE ÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 9, 10 PRINT "³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³" + CHR$(219) + CHR$(219) LOCATE 10, 10 PRINT "³ File Name:³ ³.ASM ³" + CHR$(219) + CHR$(219) LOCATE 11, 10 PRINT "³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³" + CHR$(219) + CHR$(219) LOCATE 12, 10 PRINT "³ Path: ³" + CHR$(219) + CHR$(219) LOCATE 13, 10 PRINT "³ File does not exist!! < OK > ³" + CHR$(219) + CHR$(219) LOCATE 14, 10 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) LOCATE 12, 17 PRINT _CWD$ FOR shad = 1 TO 39 LOCATE 15, 12 + shad PRINT CHR$(219) NEXT shad DO DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 COLOR 0, 7 IF newmy = 13 AND (newmx > 41 AND newmx < 46) THEN COLOR 7, 0 LOCATE 13, 41 PRINT "< OK >" COLOR 0, 7 IF leftbuton = -1 THEN IF newmy = 13 AND newmx > 41 AND newmx < 46 THEN DO WHILE _MOUSEINPUT rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) LOOP _DELAY .2 GOTO startopen END IF END IF LOCATE 10, 23 PRINT " " LOCATE 10, 23, 0 PRINT currentfile LOOP END IF pathfile$ = _CWD$ + "\" + currentfile + ".asm" OPEN pathfile$ FOR RANDOM AS #1 LEN = LEN(save_load(1)) FOR save = 1 TO 4096 GET #1, save, save_load(save) NEXT save FOR save = 1 TO 4096 database(save).labels = save_load(save).Labels_SL database(save).code = save_load(save).code_SL database(save).Instruction = save_load(save).Instruction_SL database(save).RamLabel = save_load(save).ramlabels_SL NEXT save CLOSE #1 END SUB SUB savefile IF currentfile = "untitled" THEN CALL save_asfile ELSE pathfile$ = _CWD$ + "\" + currentfile + ".asm" OPEN pathfile$ FOR RANDOM AS #1 LEN = LEN(save_load(1)) FOR save = 1 TO 4096 save_load(save).Labels_SL = database(save).labels save_load(save).code_SL = database(save).code save_load(save).Instruction_SL = database(save).Instruction save_load(save).ramlabels_SL = database(save).RamLabel NEXT save FOR save = 1 TO 4096 PUT #1, save, save_load(save) NEXT save CLOSE #1 END IF END SUB SUB save_asfile ON ERROR GOTO errhandler cancell_open$ = _CWD$ startsaveas: CALL get_file_list re_draw = 1 COLOR 0, 7 LOCATE 4, 10 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ SAVE FILE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 5, 10 PRINT "³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³" + CHR$(219) + CHR$(219) LOCATE 6, 10 PRINT "³ File Name:³ ³.ASM ³" + CHR$(219) + CHR$(219) LOCATE 7, 10 PRINT "³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³" + CHR$(219) + CHR$(219) LOCATE 8, 10 PRINT "³ Path: ³" + CHR$(219) + CHR$(219) LOCATE 9, 10 PRINT "³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³" + CHR$(219) + CHR$(219) LOCATE 10, 10 PRINT "³ ³ ³ ³" + CHR$(219) + CHR$(219) FOR prnt = 11 TO 35 LOCATE prnt, 10 PRINT "³ ³ ³ ³" + CHR$(219) + CHR$(219) NEXT prnt LOCATE 36, 10 PRINT "³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³" + CHR$(219) + CHR$(219) LOCATE 37, 10 PRINT "³ < SAVE > < CANCELL > ³" + CHR$(219) + CHR$(219) LOCATE 38, 10 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) LOCATE 8, 17 PRINT _CWD$ FOR shad = 1 TO 49 LOCATE 39, 11 + shad PRINT CHR$(219) NEXT shad string1pos = LEN(currentfile) oldwheel = 0 wheel = 0 DO oldwheel = wheel DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 IF oldwheel <> wheel THEN re_draw = 1 IF wheel < 0 THEN wheel = 0 oldwheel = 0 END IF IF wheel > 975 THEN wheel = 975 oldwheel = 975 END IF IF re_draw = 1 THEN re_draw = 0 FOR f_list = 10 TO 35 pageoffset = (f_list - 9) + wheel COLOR 0, 7 LOCATE f_list, 14 PRINT " " IF dirss(pageoffset).click = 1 THEN COLOR 7, 0 LOCATE f_list, 14 PRINT RTRIM$(dirss(pageoffset).dirs) NEXT f_list END IF IF leftbuton = -1 THEN IF newmx > 13 AND newmx < 56 AND newmy > 9 AND newmy < 35 THEN 'click in filelist field oldaddress = curaddress curaddress = (wheel + newmy) - 9 IF curaddress > filelist_length THEN GOTO skip DO WHILE leftbuton = -1 DO WHILE _MOUSEINPUT leftbuton = _MOUSEBUTTON(1) LOOP LOOP IF oldaddress <> curaddress THEN 'single clicl CALL clear_click dirss(curaddress).click = 1 IF dirss(curaddress).format = 3 THEN length = LEN(RTRIM$(dirss(curaddress).dirs)) 'trim off file extension currentfile = LEFT$(RTRIM$(dirss(curaddress).dirs), length - 4) string1pos = LEN(currentfile) END IF END IF IF oldaddress = curaddress THEN 'double click IF dirss(curaddress).format = 2 THEN IF RTRIM$(dirss(curaddress).dirs) = ".." THEN CHDIR "..\" ELSE path$ = RTRIM$(dirss(curaddress).dirs) 'strip off the pathlen = LEN(path$) path$ = RIGHT$(path$, (pathlen - 6)) CHDIR _CWD$ + "\" + path$ END IF GOTO startsaveas END IF IF dirss(curaddress).format = 3 THEN length = LEN(RTRIM$(dirss(curaddress).dirs)) 'trim off file extension currentfile = LEFT$(RTRIM$(dirss(curaddress).dirs), length - 4) GOTO save END IF IF dirss(curaddress).format = 1 THEN path$ = RTRIM$(dirss(curaddress).dirs) 'strip off the spaces CHDIR path$ GOTO startsaveas END IF END IF re_draw = 1 END IF skip: IF newmy = 37 AND newmx > 20 AND newmx < 27 THEN GOTO save 'Click on IF newmy = 37 AND newmx > 38 AND newmx < 48 THEN 'click on CHDIR cancell_open$ EXIT SUB END IF END IF COLOR 0, 7 IF newmy = 37 AND (newmx > 20 AND newmx < 27) THEN COLOR 7, 0 LOCATE 37, 20 PRINT "< SAVE >" COLOR 0, 7 IF newmy = 37 AND (newmx > 38 AND newmx < 48) THEN COLOR 7, 0 LOCATE 37, 38 PRINT "< CANCELL >" COLOR 0, 7 k$ = INKEY$ IF k$ <> "" THEN IF k$ = CHR$(8) THEN 'backspace string1pos = string1pos - 1 IF string1pos < 0 THEN string1pos = 0 currentfile = LEFT$(currentfile, string1pos) ELSE IF k$ = CHR$(13) THEN 'enter GOTO save ELSE IF k$ = CHR$(32) THEN 'spcae string1pos = string1pos + 1 IF string1pos > 30 THEN string1pos = 30 IF string1pos < 30 THEN currentfile = currentfile + CHR$(32) ELSE string1pos = string1pos + 1 currentfile = currentfile + k$ IF string1pos > 30 THEN string1pos = 30 currentfile = LEFT$(currentfile, string1pos) END IF END IF END IF END IF END IF LOCATE 6, 23 PRINT " " LOCATE 6, 23 PRINT currentfile LOCATE 6, string1pos + 23, 1 LOOP save: DO WHILE _MOUSEINPUT LOOP pathfile$ = _CWD$ + "\" + currentfile + ".asm" shell$ = "DIR " + pathfile$ + " /b > MYDIR.TXT" SHELL _HIDE shell$ OPEN "MYDIR.TXT" FOR APPEND AS #20 L = LOF(20) CLOSE #20 KILL "MYDIR.TXT" 'you were gonna delete it anyhow IF L THEN COLOR 0, 7 LOCATE 8, 10 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ SAVE AS ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 9, 10 PRINT "³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³" + CHR$(219) + CHR$(219) LOCATE 10, 10 PRINT "³ File Name:³ ³.ASM ³" + CHR$(219) + CHR$(219) LOCATE 11, 10 PRINT "³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³" + CHR$(219) + CHR$(219) LOCATE 12, 10 PRINT "³ Path: ³" + CHR$(219) + CHR$(219) LOCATE 13, 10 PRINT "³ Exists! Overwrite? < YES > < NO > ³" + CHR$(219) + CHR$(219) LOCATE 14, 10 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) LOCATE 12, 17 PRINT _CWD$ FOR shad = 1 TO 39 LOCATE 15, 12 + shad PRINT CHR$(219) NEXT shad DO DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 k$ = INKEY$ COLOR 0, 7 IF newmy = 13 AND (newmx > 31 AND newmx < 37) THEN COLOR 7, 0 LOCATE 13, 31 PRINT "< YES >" COLOR 0, 7 IF newmy = 13 AND (newmx > 41 AND newmx < 46) THEN COLOR 7, 0 LOCATE 13, 41 PRINT "< NO >" COLOR 0, 7 IF leftbuton = -1 THEN IF newmy = 13 AND newmx > 41 AND newmx < 46 THEN 'no DO WHILE _MOUSEINPUT rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) LOOP _DELAY .2 GOTO startsaveas END IF IF newmy = 13 AND newmx > 31 AND newmx < 37 THEN 'yes DO WHILE _MOUSEINPUT rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) LOOP _DELAY .2 EXIT DO END IF END IF LOCATE 10, 23 PRINT " " LOCATE 10, 23, 0 PRINT currentfile LOOP END IF OPEN pathfile$ FOR RANDOM AS #1 LEN = LEN(save_load(1)) FOR save = 1 TO 4096 save_load(save).Labels_SL = database(save).labels save_load(save).code_SL = database(save).code save_load(save).Instruction_SL = database(save).Instruction save_load(save).ramlabels_SL = database(save).RamLabel NEXT save FOR save = 1 TO 4096 PUT #1, save, save_load(save) NEXT save CLOSE #1 END SUB SUB compile DIM codes AS _UNSIGNED _BYTE pathfile$ = _CWD$ + "\" + currentfile + ".bin" OPEN pathfile$ FOR BINARY AS #20 FOR bin = 1 TO 4096 codes = VAL("&H" + database(bin).code) PUT #20, bin, codes NEXT bin CLOSE #20 COLOR 0, 7 LOCATE 8, 10 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ COMPILE ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 9, 10 PRINT "³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³" + CHR$(219) + CHR$(219) LOCATE 10, 10 PRINT "³ File Name:³ ³.BIN ³" + CHR$(219) + CHR$(219) LOCATE 11, 10 PRINT "³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³" + CHR$(219) + CHR$(219) LOCATE 12, 10 PRINT "³ Path: ³" + CHR$(219) + CHR$(219) LOCATE 13, 10 PRINT "³ Compiled Sucessfully! < OK > ³" + CHR$(219) + CHR$(219) LOCATE 14, 10 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) LOCATE 12, 17 PRINT _CWD$ FOR shad = 1 TO 39 LOCATE 15, 12 + shad PRINT CHR$(219) NEXT shad DO DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 COLOR 0, 7 IF newmy = 13 AND (newmx > 41 AND newmx < 46) THEN COLOR 7, 0 LOCATE 13, 41 PRINT "< OK >" COLOR 0, 7 IF leftbuton = -1 THEN IF newmy = 13 AND newmx > 41 AND newmx < 46 THEN DO WHILE _MOUSEINPUT rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) LOOP _DELAY .2 EXIT DO END IF END IF LOCATE 10, 23 PRINT " " LOCATE 10, 23, 0 PRINT currentfile LOOP END SUB SUB Instructiondecode (adres) code$ = "" insttemp$ = LCASE$(RTRIM$(database(adres).Instruction)) opcode$ = MID$(insttemp$, 1, 2) '2 char op codes IF opcode$ = "or" THEN CALL ALU_decode(insttemp$, adres) opcode$ = MID$(insttemp$, 1, 3) '3 char op codes SELECT CASE opcode$ CASE "mov" CALL mov_decode(insttemp$, adres) CASE "add" CALL ALU_decode(insttemp$, adres) CASE "sub" CALL ALU_decode(insttemp$, adres) CASE "adc" CALL ALU_decode(insttemp$, adres) CASE "sbc" CALL ALU_decode(insttemp$, adres) CASE "inc" CALL inc_dec_decode(insttemp$, adres) CASE "dec" CALL inc_dec_decode(insttemp$, adres) CASE "not" CALL ALU_decode(insttemp$, adres) CASE "and" CALL ALU_decode(insttemp$, adres) CASE "xor" CALL ALU_decode(insttemp$, adres) CASE "clr" CALL clr_decode(insttemp$, adres) CASE "rrd" database(adres).code = "C4" CASE "rld" database(adres).code = "C5" CASE "srd" database(adres).code = "C6" CASE "sld" database(adres).code = "C7" CASE "nop" database(adres).code = "00" CASE "pop" CALL psh_pop_decode(insttemp$, adres) CASE "psh" CALL psh_pop_decode(insttemp$, adres) END SELECT opcode$ = MID$(insttemp$, 1, 4) '4 char op codes SELECT CASE opcode$ CASE "movl" CALL movl_decode(insttemp$, adres) CASE "movc" CALL movc_decode(insttemp$, adres) CASE "movr" CALL movr_decode(insttemp$, adres) CASE "nand" CALL ALU_decode(insttemp$, adres) CASE "xnor" CALL ALU_decode(insttemp$, adres) CASE "jump" CALL jump_decode(insttemp$, adres) CASE "call" code$ = "F1" database(adres).code = code$ CASE "halt" code$ = "01" database(adres).code = code$ END SELECT opcode$ = MID$(insttemp$, 1, 5) '5 char op codes SELECT CASE opcode$ CASE "jumpc" CALL JumpC_decode(insttemp$, adres) CASE "jumpz" CALL JumpZ_decode(insttemp$, adres) CASE "jumpr" CALL JumpR_decode(insttemp$, adres) CASE "inten" code$ = "EE" database(adres).code = code$ END SELECT opcode$ = MID$(insttemp$, 1, 6) '6 char op codes SELECT CASE opcode$ CASE "jumpnc" CALL JumpNC_decode(insttemp$, adres) CASE "jumpnz" CALL JumpNZ_decode(insttemp$, adres) CASE "jumpnr" CALL JumpNR_decode(insttemp$, adres) CASE "intdis" code$ = "EF" database(adres).code = code$ CASE "return" code$ = "F2" database(adres).code = code$ END SELECT opcode$ = MID$(insttemp$, 1, 7) '7 char op codes SELECT CASE opcode$ CASE "precall" CALL Precall_decode(insttemp$, adres) END SELECT database(adres).Instruction = UCASE$(insttemp$) END SUB SUB mov_decode (insttemp$, adres) FOR dec = 5 TO 8 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "," THEN EXIT FOR From$ = From$ + digit$ NEXT dec dec = dec + 1 FOR dest = dec TO dec + 5 digit$ = MID$(insttemp$, dest, 1) dest$ = dest$ + digit$ NEXT dest SELECT CASE From$ CASE "a" SELECT CASE dest$ CASE "b" code$ = "12" CASE "c" code$ = "13" CASE "d" code$ = "14" CASE "outa" code$ = "15" CASE "outb" code$ = "16" CASE "rps" code$ = "17" CASE "displ" code$ = "18" CASE "disph" code$ = "19" END SELECT CASE "b" SELECT CASE dest$ CASE "a" code$ = "1A" CASE "c" code$ = "1B" CASE "d" code$ = "1C" CASE "outa" code$ = "1D" CASE "outb" code$ = "1E" CASE "rps" code$ = "1F" CASE "displ" code$ = "20" CASE "disph" code$ = "21" END SELECT CASE "c" SELECT CASE dest$ CASE "a" code$ = "22" CASE "b" code$ = "23" CASE "d" code$ = "24" CASE "outa" code$ = "25" CASE "outb" code$ = "26" CASE "rps" code$ = "27" CASE "displ" code$ = "28" CASE "disph" code$ = "29" END SELECT CASE "d" SELECT CASE dest$ CASE "a" code$ = "2A" CASE "b" code$ = "2B" CASE "c" code$ = "2C" CASE "outa" code$ = "2D" CASE "outb" code$ = "2E" CASE "rps" code$ = "2F" CASE "displ" code$ = "30" CASE "disph" code$ = "31" END SELECT CASE "rps" SELECT CASE dest$ CASE "a" code$ = "32" CASE "b" code$ = "33" CASE "c" code$ = "34" CASE "d" code$ = "35" END SELECT CASE "inp" SELECT CASE dest$ CASE "a" code$ = "36" CASE "b" code$ = "37" CASE "c" code$ = "38" CASE "d" code$ = "39" END SELECT END SELECT IF code$ <> "" THEN database(adres).code = code$ END IF END SUB SUB movl_decode (insttemp$, adres) code$ = "" operand$ = MID$(insttemp$, 6, 2) SELECT CASE operand$ CASE "&d" FOR dec = 1 TO 3 digit$ = MID$(insttemp$, 7 + dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec Dnumber = VAL(Dnumber$) dest$ = MID$(insttemp$, 8 + dec, 4) SELECT CASE dest$ CASE "a" code$ = "02" CASE "b" code$ = "03" CASE "c" code$ = "04" CASE "d" code$ = "05" CASE "rps" code$ = "06" CASE "outa" code$ = "07" CASE "outb" code$ = "08" END SELECT IF code$ <> "" THEN inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(Dnumber) END IF CASE "&h" FOR dec = 1 TO 2 digit$ = MID$(insttemp$, 7 + dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec Dnumber = VAL("&H" + Dnumber$) dest$ = MID$(insttemp$, 8 + dec, 4) SELECT CASE dest$ CASE "a" code$ = "02" CASE "b" code$ = "03" CASE "c" code$ = "04" CASE "d" code$ = "05" CASE "rps" code$ = "06" CASE "outa" code$ = "07" CASE "outb" code$ = "08" END SELECT IF code$ <> "" THEN ' database(adres).code = code$ inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(Dnumber) END IF CASE "&b" FOR dec = 1 TO 8 'get bunary digits as string digit$ = MID$(insttemp$, 7 + dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec decm = LEN(Dnumber$) FOR bdc = 0 TO (decm - 1) 'convert to decimal place = VAL(MID$(Dnumber$, decm - bdc, 1)) digit = place * 2 ^ bdc Dnumber = Dnumber + digit NEXT bdc dest$ = MID$(insttemp$, 8 + dec, 4) SELECT CASE dest$ CASE "a" code$ = "02" CASE "b" code$ = "03" CASE "c" code$ = "04" CASE "d" code$ = "05" CASE "rps" code$ = "06" CASE "outa" code$ = "07" CASE "outb" code$ = "08" END SELECT END SELECT IF code$ <> "" THEN inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(Dnumber) END IF END SUB SUB movc_decode (insttemp$, adres) operand$ = MID$(insttemp$, 6, 3) SELECT CASE operand$ CASE "(c)" dest$ = MID$(insttemp$, 10, 5) SELECT CASE dest$ CASE "a" code$ = "3A" CASE "b" code$ = "3B" CASE "d" code$ = "3C" CASE "outa" code$ = "3D" CASE "outb" code$ = "3E" CASE "rps" code$ = "3F" CASE "displ" code$ = "40" CASE "disph" code$ = "41" END SELECT CASE "a" code$ = "47" CASE "b" code$ = "48" CASE "d" code$ = "49" CASE "inp" code$ = "4A" END SELECT IF code$ <> "" THEN database(adres).code = code$ END IF END SUB SUB movr_decode (insttemp$, adres) operand$ = MID$(insttemp$, 6, 1) IF operand$ = "(" THEN FOR dec = 1 TO 11 digit$ = MID$(insttemp$, 6 + dec, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).RamLabel)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN Dnumber$ = "0" + RTRIM$(database(check).Address) dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) dest$ = MID$(insttemp$, 8 + dec, 5) SELECT CASE dest$ CASE "a" code$ = "09" CASE "b" code$ = "0A" CASE "c" code$ = "0B" CASE "d" code$ = "0C" CASE "outa" code$ = "0D" CASE "outb" code$ = "0E" CASE "rps" code$ = "0F" CASE "disph" code$ = "10" CASE "displ" code$ = "11" END SELECT IF code$ <> "" THEN inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF END IF EXIT SUB END IF operand$ = MID$(insttemp$, 6, 2) IF operand$ = "&h" THEN FOR dec = 1 TO 4 digit$ = MID$(insttemp$, 7 + dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) dest$ = MID$(insttemp$, 8 + dec, 5) SELECT CASE dest$ CASE "a" code$ = "09" CASE "b" code$ = "0A" CASE "c" code$ = "0B" CASE "d" code$ = "0C" CASE "outa" code$ = "0D" CASE "outb" code$ = "0E" CASE "rps" code$ = "0F" CASE "disph" code$ = "10" CASE "displ" code$ = "11" END SELECT IF code$ <> "" THEN inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF END IF operand$ = MID$(insttemp$, 6, 1) operand2$ = MID$(insttemp$, 6, 3) IF operand$ = "a" OR operand$ = "b" OR operand$ = "c" OR operand$ = "d" THEN either = 1 IF operand2$ = "inp" THEN either = 1 IF either = 1 THEN ext = 0 IF operand2$ = "inp" THEN ext = 2 operand$ = MID$(insttemp$, (8 + ext), 2) IF operand$ = "&h" THEN FOR dec = 1 TO 4 digit$ = MID$(insttemp$, 9 + dec + ext, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) dest$ = MID$(insttemp$, 6, 1 + ext) SELECT CASE dest$ CASE "a" code$ = "42" CASE "b" code$ = "43" CASE "c" code$ = "44" CASE "d" code$ = "45" CASE "inp" code$ = "46" END SELECT IF code$ <> "" THEN inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF END IF operand$ = MID$(insttemp$, (8 + ext), 1) IF operand$ = "(" THEN FOR dec = 1 TO 11 digit$ = MID$(insttemp$, 8 + ext + dec, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).RamLabel)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN Dnumber$ = "0" + RTRIM$(database(check).Address) dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) dest$ = MID$(insttemp$, 6, 1 + ext) SELECT CASE dest$ CASE "a" code$ = "42" CASE "b" code$ = "43" CASE "c" code$ = "44" CASE "d" code$ = "45" CASE "inp" code$ = "46" END SELECT IF code$ <> "" THEN inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF END IF END IF END IF END SUB SUB ALU_decode (insttemp$, adres) FOR dec = 1 TO 4 'diturmin procedure ie add,sub, and etc etc digit$ = MID$(insttemp$, dec, 1) IF digit$ = CHR$(255) THEN EXIT FOR proc$ = proc$ + digit$ NEXT dec dec = dec + 1 FOR dest = dec TO dec + 1 digit$ = MID$(insttemp$, dest, 1) dest$ = dest$ + digit$ NEXT dest dnumber = 0 SELECT CASE dest$ CASE "&d" FOR dec = dest TO dest + 2 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec dnumber = VAL(Dnumber$) CASE "&h" FOR dec = dest TO dest + 1 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec dnumber = VAL("&H" + Dnumber$) CASE "&b" FOR dec = dest TO dest + 7 'get binary digits as string digit$ = MID$(insttemp$, dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec decm = LEN(Dnumber$) FOR bdc = 0 TO (decm - 1) 'convert to decimal place = VAL(MID$(Dnumber$, decm - bdc, 1)) digit = place * 2 ^ bdc dnumber = dnumber + digit NEXT bdc CASE "(&" FOR dec = dest + 1 TO dest + 2 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "," THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec dnumber = VAL("&H" + Dnumber$) END SELECT IF dnumber = 0 THEN 'none of the above cases were true destvar$ = LEFT$(dest$, 1) IF destvar$ = "(" THEN digit$ = MID$(insttemp$, dec + 1, 2) IF digit$ = "c)" THEN dest$ = "(c)" GOTO exitif END IF FOR dec1 = dec + 1 TO 30 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).RamLabel)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN Dnumber$ = RTRIM$(database(check).Address) dnumber = VAL("&H" + RIGHT$(Dnumber$, 2)) dest$ = "####" END IF END IF IF destvar$ = "a" THEN dest$ = "a" GOTO exitif END IF END IF exitif: FOR check = 1 TO 30 digit$ = MID$(insttemp$, check, 1) IF digit$ = "," THEN finaldest = VAL(MID$(insttemp$, check + 1, 1)) EXIT FOR END IF NEXT check SELECT CASE proc$ CASE "add" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "4B" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "4C" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "4D" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "4E" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "4F" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "50" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "51" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "52" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "53" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "54" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "55" database(adres).code = code$ END IF END SELECT CASE "sub" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "56" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "57" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "58" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "59" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "5A" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "5B" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "5C" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "5D" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "5E" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "5F" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "60" database(adres).code = code$ END IF END SELECT CASE "adc" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "61" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "62" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "63" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "64" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "65" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "66" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "67" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "68" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "69" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "6A" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "6B" database(adres).code = code$ END IF END SELECT CASE "sbc" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "6C" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "6D" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "6E" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "6F" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "70" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "71" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "72" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "73" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "74" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "75" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "76" database(adres).code = code$ END IF END SELECT CASE "or" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "82" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "83" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "84" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "85" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "86" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "87" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "88" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "89" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "8A" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "8B" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "8C" database(adres).code = code$ END IF END SELECT CASE "nor" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "8D" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "8E" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "8F" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "90" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "91" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "92" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "93" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "94" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "95" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "96" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "97" database(adres).code = code$ END IF END SELECT CASE "and" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "98" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "99" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "9A" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "9B" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "9C" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "9D" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "9E" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "9F" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "A0" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "A1" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "A2" database(adres).code = code$ END IF END SELECT CASE "nand" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "A3" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "A4" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "A5" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "A6" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "A7" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "A8" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "A9" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "AA" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "AB" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "AC" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "AD" database(adres).code = code$ END IF END SELECT CASE "xor" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "AE" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "AF" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "B0" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "B1" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "B2" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "B3" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "B4" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "B5" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "B6" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "B7" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "B8" database(adres).code = code$ END IF END SELECT CASE "xnor" SELECT CASE dest$ CASE "&d", "&h", "&b" code$ = "B9" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) CASE "b," IF finaldest = 1 THEN code$ = "BA" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "BB" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "BC" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "BD" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "BE" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "BF" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "C0" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "C1" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "C2" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "C3" database(adres).code = code$ END IF END SELECT CASE "not" SELECT CASE dest$ CASE "a" code$ = "77" database(adres).code = code$ CASE "b," IF finaldest = 1 THEN code$ = "78" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "79" database(adres).code = code$ END IF CASE "c," IF finaldest = 1 THEN code$ = "7A" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "7B" database(adres).code = code$ END IF CASE "d," IF finaldest = 1 THEN code$ = "7C" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "7D" database(adres).code = code$ END IF CASE "(&", "####" IF finaldest = 1 THEN code$ = "7E" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF IF finaldest = 0 THEN code$ = "7F" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF CASE "(c)" IF finaldest = 1 THEN code$ = "80" database(adres).code = code$ END IF IF finaldest = 0 THEN code$ = "80" database(adres).code = code$ END IF END SELECT END SELECT IF code$ <> "" THEN database(adres).code = code$ END IF END SUB SUB inc_dec_decode (insttemp$, adres) operand$ = MID$(insttemp$, 1, 3) FOR dec = 5 TO 8 ' digit$ = MID$(insttemp$, dec, 1) dest$ = dest$ + digit$ NEXT dec IF operand$ = "inc" THEN SELECT CASE dest$ CASE "a" code$ = "C8" database(adres).code = code$ EXIT SUB CASE "b" code$ = "C9" database(adres).code = code$ EXIT SUB CASE "c" code$ = "CA" database(adres).code = code$ EXIT SUB CASE "d" code$ = "CB" database(adres).code = code$ EXIT SUB CASE "rps" code$ = "CC" database(adres).code = code$ EXIT SUB CASE "(c)" code$ = "CE" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ = "#####" THEN CALL delete(adres) END IF database(adres).code = code$ EXIT SUB END SELECT digit$ = LEFT$(dest$, 1) IF digit$ = "(" THEN dest$ = MID$(insttemp$, 6, 2) LOCATE 30, 30 PRINT dest$ IF dest$ = "&h" THEN FOR dec = 8 TO 19 digit$ = MID$(insttemp$, dec, 1) IF digit$ = ")" THEN EXIT FOR dnumber$ = dnumber$ + digit$ NEXT dec dnumber = VAL("&H" + LEFT$(dnumber$, 2)) code$ = "CD" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) EXIT SUB END IF FOR dec1 = 6 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR dnumber$ = dnumber$ + digit$ NEXT dec1 found = 0 IF dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).RamLabel)) = dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN dnumber$ = RTRIM$(database(check).Address) dnumber = VAL("&H" + RIGHT$(dnumber$, 2)) END IF code$ = "CD" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) EXIT SUB END IF END IF IF operand$ = "dec" THEN SELECT CASE dest$ CASE "a" code$ = "CF" database(adres).code = code$ EXIT SUB CASE "b" code$ = "D0" database(adres).code = code$ EXIT SUB CASE "c" code$ = "D1" database(adres).code = code$ EXIT SUB CASE "d" code$ = "D2" database(adres).code = code$ EXIT SUB CASE "rps" code$ = "D3" database(adres).code = code$ EXIT SUB CASE "(c)" code$ = "D5" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ = "#####" THEN CALL delete(adres) END IF database(adres).code = code$ EXIT SUB END SELECT digit$ = LEFT$(dest$, 1) IF digit$ = "(" THEN dest$ = MID$(insttemp$, 6, 2) IF dest$ = "&h" THEN FOR dec = 8 TO 9 digit$ = MID$(insttemp$, dec, 1) IF digit$ = ")" THEN EXIT FOR dnumber$ = dnumber$ + digit$ NEXT dec dnumber = VAL("&H" + LEFT$(dnumber$, 2)) code$ = "D4" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) EXIT SUB END IF FOR dec1 = 6 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR dnumber$ = dnumber$ + digit$ NEXT dec1 found = 0 IF dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).RamLabel)) = dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN dnumber$ = RTRIM$(database(check).Address) dnumber = VAL("&H" + RIGHT$(dnumber$, 2)) END IF code$ = "D4" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumber) END IF END IF END SUB SUB clr_decode (insttemp$, adres) operand$ = MID$(insttemp$, 1, 3) FOR dec = 5 TO 10 ' digit$ = MID$(insttemp$, dec, 1) dest$ = dest$ + digit$ NEXT dec SELECT CASE dest$ CASE "cy" code$ = "E1" database(adres).code = code$ EXIT SUB CASE "z" code$ = "E2" database(adres).code = code$ EXIT SUB CASE "s" code$ = "E3" database(adres).code = code$ EXIT SUB CASE "a" code$ = "D6" database(adres).code = code$ EXIT SUB CASE "b" code$ = "D7" database(adres).code = code$ EXIT SUB CASE "c" code$ = "D8" database(adres).code = code$ EXIT SUB CASE "d" code$ = "D9" database(adres).code = code$ EXIT SUB CASE "outa" code$ = "DA" database(adres).code = code$ EXIT SUB CASE "outb" code$ = "DB" database(adres).code = code$ EXIT SUB CASE "rps" code$ = "DC" database(adres).code = code$ EXIT SUB CASE "displ" code$ = "DD" database(adres).code = code$ EXIT SUB CASE "disph" code$ = "DE" database(adres).code = code$ EXIT SUB CASE "(c)" code$ = "E0" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ = "#####" THEN CALL delete(adres) END IF database(adres).code = code$ EXIT SUB END SELECT digit$ = LEFT$(dest$, 1) IF digit$ = "(" THEN dest$ = MID$(insttemp$, 6, 2) IF dest$ = "&h" THEN FOR dec = 1 TO 4 digit$ = MID$(insttemp$, 7 + dec, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "DF" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberlow) EXIT SUB END IF FOR dec1 = 6 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).RamLabel)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN Dnumber$ = "0" + RTRIM$(database(check).Address) dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) END IF code$ = "DF" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF END SUB SUB psh_pop_decode (insttemp$, adres) operand$ = MID$(insttemp$, 1, 3) FOR dec = 5 TO 8 ' digit$ = MID$(insttemp$, dec, 1) dest$ = dest$ + digit$ NEXT dec SELECT CASE operand$ CASE "psh" SELECT CASE dest$ CASE "a" code$ = "E4" database(adres).code = code$ CASE "b" code$ = "E5" database(adres).code = code$ CASE "c" code$ = "E6" database(adres).code = code$ CASE "d" code$ = "E7" database(adres).code = code$ CASE "rps" code$ = "E8" database(adres).code = code$ END SELECT CASE "pop" SELECT CASE dest$ CASE "a" code$ = "E9" database(adres).code = code$ CASE "b" code$ = "EA" database(adres).code = code$ CASE "c" code$ = "EB" database(adres).code = code$ CASE "d" code$ = "EC" database(adres).code = code$ CASE "rps" code$ = "ED" database(adres).code = code$ END SELECT END SELECT END SUB SUB jump_decode (insttemp$, adres) dest$ = MID$(insttemp$, 6, 2) IF dest$ = "&h" THEN FOR dec = 8 TO 10 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "FC" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 6 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 Dnumber$ = RTRIM$(Dnumber$) found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "FC" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" EXIT SUB END IF END IF END SUB SUB JumpC_decode (insttemp$, adres) dest$ = MID$(insttemp$, 7, 2) IF dest$ = "&h" THEN FOR dec = 9 TO 12 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "FD" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 7 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "FD" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" EXIT SUB END IF END IF END SUB SUB JumpZ_decode (insttemp$, adres) dest$ = MID$(insttemp$, 7, 2) IF dest$ = "&h" THEN FOR dec = 9 TO 12 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "FE" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 7 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "FE" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" EXIT SUB END IF END IF END SUB SUB JumpR_decode (insttemp$, adres) dest$ = MID$(insttemp$, 7, 2) IF dest$ = "&h" THEN FOR dec = 9 TO 12 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "FF" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 7 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "FF" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" EXIT SUB END IF END IF END SUB SUB JumpNC_decode (insttemp$, adres) dest$ = MID$(insttemp$, 8, 2) IF dest$ = "&h" THEN FOR dec = 10 TO 13 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "F9" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 8 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "F9" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" EXIT SUB END IF END IF END SUB SUB JumpNZ_decode (insttemp$, adres) dest$ = MID$(insttemp$, 8, 2) IF dest$ = "&h" THEN FOR dec = 10 TO 13 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "FA" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 8 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "FA" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" EXIT SUB END IF END IF END SUB SUB JumpNR_decode (insttemp$, adres) dest$ = MID$(insttemp$, 8, 2) IF dest$ = "&h" THEN FOR dec = 10 TO 13 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "FB" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 8 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "FB" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" EXIT SUB END IF END IF END SUB SUB Precall_decode (insttemp$, adres) dest$ = MID$(insttemp$, 9, 2) IF dest$ = "&h" THEN FOR dec = 11 TO 14 digit$ = MID$(insttemp$, dec, 1) IF digit$ = "" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec charlen = LEN(Dnumber$) IF charlen = 1 THEN Dnumber$ = "000" + Dnumber$ IF charlen = 2 THEN Dnumber$ = "00" + Dnumber$ IF charlen = 3 THEN Dnumber$ = "0" + Dnumber$ dnumberhigh = VAL("&H" + LEFT$(Dnumber$, 2)) dnumberlow = VAL("&H" + RIGHT$(Dnumber$, 2)) code$ = "F0" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 1).code = HEX$(dnumberhigh) database(adres + 2).Instruction = "#####" database(adres + 2).code = HEX$(dnumberlow) database(adres + 3).code = "F1" database(adres + 3).Instruction = "CALL" EXIT SUB END IF IF dest$ <> "&h" THEN FOR dec1 = 9 TO 36 digit$ = MID$(insttemp$, dec1, 1) IF digit$ = ")" THEN EXIT FOR Dnumber$ = Dnumber$ + digit$ NEXT dec1 found = 0 IF Dnumber$ = "" THEN EXIT SUB FOR check = 1 TO 4096 IF LCASE$(RTRIM$(database(check).labels)) = Dnumber$ THEN found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN code$ = "F0" inserttemp$ = LCASE$(RTRIM$(database(adres + 1).Instruction)) IF inserttemp$ <> "#####" THEN CALL Insert(adres) CALL Insert(adres) CALL Insert(adres) END IF database(adres).code = code$ database(adres + 1).Instruction = "#####" database(adres + 2).Instruction = "#####" database(adres + 3).code = "F1" database(adres + 3).Instruction = "CALL" EXIT SUB END IF END IF END SUB SUB re_order_labels '3841 FOR address = 1 TO 4096 insttemp$ = LCASE$(RTRIM$(database(address).Instruction)) opcode4$ = MID$(insttemp$, 1, 4) '4 char op codes opcode5$ = MID$(insttemp$, 1, 5) '5 char op codes opcode6$ = MID$(insttemp$, 1, 6) '5 char op codes opcode7$ = MID$(insttemp$, 1, 7) '7 char op codes IF opcode4$ = "jump" THEN label$ = RTRIM$(MID$(insttemp$, 6, 30)) 'get label from instruction feild IF label$ <> "" THEN ' GOTO skipcheck found = 0 FOR check = 1 TO 4096 'check label feild for a match labeltemp$ = LCASE$(RTRIM$(database(check).labels)) IF labeltemp$ = label$ THEN ' if match is found found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN hexaddress$ = database(check).Address 'get address of match dnumberhigh = VAL("&H" + LEFT$(hexaddress$, 1)) dnumberlow = VAL("&H" + RIGHT$(hexaddress$, 2)) 'decode address database(address + 1).code = HEX$(dnumberhigh) 'update new addresses database(address + 2).code = HEX$(dnumberlow) labelredraw = 1 END IF END IF END IF IF opcode5$ = "jumpc" OR opcode5$ = "jumpz" OR opcode5$ = "jumpr" THEN label$ = RTRIM$(MID$(insttemp$, 7, 30)) 'get label from instruction feild IF label$ <> "" THEN ' GOTO skipcheck found = 0 FOR check = 1 TO 4096 'check label feild for a match labeltemp$ = LCASE$(RTRIM$(database(check).labels)) IF labeltemp$ = label$ THEN ' if match is found found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN hexaddress$ = database(check).Address 'get address of match dnumberhigh = VAL("&H" + LEFT$(hexaddress$, 1)) dnumberlow = VAL("&H" + RIGHT$(hexaddress$, 2)) 'decode address database(address + 1).code = HEX$(dnumberhigh) 'update new addresses database(address + 2).code = HEX$(dnumberlow) labelredraw = 1 END IF END IF END IF IF opcode6$ = "jumpnc" OR opcode6$ = "jumpnz" OR opcode6$ = "jumpnr" THEN label$ = RTRIM$(MID$(insttemp$, 8, 30)) 'get label from instruction feild IF label$ <> "" THEN ' GOTO skipcheck found = 0 FOR check = 1 TO 4096 'check label feild for a match labeltemp$ = LCASE$(RTRIM$(database(check).labels)) IF labeltemp$ = label$ THEN ' if match is found found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN hexaddress$ = database(check).Address 'get address of match dnumberhigh = VAL("&H" + LEFT$(hexaddress$, 1)) dnumberlow = VAL("&H" + RIGHT$(hexaddress$, 2)) 'decode address database(address + 1).code = HEX$(dnumberhigh) 'update new addresses database(address + 2).code = HEX$(dnumberlow) labelredraw = 1 END IF END IF END IF IF opcode7$ = "precall" THEN label$ = RTRIM$(MID$(insttemp$, 9, 30)) 'get label from instruction feild IF label$ <> "" THEN ' GOTO skipcheck found = 0 FOR check = 1 TO 4096 'check label feild for a match labeltemp$ = LCASE$(RTRIM$(database(check).labels)) IF labeltemp$ = label$ THEN ' if match is found found = 1 EXIT FOR END IF NEXT check IF found = 1 THEN hexaddress$ = database(check).Address 'get address of match dnumberhigh = VAL("&H" + LEFT$(hexaddress$, 1)) dnumberlow = VAL("&H" + RIGHT$(hexaddress$, 2)) 'decode address database(address + 1).code = HEX$(dnumberhigh) 'update new addresses database(address + 2).code = HEX$(dnumberlow) labelredraw = 1 END IF END IF END IF NEXT address END SUB SUB color_print (instruction, curposy) LOCATE curposy, 22, 0 COLOR 7, 1 PRINT database(instruction).Instruction IF database(instruction).format = 1 THEN forg = 1 back = 7 forgh = 0 backh = 7 ELSE forg = 7 back = 1 forgh = 15 backh = 1 END IF insttemp$ = LCASE$(RTRIM$(database(instruction).Instruction)) length = LEN(insttemp$) opcode$ = MID$(insttemp$, 1, 2) '2 char op codes IF opcode$ = "or" THEN LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 24, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 2)) END IF opcode$ = MID$(insttemp$, 1, 3) '3 char op codes SELECT CASE opcode$ CASE "mov" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "add" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "sub" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "adc" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "sbc" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "inc" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "dec" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "not" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "and" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "xor" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "clr" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "rrd" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "rld" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "srd" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "sld" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "pop" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "nop" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) CASE "psh" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 25, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 3)) END SELECT opcode$ = MID$(insttemp$, 1, 4) '4 char op codes SELECT CASE opcode$ CASE "movl" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) CASE "movc" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) CASE "movr" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 14, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) CASE "nand" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) CASE "xnor" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) CASE "jump" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) CASE "call" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) CASE "halt" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 26, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 4)) END SELECT opcode$ = MID$(insttemp$, 1, 5) '5 char op codes SELECT CASE opcode$ CASE "jumpc" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 27, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 5)) CASE "jumpz" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 27, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 5)) CASE "jumpr" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 27, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 5)) CASE "inten" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 27, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 5)) CASE "#####" LOCATE curposy, 22, 0 COLOR 1, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 27, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 5)) END SELECT opcode$ = MID$(insttemp$, 1, 6) '6 char op codes SELECT CASE opcode$ CASE "jumpnc" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 28, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 6)) CASE "jumpnz" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 28, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 6)) CASE "jumpnr" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 28, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 6)) CASE "intdis" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 28, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 6)) CASE "return" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR forg, back LOCATE curposy, 28, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 6)) END SELECT opcode$ = MID$(insttemp$, 1, 7) '7 char op codes SELECT CASE opcode$ CASE "precall" LOCATE curposy, 22, 0 COLOR forgh, backh PRINT UCASE$(opcode$) COLOR 10, back LOCATE curposy, 29, 0 PRINT UCASE$(RIGHT$(insttemp$, length - 7)) END SELECT END SUB SUB get_file_list DIM a AS _UNSIGNED _BYTE file_index = 0 CALL clear_file_list 'get list of active drives shell$ = "CMD /C wmic logicaldisk get name" + ">" + programfolder$ + "\MYDRIVE.TXT" SHELL _HIDE shell$ OPEN programfolder$ + "\MYDRIVE.txt" FOR INPUT AS #1 LINE INPUT #1, txt$ DO LINE INPUT #1, txt$ IF txt$ <> CHR$(0) THEN file_index = file_index + 1 FOR delspace = 1 TO LEN(txt$) ' remove spaces and add "\" tmp$ = MID$(txt$, delspace, 1) IF tmp$ <> CHR$(0) THEN text$ = text$ + tmp$ NEXT delspace dirss(file_index).dirs = RTRIM$(text$) + "\" dirss(file_index).format = 1 END IF text$ = "" LOOP WHILE EOF(1) = 0 CLOSE #1 KILL programfolder$ + "\MYDRIVE.TXT" shell$ = "DIR *.*" + " /d >" + programfolder$ + "\MYDIR.TXT" SHELL _HIDE shell$ OPEN programfolder$ + "\mydir.txt" FOR BINARY AS #1 length = LOF(1) strt = 0 sort_start = file_index + 1 FOR i = 1 TO length GET #1, i, a A$ = CHR$(a) IF strt = 1 THEN IF A$ = "]" THEN IF text$ <> "." THEN file_index = file_index + 1 dirss(file_index).dirs = text$ dirss(file_index).format = 2 IF text$ <> ".." THEN dirss(file_index).dirs = " " + text$ dirss(file_index).format = 2 END IF END IF strt = 0 text$ = "" A$ = "" END IF text$ = text$ + A$ END IF IF A$ = "[" THEN strt = 1 END IF NEXT i CLOSE #1 KILL programfolder$ + "\mydir.txt" DO ' Bubble sort directories FOR index1 = sort_start TO file_index - 1 B$ = LCASE$(RTRIM$(dirss(index1).dirs)) C$ = LCASE$(RTRIM$(dirss(index1 + 1).dirs)) IF B$ > C$ THEN SWAP dirss(index1).dirs, dirss(index1 + 1).dirs swapp = 1 END IF NEXT index1 IF swapp = 0 THEN EXIT DO swapp = 0 LOOP shell$ = "DIR *.asm" + " /b >" + programfolder$ + "\MYFILE.TXT" SHELL _HIDE shell$ OPEN programfolder$ + "\MYFILE.txt" FOR INPUT AS #1 DO UNTIL EOF(1) <> 0 LINE INPUT #1, txt$ file_index = file_index + 1 dirss(file_index).dirs = RTRIM$(txt$) dirss(file_index).format = 3 LOOP CLOSE #1 KILL programfolder$ + "\myfile.txt" filelist_length = file_index END SUB SUB clear_click FOR clearl = 1 TO filelist_length dirss(clearl).click = 0 NEXT clearl END SUB SUB clear_file_list FOR i = 1 TO 1000 dirss(i).click = 0 dirss(i).dirs = " " dirss(i).format = 0 NEXT i END SUB SUB quit_program COLOR 0, 7 LOCATE 8, 10, 0 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 9, 10 PRINT "³ Do you wish to save current file ? ³" + CHR$(219) + CHR$(219) LOCATE 10, 10 PRINT "³ < YES > < NO > < CANCELL > ³" + CHR$(219) + CHR$(219) LOCATE 11, 10 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" + CHR$(219) + CHR$(219) FOR shad = 1 TO 39 LOCATE 12, 12 + shad PRINT CHR$(219) NEXT shad DO DO WHILE _MOUSEINPUT newmx = _MOUSEX newmy = _MOUSEY rightbutton = _MOUSEBUTTON(2) leftbuton = _MOUSEBUTTON(1) wheel = wheel + _MOUSEWHEEL LOOP _LIMIT 50 COLOR 0, 7 IF newmy = 10 AND (newmx > 13 AND newmx < 19) THEN COLOR 7, 0 LOCATE 10, 13 PRINT "< YES >" COLOR 0, 7 IF newmy = 10 AND (newmx > 25 AND newmx < 30) THEN COLOR 7, 0 LOCATE 10, 25 PRINT "< NO >" COLOR 0, 7 IF newmy = 10 AND (newmx > 36 AND newmx < 46) THEN COLOR 7, 0 LOCATE 10, 36 PRINT "< CANCELL >" IF leftbuton = -1 THEN IF newmy = 10 AND newmx > 13 AND newmx < 19 THEN GOTO yes 'yes IF newmy = 10 AND newmx > 25 AND newmx < 30 THEN GOTO no 'no IF newmy = 10 AND newmx > 36 AND newmx < 46 THEN 'cancell cancel_exit = 1 DO WHILE _MOUSEINPUT LOOP EXIT SUB END IF END IF LOOP yes: IF currentfile = "untitled" THEN CALL save_asfile ELSE pathfile$ = _CWD$ + "\" + currentfile + ".asm" OPEN pathfile$ FOR RANDOM AS #1 LEN = LEN(save_load(1)) FOR save = 1 TO 4096 save_load(save).Labels_SL = database(save).labels save_load(save).code_SL = database(save).code save_load(save).Instruction_SL = database(save).Instruction save_load(save).ramlabels_SL = database(save).RamLabel NEXT save FOR save = 1 TO 4096 PUT #1, save, save_load(save) NEXT save CLOSE #1 END IF no: SYSTEM END SUB