This is a project I'm working on in QB64 (a BASIC language), you'd have to download QB64 to compile the code (it's on www.qb64.net), it features a simulation of the Game Genie environment, and will in the future feature encoding and decoding of Game Genie codes, it will also be easy to change the Game Genie code one address up or down, as well as change the value (similar effects of codes are often close to eachother which makes this a useful feature), it will also feature the values for the opcodes and the variations of them (to be easily inserted into a code as a value). It's still plenty to do to actually get it to that state though, but you can write codes (either using the keyboard or using the mouse clicking letters, right mouse button deletes a letter).
Code:
'Game Genie Helper
DIM gamegenie$(1 TO 7)
DIM gg$(1 TO 16, 1 TO 7)
DIM rowcol(1 TO 3, 1 TO 8)
_TITLE "Game Genie Helper"
FOR g = 1 TO 7
READ gamegenie$(g)
FOR c = 1 TO LEN(gamegenie$(g))
IF MID$(gamegenie$(g), c, 1) = "O" THEN MID$(gamegenie$(g), c, 1) = "Û"
NEXT
NEXT
FOR a = 1 TO 16
FOR b = 1 TO 7
READ gg$(a, b)
FOR c = 1 TO LEN(gg$(a, b))
IF MID$(gg$(a, b), c, 1) = "O" THEN MID$(gg$(a, b), c, 1) = "Û"
NEXT
NEXT
NEXT
READ place$
READ plus1$
READ plus2$
READ plus3$
img = _NEWIMAGE(1000, 2000, 256)
img2 = _NEWIMAGE(800, 600, 256)
SCREEN img2
co = 35
currow = 1
curcolumn = 1
rad2 = .5
DO
_LIMIT 60
CLS
_DEST img
CLS
IF co > 45.5 THEN codir = 1
IF co < 35 THEN codir = 0
IF codir = 0 THEN co = co + .35
IF codir = 1 THEN co = co - .35
COLOR INT(co)
FOR g = 1 TO 7
LOCATE 4 + g: PRINT gamegenie$(g)
NEXT
FOR g = 1 TO 7
FOR l = 1 TO 8
IF sel = l THEN COLOR 15 ELSE COLOR 11
LOCATE 14 + g, (l * 8) - 7
PRINT gg$(l, g)
NEXT
FOR l = 9 TO 16
IF sel = l THEN COLOR 15 ELSE COLOR 11
LOCATE 23 + g, ((l - 8) * 8) - 7
PRINT gg$(l, g)
NEXT
NEXT
FOR row = 1 TO 3
FOR column = 1 TO 8
COLOR 8
IF currow = row THEN COLOR 15
IF currow = row AND curcolumn = column THEN COLOR INT(co)
IF rowcol(row, column) = 0 THEN LOCATE ((33 + 3) + (row * 8)) - 3, (column * 8) - 7: PRINT place$
IF rowcol(row, column) > 0 THEN
FOR dr = 1 TO 7
LOCATE 32 + (row * 8) - 3 + dr, (column * 8) - 7: PRINT gg$(rowcol(row, column), dr)
NEXT
END IF
NEXT
NEXT
rad = rad + .4
rad2 = rad2 + .4
IF rad > 6.28 THEN rad = .1
IF rad2 > 6.28 THEN rad2 = .1
cix = COS(rad) * 15
ciy = SIN(rad) * 35
cix2 = COS(rad2) * 15
ciy2 = SIN(rad2) * 35
COLOR 9
_PRINTSTRING ((curcolumn * 64) - 45 + cix2 + 8, (currow * 129) - 129 + 623 + ciy2), plus1$
_PRINTSTRING ((curcolumn * 64) - 45 + cix2, ((currow + 1) * 129) - 129 + 510 + ciy2), plus2$
_PRINTSTRING ((curcolumn * 64) - 45 + cix2 + 8, ((currow + 2) * 129) - 129 + 397 + ciy2), plus3$
COLOR 15
_PRINTSTRING ((curcolumn * 64) - 45 + cix + 8, (currow * 129) - 129 + 623 + ciy), plus1$
_PRINTSTRING ((curcolumn * 64) - 45 + cix, ((currow + 1) * 129) - 129 + 510 + ciy), plus2$
_PRINTSTRING ((curcolumn * 64) - 45 + cix + 8, ((currow + 2) * 129) - 129 + 397 + ciy), plus3$
_PUTIMAGE (0, 0)-(800, 600), img, img2, (0, 0)-(1000, 2000)
_DEST img2
DO WHILE _MOUSEINPUT
xmus = _MOUSEX
ymus = _MOUSEY
lmus = _MOUSEBUTTON(1)
rmus = _MOUSEBUTTON(2)
LOOP
LOCATE 30, 1: PRINT xmus, ymus, lmus, rmus, INT((xmus + 3) / 52) + 1
IF ymus > 66 AND ymus < 106 THEN sel = INT((((1 / 403) * xmus) * 8) + 1)
IF ymus >= 106 AND ymus <= 145 THEN sel = INT((((1 / 403) * xmus) * 8) + 1) + 8
IF xmus > 402 OR ymus > 145 OR ymus <= 66 THEN sel = 0
IF lmus = 0 THEN hold = 0
IF lmus = -1 AND hold = 0 THEN
hold = 1
IF ymus > 175 THEN
IF INT((ymus - 175) / 39) + 1 <= 3 THEN currow = INT((ymus - 175) / 39) + 1
IF INT((xmus + 3) / 52) + 1 <= 8 THEN curcolumn = INT((xmus + 3) / 52) + 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
END IF
END IF
IF sel > 0 THEN
rowcol(currow, curcolumn) = sel
third = rowcol(currow, 3)
IF curcolumn <= 6 AND (third = 1 OR third = 3 OR third = 5 OR third = 7 OR third = 9 OR third = 11 OR third = 13 OR third = 15) THEN
IF curcolumn < 6 THEN curcolumn = curcolumn + 1 ELSE IF currow < 3 THEN currow = currow + 1: curcolumn = 1
ELSE
IF curcolumn < 8 THEN curcolumn = curcolumn + 1 ELSE IF currow < 3 THEN currow = currow + 1: curcolumn = 1
END IF
END IF
END IF
IF rmus = 0 THEN holdr = 0
IF rmus = -1 AND holdr = 0 THEN
holdr = 1
third = rowcol(currow, 3)
IF rowcol(currow, curcolumn) <> 0 THEN
IF currow = 3 AND curcolumn = 6 AND (third = 1 OR third = 3 OR third = 5 OR third = 7 OR third = 9 OR third = 11 OR third = 13 OR third = 15) THEN rowcol(currow, curcolumn) = 0: GOTO skip
IF currow = 3 AND curcolumn = 8 THEN rowcol(currow, curcolumn) = 0: GOTO skip
curcolumn = curcolumn - 1
IF curcolumn = 0 THEN
IF currow = 1 THEN curcolumn = 1: GOTO skip
IF currow > 1 THEN
IF rowcol(currow - 1, 8) <> 0 THEN rowcol(currow - 1, 8) = 0: currow = currow - 1: curcolumn = 8: GOTO skip
IF rowcol(currow - 1, 8) = 0 THEN curcolumn = 8
currow = currow - 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
GOTO skip
END IF
END IF
END IF
END IF
IF rowcol(currow, curcolumn) = 0 THEN
IF curcolumn > 1 THEN curcolumn = curcolumn - 1: rowcol(currow, curcolumn) = 0: GOTO skip
IF curcolumn = 1 AND currow > 1 THEN
IF rowcol(currow - 1, 8) <> 0 THEN rowcol(currow - 1, 8) = 0: currow = currow - 1: curcolumn = 8: GOTO skip
IF rowcol(currow - 1, 8) = 0 THEN curcolumn = 8
currow = currow - 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
GOTO skip
END IF
END IF
END IF
END IF
skip:
kbd$ = INKEY$
SELECT CASE LCASE$(kbd$)
CASE "a", "p", "z", "l", "g", "i", "t", "y", "e", "o", "x", "u", "k", "s", "v", "n"
cst$ = "aepozxlugkistvyn"
sel = INSTR(1, cst$, kbd$)
rowcol(currow, curcolumn) = sel
third = rowcol(currow, 3)
IF curcolumn <= 6 AND (third = 1 OR third = 3 OR third = 5 OR third = 7 OR third = 9 OR third = 11 OR third = 13 OR third = 15) THEN
IF curcolumn < 6 THEN curcolumn = curcolumn + 1 ELSE IF currow < 3 THEN currow = currow + 1: curcolumn = 1
ELSE
IF curcolumn < 8 THEN curcolumn = curcolumn + 1 ELSE IF currow < 3 THEN currow = currow + 1: curcolumn = 1
END IF
CASE CHR$(8)
third = rowcol(currow, 3)
IF rowcol(currow, curcolumn) <> 0 THEN
IF currow = 3 AND curcolumn = 6 AND (third = 1 OR third = 3 OR third = 5 OR third = 7 OR third = 9 OR third = 11 OR third = 13 OR third = 15) THEN rowcol(currow, curcolumn) = 0: GOTO skip
IF currow = 3 AND curcolumn = 8 THEN rowcol(currow, curcolumn) = 0: GOTO skip
curcolumn = curcolumn - 1
IF curcolumn = 0 THEN
IF currow = 1 THEN curcolumn = 1: GOTO skip
IF currow > 1 THEN
IF rowcol(currow - 1, 8) <> 0 THEN rowcol(currow - 1, 8) = 0: currow = currow - 1: curcolumn = 8: GOTO skip
IF rowcol(currow - 1, 8) = 0 THEN curcolumn = 8
currow = currow - 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
GOTO skip
END IF
END IF
END IF
END IF
IF rowcol(currow, curcolumn) = 0 THEN
IF curcolumn > 1 THEN curcolumn = curcolumn - 1: rowcol(currow, curcolumn) = 0: GOTO skip
IF curcolumn = 1 AND currow > 1 THEN
IF rowcol(currow - 1, 8) <> 0 THEN rowcol(currow - 1, 8) = 0: currow = currow - 1: curcolumn = 8: GOTO skip
IF rowcol(currow - 1, 8) = 0 THEN curcolumn = 8
currow = currow - 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
GOTO skip
END IF
END IF
END IF
CASE CHR$(0) + "h"
IF currow > 1 THEN currow = currow - 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
END IF
CASE CHR$(0) + "p"
IF currow < 3 THEN currow = currow + 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
END IF
CASE CHR$(0) + "k"
IF curcolumn > 1 THEN curcolumn = curcolumn - 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
END IF
CASE CHR$(0) + "m"
IF curcolumn < 8 THEN curcolumn = curcolumn + 1
IF rowcol(currow, curcolumn) = 0 AND curcolumn <> 1 THEN
FOR trace = curcolumn TO 2 STEP -1
IF rowcol(currow, trace - 1) <> 0 THEN EXIT FOR
curcolumn = curcolumn - 1
NEXT
END IF
END SELECT
_DISPLAY
LOOP
'Game Genie
DATA " OOOO OOOO O"
DATA " O O "
DATA " O OOOOO OO OO OOOOO O OOOOO OOOOO O OOOOO"
DATA " O OOO O O O O O O O O OOO O O O O O O O"
DATA " O O O O O O O O O O O O O O O O"
DATA " O O O O O O O O O O O O O O O"
DATA " OOO OO O O O O OOOOO OOO OOOOO O O O OOOOO"
'A
DATA " O"
DATA " O"
DATA " O O"
DATA " O O"
DATA " OOOOO"
DATA " O O"
DATA "OOO OOO"
'E
DATA " OOOOO"
DATA " O O"
DATA " O"
DATA " OOO"
DATA " O"
DATA " O O"
DATA " OOOOO"
'P
DATA " OOOO"
DATA " O O"
DATA " O O"
DATA " OOO"
DATA " O"
DATA " O"
DATA " OOO"
'O
DATA " OO"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " OO"
'Z
DATA " OOOOO"
DATA " O O"
DATA " O"
DATA " O"
DATA " O"
DATA " O O"
DATA " OOOOO"
'X
DATA "OOO OOO"
DATA " O O"
DATA " O O"
DATA " O"
DATA " O O"
DATA " O O"
DATA "OOO OOO"
'L
DATA " OOO"
DATA " O"
DATA " O"
DATA " O"
DATA " O"
DATA " O O"
DATA " OOOOO"
'U
DATA "OOO OOO"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " OOO"
'G
DATA " OOOO"
DATA " O O"
DATA " O"
DATA " O OOO"
DATA " O O"
DATA " O O"
DATA " OOO"
'K
DATA " OOO OO"
DATA " O O"
DATA " O O"
DATA " OO"
DATA " O O"
DATA " O O"
DATA " OOO OO"
'I
DATA " OOO"
DATA " O"
DATA " O"
DATA " O"
DATA " O"
DATA " O"
DATA " OOO"
'S
DATA " OOO"
DATA " O OO"
DATA " OO"
DATA " OOO"
DATA " OO"
DATA " O O"
DATA " OOO"
'T
DATA " OOOOO"
DATA " O O O"
DATA " O"
DATA " O"
DATA " O"
DATA " O"
DATA " OOO"
'V
DATA "OOO OOO"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " O O"
DATA " O"
DATA " O"
'Y
DATA "OOO OOO"
DATA " O O"
DATA " O O"
DATA " O"
DATA " O"
DATA " O"
DATA " OOO"
'N
DATA "OO OOO"
DATA " O O"
DATA " OO O"
DATA " O O O"
DATA " O OO"
DATA " O O"
DATA "OOO O"
'-
DATA " ÛÛÛÛÛÛ"
'+
DATA "Û"
DATA "ÛÛÛ"
DATA "Û"