1
0
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:
Steven Hugg 2023-11-05 18:10:35 -06:00
parent fe6a8a6514
commit 99370530f5
5 changed files with 96 additions and 57 deletions

View File

@ -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;
void main(void) { #include <peekpoke.h>
unsigned char color = 0x79; // Stack variable #include "vcslib/bcd.h"
bss_v = 0x88; // Testing BSS variable #include "vcslib/vcslib.h"
for/*ever*/(;;) { #pragma wrapped-call (push, bankselect, bank)
// Vertical Sync signal #pragma code-name (push, "ROM0")
TIA.vsync = 0x02;
TIA.wsync = 0x00;
TIA.wsync = 0x00;
TIA.wsync = 0x00;
TIA.vsync = 0x00;
// Vertical Blank timer setting void init(void) {
RIOT.tim64t = VBLANK_TIM64; // init code here
// 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) {}
}
} }
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) {
// initialization
init();
// main kernel loop
kernel_loop();
}

View File

@ -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
View 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

View File

@ -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 {

View File

@ -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);