Update makefile, add overlay example
This commit is contained in:
parent
040e70aad9
commit
b64ff6e656
114
Makefile
114
Makefile
@ -1,55 +1,69 @@
|
|||||||
hello_world:
|
|
||||||
$(MAKE) -C hello_world
|
|
||||||
hello_2pads:
|
hello_2pads:
|
||||||
$(MAKE) -C hello_2pads
|
$(MAKE) -C hello_2pads
|
||||||
hello_cube:
|
|
||||||
$(MAKE) -C hello_cube
|
|
||||||
hello_cubetex:
|
|
||||||
$(MAKE) -C hello_cubetex
|
|
||||||
hello_cubetex_stp:
|
|
||||||
$(MAKE) -C hello_cubetex_stp
|
|
||||||
hello_poly_fun:
|
|
||||||
$(MAKE) -C hello_poly_fun
|
|
||||||
hello_gte_opti:
|
|
||||||
$(MAKE) -C hello_gte_opti
|
|
||||||
hello_light:
|
|
||||||
$(MAKE) -C hello_light
|
|
||||||
hello_multi_vag:
|
|
||||||
$(MAKE) -C hello_multi_vag
|
|
||||||
hello_pad:
|
|
||||||
$(MAKE) -C hello_pad
|
|
||||||
hello_poly:
|
|
||||||
$(MAKE) -C hello_poly
|
|
||||||
hello_poly_stp:
|
|
||||||
$(MAKE) -C hello_poly_stp
|
|
||||||
hello_poly_ft:
|
|
||||||
$(MAKE) -C hello_poly_ft
|
|
||||||
hello_poly_gt:
|
|
||||||
$(MAKE) -C hello_poly_gt
|
|
||||||
hello_poly_gt_tw:
|
|
||||||
$(MAKE) -C hello_poly_gt_tw
|
|
||||||
hello_poly_inline:
|
|
||||||
$(MAKE) -C hello_poly_inline
|
|
||||||
hello_sio:
|
|
||||||
$(MAKE) -C hello_sio
|
|
||||||
hello_sprt:
|
|
||||||
$(MAKE) -C hello_sprt
|
|
||||||
hello_tile:
|
|
||||||
$(MAKE) -C hello_tile
|
|
||||||
hello_vag:
|
|
||||||
$(MAKE) -C hello_vag
|
|
||||||
hello_cd:
|
|
||||||
$(MAKE) -C hello_cd all
|
|
||||||
hello_cdda:
|
|
||||||
$(MAKE) -C hello_cdda all
|
|
||||||
hello_xa:
|
|
||||||
$(MAKE) -C hello_xa all
|
|
||||||
hello_bs:
|
hello_bs:
|
||||||
$(MAKE) -C hello_bs all
|
$(MAKE) -C hello_bs
|
||||||
|
hello_cd:
|
||||||
|
$(MAKE) -C hello_cd
|
||||||
|
hello_cdda:
|
||||||
|
$(MAKE) -C hello_cdda
|
||||||
|
hello_cd_exec:
|
||||||
|
$(MAKE) -C hello_cd_exec
|
||||||
|
hello_cube:
|
||||||
|
$(MAKE) -C hello_cube
|
||||||
|
hello_cubetex:
|
||||||
|
$(MAKE) -C hello_cubetex
|
||||||
|
hello_cubetex_stp:
|
||||||
|
$(MAKE) -C hello_cubetex_stp
|
||||||
|
hello_font:
|
||||||
|
$(MAKE) -C hello_font
|
||||||
|
hello_fx:
|
||||||
|
$(MAKE) -C hello_fx
|
||||||
|
hello_gte_opti:
|
||||||
|
$(MAKE) -C hello_gte_opti
|
||||||
|
hello_light:
|
||||||
|
$(MAKE) -C hello_light
|
||||||
|
hello_mod:
|
||||||
|
$(MAKE) -C hello_mod
|
||||||
|
hello_multi_vag:
|
||||||
|
$(MAKE) -C hello_multi_vag
|
||||||
|
hello_multi_xa:
|
||||||
|
$(MAKE) -C hello_multi_xa
|
||||||
|
hello_ovl_exec:
|
||||||
|
$(MAKE) -C hello_ovl_exec
|
||||||
|
hello_pad:
|
||||||
|
$(MAKE) -C hello_pad
|
||||||
|
hello_poly:
|
||||||
|
$(MAKE) -C hello_poly
|
||||||
|
hello_poly_ft:
|
||||||
|
$(MAKE) -C hello_poly_ft
|
||||||
|
hello_poly_fun:
|
||||||
|
$(MAKE) -C hello_poly_fun
|
||||||
|
hello_poly_gt:
|
||||||
|
$(MAKE) -C hello_poly_gt
|
||||||
|
hello_poly_gt_tw:
|
||||||
|
$(MAKE) -C hello_poly_gt_tw
|
||||||
|
hello_poly_inline:
|
||||||
|
$(MAKE) -C hello_poly_inline
|
||||||
|
hello_poly_stp:
|
||||||
|
$(MAKE) -C hello_poly_stp
|
||||||
|
hello_sio:
|
||||||
|
$(MAKE) -C hello_sio
|
||||||
|
hello_sprt:
|
||||||
|
$(MAKE) -C hello_sprt
|
||||||
hello_str:
|
hello_str:
|
||||||
$(MAKE) -C hello_str all
|
$(MAKE) -C hello_str
|
||||||
hello_strplay:
|
hello_strplay:
|
||||||
$(MAKE) -C hello_strplay all
|
$(MAKE) -C hello_strplay
|
||||||
|
hello_tile:
|
||||||
|
$(MAKE) -C hello_tile
|
||||||
|
hello_vag:
|
||||||
|
$(MAKE) -C hello_vag
|
||||||
|
hello_world:
|
||||||
|
$(MAKE) -C hello_world
|
||||||
|
hello_xa:
|
||||||
|
$(MAKE) -C hello_xa
|
||||||
|
hello_xa_streaming:
|
||||||
|
$(MAKE) -C hello_xa_streaming
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(MAKE) -C hello_2pads clean
|
$(MAKE) -C hello_2pads clean
|
||||||
@ -108,9 +122,5 @@ all:
|
|||||||
$(MAKE) -C hello_strplay all
|
$(MAKE) -C hello_strplay all
|
||||||
|
|
||||||
# declare phony rules
|
# declare phony rules
|
||||||
.PHONY: hello_2pads hello_cube hello_cubetex hello_poly_fun hello_gte_opti \
|
.PHONY: hello_2pads hello_bs hello_cd hello_cdda hello_cd_exec hello_cube hello_cubetex hello_cubetex_stp hello_font hello_fx hello_gte_opti hello_light hello_mod hello_multi_vag hello_multi_xa hello_ovl_exec hello_pad hello_poly hello_poly_ft hello_poly_fun hello_poly_gt hello_poly_gt_tw hello_poly_inline hello_poly_stp hello_sio hello_sprt hello_str hello_strplay hello_tile hello_vag hello_world hello_xa hello_xa_streaming \
|
||||||
hello_light hello_multi_vag hello_pad hello_poly hello_poly_ft hello_poly_gt \
|
|
||||||
hello_poly_gt_tw hello_poly_inline hello_sio hello_sprt hello_tile \
|
|
||||||
hello_vag hello_world hello_cdda hello_cd hello_xa hello_bs hello_str hello_strplay \
|
|
||||||
hello_poly_stp hello_cubetex_stp \
|
|
||||||
clean all
|
clean all
|
||||||
|
27
hello_ovl_exec/Makefile
Normal file
27
hello_ovl_exec/Makefile
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
.PHONY: all cleansub
|
||||||
|
all:
|
||||||
|
$(MAKE) -C hello_poly clean all
|
||||||
|
$(MAKE) -C hello_ovl_world clean all
|
||||||
|
$(MAKE) -C hello_tile clean all
|
||||||
|
mkpsxiso -y ./isoconfig.xml
|
||||||
|
cleansub:
|
||||||
|
$(MAKE) -C hello_poly clean
|
||||||
|
$(MAKE) -C hello_tile clean
|
||||||
|
$(MAKE) -C hello_ovl_world clean
|
||||||
|
$(MAKE) clean
|
||||||
|
rm -f hello_ovl_exec.cue hello_ovl_exec.bin
|
||||||
|
rm -f *.mcd *.frag *.lua *.vert
|
||||||
|
rm -f */*.mcd */*.frag */*.lua */*.vert */*.elf
|
||||||
|
#~ rm -f */*.mcd */*.frag */*.lua */*.vert */*.elf */*.map */*.ps-exe */*.o */*.dep
|
||||||
|
|
||||||
|
TARGET = hello_ovl_exec
|
||||||
|
|
||||||
|
OVERLAYSCRIPT ?= overlay.ld
|
||||||
|
OVERLAYSECTION ?= .ovly0 .ovly1 .ovly2
|
||||||
|
|
||||||
|
SRCS = hello_ovl_exec.c \
|
||||||
|
hello_ovl_world/hello_ovl_world.c \
|
||||||
|
hello_tile/hello_ovl_tile.c \
|
||||||
|
hello_poly/hello_ovl_poly.c \
|
||||||
|
|
||||||
|
include ../common.mk
|
35
hello_ovl_exec/README.md
Normal file
35
hello_ovl_exec/README.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
## Creating the disk image
|
||||||
|
|
||||||
|
After compiling, you need to generate a disk image with [mkpsxiso](https://github.com/Lameguy64/mkpsxiso):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkpsxiso -y isoconfig.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using ffmpeg to generate a CDDA compliant Wav file
|
||||||
|
|
||||||
|
Needed Specification : `RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz`
|
||||||
|
|
||||||
|
### Conversion
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ffmpeg -i input.mp3 -acodec pcm_s16le -ac 2 -ar 44100 output.wav
|
||||||
|
```
|
||||||
|
|
||||||
|
### Merging two mono audio channels into one stereo channel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ffmpeg -i herb.wav.new -filter_complex "[0:a][0:a]amerge=inputs=2[a]" -map "[a]" herbi.wav
|
||||||
|
```
|
||||||
|
|
||||||
|
## Music credits
|
||||||
|
|
||||||
|
Track 1 :
|
||||||
|
Beach Party by Kevin MacLeod
|
||||||
|
Link: https://incompetech.filmmusic.io/song/3429-beach-party
|
||||||
|
License: https://filmmusic.io/standard-license
|
||||||
|
|
||||||
|
Track 2:
|
||||||
|
Funk Game Loop by Kevin MacLeod
|
||||||
|
Link: https://incompetech.filmmusic.io/song/3787-funk-game-loop
|
||||||
|
License: https://filmmusic.io/standard-license
|
44
hello_ovl_exec/common.h
Normal file
44
hello_ovl_exec/common.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <libgte.h>
|
||||||
|
#include <libetc.h>
|
||||||
|
#include <libgpu.h>
|
||||||
|
#include <libapi.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <kernel.h>
|
||||||
|
// CD library
|
||||||
|
#include <libcd.h>
|
||||||
|
|
||||||
|
#define setRGB(p, r0, g0, b0) \
|
||||||
|
(p)->r = r0, (p)->g = g0, (p)->b = b0
|
||||||
|
|
||||||
|
#define VMODE 0
|
||||||
|
//~ #define VMODE 0 // Video Mode : 0 : NTSC, 1: PAL
|
||||||
|
#define SCREENXRES 320 // Screen width
|
||||||
|
#define SCREENYRES (240 + (VMODE << 4)) // Screen height : If VMODE is 0 = 240, if VMODE is 1 = 256
|
||||||
|
#define CENTERX SCREENXRES/2 // Center of screen on x
|
||||||
|
#define CENTERY SCREENYRES/2 // Center of screen on y
|
||||||
|
#define MARGINX 0 // margins for text display
|
||||||
|
#define MARGINY 32
|
||||||
|
#define FONTSIZE 18 * 7 // Text Field Height
|
||||||
|
#define OTLEN 8 // Ordering Table Length
|
||||||
|
|
||||||
|
extern DRAWENV draw[2];
|
||||||
|
extern char primbuff[2][32768];
|
||||||
|
extern char *nextpri;
|
||||||
|
extern u_long ot[2][OTLEN];
|
||||||
|
extern uint8_t db;
|
||||||
|
extern CVECTOR BGcolor;
|
||||||
|
|
||||||
|
enum OverlayNumber {
|
||||||
|
MOTHERSHIP = -1,
|
||||||
|
OVERLAY_HELLO = 0,
|
||||||
|
OVERLAY_TILE = 1,
|
||||||
|
OVERLAY_POLY = 2,
|
||||||
|
};
|
||||||
|
extern enum OverlayNumber next_overlay;
|
||||||
|
|
||||||
|
extern void init(void);
|
||||||
|
extern void display(void);
|
137
hello_ovl_exec/hello_ovl_exec.c
Normal file
137
hello_ovl_exec/hello_ovl_exec.c
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
// Load overlay files from CD and execute them
|
||||||
|
// Schnappy 10-2021
|
||||||
|
// With the help of Nicolas Noble and impiaa
|
||||||
|
// https://discord.com/channels/642647820683444236/663664210525290507/894624082367229952
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
DISPENV disp[2]; // Double buffered DISPENV and DRAWENV
|
||||||
|
DRAWENV draw[2];
|
||||||
|
char primbuff[2][32768]; // double primitive buffer of length 32768 * 8 = 262.144 bits / 32,768 Kbytes
|
||||||
|
u_long ot[2][OTLEN];
|
||||||
|
char *nextpri = primbuff[0];
|
||||||
|
uint8_t db = 0;
|
||||||
|
CVECTOR BGcolor = { 0, 150, 255 };
|
||||||
|
|
||||||
|
extern u_long load_all_overlays_here;
|
||||||
|
|
||||||
|
typedef struct Overlay {
|
||||||
|
char filename[0x7c];
|
||||||
|
int (*main)();
|
||||||
|
char commandline[0x180];
|
||||||
|
} Overlay;
|
||||||
|
|
||||||
|
int ovl_main_hello();
|
||||||
|
int ovl_main_tile();
|
||||||
|
int ovl_main_poly();
|
||||||
|
|
||||||
|
Overlay g_chainload[] = {
|
||||||
|
{"\\HELLO.OVL;1", ovl_main_hello, ""},
|
||||||
|
{"\\TILE.OVL;1", ovl_main_tile, ""},
|
||||||
|
{"\\POLY.OVL;1", ovl_main_poly, ""},
|
||||||
|
//~ { "\\POLY.OVL;1" , 0 },
|
||||||
|
};
|
||||||
|
|
||||||
|
enum OverlayNumber next_overlay = MOTHERSHIP;
|
||||||
|
enum OverlayNumber prev_overlay = MOTHERSHIP;
|
||||||
|
|
||||||
|
int main(void);
|
||||||
|
int loadOverlayAndStart(Overlay *);
|
||||||
|
void EmptyOTag(u_long ot[2][OTLEN], char primbuff[2][32768], char * nextpri );
|
||||||
|
|
||||||
|
void (*dispp) (void);
|
||||||
|
int CDreadOK = 0;
|
||||||
|
|
||||||
|
void init(void)
|
||||||
|
{
|
||||||
|
ResetCallback();
|
||||||
|
ResetGraph(0); // Initialize drawing engine with a complete reset (0)
|
||||||
|
// Initialize and setup the GTE
|
||||||
|
InitGeom();
|
||||||
|
SetGeomOffset(CENTERX,CENTERY);
|
||||||
|
SetGeomScreen(CENTERX);
|
||||||
|
SetDefDispEnv(&disp[0], 0, 0 , SCREENXRES, SCREENYRES); // Set display area for both &disp[0] and &disp[1]
|
||||||
|
SetDefDispEnv(&disp[1], 0, SCREENYRES, SCREENXRES, SCREENYRES); // &disp[0] is on top of &disp[1]
|
||||||
|
SetDefDrawEnv(&draw[0], 0, SCREENYRES, SCREENXRES, SCREENYRES); // Set draw for both &draw[0] and &draw[1]
|
||||||
|
SetDefDrawEnv(&draw[1], 0, 0 , SCREENXRES, SCREENYRES); // &draw[0] is below &draw[1]
|
||||||
|
// Set video mode
|
||||||
|
if (VMODE){ SetVideoMode(MODE_PAL);}
|
||||||
|
SetDispMask(1); // Display on screen
|
||||||
|
setRGB0(&draw[0], BGcolor.r, BGcolor.g, BGcolor.b); // set color for first draw area
|
||||||
|
setRGB0(&draw[1], BGcolor.r, BGcolor.g, BGcolor.b); // set color for second draw area
|
||||||
|
draw[0].isbg = 1; // set mask for draw areas. 1 means repainting the area with the RGB color each frame
|
||||||
|
draw[1].isbg = 1;
|
||||||
|
PutDispEnv(&disp[db]); // set the disp and draw environnments
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
FntLoad(960, 0); // Load font to vram at 960,0(+128)
|
||||||
|
FntOpen(MARGINX, SCREENYRES - MARGINY - FONTSIZE, SCREENXRES - MARGINX * 2, FONTSIZE, 0, 280 ); // FntOpen(x, y, width, height, black_bg, max. nbr. chars
|
||||||
|
}
|
||||||
|
|
||||||
|
void display(void)
|
||||||
|
{
|
||||||
|
DrawSync(0); // Wait for all drawing to terminate
|
||||||
|
VSync(0); // Wait for the next vertical blank
|
||||||
|
PutDispEnv(&disp[db]); // set alternate disp and draw environnments
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
DrawOTag(&ot[db][OTLEN - 1]);
|
||||||
|
db = !db; // flip db value (0 or 1)
|
||||||
|
nextpri = primbuff[db];
|
||||||
|
}
|
||||||
|
|
||||||
|
int loadOverlayAndStart(Overlay * overlay)
|
||||||
|
{
|
||||||
|
int CDreadResult = 0;
|
||||||
|
int next_ovl = -1;
|
||||||
|
// Load overlay file
|
||||||
|
CDreadResult = CdReadFile(overlay->filename, &load_all_overlays_here, 0);
|
||||||
|
CdReadSync(0, 0);
|
||||||
|
printf( "CD read: %d", CDreadResult);
|
||||||
|
// If file loaded sucessfully
|
||||||
|
if (CDreadResult)
|
||||||
|
{
|
||||||
|
//~ StopCallback();
|
||||||
|
ResetGraph(3);
|
||||||
|
// Execute
|
||||||
|
next_ovl = overlay->main();
|
||||||
|
EmptyOTag(&ot[db], &primbuff[db], nextpri);
|
||||||
|
setRGB(&BGcolor, 0, 150, 255);
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
return next_ovl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmptyOTag(u_long ot[2][OTLEN], char primbuff[2][32768], char * nextpri )
|
||||||
|
{
|
||||||
|
for (uint16_t p; p < OTLEN; p++)
|
||||||
|
{
|
||||||
|
ot[0][p] = 0;
|
||||||
|
ot[1][p] = 0;
|
||||||
|
}
|
||||||
|
nextpri = primbuff[!db];
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int t = 0;
|
||||||
|
// init() display
|
||||||
|
init();
|
||||||
|
// Init CD system
|
||||||
|
CdInit();
|
||||||
|
|
||||||
|
prev_overlay = next_overlay;
|
||||||
|
while(1){
|
||||||
|
if (t == 100){
|
||||||
|
next_overlay = OVERLAY_HELLO;
|
||||||
|
}
|
||||||
|
if (next_overlay != -1 && next_overlay != prev_overlay){
|
||||||
|
prev_overlay = next_overlay;
|
||||||
|
next_overlay = loadOverlayAndStart(&g_chainload[next_overlay]);
|
||||||
|
t = 0;
|
||||||
|
}
|
||||||
|
t++;
|
||||||
|
FntPrint("Mothership: %d\nOvl: %d %d", t, prev_overlay, next_overlay);
|
||||||
|
FntFlush(-1);
|
||||||
|
display();
|
||||||
|
}
|
||||||
|
//
|
||||||
|
return 0;
|
||||||
|
}
|
7
hello_ovl_exec/hello_ovl_world/Makefile
Normal file
7
hello_ovl_exec/hello_ovl_world/Makefile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TARGET = hello_world
|
||||||
|
|
||||||
|
SRCS = hello_world.c \
|
||||||
|
|
||||||
|
CPPFLAGS+=-DSTANDALONE
|
||||||
|
|
||||||
|
include ../../common.mk
|
25
hello_ovl_exec/hello_ovl_world/hello_ovl_world.c
Normal file
25
hello_ovl_exec/hello_ovl_world/hello_ovl_world.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
int ovl_main_hello(void)
|
||||||
|
{
|
||||||
|
setRGB(&BGcolor, 0, 255, 100);
|
||||||
|
init();
|
||||||
|
int i = 0;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
#ifndef STANDALONE
|
||||||
|
if (i==100){
|
||||||
|
next_overlay = OVERLAY_TILE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
FntPrint("Hello world ! %d\n", i);
|
||||||
|
#else
|
||||||
|
FntPrint("Hello standalone ! %d\n", i);
|
||||||
|
#endif
|
||||||
|
FntFlush(-1);
|
||||||
|
display();
|
||||||
|
}
|
||||||
|
return next_overlay;
|
||||||
|
};
|
||||||
|
|
52
hello_ovl_exec/hello_ovl_world/hello_world.c
Normal file
52
hello_ovl_exec/hello_ovl_world/hello_world.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
DISPENV disp[2]; // Double buffered DISPENV and DRAWENV
|
||||||
|
DRAWENV draw[2];
|
||||||
|
u_long ot[2][OTLEN]; // double ordering table of length 8 * 32 = 256 bits / 32 bytes
|
||||||
|
char primbuff[2][32768];// double primitive buffer of length 32768 * 8 = 262.144 bits / 32,768 Kbytes
|
||||||
|
char *nextpri = primbuff[0]; // pointer to the next primitive in primbuff. Initially, points to the first bit of primbuff[0]
|
||||||
|
uint8_t db = 0; // index of which buffer is used, values 0, 1
|
||||||
|
CVECTOR BGcolor = { 0, 255, 100 };
|
||||||
|
//~ int next_overlay;
|
||||||
|
|
||||||
|
void init(void)
|
||||||
|
{
|
||||||
|
ResetGraph(0);
|
||||||
|
SetDefDispEnv(&disp[0], 0, 0, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDispEnv(&disp[1], 0, SCREENYRES, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDrawEnv(&draw[0], 0, SCREENYRES, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDrawEnv(&draw[1], 0, 0, SCREENXRES, SCREENYRES);
|
||||||
|
if (VMODE)
|
||||||
|
{
|
||||||
|
SetVideoMode(MODE_PAL);
|
||||||
|
disp[0].screen.y += 8;
|
||||||
|
disp[1].screen.y += 8;
|
||||||
|
}
|
||||||
|
SetDispMask(1); // Display on screen
|
||||||
|
setRGB0(&draw[0], BGcolor.r, BGcolor.g, BGcolor.b); // set color for first draw area
|
||||||
|
setRGB0(&draw[1], BGcolor.r, BGcolor.g, BGcolor.b); // set color for second draw area
|
||||||
|
draw[0].isbg = 1;
|
||||||
|
draw[1].isbg = 1;
|
||||||
|
PutDispEnv(&disp[db]);
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
FntLoad(960, 0);
|
||||||
|
FntOpen(MARGINX, SCREENYRES - MARGINY - FONTSIZE, SCREENXRES - MARGINX * 2, FONTSIZE, 0, 280 );
|
||||||
|
}
|
||||||
|
void display(void)
|
||||||
|
{
|
||||||
|
DrawSync(0);
|
||||||
|
VSync(0);
|
||||||
|
PutDispEnv(&disp[db]);
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
DrawOTag(&ot[db][OTLEN - 1]);
|
||||||
|
db = !db;
|
||||||
|
nextpri = primbuff[db];
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "hello_ovl_world.c"
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
ovl_main_hello();
|
||||||
|
};
|
||||||
|
|
7
hello_ovl_exec/hello_poly/Makefile
Normal file
7
hello_ovl_exec/hello_poly/Makefile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TARGET = hello_poly
|
||||||
|
|
||||||
|
SRCS = hello_poly.c \
|
||||||
|
|
||||||
|
CPPFLAGS+=-DSTANDALONE
|
||||||
|
|
||||||
|
include ../../common.mk
|
72
hello_ovl_exec/hello_poly/hello_ovl_poly.c
Normal file
72
hello_ovl_exec/hello_poly/hello_ovl_poly.c
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
int ovl_main_poly(void)
|
||||||
|
{
|
||||||
|
setRGB(&BGcolor, 250, 0, 250);
|
||||||
|
init();
|
||||||
|
uint16_t timer = 0;
|
||||||
|
uint16_t timeout = 100;
|
||||||
|
MATRIX IDMATRIX = {0};
|
||||||
|
POLY_F4 *poly = {0};
|
||||||
|
SVECTOR RotVector = {0, 0, 0};
|
||||||
|
VECTOR MovVector = {0, 0, CENTERX, 0};
|
||||||
|
SVECTOR VertPos[4] = {
|
||||||
|
{-32, -32, 1 },
|
||||||
|
{-32, 32, 1 },
|
||||||
|
{ 32, -32, 1 },
|
||||||
|
{ 32, 32, 1 }
|
||||||
|
};
|
||||||
|
MATRIX PolyMatrix = IDMATRIX;
|
||||||
|
|
||||||
|
long polydepth;
|
||||||
|
long polyflag;
|
||||||
|
long OTz;
|
||||||
|
|
||||||
|
init();
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
|
||||||
|
ClearOTagR(ot[db], OTLEN);
|
||||||
|
|
||||||
|
poly = (POLY_F4 *)nextpri; // Set poly to point to the address of the next primitiv in the buffer
|
||||||
|
|
||||||
|
// Set transform matrices for this polygon
|
||||||
|
|
||||||
|
RotMatrix(&RotVector, &PolyMatrix); // Apply rotation matrix
|
||||||
|
TransMatrix(&PolyMatrix, &MovVector);
|
||||||
|
SetRotMatrix(&PolyMatrix); // Set default rotation matrix
|
||||||
|
SetTransMatrix(&PolyMatrix); // Set default transformation matrix
|
||||||
|
setPolyF4(poly); // Initialize poly as a POLY_F4
|
||||||
|
setRGB0(poly, 255, 255, 0); // Set poly color
|
||||||
|
|
||||||
|
// RotTransPers
|
||||||
|
OTz = RotTransPers4(
|
||||||
|
&VertPos[0], &VertPos[1], &VertPos[2], &VertPos[3],
|
||||||
|
(long*)&poly->x0, (long*)&poly->x1, (long*)&poly->x2, (long*)&poly->x3,
|
||||||
|
&polydepth,
|
||||||
|
&polyflag
|
||||||
|
); // Perform coordinate and perspective transformation for 4 vertices
|
||||||
|
|
||||||
|
RotVector.vy += 4;
|
||||||
|
RotVector.vz += 4; // Apply rotation on Z-axis. On PSX, the Z-axis is pointing away from the screen.
|
||||||
|
|
||||||
|
//~ addPrim(ot[db], poly); // add poly to the Ordering table
|
||||||
|
addPrim(ot[db][OTLEN-1], poly); // add poly to the Ordering table
|
||||||
|
|
||||||
|
nextpri += sizeof(POLY_F4); // increment nextpri address with size of a POLY_F4 struct
|
||||||
|
|
||||||
|
timer++;
|
||||||
|
|
||||||
|
FntPrint("Hello Poly ! %d", timer);
|
||||||
|
#ifndef STANDALONE
|
||||||
|
if (timer == timeout){
|
||||||
|
next_overlay = MOTHERSHIP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
FntFlush(-1);
|
||||||
|
display();
|
||||||
|
}
|
||||||
|
return next_overlay;
|
||||||
|
};
|
58
hello_ovl_exec/hello_poly/hello_poly.c
Normal file
58
hello_ovl_exec/hello_poly/hello_poly.c
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
DISPENV disp[2]; // Double buffered DISPENV and DRAWENV
|
||||||
|
DRAWENV draw[2];
|
||||||
|
u_long ot[2][OTLEN]; // double ordering table of length 8 * 32 = 256 bits / 32 bytes
|
||||||
|
char primbuff[2][32768]; // double primitive buffer of length 32768 * 8 = 262.144 bits / 32,768 Kbytes
|
||||||
|
char *nextpri = primbuff[0]; // pointer to the next primitive in primbuff. Initially, points to the first bit of primbuff[0]
|
||||||
|
uint8_t db = 0; // index of which buffer is used, values 0, 1
|
||||||
|
CVECTOR BGcolor = { 50, 255, 150 };
|
||||||
|
|
||||||
|
void init(void)
|
||||||
|
{
|
||||||
|
ResetCallback();
|
||||||
|
ResetGraph(3);
|
||||||
|
// Initialize and setup the GTE
|
||||||
|
InitGeom();
|
||||||
|
SetGeomOffset(CENTERX,CENTERY);
|
||||||
|
SetGeomScreen(CENTERX);
|
||||||
|
SetDefDispEnv(&disp[0], 0, 0, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDispEnv(&disp[1], 0, SCREENYRES, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDrawEnv(&draw[0], 0, SCREENYRES, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDrawEnv(&draw[1], 0, 0, SCREENXRES, SCREENYRES);
|
||||||
|
if (VMODE)
|
||||||
|
{
|
||||||
|
SetVideoMode(MODE_PAL);
|
||||||
|
disp[0].screen.y += 8;
|
||||||
|
disp[1].screen.y += 8;
|
||||||
|
}
|
||||||
|
setRGB0(&draw[0], BGcolor.r, BGcolor.g, BGcolor.b); // set color for first draw area
|
||||||
|
setRGB0(&draw[1], BGcolor.r, BGcolor.g, BGcolor.b); // set color for second draw area
|
||||||
|
SetDispMask(1);
|
||||||
|
draw[0].isbg = 1;
|
||||||
|
draw[1].isbg = 1;
|
||||||
|
PutDispEnv(&disp[db]);
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
|
||||||
|
FntLoad(960, 0);
|
||||||
|
FntOpen(MARGINX, SCREENYRES - MARGINY - FONTSIZE, SCREENXRES - MARGINX * 2, FONTSIZE, 0, 280 );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void display(void)
|
||||||
|
{
|
||||||
|
DrawSync(0);
|
||||||
|
VSync(0);
|
||||||
|
PutDispEnv(&disp[db]);
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
DrawOTag(&ot[db][OTLEN - 1]);
|
||||||
|
db = !db;
|
||||||
|
nextpri = primbuff[db];
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "hello_ovl_poly.c"
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
ovl_main_poly();
|
||||||
|
}
|
3
hello_ovl_exec/hello_poly/hello_poly.ld
Normal file
3
hello_ovl_exec/hello_poly/hello_poly.ld
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
TLOAD_ADDR = 0x8001E8480;
|
||||||
|
__heap_base = 0x8001E8480;
|
||||||
|
|
7
hello_ovl_exec/hello_tile/Makefile
Normal file
7
hello_ovl_exec/hello_tile/Makefile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
TARGET = hello_tile
|
||||||
|
|
||||||
|
SRCS = hello_tile.c \
|
||||||
|
|
||||||
|
CPPFLAGS+=-DSTANDALONE
|
||||||
|
|
||||||
|
include ../../common.mk
|
69
hello_ovl_exec/hello_tile/hello_ovl_tile.c
Normal file
69
hello_ovl_exec/hello_tile/hello_ovl_tile.c
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
int ovl_main_tile(void)
|
||||||
|
{
|
||||||
|
setRGB(&BGcolor, 150, 0, 50);
|
||||||
|
init();
|
||||||
|
uint16_t timer = 0;
|
||||||
|
uint16_t timeout = 100;
|
||||||
|
TILE * blue_tile;
|
||||||
|
TILE * pink_tile;
|
||||||
|
// This one is added at a different OT index
|
||||||
|
TILE * yellow_tile;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
// Initialize the reversed ordering table. This means the elements at index OTLEN - 1 is drawn first.
|
||||||
|
ClearOTagR(ot[db], OTLEN);
|
||||||
|
|
||||||
|
// yellow_tile
|
||||||
|
|
||||||
|
yellow_tile = (TILE * ) nextpri; // yellow_tile is a pointer to primbuf content at adress nextpri, that's cast (type converted) to a TILE struc.
|
||||||
|
|
||||||
|
setTile(yellow_tile); // initialize the TILE structure ( fill the length and tag(?) value )
|
||||||
|
setXY0(yellow_tile, CENTERX - 32 , CENTERY - 48); // Set X,Y
|
||||||
|
setWH(yellow_tile, 128, 40); // Set Width, Height
|
||||||
|
setRGB0(yellow_tile, 255, 255, 0); // Set color
|
||||||
|
addPrim(ot[db][OTLEN - 1], yellow_tile); // Add primitive to ordering table
|
||||||
|
|
||||||
|
nextpri += sizeof(TILE);
|
||||||
|
|
||||||
|
// blue_tile
|
||||||
|
|
||||||
|
blue_tile = (TILE * ) nextpri; // blue_tile is a pointer to primbuf content at adress nextpri, that's cast (type converted) to a blue_tile struc.
|
||||||
|
|
||||||
|
setTile(blue_tile); // initialize the blue_tile structure ( fill the length and tag(?) value )
|
||||||
|
setXY0(blue_tile, CENTERX - 16, CENTERY - 32); // Set X,Y
|
||||||
|
setWH(blue_tile, 32, 64); // Set Width, Height
|
||||||
|
setRGB0(blue_tile, 60, 180, 255); // Set color
|
||||||
|
addPrim(ot[db][OTLEN - 2], blue_tile); // Add primitive to ordering table
|
||||||
|
|
||||||
|
nextpri += sizeof(TILE); // Increment the adress nextpri points to by the size of TILE struct
|
||||||
|
|
||||||
|
// pink_tile
|
||||||
|
|
||||||
|
pink_tile = (TILE * ) nextpri; // pink_tile is a pointer to primbuf content at adress nextpri, that's cast (type converted) to a TILE struc.
|
||||||
|
|
||||||
|
setTile(pink_tile); // initialize the TILE structure ( fill the length and tag(?) value )
|
||||||
|
setXY0(pink_tile, CENTERX, CENTERY - 64); // Set X,Y
|
||||||
|
setWH(pink_tile, 64, 64); // Set Width, Height
|
||||||
|
setRGB0(pink_tile, 255, 32, 255); // Set color
|
||||||
|
addPrim(ot[db][OTLEN - 2], pink_tile); // Add primitive to ordering table
|
||||||
|
|
||||||
|
nextpri += sizeof(TILE);
|
||||||
|
|
||||||
|
timer ++;
|
||||||
|
|
||||||
|
FntPrint("Hello tile ! %d\n", timer);
|
||||||
|
#ifndef STANDALONE
|
||||||
|
if (timer == timeout){
|
||||||
|
next_overlay = OVERLAY_POLY;
|
||||||
|
// Empty ordering table
|
||||||
|
//~ EmptyOTag(&ot[db], &primbuff[db], nextpri);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
FntFlush(-1);
|
||||||
|
display();
|
||||||
|
}
|
||||||
|
return next_overlay;
|
||||||
|
};
|
52
hello_ovl_exec/hello_tile/hello_tile.c
Normal file
52
hello_ovl_exec/hello_tile/hello_tile.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
DISPENV disp[2]; // Double buffered DISPENV and DRAWENV
|
||||||
|
DRAWENV draw[2];
|
||||||
|
u_long ot[2][OTLEN]; // double ordering table of length 8 * 32 = 256 bits / 32 bytes
|
||||||
|
char primbuff[2][32768]; // double primitive buffer of length 32768 * 8 = 262.144 bits / 32,768 Kbytes
|
||||||
|
char *nextpri = primbuff[0]; // pointer to the next primitive in primbuff. Initially, points to the first bit of primbuff[0]
|
||||||
|
uint8_t db = 0; // index of which buffer is used, values 0, 1
|
||||||
|
CVECTOR BGcolor = { 50, 255, 150 };
|
||||||
|
|
||||||
|
void init(void)
|
||||||
|
{
|
||||||
|
ResetGraph(0);
|
||||||
|
SetDefDispEnv(&disp[0], 0, 0, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDispEnv(&disp[1], 0, SCREENYRES, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDrawEnv(&draw[0], 0, SCREENYRES, SCREENXRES, SCREENYRES);
|
||||||
|
SetDefDrawEnv(&draw[1], 0, 0, SCREENXRES, SCREENYRES);
|
||||||
|
if (VMODE)
|
||||||
|
{
|
||||||
|
SetVideoMode(MODE_PAL);
|
||||||
|
disp[0].screen.y += 8;
|
||||||
|
disp[1].screen.y += 8;
|
||||||
|
}
|
||||||
|
SetDispMask(1); // Display on screen
|
||||||
|
setRGB0(&draw[0], BGcolor.r, BGcolor.g, BGcolor.b); // set color for first draw area
|
||||||
|
setRGB0(&draw[1], BGcolor.r, BGcolor.g, BGcolor.b); // set color for second draw area
|
||||||
|
draw[0].isbg = 1;
|
||||||
|
draw[1].isbg = 1;
|
||||||
|
PutDispEnv(&disp[db]);
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
FntLoad(960, 0);
|
||||||
|
FntOpen(MARGINX, SCREENYRES - MARGINY - FONTSIZE, SCREENXRES - MARGINX * 2, FONTSIZE, 0, 280 );
|
||||||
|
}
|
||||||
|
void display(void)
|
||||||
|
{
|
||||||
|
DrawSync(0);
|
||||||
|
VSync(0);
|
||||||
|
PutDispEnv(&disp[db]);
|
||||||
|
PutDrawEnv(&draw[db]);
|
||||||
|
// We're using a reverse OT, so we want to display the last item first. See PsyQ's LibRef47.pdf, p.277
|
||||||
|
DrawOTag(&ot[db][OTLEN - 1]);
|
||||||
|
// Comment above line, and uncomment the following line to use a regular oredered OT. Comment l.71 and Uncomment l.73 accordingly
|
||||||
|
db = !db;
|
||||||
|
nextpri = primbuff[db];
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "hello_ovl_tile.c"
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
ovl_main_tile();
|
||||||
|
};
|
102
hello_ovl_exec/isoconfig.xml
Normal file
102
hello_ovl_exec/isoconfig.xml
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!-- MKPSXISO example XML script -->
|
||||||
|
|
||||||
|
<!-- <iso_project>
|
||||||
|
Starts an ISO image project to build. Multiple <iso_project> elements may be
|
||||||
|
specified within the same xml script which useful for multi-disc projects.
|
||||||
|
|
||||||
|
<iso_project> elements must contain at least one <track> element.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
image_name - File name of the ISO image file to generate.
|
||||||
|
cue_sheet - Optional, file name of the cue sheet for the image file
|
||||||
|
(required if more than one track is specified).
|
||||||
|
-->
|
||||||
|
<iso_project image_name="hello_ovl_exec.bin" cue_sheet="hello_ovl_exec.cue">
|
||||||
|
|
||||||
|
<!-- <track>
|
||||||
|
Specifies a track to the ISO project. This example element creates a data
|
||||||
|
track for storing data files and CD-XA/STR streams.
|
||||||
|
|
||||||
|
Only one data track is allowed and data tracks must only be specified as the
|
||||||
|
first track in the ISO image and cannot be specified after an audio track.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
type - Track type (either data or audio).
|
||||||
|
source - For audio tracks only, specifies the file name of a wav audio
|
||||||
|
file to use for the audio track.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<track type="data">
|
||||||
|
|
||||||
|
<!-- <identifiers>
|
||||||
|
Optional, Specifies the identifier strings to use for the data track.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
system - Optional, specifies the system identifier (PLAYSTATION if unspecified).
|
||||||
|
application - Optional, specifies the application identifier (PLAYSTATION if unspecified).
|
||||||
|
volume - Optional, specifies the volume identifier.
|
||||||
|
volume_set - Optional, specifies the volume set identifier.
|
||||||
|
publisher - Optional, specifies the publisher identifier.
|
||||||
|
data_preparer - Optional, specifies the data preparer identifier. If unspecified, MKPSXISO
|
||||||
|
will fill it with lengthy text telling that the image file was generated
|
||||||
|
using MKPSXISO.
|
||||||
|
-->
|
||||||
|
<identifiers
|
||||||
|
system ="PLAYSTATION"
|
||||||
|
application ="PLAYSTATION"
|
||||||
|
volume ="HELOCD"
|
||||||
|
volume_set ="HELOCD"
|
||||||
|
publisher ="SCHNAPPY"
|
||||||
|
data_preparer ="MKPSXISO"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- <license>
|
||||||
|
Optional, specifies the license file to use, the format of the license file must be in
|
||||||
|
raw 2336 byte sector format, like the ones included with the PsyQ SDK in psyq\cdgen\LCNSFILE.
|
||||||
|
|
||||||
|
License data is not included within the MKPSXISO program to avoid possible legal problems
|
||||||
|
in the open source environment... Better be safe than sorry.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
file - Specifies the license file to inject into the ISO image.
|
||||||
|
-->
|
||||||
|
<!--
|
||||||
|
<license file="LICENSEA.DAT"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- <directory_tree>
|
||||||
|
Specifies and contains the directory structure for the data track.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
None.
|
||||||
|
-->
|
||||||
|
<directory_tree>
|
||||||
|
|
||||||
|
<!-- <file>
|
||||||
|
Specifies a file in the directory tree.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
name - File name to use in the directory tree (can be used for renaming).
|
||||||
|
type - Optional, type of file (data for regular files and is the default, xa for
|
||||||
|
XA audio and str for MDEC video).
|
||||||
|
source - File name of the source file.
|
||||||
|
-->
|
||||||
|
<!-- Stores system.txt as system.cnf -->
|
||||||
|
<file name="system.cnf" type="data" source="system.cnf"/>
|
||||||
|
<file name="SCES_313.37" type="data" source="hello_ovl_exec.ps-exe"/>
|
||||||
|
<file name="POLY.OVL" type="data" source="Overlay.ovly0"/>
|
||||||
|
<file name="TILE.OVL" type="data" source="Overlay.ovly1"/>
|
||||||
|
<file name="HELLO.OVL" type="data" source="Overlay.ovly2"/>
|
||||||
|
<dummy sectors="1024"/>
|
||||||
|
|
||||||
|
<!-- <dir>
|
||||||
|
Specifies a directory in the directory tree. <file> and <dir> elements inside the element
|
||||||
|
will be inside the specified directory.
|
||||||
|
-->
|
||||||
|
</directory_tree>
|
||||||
|
|
||||||
|
</track>
|
||||||
|
|
||||||
|
</iso_project>
|
60
hello_ovl_exec/overlay.ld
Normal file
60
hello_ovl_exec/overlay.ld
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
__heap_base = MAX(__ovly0_end, __ovly2_end);
|
||||||
|
|
||||||
|
SECTIONS {
|
||||||
|
OVERLAY __bss_end : NOCROSSREFS SUBALIGN(4)
|
||||||
|
{
|
||||||
|
.ovlyload
|
||||||
|
{
|
||||||
|
load_all_overlays_here = .;
|
||||||
|
}
|
||||||
|
.ovly0
|
||||||
|
{
|
||||||
|
KEEP(hello_poly/*.o(.text))
|
||||||
|
__ovly0_ctor = .;
|
||||||
|
KEEP(hello_poly/*.o(.text.startup._GLOBAL__*))
|
||||||
|
KEEP(hello_poly/*.o(.text.*))
|
||||||
|
KEEP(hello_poly/*.o(.rodata*))
|
||||||
|
KEEP(hello_poly/*.o(.sdata*))
|
||||||
|
KEEP(hello_poly/*.o(.data*))
|
||||||
|
KEEP(hello_poly/*.o(.sbss*))
|
||||||
|
KEEP(hello_poly/*.o(.bss*))
|
||||||
|
KEEP(hello_poly/*.o(.ctors))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
__ovly0_end = .;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ovly1
|
||||||
|
{
|
||||||
|
KEEP(hello_tile/*.o(.text))
|
||||||
|
__ovly1_ctor = .;
|
||||||
|
KEEP(hello_tile/*.o(.text.startup._GLOBAL__*))
|
||||||
|
KEEP(hello_tile/*.o(.text.*))
|
||||||
|
KEEP(hello_tile/*.o(.rodata*))
|
||||||
|
KEEP(hello_tile/*.o(.sdata*))
|
||||||
|
KEEP(hello_tile/*.o(.data*))
|
||||||
|
KEEP(hello_tile/*.o(.sbss*))
|
||||||
|
KEEP(hello_tile/*.o(.bss*))
|
||||||
|
KEEP(hello_tile/*.o(.ctors))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
__ovly1_end = .;
|
||||||
|
}
|
||||||
|
.ovly2
|
||||||
|
{
|
||||||
|
KEEP(hello_ovl_world/*.o(.text))
|
||||||
|
__ovly2_ctor = .;
|
||||||
|
KEEP(hello_ovl_world/*.o(.text.startup._GLOBAL__*))
|
||||||
|
KEEP(hello_ovl_world/*.o(.text.*))
|
||||||
|
KEEP(hello_ovl_world/*.o(.rodata*))
|
||||||
|
KEEP(hello_ovl_world/*.o(.sdata*))
|
||||||
|
KEEP(hello_ovl_world/*.o(.data*))
|
||||||
|
KEEP(hello_ovl_world/*.o(.sbss*))
|
||||||
|
KEEP(hello_ovl_world/*.o(.bss*))
|
||||||
|
KEEP(hello_ovl_world/*.o(.ctors))
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
__ovly2_end = .;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4
hello_ovl_exec/system.cnf
Normal file
4
hello_ovl_exec/system.cnf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
BOOT=cdrom:\SCES_313.37;1
|
||||||
|
TCB=4
|
||||||
|
EVENT=10
|
||||||
|
STACK=801FFFF0
|
Loading…
Reference in New Issue
Block a user