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