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
|
||||
// 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();
|
||||
}
|
||||
|
||||
|
@ -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
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[] = [
|
||||
Object.assign({}, LLVM_MOS_TOOL, { version: '0.13.2' }),
|
||||
Object.assign({}, LLVM_MOS_TOOL, { version: 'latest' }),
|
||||
];
|
||||
|
||||
interface ServerBuildTool {
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user