Anonymous

Changes

From Final Fantasy Inside

FF7/Kernel/Memory management

380 bytes removed, 01:57, 13 July 2019
VRAM management
== RAM management ==
No matter what module is banked into memory, there is a section of memory 4,340 bytes long (0x10F4 bytes) that is reserved for all the variables for the entire game. This entire image is called the "Save Map[[FF7/Savemap|Savemap]]". When it's time to save a game, this section of memory is copied to non-volatile ram, such as a hard disk or memory card.
Within the save map [[FF7/Savemap|Savemap]] there are 5 banks of memory that are directly accessible by the [[FF7/Field_script|field scripting language]]. These can either be accessed 8 bits or 16 bits at a time depending on the field command argument. The following table is basic memory map of the banks and how they relate to the save map[[FF7/Savemap|Savemap]]. There is also an allocation for 256 bytes for temporary field variables. These are not used between field files and are not saved.
{| class="wikitable"
! style="background: rgb(204,204,204); width: 80px" align="center" | Offset
! style="background: rgb(204,204,204); width: 80px" align="center" | 8 Bit Field Bank
! style="background: rgb(204,204,204); width: 100px" align="center" | 16 Bit Filed Bank
! style="background: rgb(204,204,204); width: 250px" align="center" | Description
|-
| 0x0000
| style="background: rgb(255,255,255)" align="center" | N/A
| style="background: rgb(255,255,255)" align="center" | N/A
|
Beginning of [[FF7/Savemap|Savemap]]
|-
| style="background: rgb(152,204,255)" | 0x0BA4
| style="background: rgb(152,204,255)" align="center" | 0x1
| style="background: rgb(152,204,255)" align="center" | 0x2
| style="background: rgb(152,204,255)" | Field Script Bank 1
|-
| style="background: rgb(152,204,255)" | 0x0CA4
| style="background: rgb(152,204,255)" align="center" | 0x3
| style="background: rgb(152,204,255)" align="center" | 0x4
| style="background: rgb(152,204,255)" | Field Script Bank 2
|-
| style="background: rgb(152,204,255)" | 0x0DA4
| style="background: rgb(152,204,255)" align="center" | 0xB
| style="background: rgb(152,204,255)" align="center" | 0xC
| style="background: rgb(152,204,255)" | Field Script Bank 3
|-
| style="background: rgb(152,204,255)" | 0x0EA4
| style="background: rgb(152,204,255)" align="center" | 0xD
| style="background: rgb(152,204,255)" align="center" | 0xE
| style="background: rgb(152,204,255)" | Field Script Bank 4
|-
| style="background: rgb(152,204,255)" | 0x0FA4
| style="background: rgb(152,204,255)" align="center" | 0xF
| style="background: rgb(152,204,255)" align="center" | 0x7
| style="background: rgb(152,204,255)" | Field Script Bank 5
|-
| 0x10F4
| style="background: rgb(255,255,255)" align="center" | N/A
| style="background: rgb(255,255,255)" align="center" | N/A
|
End of [[FF7/Savemap|Savemap]]
|}
<table CELLSPACING{| class="0wikitable"><tr><th | style="borderbackground: 1px solid rgb(0255, 0255, 0255); width: 68px; height: 43px; background-color: rgb(230, 230, 230);80px">Offset<| N/th>A<th | style="borderbackground: 1px solid rgb(0255, 0255, 0255); text-width: 80px" align: ="center; vertical-align: middle; width: 83px; height: 43px; background-color: rgb(230, 230, 230);">| 0x58 Bit Field Bank</th><th | style="borderbackground: 1px solid rgb(0255, 0255, 0255); text-width: 100px" align: ="center; vertical-align: middle; width: 99px; height: 43px; background-color: rgb(230, 230, 230);">16 Bit Field Bank</th>| 0x6<th | style="borderbackground: 1px solid rgb(0255, 0255, 0255); width: 281px; height: 43px; background-color: rgb250px" | Temporary field variables (230, 230, 230256 bytes);">Description</th></tr>|}
<tr><td style="border: 1px solid rgb(0, 0, 0); width: 68px; height: 25px;">0x0000</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px;">N/A</td><td style VRAM management ="border: 1px solid rgb(0, 0, 0); text-align: center; width: 99px; height: 25px;">N/A</td><td style="border: 1px solid rgb(0, 0, 0); width: 281px; height: 25px;">Beginning of Save Map</td></tr>
<tr><td style="border: 1px solid rgb(0The kernel is in charge of allocating, 0caching, 0); width: 68px; height: 25px; background-color: rgb(152and displaying in Video RAM. In the case of the PSX, 204port, 255);">0x0BA4</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px; background-color: rgb(152, 204, 255);">0x1</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 99px; height: 25px; background-color: rgb(152, 204, 255);">0x2</td><td style="border: 1px solid rgb(0, 0, 0); width: 281px; height: 25px; background-color: rgb(152, 204, 255);">Field Script Bank the Playstation only has 1</td></tr>megabyte of VRAM which makes this task a little complex. This is alleviated somewhat by using the PSX's VRAM caching system.
<tr><td style=The PSX video memory can best be seen as a rectangular "border: 1px solid rgb(0, 0, 0); width: 68px; height: 25px; background-color: rgb(152, 204, 255);">0x0CA4</td><td style=surface"border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px; background-made up of 2048x512 pixels. A slight caveat to this model is that the PSX can hold multiple color: rgb(152, 204depths in VRAM at the same time. To make the VRAM a little easier to visualize, 255);">0x3</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 99px; height: 25px; background-This document represents VRAM as a 1024x512 matrix to allow for some color: rgb(152, 204, 255);">0x4</td><td style="border: 1px solid rgb(0, 0, 0); width: 281px; height: 25px; background-color: rgb(152, 204, 255);">Field Script Bank 2</td></tr>depth in either direction and to minimize some extreme skewing of the video buffers.
<tr><td style="border: 1px solid rgb(0, 0, 0); width: 68px; height: 25px; background-color: rgb(152, 204, 255);">0x0DA4</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px; background-color: rgb(152, 204, 255);">0xB</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 99px; height: 25px; background-color: rgb(152, 204, 255);">0xC</td><td style="border: 1px solid rgb(0, 0, 0); width: 281px; height: 25px; background-color: rgb(152, 204, 255);">Field Script Bank 3</td><br /tr>The following is a typical state of VRAM during game play.
<tr><td style="border[[File: 1px solid rgb(0, 0, 0); width: 68px; height: 25px; background-color: rgb(152, 204, 255);">0x0EA4</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px; background-color: rgb(152, 204, 255);">0xD</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 99px; height: 25px; background-color: rgb(152, 204, 255);">0xE</td><td style="border: 1px solid rgb(0, 0, 0); width: 281px; height: 25px; background-color: rgb(152, 204, 255);">Field Script Bank 4</td></tr>Gears img 3.jpg|thumb]]
<tr><td style="border: 1px solid rgb(0, 0, 0); width: 68px; height: 25px; backgroundThe two game screens on the left side are the video buffer and the back buffer. The patchwork of graphics on the top right are the field graphics for that scene. The bottom row consists of cached graphics and special effects and on right semi-color: rgb(152, 204, 255);">0x0FA4</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px; background-color: rgb(152, 204, 255);">0x7</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 99px; height: 25px; background-color: rgb(152, 204, 255);">0xF</td><td style="border: 1px solid rgb(0, 0, 0); width: 281px; height: 25px; background-color: rgb(152, 204, 255);">Field Script Bank 5</td></tr>permanent and permanent textures for the game.
<tr><td style="border: 1px solid rgb(0, 0, 0); width: 68px; height: 25px;">0x10F4</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px;">N/A<br /td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 99px; height: 25px;">N/A</td><td style="border: 1px solid rgb(0, 0, 0); width: 281px; height: 25px;">End The following is a schematic representation of Save Map</td></tr>VRAM and all it's texture boundaries.
<tr><td style="border-style[[File: solid none solid solid; border-color: rgb(0, 0, 0); border-width: 1px; vertical-align: top; width: 68px; height: 25px;"></td><td style="border-style: solid none; border-color: rgb(0, 0, 0); border-width: 1px; text-align: center; vertical-align: top; width: 83px; height: 25px;"></td><td style="border-style: solid none; border-color: rgb(0, 0, 0); border-width: 1px; text-align: center; vertical-align: top; width: 99px; height: 25px;"></td><td style="border-style: solid solid solid none; border-color: rgb(0, 0, 0); border-width: 1px; vertical-align: top; width: 281px; height: 25px;"></td></tr>Gears img 4.jpg|thumb]]
<tr><td style="border: 1px solid rgb(0, 0, 0); width: 68px; height: 25px;">N/A</td><td style="border: 1px solid rgb(0, 0, 0); text-align: center; width: 83px; height: 25px;">0x5</td><td style="border: 1px solid rgb(0, 0, 0); textHere the sections of VRAM are much more visible. The large cyan areas are the video frame buffers. The PSX uses a standard double page buffer to animate the game. The blank areas above and below the frame buffers are blank to allow for a correct V-align: center; width: 99px; height: 25px;">0x6</td><td style="border: 1px solid rgb(0sync. The dark blue areas to the right of the frame buffers are when the game plays 24 bit movies. This requires a slightly larger display and the first two texture caches are overwritten. During times in the game where no movies can take place, 0such as Battle, 0); width: 281px; height: 25px;">Temporary field variables (256 bytes)</td></tr></table>textures are commonly placed here.
The magenta area under the video buffers is the Color Look Up Tables (CLUT). This is where the texture palettes are stored. This also allows the PSX to display multiple color depths at the same time. The red area to the right is extra CLUT space when it is needed and there are no textures cached there.
A more complete The green area on the right is the permanent menu textures and annotated save map the yellow is in where the MENU sectionmenu font is located.
All the blank rectangles are the texture cache boundaries. In order of volatility, the top two rows of cache space are overwritten from left to right, and then the bottom rows are overwritten. The textures on the bottom right are barely overwritten except for key places.
== VRAM management ==<br />
The kernel is in charge of allocating, caching, and displaying in Video RAM. The the case if the == PSX, port, the Playstation only has 1 megabyte of VRAM which makes this task a little complex. This is alleviated somewhat by using the PSX's VRAM caching system.CD-ROM management ==
The One of the big rules on PSX video memory can best be seen as development is that direct hardware access is a rectangular "surface" made up of 2048x512 pixelsprohibited. A slight caveat to this model is that Everything must go through the BIOS or the program will risk being incompatible with later systems. This means not only from PSX can hold multiple color depths in VRAM at to PS2, but also all the same timetrivial hardware revisions as well. To make This creates a problem for the VRAM a little easier kernel. During module transitions (for example, going from "Map" to visualize"Battle"), the engine actually "preloads" the next module while the current one is still executing. This document represents VRAM as loading of data can't be done with a 1024x512 matrix to allow for some color depth in either direction and to minimize some extreme skewing simple open() or read() BIOS syscall. Whenever you enter the BIOS, the rest of the video bufferssystem comes to a screeching halt until it is exited.
This problem is solved by the FF7 actually controlling the CD-ROM access itself though faster, low-level BIOS calls. The following is kernel can only load 8 kilobytes at a typical state time in this "quick mode" In this mode the kernel also only references files by what sector of VRAM during game play. [[Image:Gears_img_3the CD-ROM the data is located on, not by filename.jpg]]