mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-12-21 21:29:17 +00:00
vcs: new skeleton for cc65
This commit is contained in:
parent
fe6a8a6514
commit
99370530f5
@ -1,56 +1,68 @@
|
|||||||
/*****************************************************************************/
|
|
||||||
/* */
|
|
||||||
/* Atari VCS 2600 sample C program */
|
|
||||||
/* */
|
|
||||||
/* Florent Flament (contact@florentflament.com), 2017 */
|
|
||||||
/* */
|
|
||||||
/*****************************************************************************/
|
|
||||||
|
|
||||||
#include <atari2600.h>
|
/*
|
||||||
|
See the "VCSLib Demo" example for more features.
|
||||||
|
*/
|
||||||
|
|
||||||
// PAL Timings
|
//#resource "vcslib/vcs-ca65.inc"
|
||||||
// Roughly computed based on Stella Programmer's guide (Steve Wright)
|
//#resource "vcslib/kernel.inc"
|
||||||
// scanlines count per section.
|
|
||||||
#define VBLANK_TIM64 51 // 45 lines * 76 cycles/line / 64 cycles/tick
|
|
||||||
#define KERNAL_T1024 17 // 228 lines * 76 cycles/line / 1024 cycles/tick
|
|
||||||
#define OVERSCAN_TIM64 42 // 36 lines * 76 cycles/line / 64 cycles/tick
|
|
||||||
|
|
||||||
// Testing memory zones
|
//#link "vcslib/vcslib.ca65"
|
||||||
const unsigned char rodata_v[] = "Hello!";
|
//#link "vcslib/frameloop.c"
|
||||||
unsigned char data_v = 0x77;
|
//#link "vcslib/mapper_3e.ca65"
|
||||||
unsigned char bss_v;
|
|
||||||
|
|
||||||
|
#include <peekpoke.h>
|
||||||
|
#include "vcslib/bcd.h"
|
||||||
|
#include "vcslib/vcslib.h"
|
||||||
|
|
||||||
|
#pragma wrapped-call (push, bankselect, bank)
|
||||||
|
#pragma code-name (push, "ROM0")
|
||||||
|
|
||||||
|
void init(void) {
|
||||||
|
// init code here
|
||||||
|
}
|
||||||
|
|
||||||
|
void my_preframe(void) {
|
||||||
|
// stuff that happens before the frame is drawn
|
||||||
|
TIA.colubk = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
void my_kernel(void) {
|
||||||
|
byte i;
|
||||||
|
for (i=0; i<190; i++) {
|
||||||
|
do_wsync();
|
||||||
|
TIA.colubk = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void my_postframe(void) {
|
||||||
|
// stuff that happens after the frame is drawn
|
||||||
|
}
|
||||||
|
|
||||||
|
void kernel_loop() {
|
||||||
|
while (1) {
|
||||||
|
kernel_1();
|
||||||
|
my_preframe();
|
||||||
|
kernel_2();
|
||||||
|
my_kernel();
|
||||||
|
kernel_3();
|
||||||
|
my_postframe();
|
||||||
|
kernel_4();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma code-name (pop)
|
||||||
|
#pragma wrapped-call (pop)
|
||||||
|
|
||||||
|
/*
|
||||||
|
The main() function is called at startup.
|
||||||
|
It resides in the shared ROM area (PERM).
|
||||||
|
*/
|
||||||
void main(void) {
|
void main(void) {
|
||||||
unsigned char color = 0x79; // Stack variable
|
|
||||||
bss_v = 0x88; // Testing BSS variable
|
|
||||||
|
|
||||||
for/*ever*/(;;) {
|
// initialization
|
||||||
// Vertical Sync signal
|
init();
|
||||||
TIA.vsync = 0x02;
|
|
||||||
TIA.wsync = 0x00;
|
|
||||||
TIA.wsync = 0x00;
|
|
||||||
TIA.wsync = 0x00;
|
|
||||||
TIA.vsync = 0x00;
|
|
||||||
|
|
||||||
// Vertical Blank timer setting
|
// main kernel loop
|
||||||
RIOT.tim64t = VBLANK_TIM64;
|
kernel_loop();
|
||||||
|
|
||||||
// Doing frame computation during blank
|
|
||||||
TIA.colubk = color++; // Update color
|
|
||||||
|
|
||||||
// Wait for end of Vertical Blank
|
|
||||||
while (RIOT.timint == 0) {}
|
|
||||||
TIA.wsync = 0x00;
|
|
||||||
TIA.vblank = 0x00; // Turn on beam
|
|
||||||
|
|
||||||
// Display frame
|
|
||||||
RIOT.t1024t = KERNAL_T1024;
|
|
||||||
while (RIOT.timint == 0) {}
|
|
||||||
TIA.wsync = 0x00;
|
|
||||||
TIA.vblank = 0x02; // Turn off beam
|
|
||||||
|
|
||||||
// Overscan
|
|
||||||
RIOT.tim64t = OVERSCAN_TIM64;
|
|
||||||
while (RIOT.timint == 0) {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@ FROM --platform=linux/amd64 debian:11-slim
|
|||||||
# Set the working directory
|
# Set the working directory
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Set the 8BITWS_SERVER_ROOT environment variable
|
# Set the _8BITWS_SERVER_ROOT environment variable
|
||||||
ENV 8BITWS_SERVER_ROOT /app
|
ENV _8BITWS_SERVER_ROOT /app
|
||||||
|
|
||||||
# Change to app dir
|
# Change to app dir
|
||||||
RUN cd /app
|
RUN cd /app
|
||||||
@ -27,17 +27,24 @@ RUN apt-get install -y nodejs
|
|||||||
# Fetch the LLVM-Mos tarball and extract it
|
# Fetch the LLVM-Mos tarball and extract it
|
||||||
RUN curl -L https://github.com/llvm-mos/llvm-mos-sdk/releases/latest/download/llvm-mos-linux.tar.xz | xz -d | tar x -C /app
|
RUN curl -L https://github.com/llvm-mos/llvm-mos-sdk/releases/latest/download/llvm-mos-linux.tar.xz | xz -d | tar x -C /app
|
||||||
|
|
||||||
|
# Fetch the SDCC tarball
|
||||||
|
#RUN apt-get install -y bzip2
|
||||||
|
#RUN curl -L https://cytranet.dl.sourceforge.net/project/sdcc/sdcc-linux-amd64/4.3.0/sdcc-4.3.0-amd64-unknown-linux2.5.tar.bz2 | tar xj -C /app
|
||||||
|
|
||||||
# Clean up after APT
|
# Clean up after APT
|
||||||
RUN apt-get autoremove -y \
|
RUN apt-get autoremove -y \
|
||||||
&& apt-get clean -y \
|
&& apt-get clean -y \
|
||||||
&& apt-get autoclean -y
|
&& apt-get autoclean -y
|
||||||
RUN rm -rf /var/lib/apt/lists/*
|
RUN rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Fetch the Node.js Express server.js file from a GitHub URL
|
|
||||||
RUN curl -O https://sehugg.github.io/8bitworkshop/gen/server/server.js
|
|
||||||
|
|
||||||
# Expose the port your server will listen on
|
# Expose the port your server will listen on
|
||||||
EXPOSE 3009
|
EXPOSE 3009
|
||||||
|
|
||||||
|
# Fetch the Node.js Express server.js file at runtime
|
||||||
|
RUN curl -O https://sehugg.github.io/8bitworkshop/gen/server/server.js
|
||||||
|
|
||||||
|
# Copy the run script
|
||||||
|
COPY run.sh /app/run.sh
|
||||||
|
|
||||||
# Start the Node.js Express server
|
# Start the Node.js Express server
|
||||||
CMD ["node", "server.js"]
|
CMD ["sh", "-a", "run.sh"]
|
||||||
|
20
scripts/docker/run.sh
Normal file
20
scripts/docker/run.sh
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
export _8BITWS_SERVER_ROOT=/app
|
||||||
|
|
||||||
|
cd "$_8BITWS_SERVER_ROOT"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
curl -O https://sehugg.github.io/8bitworkshop/gen/server/server.js
|
||||||
|
|
||||||
|
node server.js
|
||||||
|
|
||||||
|
# Check if the server crashed (exited with a non-zero status)
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Server crashed. Restarting in 10 seconds..."
|
||||||
|
sleep 10
|
||||||
|
else
|
||||||
|
# If the server exited normally (e.g., due to manual termination), exit the loop
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
@ -56,7 +56,7 @@ export function findBestTool(step: BuildStep) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const TOOLS: ServerBuildTool[] = [
|
export const TOOLS: ServerBuildTool[] = [
|
||||||
Object.assign({}, LLVM_MOS_TOOL, { version: '0.13.2' }),
|
Object.assign({}, LLVM_MOS_TOOL, { version: 'latest' }),
|
||||||
];
|
];
|
||||||
|
|
||||||
interface ServerBuildTool {
|
interface ServerBuildTool {
|
||||||
|
@ -70,7 +70,7 @@ const port = 3009;
|
|||||||
origin: [`http://localhost:${port}`, 'http://localhost:8000']
|
origin: [`http://localhost:${port}`, 'http://localhost:8000']
|
||||||
}));*/
|
}));*/
|
||||||
|
|
||||||
const SERVER_ROOT = process.env['8BITWS_SERVER_ROOT'] || path.resolve('./server-root');
|
const SERVER_ROOT = process.env['_8BITWS_SERVER_ROOT'] || path.resolve('./server-root');
|
||||||
const SESSION_ROOT = path.join(SERVER_ROOT, 'sessions');
|
const SESSION_ROOT = path.join(SERVER_ROOT, 'sessions');
|
||||||
if (!fs.existsSync(SESSION_ROOT)) {
|
if (!fs.existsSync(SESSION_ROOT)) {
|
||||||
fs.mkdirSync(SESSION_ROOT);
|
fs.mkdirSync(SESSION_ROOT);
|
||||||
|
Loading…
Reference in New Issue
Block a user