PGMFI Logo
Library> CromeScript Destinations: Home | Library | Change Log | Index
Search | Go

Crome has a powerful scripting language. There are many functions you can call to do things. It would be good to document them here.

3/5/04 see below for additional information - Lego

Java Functions

Variable Use for How to create Note
Array when you need more then one value
new array(x,y) x and y are the values
Var When you need 1 variable
var test test is the new variable
select() Use when you want the user to select your options usage: select (sPrompt, sVar); Use a pipe for sVar
input() Use when you need input from a user usage: input(sPromt,sVar,sArray) sVar:"'no1','no2'; sSrray(1,2) the values for no1, no2; Return a string with commas
string.spilt(',') Split a string in a array   String is split at ','
isNaN(string) Java function to check if the string is numric  
Alert('str'); Shows a msg box with the msg: str  

Crome Functions

Function What does it do? Explain Variables Notes
_rom_write(start, v, count) Write an array of bytes to the rom file start:Startadrress; v:array; count: Needed most of the time to write something to the rom
_rom_fill(fromAdr, toAdr, byteFill) Write any area of the rom with the same bytes fromAdr:Where to start; toAdr:Where to stop; byteFill:Which byte(if left empty 0x00 is assumed Usefull when you need to put NOP a locations
refresh() Refersh the rom to seen new values    
rom.gup() Group Unupdate   When your script changes a lot of values use this so you can undo
rom.byteAt(0xFF) point to a location in the rom(1 byte) (0xFF) is the location
rom.wordAt(0xFFFF) point to a location in the rom(1 word) (0xFFFF) is the location
rom.hasLaunchControl Tells Crome the bin has FTL Set to 1 for FTL
rom.hasFullThrottleShift Tells Crome the bin has FTS Set to 1 for FTS
rom.hasBoost Tells Crome the bin has Boost Set to 1 for 1bar\2 for 3bar
rom.addressOf('') Tells Crome Where something is   Works for tables\scalers\rev limits\
rom.title Tells Crome the title of the bin needs to be string
rom.type Tells Crome the type of the bin rp30/rp72/rp28/rpCustom
addPlugin (strAuthor, strCaption, strExecCall, strInfoCall, intCategory); Add a plugin in Crome   read it in Crome
addRomHandler (ecuType, strAuthor, strHandlerCall Add a rom handler in Crome   read it in Crome
eval('0x' + Dec To Hex?(dec_value) convert a decimal value to hex 0xab   dev_value exmaple 125

New documentation follows -- Lego Z81? - 06 Mar 2004

CROME JAVASCRIPT API

These javascript objects and their members are accessible directly through CROME scripts. If you plan to write an html based plugin, these objects are accessible through the 'window.external' call.

Here are some example:

To access the window object in CROME scripts, you can use window.MEMBER or simply call the MEMBER directly. eg. window.refresh() = refresh(). To access the window object in an html plugin you have to use: window.external.window.refresh() or window.external.refresh().

The rom object is a member of the window object so to access a member of the rom object you can use window.rom.MEMBER or rom.MEMBER in CROME scripts and window.external.window.rom.MEMBER or window.external.rom.MEMBER in html plugins.

Any other javascript objects, methods, properties are still accessible, but I will not comment on them since there are websites/books that can do a better job than me.

Any other confusions contact me @ john@radicalperformance.com and make the subject 'crome script api'.


C R O M E O B J E C T S S T R U C T U R E

+(o)window (default object)

+-(f)addRomHandler(romtype: byte; author, jscmd: string)

+-(f)addPlugin(author, mnucaption, jscmd: string; category: byte)

+-(f)alert(msg: string)

+-(f)confirm(msg: string): boolean

+-(f)DecToHex(dec: longword): string

+-(f)exal(cipherstring: string)

+-(f)GetFilePath(filename: string): string

+-(f)GetFileName(filename: string): string

+-(f)HiByte(w: word): byte

+-(f)input(msg, options, values: string): string

+-(f)include(filename: string)

+-(f)LoByte(w: word): byte

+-(f)prompt(caption, msg, default: string): boolean

+-(f)select(prompt, selection: string): integer

+-(f)shell(filename, params: string; windowstate: byte)

+-(f)shelld(doscmd: string): string

+-(f)shellw(filename, params: string; windowstate: byte)

+-(f)showBrowser(url: string; width, height: integer)

+-(f)refresh()

+-(o)rom

+-(p)byteAt(addr: word): byte

+-(p)wordAt(addr: word): word

+-(p)working_table: byte

+-(p)tableByte(col, row: byte): byte

+-(p)tableValue(col, row: byte): single

+-(p*)tableWidth: byte

+-(p*)tableHeight: byte

+-(p)addressOf(SPECIALSTR: string): word

+-(p)addressIn(index: byte): word

+-(p)hasLaunchControl: byte

+-(p)hasFullThrottleShift: byte

+-(p)hasBoost: byte

+-(p)hasFinalMultiplier: byte

+-(p)hasShiftLight: byte

+-(p)hasIAB: byte

+-(p)mapScalar(tbl, col: byte): word

+-(p)revScalar(tbl, row: byte): word

+-(p)base: byte

+-(p)title: string

+-(p*)filename: string

+-(f)gup()

+-(p)OBDMode: byte

+-(p)notes: string

+-files

+-(f)showSave(filter: string; filterindex: integer): string

+-(f)exists(filename: string): boolean

+-(f)getFile(filename: string): string

+-(f)putFile(filename, data: string)

+-(f)browseFolder: string

+-(f)showOpen(filter: string; filterindex: integer): string

note: (f) = function (p) = property (read/write) (p*) = property (read only) (o) = object


W I N D O W O B J E C T U S A G E

addRomHandler(romtype: byte; author, jscmd: string)

desc : used to add a rom handler for a non-stock rom such as roms with boost options, launch control, full throttle shift, etc.

ecutype : integer value specifying for which rom type this handler will be called for author : name/handle of script writer jscmd : javascript command used to handle the a rom

eg. addRomHandler(rtP30, 'John Cui', '_handle_p30_rom()');


addPlugin(author, mnucaption, jscmd: string; category: byte)

desc : used to add a plugin to the plugins list on the CROME main window

author : name/handle of script writer mnucaption: visible caption that apears on plugins menu jscmd : javascript command called when plugin is executed

eg. addPlugin('John Cui', 'Test Plugin', '_run_test_plugin()', 0);


alert(msg: string)

desc : displays an alert message with 'OK' button as an option

msg : message displayed on alert message box


confirm(msg: string): boolean

desc : displays a confirmation message with 'Yes' and 'No' buttons as options

msg : message displayed on confirm box return : 0 -> false 1 -> true


Dec To Hex?(dec: longword): string

dec : decimal value to convert to hex return : hex value as a string


exal(cipherstring: string)

desc : used to evaluate an encoded javascript code encoding javascripts can be used to prevent copying of scripts

cipherstring: an encoded string of javascript code


Get File Path?(filename: string): string

desc : utility function used to get the path portion of a filename

filename : full filename of a file including path return : path portion of filename


Get File Name?(filename: string): string

desc : utility function used to get the file name portion of a filename

filename : full filename of a file including path return : file name portion of a filename


Hi Byte?(w: word): byte

desc : utility function to retreive the high byte of a word value

w : a word value return : high byte of w


input(msg, options, values: string): string

desc : displays a user prompt for an input

msg : instructions for user options :


include(filename: string)

desc : include a file containing scripts to current script

filename : filename of an existing script file


Lo Byte?(w: word): byte

desc : utility function to retreive the low byte of a word value

w : a word value return : low byte of w


prompt(caption, msg, default: string): boolean

desc : propmts a user for a response

caption : caption for prompt msg : message for user default : default input return : user response empty string if cancelled


select(prompt, selection: string): integer

desc : prompt a user to pick from a list of items

prompt : message for user selection : a list of selections for the user return : the index of selected item -1 if cancelled


shell(filename, params: string; windowstate: byte)

desc : call an external application

filename : filename of external app params : parameters passed to the external app windowstate : window state for external app

eg. shell('notepad.exe', 'C:\autoexec.bat', 0);


shelld(doscmd: string): string

desc : call an external DOS app and retreive its message

doscmd : DOS command to call return : returned string from DOS prompt

eg. m = shelld('dasm662.exe "my_file.bin"'); if (m) alert(m);


shellw(filename, params: string; windowstate: byte)

desc : same as shell() function but waits for external app to close before continuing execution


showBrowser(url: string; width, height: integer)

desc : show CROME's built-in web browser to display html-based scripts/plugins or web pages

url : address of an existing file or web page width : window width for the browser height : window height for the browser

eg. showBrowser('my_html_plugin.html', 400, 250)


refresh()

desc : refreshes the current display to show any updates use this at the end of a script to make sure the current changes are displayed


R O M O B J E C T U S A G E

byteAt(addr: word): byte

desc : used to access any part of the rom and set/get a byte value

addr : ROM file address

eg. a = rom.byteAt(0x7FFF); // retreives the byte value at address 0x7FFF rom.byteAt(0x7FFF) = 0xFF; // sets the byte value at address 0x7FFF to 0xFF


wordAt(addr: word): word

desc : same as byteAt() but for word values this function takes into account for endianess, an item in the rom stored as [0xAB][0xCD] will be returned as 0xCDAB


working_table: byte

desc : set/get current working table for CROME

wt : working table value 0 = low fuel 1 = high fuel 2 = low ignition 3 = high ignition


tableByte(col, row: byte): byte

desc : set/get byte value of the the col:row of the current working table does not change fuel multiplier values

col,row : column and row of the table

eg. working_table = 2; b = rom.tableByte(0, 5);


tableValue(col, row: byte): single

desc : set/get actual value of the col:row of the current working table this will also set the fuel multiplier for fuel tables if necessary


tableWidth: byte

desc : gets the table width of the current working table


tableHeight: byte

desc : gets the table height of the current working table


addressOf(SPECIALSTR: string): word

desc : set/get word sized values in special registers in CROME

SPECIALSTR : special names used to access the differents registers see list for special names and usage

eg. rom.addressOf('CHECKSUM') = 0x7FFF


addressIn(index: byte): word

desc : set/get word sized values in special registers in CROME these registers are accessible by index numbers

index : 0-63 corresponding to the index of the 64 special registers

eg. rom.addressIn(40) = 0x1234


hasLaunchControl: byte

desc : set/get launch control support 0 = off 1 = on


hasFullThrottleShift: byte

desc : set/get full throttle shift support 0 = off 1 = on


hasBoost: byte

desc : set/get boost support 0 = no boost 1 = stock map boost 2 = 3 bar boost 3 = custom


hasFinalMultiplier: byte

desc : set/get final multiplier support 0 = off 1 = on


hasShiftLight: byte

desc : set/get shift light support 0 = off 1 = on


hasIAB: byte

desc : set/get IAB support 0 = off 1 = on


mapScalar(tbl, col: byte): word

desc : set/get map scalar values in millibars

tbl : 0 = low tables 1 = high tables col : column number of scalar


revScalar(tbl, row: byte): word

desc : set/get rev scalar values in rpms

tbl : 0 = low tables 1 = high tables row : row number of scalar


base: byte

desc : set/get base rom of to be loaded = this determines which default address locations to use for = a particular rom


title: string

desc : set/get the value of the statusbar on the lower left of the main window


filename: string

desc : (read only) gets the full filename of the current ROM


gup()

desc : Group Undo Point used in the begining and the end of a complex ROM manipulation in order to combine multiple changes as one undo/redo action

eg. rom.gup(); for (i = 0; i <= 0x7FFF; i++) { rom.byteAt(i) = Lo Byte?(i); } rom.gup();


OBDMode: byte

desc : set/get OBD mode to determine which formulas to use 0 = OBD0 1 = OBD1 2 = OBD2 3 = Unknown


notes: string

desc : set/get notes for current ROM


F I L E O B J E C T U S A G E

showSave(filter: string; filterindex: integer): string

desc : display a save dialog

filter : list of file type filters filterindex : index of default filter return : selected filename empty string if cancelled

eg. fn = showSave('HTML Files|*.htm;*.html|Text Files|*.txt|All Files|*.*', 0)


exists(filename: string): boolean

desc : utility function to determine if a file exists

filename : filename of file to check return : 0 = file does not exist 1 = file exists


getFile(filename: string): string

desc : gets the contents of a file (text files only)

filename : full filename return : content of the file


putFile(filename, data: string)

desc : writes to a file

filename : full filename data : content to write to the file


browseFolder: string

desc : displays the browser for folder dialog returns path of selected folder returns empty string if cancelled


showOpen(filter: string; filterindex: integer): string

desc : display an open dialog

filter : list of file type filters filterindex : index of default filter return : selected filename empty string if cancelled


S P E C I A L N A M E S L I S T

These are the special names and corresponding special register indexes that can be used with the rom.addressOf() or rom.addressIn() calls

[SPECIAL NAMES] [INDEX] [COMMENT]

CHECKSUM 0 address where to apply checksum correction LOW_MAP_SCALAR 1 address of low map scalar HIGH_MAP_SCALAR 2 address of high map scalar LOW_REV_SCALAR 3 address of low rev scalar HIGH_REV_SCALAR 4 address of high rev scalar LOW_FUEL 5 address of low fuel table HIGH_FUEL 6 address of high fuel table LOW_IGNITION 7 address of low ignition table HIGH_IGNITION 8 address of high ignition table NFO_LOW_TABLE 9 low table size hibyte = height lobyte = width NFO_HIGH_TABLE 10 high table size hibyte = height lobyte = width REVCUT1 11 address of 1st revcut value REVRES1 12 address of 1st revres value REVCUT2 13 address of 2nd revcut value REVRES2 14 address of 2nd revres value VTEC_TABLE 15 address of vtec tables NFO_VTEC_TABLE 16 vtec table info hibyte = vtec pair count (2 or 4) VTEC 17 address of VTEC config byte

IDLE 25 address of idle value KNOCK 26 address of knock config byte ELD 27 address of eld config byte

BARO 29 address of baro config byte VTECVSS 30 address of vtec vss check config byte VTECCOOL 31 address of vtec coolant check config byte DEBUGMODE 32 address of debug mode config byte OXYHEAT 33 address of o2 heater check config byte

LAUNCH_CUT 40 address of lauch cut value LAUNCH_RES 41 address of lauch res value SHIFT_CUT 42 address of shift cut value SHIFT_RES 43 address of shift res value SPEED_LIMIT 44 address of speed limitter value NFO_MAP_MIN 45 NFO_MAP_MAX 46

MTX1 50 address of final fuel multiplier value MTX2 51 MTX3 52 address of cranking fuel multiplier value MTX4 53 MTX5 54 address of tip-in fuel multiplier value MTX6 55 SL_BYTE 56 address of shift light config byte SL_RPM 57 address of shift light rpm value

Notes: in order to use the built-in editors in the options page of CROME you must set the hasLaunchControl, hasFullThrottleShift, hasFinalMultiplier, hasShiftLight, and hasIAB properties of the rom object to true (1).

Revision infromation 05 Mar 2004 Lego Z81? fixed tables, added documentation written by John Cui? for Crome. E-mail me if you have any questions I saved a copy of this before I made and changes. Thank you.

Revision: r1.3 - 31 Mar 2007 - 03:08 GMT - racingsky { Edit | Attach | History | More }
Copyright © 2002-present by the contributing authors. All material on this collaboration platform is the property of the
contributing authors, and is covered by the Non-Commercial Share-Alike License unless explicitly stated otherwise.
Ideas, requests, problems regarding the PGMFI TWiki?? E-Mail the WikiAdmin
Site Designed By: Digital Fusion   Need a website?