Skip to content

Commit

Permalink
vcs: new skeleton for cc65
Browse files Browse the repository at this point in the history
  • Loading branch information
sehugg committed Nov 6, 2023
1 parent fe6a8a6 commit 9937053
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 61 deletions.
118 changes: 65 additions & 53 deletions presets/vcs/skeleton.cc65
Original file line number Diff line number Diff line change
@@ -1,56 +1,68 @@
/*****************************************************************************/
/* */
/* Atari VCS 2600 sample C program */
/* */
/* Florent Flament (contact@florentflament.com), 2017 */
/* */
/*****************************************************************************/

#include <atari2600.h>

// PAL Timings
// Roughly computed based on Stella Programmer's guide (Steve Wright)
// 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
const unsigned char rodata_v[] = "Hello!";
unsigned char data_v = 0x77;
unsigned char bss_v;

/*
See the "VCSLib Demo" example for more features.
*/

//#resource "vcslib/vcs-ca65.inc"
//#resource "vcslib/kernel.inc"

//#link "vcslib/vcslib.ca65"
//#link "vcslib/frameloop.c"
//#link "vcslib/mapper_3e.ca65"

#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) {
unsigned char color = 0x79; // Stack variable
bss_v = 0x88; // Testing BSS variable

for/*ever*/(;;) {
// Vertical Sync signal
TIA.vsync = 0x02;
TIA.wsync = 0x00;
TIA.wsync = 0x00;
TIA.wsync = 0x00;
TIA.vsync = 0x00;

// Vertical Blank timer setting
RIOT.tim64t = VBLANK_TIM64;

// 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) {}
}

// initialization
init();

// main kernel loop
kernel_loop();
}

19 changes: 13 additions & 6 deletions scripts/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ FROM --platform=linux/amd64 debian:11-slim
# Set the working directory
WORKDIR /app

# Set the 8BITWS_SERVER_ROOT environment variable
ENV 8BITWS_SERVER_ROOT /app
# Set the _8BITWS_SERVER_ROOT environment variable
ENV _8BITWS_SERVER_ROOT /app

# Change to app dir
RUN cd /app
Expand All @@ -27,17 +27,24 @@ RUN apt-get install -y nodejs
# 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

# 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
RUN apt-get autoremove -y \
&& apt-get clean -y \
&& apt-get autoclean -y
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 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
CMD ["node", "server.js"]
CMD ["sh", "-a", "run.sh"]
20 changes: 20 additions & 0 deletions scripts/docker/run.sh
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion src/worker/server/buildenv.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export function findBestTool(step: BuildStep) {
}

export const TOOLS: ServerBuildTool[] = [
Object.assign({}, LLVM_MOS_TOOL, { version: '0.13.2' }),
Object.assign({}, LLVM_MOS_TOOL, { version: 'latest' }),
];

interface ServerBuildTool {
Expand Down
2 changes: 1 addition & 1 deletion src/worker/server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ const port = 3009;
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');
if (!fs.existsSync(SESSION_ROOT)) {
fs.mkdirSync(SESSION_ROOT);
Expand Down

0 comments on commit 9937053

Please sign in to comment.