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
// 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
//#resource "vcslib/vcs-ca65.inc"
//#resource "vcslib/kernel.inc"
// Testing memory zones
const unsigned char rodata_v[] = "Hello!";
unsigned char data_v = 0x77;
unsigned char bss_v;
//#link "vcslib/vcslib.ca65"
//#link "vcslib/frameloop.c"
//#link "vcslib/mapper_3e.ca65"
void main(void) {
unsigned char color = 0x79; // Stack variable
bss_v = 0x88; // Testing BSS variable
#include <peekpoke.h>
#include "vcslib/bcd.h"
#include "vcslib/vcslib.h"
for/*ever*/(;;) {
// Vertical Sync signal
TIA.vsync = 0x02;
TIA.wsync = 0x00;
TIA.wsync = 0x00;
TIA.wsync = 0x00;
TIA.vsync = 0x00;
#pragma wrapped-call (push, bankselect, bank)
#pragma code-name (push, "ROM0")
// 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) {}
}
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) {
// initialization
init();
// main kernel loop
kernel_loop();
}

View File

@ -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
@ -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
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[] = [
Object.assign({}, LLVM_MOS_TOOL, { version: '0.13.2' }),
Object.assign({}, LLVM_MOS_TOOL, { version: 'latest' }),
];
interface ServerBuildTool {

View File

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