# BGScriptTool **Repository Path**: wangcamel/BGScriptTool ## Basic Information - **Project Name**: BGScriptTool - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-12 - **Last Updated**: 2025-05-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BIOS Guard Script tool The tool allows you to assemble and disassemble BIOS Guard script. ## Assembly To assemble a script, you need to use `big-script-tool.py -a `. Assembled script will be saved to file `_assembled.bin`. Also you can use class `BigScript` directly: ``` script = BigScript(code_string=src) script.to_bytes() ``` or ``` script = BigScript() script.assemble(src) script.to_bytes() ``` ### Operands The operands are: * buffers * flash pointers * registers * immediate values * labels **Buffers**: `buffer` (or `b`). Storages of the data. `buffer0` points to the actual BGUP. Other buffers are temporal. ``` set b0 0xAA00 add b0 0x1 ``` **Flash pointers**: `flash` (or `f`). Stores some linear address of the flash. ``` set f0 0xA00000 sub f0 0x10 ``` **Registers**: `r` - a little storage of the temporal data. ``` set r1 0x10 set r2 0x20 add r1 r2 and r1 0x30 ``` **Imm values**: `` or `0x` if you prefer to use hex. ***Please note***, that hex numbers are start only with `0x` prefix. If you write something like `10000h` it will be interpreted as a decimal number. **Labels**: `_` - an arbitrary script line name. Can be used only in control flow instructions. ***Please note***, that labels start with `_` and must not end with symbols like `:`. If you use that symbol, you will need to refer to the label like `jmp _label:`. ``` _loop sub r1 r2 cmp r1 0x0 jne _loop ``` ### Opcodes | Opcode name | Operands | Info | |-|-|-| | start | - | marks the start of the script | | store | `flash ptr, buffer, register` | write data from a buffer to the flash | | store | `flash ptr, buffer, immediate value` | write data from a buffer to the flash | | load | `buffer, flash ptr, register` | read data from the flash to the buffer | | load | `buffer, flash ptr, immediate value` | read data from the flash to the buffer | | eraseblk | `flash ptr` | Erase flash blk | | eraseblk64kb | `flash ptr` | Erase 64kb flash block | | add | `register, register` | | | add | `register, immediate value` | | | add | `buffer, register` | | | add | `buffer, immediate value` | | | add | `flash ptr, register` | | | add | `flash ptr, immediate value` | | | sub | `register, register` | | | sub | `register, immediate value` | | | sub | `buffer, register` | | | sub | `buffer, immediate value` | | | sub | `flash ptr, register` | | | sub | `flash ptr, immediate value` | | | and | `register, register` | | | and | `register, immediate value` | | | or | `register, register` | | | or | `register, immediate value` | | | shr | `register, immediate value` | | | shl | `register, immediate value` | | | ror | `register, immediate value` | | | rol | `register, immediate value` | | | set | `register, register` | | | set | `register, immediate value` | | | set | `buffer, register` | Set an offset from the beggining of the buffer | | set | `buffer, immediate value` | Set an offset from the beggining of the buffer | | set | `flash ptr, register` | Set a linear address of the flash | | set | `flash ptr, immediate value` | Set a linear address of the flash | | loadbyte | `register, buffer` | | | loadword | `register, buffer` | | | loaddword | `register, buffer` | | | storebyte | `buffer, register` | | | storeword | `buffer, register` | | | storedword | `buffer, register` | | | cmp | `register, register` | | | cmp | `register, immediate value` | | | cmp | `buffer, register` | | | cmp | `buffer, immediate value` | | | cmp | `flash ptr, register` | | | cmp | `flash ptr, immediate value` | | | cmp | `buffer, buffer, register` | Compare buffers with specified length | | cmp | `buffer, buffer, immediate value` | Compare buffers with specified length | | copy | `buffer, buffer, register` | Copy data with the specified length | | copy | `buffer, buffer, immediate value` | Copy data with the specified length | | jmp | `label` (or `imm`) | Uncoditional jump to the label. Also you can use a line number directly. | | je | `label` (or `imm`) | Coditional jump to the label. Also you can use a line number directly.| | jne | `label`(or `imm`) | Coditional jump to the label. Also you can use a line number directly. | | jg | `label` (or `imm`) | Coditional jump to the label. Also you can use a line number directly. | | jge | `label` (or `imm`) | Coditional jump to the label. Also you can use a line number directly. | | jl | `label` (or `imm`) | Coditional jump to the label. Also you can use a line number directly. | | jle | `label` (or `imm`) | Coditional jump to the label. Also you can use a line number directly. | | jmp | `register` | Uncoditional jump to the line number stored in register. | | log | `immediate value, register` | Write data from second operand to the BiG Log. The BiG log needs to be setup properly. | | log | `immediate value, immediate value` | Write data from second operand to the BiG Log. The BiG log needs to be setup properly. | | rdsts | `register` | Read status of previous operation into register. | | rand | `register` | | | sleep | `immediate value` | | | end | - | | ## Disassembly To disassemble a script, you need to use `big-script-tool.py -d `. Disassembled script will be saved to file `_disassembled.txt`. Also you can use class ` BigScript` directly: ``` script = BigScript(code_bytes=bin_script) script.to_string() ``` or ``` script = BigScript() script.disassemble(bin_script) script.to_string() ```