# Auto LBA
- [Auto LBA](#auto-lba)
  - [In Code](#in-code)
  - [For CD generation](#for-cd-generation)

To support the `Auto LBA` feature changes need to be applied to the source files and the CD configuration file.

## In Code
To use the `Auto LBA` feature the LBAs first need to be defined in either an `enum` or `enum struct`. These need to fit a special pattern. The usage of a `namespace` is recommended.

`__jabyengine_start_lba_request` needs to be the first entry while `__jabyengine_end_lba_request` needs to be the last. Each LBA entry needs to be declared with `__jabyengine_request_lba_for` followed by the name for the enum entry and the file path on the disk. 

```c++
namespace Assets {
    enum LBA {
        __jabyengine_start_lba_request
        __jabyengine_request_lba_for(SYSTEM_CNF, "SYSTEM.CNF"),
        __jabyengine_end_lba_request
    };
    __declare_lba_header(LBA);

    namespace {
        void load() {
            printf("LBA: %i, Words: %i\n", lba[LBA::SYSTEM_CNF].lba, lba[LBA::SYSTEM_CNF].size_words);
        }    
    }
}
```

## For CD generation
To automatically fill the LBA values `psxcdgen_ex` needs to be used.
The attribute `lba_source` automatically fills in the values. It can be used with the XML `Main` and `Overlay` tag.

```xml
<Track>
    <File    name = "SYSTEM.CNF">System.cnf</File>
    <Main    name = "%PSX_BOOT_FILE%" lba_source = "main.cpp">Application.psexe</Main>
    <Overlay name = "OVL.BIN"         lba_source = "state.cpp">Overlay.state</Overlay>
</Track>
```