mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-27 17:50:37 +00:00
astrocade: use aclib.s not aclib.c, rainbow, rotate; use AstroLibre
This commit is contained in:
parent
baa9ed7482
commit
cdc04a9cd5
3
Makefile
3
Makefile
@ -29,3 +29,6 @@ tsweb:
|
|||||||
ifconfig | grep inet
|
ifconfig | grep inet
|
||||||
$(TSC) -w &
|
$(TSC) -w &
|
||||||
python3 scripts/serveit.py 2>> http.out
|
python3 scripts/serveit.py 2>> http.out
|
||||||
|
|
||||||
|
astrolibre.b64.txt: astrolibre.rom
|
||||||
|
lzg -9 $< | base64 -w 0 > $@
|
||||||
|
@ -149,7 +149,7 @@ void DECCTS(ContextBlock *ctx) {
|
|||||||
// INTERPRETER
|
// INTERPRETER
|
||||||
|
|
||||||
void INTPC(ContextBlock *ctx) {
|
void INTPC(ContextBlock *ctx) {
|
||||||
while (ctx->params[0] != 2) { // 2 = exit
|
while (ctx->params[0] > 2) { // 0,2 = exit
|
||||||
SYSCALL(ctx);
|
SYSCALL(ctx);
|
||||||
}
|
}
|
||||||
ctx->params++; // skip EXIT opcode
|
ctx->params++; // skip EXIT opcode
|
||||||
@ -303,6 +303,25 @@ void RANGED(ContextBlock *ctx) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void INDEXB(ContextBlock *ctx) {
|
||||||
|
word addr = _HL + _A;
|
||||||
|
_HL = addr;
|
||||||
|
_A = *((byte*)addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void INDEXW(ContextBlock *ctx) {
|
||||||
|
word addr = _HL + _A*2;
|
||||||
|
_HL = addr;
|
||||||
|
_DE = *((word*)addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void INDEXN(ContextBlock *ctx) {
|
||||||
|
byte ofs = _C;
|
||||||
|
word addr = _HL + ofs/2;
|
||||||
|
byte val = *((byte*)addr);
|
||||||
|
_A = (ofs & 1) ? (val>>4) : (val&0xf);
|
||||||
|
}
|
||||||
|
|
||||||
// input
|
// input
|
||||||
|
|
||||||
extern const byte KCTASC_TABLE[25];
|
extern const byte KCTASC_TABLE[25];
|
||||||
@ -394,11 +413,11 @@ const SysCallEntry SYSCALL_TABLE[64] = {
|
|||||||
{ &PAWS, REG_B },
|
{ &PAWS, REG_B },
|
||||||
{ &NOOP, REG_E|REG_D|REG_C }, // DISTIM
|
{ &NOOP, REG_E|REG_D|REG_C }, // DISTIM
|
||||||
{ &NOOP, REG_HL }, // INCSCR
|
{ &NOOP, REG_HL }, // INCSCR
|
||||||
{ &NOOP, REG_C|REG_HL }, // INDEXN
|
{ &INDEXN, REG_C|REG_HL }, // INDEXN
|
||||||
{ &NOOP, REG_HL }, // STOREN
|
{ &NOOP, REG_HL }, // STOREN
|
||||||
/* 90 */
|
/* 90 */
|
||||||
{ &NOOP, REG_A|REG_HL }, // INDEXW
|
{ &INDEXW, REG_A|REG_HL }, // INDEXW
|
||||||
{ &NOOP, REG_A|REG_HL }, // INDEXB
|
{ &INDEXB, REG_A|REG_HL }, // INDEXB
|
||||||
{ &MOVE, REG_DE|REG_BC|REG_HL },
|
{ &MOVE, REG_DE|REG_BC|REG_HL },
|
||||||
{ &NOOP, 0 }, // SHIFTU
|
{ &NOOP, 0 }, // SHIFTU
|
||||||
{ &BCDADD, REG_DE|REG_B|REG_HL },
|
{ &BCDADD, REG_DE|REG_B|REG_HL },
|
||||||
|
@ -6,17 +6,24 @@
|
|||||||
#define LOCHAR 0x20
|
#define LOCHAR 0x20
|
||||||
#define HICHAR 0x63
|
#define HICHAR 0x63
|
||||||
|
|
||||||
|
const byte LMASK[4] = {0xff, 0x3f, 0x0f, 0x03};
|
||||||
|
|
||||||
static void hline(byte x1, byte x2, byte y, byte pattern) {
|
static void hline(byte x1, byte x2, byte y, byte pattern) {
|
||||||
byte xb1 = x1/4;
|
byte xb1 = x1/4;
|
||||||
byte xb2 = x2/4;
|
byte xb2 = x2/4;
|
||||||
byte* dest = &vmagic[y][xb1];
|
byte* dest = &vidmem[y][xb1];
|
||||||
signed char nbytes = xb2 - xb1;
|
byte mask = LMASK[x1&3];
|
||||||
hw_magic = M_SHIFT(x1) | M_XOR;
|
if (xb1 == xb2) {
|
||||||
while (--nbytes > 0) {
|
mask &= ~LMASK[x2&3];
|
||||||
*dest++ = pattern;
|
}
|
||||||
|
*dest = *dest & ~mask | (mask & pattern);
|
||||||
|
if (xb1 != xb2) {
|
||||||
|
dest++;
|
||||||
|
while (++xb1 < xb2) {
|
||||||
|
*dest++ = pattern;
|
||||||
|
}
|
||||||
|
*dest = *dest & LMASK[x2&3] | (~LMASK[x2&3] & pattern);
|
||||||
}
|
}
|
||||||
if (x2&3) *dest = 0;
|
|
||||||
// TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fill rect (E,D,C,B) color A
|
// Fill rect (E,D,C,B) color A
|
||||||
@ -181,11 +188,11 @@ void DISNUM(ContextBlock *ctx) {
|
|||||||
|
|
||||||
// write pattern (E,D,C,B) magic A @ HL
|
// write pattern (E,D,C,B) magic A @ HL
|
||||||
void WRIT(ContextBlock *ctx) {
|
void WRIT(ContextBlock *ctx) {
|
||||||
byte magic = _A;
|
|
||||||
byte w = _C;
|
byte w = _C;
|
||||||
byte h = _B;
|
byte h = _B;
|
||||||
byte x = _E;
|
byte x = _E;
|
||||||
byte y = _D;
|
byte y = _D;
|
||||||
|
byte magic = _A | (x & 3); // add X shift
|
||||||
byte* src = (byte*) _HL;
|
byte* src = (byte*) _HL;
|
||||||
byte* dest = &vmagic[y][0]; // destination address
|
byte* dest = &vmagic[y][0]; // destination address
|
||||||
byte xb = (magic & M_FLOP) ? (39-(x>>2)) : (x>>2);
|
byte xb = (magic & M_FLOP) ? (39-(x>>2)) : (x>>2);
|
||||||
|
@ -58,7 +58,13 @@ _main:
|
|||||||
.db 72
|
.db 72
|
||||||
.db 100
|
.db 100
|
||||||
.db 4
|
.db 4
|
||||||
.db 0xa5
|
.db 0xaa
|
||||||
|
DO RECTAN
|
||||||
|
.db 6
|
||||||
|
.db 74
|
||||||
|
.db 100
|
||||||
|
.db 4
|
||||||
|
.db 0x55
|
||||||
DO WRITR
|
DO WRITR
|
||||||
.db 50
|
.db 50
|
||||||
.db 80
|
.db 80
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
|
|
||||||
|
; FAST SPRITE ROUTINES FOR ASTROCADE
|
||||||
|
; fast_sprite_8: 8 (2 bytes) by H pixels, unexpanded
|
||||||
|
; fast_sprite_16: 16 (4 bytes) by H pixels, unexpanded
|
||||||
|
; Pattern format: bytewidth height data...
|
||||||
.area _CODE_ACFAST
|
.area _CODE_ACFAST
|
||||||
|
|
||||||
;void fast_sprite_8(const byte* src, byte* dst) {
|
;void fast_sprite_8(const byte* src, byte* dst) {
|
||||||
@ -7,7 +10,7 @@
|
|||||||
_fast_sprite_8:
|
_fast_sprite_8:
|
||||||
push ix
|
push ix
|
||||||
ld ix,#0
|
ld ix,#0
|
||||||
add ix,sp
|
add ix,sp ; IX = arg pointer
|
||||||
ld l,4(ix) ; src (HL)
|
ld l,4(ix) ; src (HL)
|
||||||
ld h,5(ix)
|
ld h,5(ix)
|
||||||
ld e,6(ix) ; dst (DE)
|
ld e,6(ix) ; dst (DE)
|
||||||
@ -16,7 +19,7 @@ _fast_sprite_8:
|
|||||||
ld c,(hl) ; load height -> C
|
ld c,(hl) ; load height -> C
|
||||||
sla c ; C *= 2
|
sla c ; C *= 2
|
||||||
ld b,#0 ; B always 0 (BC < 256)
|
ld b,#0 ; B always 0 (BC < 256)
|
||||||
inc hl ; move to pattern bytes
|
inc hl ; move HL to pattern start
|
||||||
001$:
|
001$:
|
||||||
ldi
|
ldi
|
||||||
ldi ; copy 2 bytes src to dst
|
ldi ; copy 2 bytes src to dst
|
||||||
@ -32,3 +35,37 @@ _fast_sprite_8:
|
|||||||
002$:
|
002$:
|
||||||
pop ix
|
pop ix
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;void fast_sprite_16(const byte* src, byte* dst) {
|
||||||
|
.globl _fast_sprite_16
|
||||||
|
_fast_sprite_16:
|
||||||
|
push ix
|
||||||
|
ld ix,#0
|
||||||
|
add ix,sp ; IX = arg pointer
|
||||||
|
ld l,4(ix) ; src (HL)
|
||||||
|
ld h,5(ix)
|
||||||
|
ld e,6(ix) ; dst (DE)
|
||||||
|
ld d,7(ix)
|
||||||
|
inc hl ; skip width
|
||||||
|
ld c,(hl) ; load height -> C
|
||||||
|
sla c
|
||||||
|
sla c ; C *= 4
|
||||||
|
ld b,#0 ; B always 0 (BC < 256)
|
||||||
|
inc hl ; move HL to pattern start
|
||||||
|
001$:
|
||||||
|
ldi
|
||||||
|
ldi
|
||||||
|
ldi
|
||||||
|
ldi ; copy 4 bytes src to dst
|
||||||
|
ld a,b ; 0 -> A, doesnt affect flags
|
||||||
|
ld (de),a ; copy 3rd 0 (for shifts)
|
||||||
|
jp po,002$ ; exit if BC == 0
|
||||||
|
ld a,e ; E -> A
|
||||||
|
add a,#36 ; next scanline (dest += 38)
|
||||||
|
ld e,a ; A -> E
|
||||||
|
jr nc,001$ ; loop unless lo byte overflow
|
||||||
|
inc d ; inc hi byte of dest. addr
|
||||||
|
jr 001$ ; loop to next line
|
||||||
|
002$:
|
||||||
|
pop ix
|
||||||
|
ret
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include "aclib.h"
|
|
||||||
|
|
||||||
#pragma opt_code_speed
|
|
||||||
|
|
||||||
// set entire palette at once (8 bytes to port 0xb)
|
|
||||||
// bytes in array should be in reverse
|
|
||||||
void set_palette(byte palette[8]) __z88dk_fastcall {
|
|
||||||
palette;
|
|
||||||
__asm
|
|
||||||
ld bc,#0x80b ; B -> 8, C -> 0xb
|
|
||||||
otir ; write C bytes from HL to port[B]
|
|
||||||
__endasm;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set entire sound registers at once (8 bytes to port 0x18)
|
|
||||||
// bytes in array should be in reverse
|
|
||||||
void set_sound_registers(byte regs[8]) __z88dk_fastcall {
|
|
||||||
regs;
|
|
||||||
__asm
|
|
||||||
ld bc,#0x818 ; B -> 8, C -> 0x18
|
|
||||||
otir ; write C bytes from HL to port[B]
|
|
||||||
__endasm;
|
|
||||||
}
|
|
||||||
|
|
@ -78,4 +78,10 @@ byte __at (0x4000) vidmem[VTOTAL][VBWIDTH];
|
|||||||
void set_palette(byte palette[8]) __z88dk_fastcall; // palette in reverse order
|
void set_palette(byte palette[8]) __z88dk_fastcall; // palette in reverse order
|
||||||
void set_sound_registers(byte regs[8]) __z88dk_fastcall; // in reverse too
|
void set_sound_registers(byte regs[8]) __z88dk_fastcall; // in reverse too
|
||||||
|
|
||||||
|
// INTERRUPTS
|
||||||
|
|
||||||
|
typedef void (*t_interrupt_handler)(void) __interrupt;
|
||||||
|
|
||||||
|
void set_interrupt_vector(t_interrupt_handler*ih) __z88dk_fastcall;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
37
presets/astrocade/aclib.s
Normal file
37
presets/astrocade/aclib.s
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
.include "astrocade.inc"
|
||||||
|
|
||||||
|
;;; C functions
|
||||||
|
|
||||||
|
.area _CODE_ACLIB
|
||||||
|
|
||||||
|
; set entire palette at once (8 bytes to port 0xb)
|
||||||
|
; bytes in array should be in reverse
|
||||||
|
;void set_palette(byte palette[8]) __z88dk_fastcall {
|
||||||
|
.globl _set_palette
|
||||||
|
_set_palette:
|
||||||
|
ld bc,#0x80b ; B -> 8, C -> 0xb
|
||||||
|
otir ; write C bytes from HL to port[B]
|
||||||
|
ret
|
||||||
|
|
||||||
|
; set entire sound registers at once (8 bytes to port 0x18)
|
||||||
|
; bytes in array should be in reverse
|
||||||
|
;void set_sound_registers(byte regs[8]) __z88dk_fastcall {
|
||||||
|
.globl _set_sound_registers
|
||||||
|
_set_sound_registers:
|
||||||
|
ld bc,#0x818 ; B -> 8, C -> 0x18
|
||||||
|
otir ; write C bytes from HL to port[B]
|
||||||
|
ret
|
||||||
|
|
||||||
|
; set interrupt vector
|
||||||
|
; pass address of 16-bit pointer to routine
|
||||||
|
.globl _set_interrupt_vector
|
||||||
|
_set_interrupt_vector:
|
||||||
|
di
|
||||||
|
ld a,l
|
||||||
|
out (INFBK),a
|
||||||
|
ld a,h ; upper 8 bits of address
|
||||||
|
ld i,a ; -> I
|
||||||
|
im 2 ; mode 2
|
||||||
|
ei ; enable interrupts
|
||||||
|
ret
|
@ -11,7 +11,7 @@
|
|||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
//#link "acbios.s"
|
//#link "acbios.s"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
#include "acextra.h"
|
#include "acextra.h"
|
||||||
//#link "acextra.c"
|
//#link "acextra.c"
|
||||||
//#link "hdr_autostart.s"
|
//#link "hdr_autostart.s"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
//#resource "astrocade.inc"
|
//#resource "astrocade.inc"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
//#link "acbios.s"
|
//#link "acbios.s"
|
||||||
//#link "acfast.s"
|
//#link "acfast.s"
|
||||||
@ -26,6 +26,7 @@ const byte SPRITE[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern void fast_sprite_8(const byte* pattern, byte* dst);
|
extern void fast_sprite_8(const byte* pattern, byte* dst);
|
||||||
|
extern void fast_sprite_16(const byte* pattern, byte* dst);
|
||||||
|
|
||||||
#define MAX_SPRITES 8
|
#define MAX_SPRITES 8
|
||||||
|
|
||||||
@ -69,7 +70,7 @@ void main(void) {
|
|||||||
// fill array
|
// fill array
|
||||||
for (i=0; i<MAX_SPRITES; i++) {
|
for (i=0; i<MAX_SPRITES; i++) {
|
||||||
actors[i].x = rand() & 0x7f;
|
actors[i].x = rand() & 0x7f;
|
||||||
actors[i].y = (i*4);
|
actors[i].y = (i*8) & 0x3f;
|
||||||
actors[i].pattern = SPRITE;
|
actors[i].pattern = SPRITE;
|
||||||
draw_actor(&actors[i]);
|
draw_actor(&actors[i]);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
//#resource "astrocade.inc"
|
//#resource "astrocade.inc"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
//#link "hdr_autostart.s"
|
//#link "hdr_autostart.s"
|
||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
//#link "acbios.s"
|
//#link "acbios.s"
|
||||||
@ -28,11 +28,22 @@ const byte BALL[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// BCD number
|
// BCD number
|
||||||
byte bcdnum[3] = {0x56,0x34,0x12};
|
byte bcdnum[3] = {0x96,0x99,0x09};
|
||||||
const byte bcdinc[3] = {0x01,0x00,0x00};
|
const byte bcdinc[3] = {0x01,0x00,0x00};
|
||||||
|
|
||||||
void _clear() {
|
byte music_stack[16];
|
||||||
}
|
const byte MUSICDATA[] = {
|
||||||
|
0x80,
|
||||||
|
0x20,0xB0,0xCC,0x0F,0x0C,0x7E,0x00,0x00,
|
||||||
|
0x0C,0x7E,0x00,0x00,0x24,0x5E,0x7E,0x96,
|
||||||
|
0x0C,0x54,0x64,0x7E,0x0E,0x4A,0x5E,0x7E,
|
||||||
|
0x10,0x46,0x54,0x7E,0x48,0x3E,0x4A,0x5E,
|
||||||
|
0x0E,0x5E,0x8D,0x70,0x10,0x54,0x8D,0x70,
|
||||||
|
0x36,0x4A,0x5E,0x70,0x12,0x46,0x54,0x7E,
|
||||||
|
0x24,0x54,0x64,0x7E,0x48,0x5E,0x96,0x7E,
|
||||||
|
0xE0,0x80,0x18,0x90,0xFD,0xB0,0xFF,0x1F,
|
||||||
|
0xF0,
|
||||||
|
};
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
// setup palette
|
// setup palette
|
||||||
@ -70,6 +81,8 @@ void main(void) {
|
|||||||
activate_interrupts();
|
activate_interrupts();
|
||||||
// make sure screen doesn't black out
|
// make sure screen doesn't black out
|
||||||
RESET_TIMEOUT();
|
RESET_TIMEOUT();
|
||||||
|
// play music
|
||||||
|
//begin_music(music_stack, 0b11111100, MUSICDATA);
|
||||||
while (1) {
|
while (1) {
|
||||||
// wait for SENTRY result
|
// wait for SENTRY result
|
||||||
word code;
|
word code;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
|
//#resource "astrocade.inc"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
#include "acextra.h"
|
#include "acextra.h"
|
||||||
//#link "acextra.c"
|
//#link "acextra.c"
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
//#resource "astrocade.inc"
|
//#resource "astrocade.inc"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
//#link "hdr_autostart.s"
|
//#link "hdr_autostart.s"
|
||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
//#link "acbios.s"
|
//#link "acbios.s"
|
||||||
@ -87,7 +87,6 @@ void init_sound() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
clrscr();
|
|
||||||
init_sound();
|
init_sound();
|
||||||
activate_interrupts();
|
activate_interrupts();
|
||||||
while (1) {
|
while (1) {
|
||||||
|
50
presets/astrocade/rainbow.c
Normal file
50
presets/astrocade/rainbow.c
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
//#resource "astrocade.inc"
|
||||||
|
#include "aclib.h"
|
||||||
|
//#link "aclib.s"
|
||||||
|
#include "acbios.h"
|
||||||
|
//#link "acbios.s"
|
||||||
|
//#link "hdr_autostart.s"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#pragma opt_code_speed
|
||||||
|
|
||||||
|
// we have a special interrupt handler that sets
|
||||||
|
// palette colors every 4 lines
|
||||||
|
byte linenum = 0;
|
||||||
|
|
||||||
|
void inthandler(void) __interrupt {
|
||||||
|
byte i = linenum;
|
||||||
|
hw_col0l = i;
|
||||||
|
hw_col1l = i+1;
|
||||||
|
hw_col2l = i+2;
|
||||||
|
hw_col3l = i+3;
|
||||||
|
i += 4;
|
||||||
|
if (i > 200) i = 0;
|
||||||
|
hw_inlin = i;
|
||||||
|
linenum = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// pointer to the interrupt handler
|
||||||
|
const t_interrupt_handler const intvector = &inthandler;
|
||||||
|
|
||||||
|
// patterns to fill each 4-line scanline group
|
||||||
|
const byte FILLPATS[4] = { 0x00, 0x55, 0xaa, 0xff };
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
// fill screen with colors 0-3 every 4 scanlines
|
||||||
|
for (byte i=0; i<89; i++) {
|
||||||
|
memset(&vidmem[i], FILLPATS[i&3], 40);
|
||||||
|
}
|
||||||
|
// set our custom interrupt vector
|
||||||
|
set_interrupt_vector(&intvector);
|
||||||
|
// set screen height
|
||||||
|
// set horizontal color split (position / 4)
|
||||||
|
// set interrupt status (on)
|
||||||
|
SYS_SETOUT(89*2, 20, 0x8);
|
||||||
|
// infinite loop
|
||||||
|
// let the interrupt handler do the work
|
||||||
|
while (1) ;
|
||||||
|
}
|
70
presets/astrocade/rotate.c
Normal file
70
presets/astrocade/rotate.c
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
|
||||||
|
//#resource "astrocade.inc"
|
||||||
|
#include "aclib.h"
|
||||||
|
//#link "aclib.s"
|
||||||
|
//#link "hdr_autostart.s"
|
||||||
|
#include "acbios.h"
|
||||||
|
//#link "acbios.s"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
/*{pal:"astrocade",layout:"astrocade"}*/
|
||||||
|
const byte palette[8] = {
|
||||||
|
0x77, 0xD4, 0x35, 0x01,
|
||||||
|
0x07, 0xD4, 0x35, 0x01,
|
||||||
|
};
|
||||||
|
|
||||||
|
const byte BALL[] = {
|
||||||
|
0, 0, // x and y offset
|
||||||
|
1, 4, // width (bytes) and height (lines)
|
||||||
|
/*{w:4,h:4,bpp:2,brev:1}*/
|
||||||
|
0xA0,
|
||||||
|
0xD0,
|
||||||
|
0xC4,
|
||||||
|
0xC1
|
||||||
|
};
|
||||||
|
|
||||||
|
void draw_pattern(byte x) {
|
||||||
|
vmagic[0][x] = BALL[4];
|
||||||
|
vmagic[1][x] = BALL[5];
|
||||||
|
vmagic[2][x] = BALL[6];
|
||||||
|
vmagic[3][x] = BALL[7];
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_pattern_inv(byte x) {
|
||||||
|
vmagic[3][x] = BALL[4];
|
||||||
|
vmagic[2][x] = BALL[5];
|
||||||
|
vmagic[1][x] = BALL[6];
|
||||||
|
vmagic[0][x] = BALL[7];
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
// setup palette
|
||||||
|
set_palette(palette);
|
||||||
|
// set screen height
|
||||||
|
// set horizontal color split (position / 4)
|
||||||
|
// set interrupt status
|
||||||
|
SYS_SETOUT(89*2, 23, 0);
|
||||||
|
// clear screen
|
||||||
|
SYS_FILL(0x4000, 89*40, 0);
|
||||||
|
// draw pattern
|
||||||
|
hw_magic = M_ROTATE;
|
||||||
|
draw_pattern(0);
|
||||||
|
draw_pattern(2);
|
||||||
|
// draw pattern flopped
|
||||||
|
hw_magic = M_ROTATE|M_FLOP;
|
||||||
|
draw_pattern(4);
|
||||||
|
draw_pattern(6);
|
||||||
|
// draw pattern
|
||||||
|
hw_magic = M_ROTATE;
|
||||||
|
draw_pattern_inv(8);
|
||||||
|
draw_pattern_inv(10);
|
||||||
|
// draw pattern flopped
|
||||||
|
hw_magic = M_ROTATE|M_FLOP;
|
||||||
|
draw_pattern_inv(12);
|
||||||
|
draw_pattern_inv(14);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
//#resource "astrocade.inc"
|
//#resource "astrocade.inc"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
//#link "acbios.s"
|
//#link "acbios.s"
|
||||||
//#link "hdr_autostart.s"
|
//#link "hdr_autostart.s"
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
//#resource "astrocade.inc"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
//#link "acbios.c"
|
//#link "acbios.c"
|
||||||
#include "acextra.h"
|
#include "acextra.h"
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
//#resource "astrocade.inc"
|
//#resource "astrocade.inc"
|
||||||
#include "aclib.h"
|
#include "aclib.h"
|
||||||
//#link "aclib.c"
|
//#link "aclib.s"
|
||||||
#include "acbios.h"
|
#include "acbios.h"
|
||||||
//#link "acbios.s"
|
//#link "acbios.s"
|
||||||
//#link "hdr_autostart.s"
|
//#link "hdr_autostart.s"
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1751,6 +1751,7 @@ function startPlatform() {
|
|||||||
// start platform and load file
|
// start platform and load file
|
||||||
replaceURLState();
|
replaceURLState();
|
||||||
platform.start();
|
platform.start();
|
||||||
|
// TODO: ordering of loads?
|
||||||
loadBIOSFromProject();
|
loadBIOSFromProject();
|
||||||
initProject();
|
initProject();
|
||||||
loadProject(qs['file']);
|
loadProject(qs['file']);
|
||||||
|
Loading…
Reference in New Issue
Block a user