mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-03-11 02:32:21 +00:00
ecs: system instance, with #entity.field
This commit is contained in:
parent
acb50ac4b9
commit
4584cc778f
@ -2,7 +2,7 @@
|
||||
import { mergeLocs, Token, Tokenizer, TokenType } from "../tokenizer";
|
||||
import { SourceLocated, SourceLocation } from "../workertypes";
|
||||
import { newDecoder } from "./decoder";
|
||||
import { Action, ActionOwner, ActionNode, ActionWithJoin, ArrayType, CodeLiteralNode, CodePlaceholderNode, ComponentType, DataField, DataType, DataValue, ECSError, Entity, EntityArchetype, EntityManager, EntityScope, IntType, Query, RefType, SelectType, SELECT_TYPE, SourceFileExport, System } from "./ecs";
|
||||
import { Action, ActionOwner, ActionNode, ActionWithJoin, ArrayType, CodeLiteralNode, CodePlaceholderNode, ComponentType, DataField, DataType, DataValue, ECSError, Entity, EntityArchetype, EntityManager, EntityScope, IntType, Query, RefType, SelectType, SELECT_TYPE, SourceFileExport, System, SystemInstance, SystemInstanceParameters, ComponentFieldPair } from "./ecs";
|
||||
|
||||
export enum ECSTokenType {
|
||||
Ellipsis = 'ellipsis',
|
||||
@ -37,7 +37,7 @@ export class ECSCompiler extends Tokenizer {
|
||||
{ type: ECSTokenType.Integer, regex: /[-]?\$[A-Fa-f0-9]+/ },
|
||||
{ type: ECSTokenType.Integer, regex: /[-]?\d+/ },
|
||||
{ type: ECSTokenType.Integer, regex: /[%][01]+/ },
|
||||
{ type: ECSTokenType.Operator, regex: /[#=,:(){}\[\]\-]/ },
|
||||
{ type: ECSTokenType.Operator, regex: /[.#=,:(){}\[\]\-]/ },
|
||||
{ type: TokenType.Ident, regex: /[A-Za-z_][A-Za-z0-9_]*/ },
|
||||
{ type: TokenType.Ignore, regex: /\/\/.*?[\n\r]/ },
|
||||
{ type: TokenType.Ignore, regex: /\/\*.*?\*\// },
|
||||
@ -300,12 +300,11 @@ export class ECSCompiler extends Tokenizer {
|
||||
// TODO: add $loc
|
||||
let tok = this.expectTokenTypes([ECSTokenType.CodeFragment]);
|
||||
let code = tok.str.substring(3, tok.str.length-3);
|
||||
/*
|
||||
let lines = code.split('\n');
|
||||
// TODO: add after parsing maybe?
|
||||
let lines = code.split('\n');
|
||||
if (this.debuginfo) this.addDebugInfo(lines, tok.$loc.line);
|
||||
code = lines.join('\n');
|
||||
*/
|
||||
|
||||
let acomp = new ECSActionCompiler(context);
|
||||
let nodes = acomp.parseFile(code, this.path);
|
||||
// TODO: return nodes
|
||||
@ -342,7 +341,7 @@ export class ECSCompiler extends Tokenizer {
|
||||
if (cmd == 'system') {
|
||||
let sys = this.annotate(() => this.parseSystem());
|
||||
this.em.defineSystem(sys);
|
||||
this.currentScope.addUsingSystem(sys);
|
||||
this.currentScope.newSystemInstanceWithDefaults(sys);
|
||||
}
|
||||
}
|
||||
this.currentScope = scope.parent || null;
|
||||
@ -350,9 +349,9 @@ export class ECSCompiler extends Tokenizer {
|
||||
}
|
||||
|
||||
parseScopeUsing() {
|
||||
let syslist = this.parseList(this.parseSystemRef, ',');
|
||||
for (let sys of syslist) {
|
||||
this.currentScope?.addUsingSystem(sys);
|
||||
let instlist = this.parseList(this.parseSystemInstanceRef, ',');
|
||||
for (let inst of instlist) {
|
||||
this.currentScope?.newSystemInstance(inst);
|
||||
}
|
||||
}
|
||||
|
||||
@ -374,21 +373,21 @@ export class ECSCompiler extends Tokenizer {
|
||||
if (cmd == 'init' || cmd == 'const') {
|
||||
// TODO: check data types
|
||||
let name = this.expectIdent().str;
|
||||
let { component, field } = this.getEntityField(entity, name);
|
||||
let symtype = this.currentScope.isConstOrInit(component, name);
|
||||
let { c, f } = this.getEntityField(entity, name);
|
||||
let symtype = this.currentScope.isConstOrInit(c, name);
|
||||
if (symtype && symtype != cmd)
|
||||
this.compileError(`I can't mix const and init values for a given field in a scope.`);
|
||||
this.expectToken('=');
|
||||
let valueOrRef = this.parseDataValue(field);
|
||||
let valueOrRef = this.parseDataValue(f);
|
||||
if ((valueOrRef as ForwardRef).token != null) {
|
||||
this.deferred.push(() => {
|
||||
let refvalue = this.resolveEntityRef(scope, valueOrRef as ForwardRef);
|
||||
if (cmd == 'const') scope.setConstValue(entity, component, name, refvalue);
|
||||
if (cmd == 'init') scope.setInitValue(entity, component, name, refvalue);
|
||||
if (cmd == 'const') scope.setConstValue(entity, c, name, refvalue);
|
||||
if (cmd == 'init') scope.setInitValue(entity, c, name, refvalue);
|
||||
});
|
||||
} else {
|
||||
if (cmd == 'const') scope.setConstValue(entity, component, name, valueOrRef as DataValue);
|
||||
if (cmd == 'init') scope.setInitValue(entity, component, name, valueOrRef as DataValue);
|
||||
if (cmd == 'const') scope.setConstValue(entity, c, name, valueOrRef as DataValue);
|
||||
if (cmd == 'init') scope.setInitValue(entity, c, name, valueOrRef as DataValue);
|
||||
}
|
||||
} else if (cmd == 'decode') {
|
||||
let decoderid = this.expectIdent().str;
|
||||
@ -398,15 +397,15 @@ export class ECSCompiler extends Tokenizer {
|
||||
if (!decoder) { this.compileError(`I can't find a "${decoderid}" decoder.`); throw new Error() }
|
||||
let result = decoder.parse();
|
||||
for (let entry of Object.entries(result.properties)) {
|
||||
let { component, field } = this.getEntityField(entity, entry[0]);
|
||||
scope.setConstValue(entity, component, field.name, entry[1]);
|
||||
let { c, f } = this.getEntityField(entity, entry[0]);
|
||||
scope.setConstValue(entity, c, f.name, entry[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
getEntityField(e: Entity, name: string) {
|
||||
getEntityField(e: Entity, name: string) : ComponentFieldPair {
|
||||
if (!this.currentScope) { this.internalError(); throw new Error(); }
|
||||
let comps = this.em.componentsWithFieldName([e.etype], name);
|
||||
if (comps.length == 0) this.compileError(`I couldn't find a field named "${name}" for this entity.`)
|
||||
@ -414,7 +413,7 @@ export class ECSCompiler extends Tokenizer {
|
||||
let component = comps[0];
|
||||
let field = component.fields.find(f => f.name == name);
|
||||
if (!field) { this.internalError(); throw new Error(); }
|
||||
return { component, field };
|
||||
return { c: component, f: field };
|
||||
}
|
||||
|
||||
parseEntityArchetype() : EntityArchetype {
|
||||
@ -431,14 +430,18 @@ export class ECSCompiler extends Tokenizer {
|
||||
return cref;
|
||||
}
|
||||
|
||||
resolveEntityRef(scope: EntityScope, ref: ForwardRef) : number {
|
||||
let name = ref.token.str;
|
||||
findEntityByName(scope: EntityScope, token: Token) {
|
||||
let name = token.str;
|
||||
let eref = scope.entities.find(e => e.name == name);
|
||||
if (!eref) {
|
||||
this.compileError(`I couldn't find an entity named "${name}" in this scope.`, ref.token.$loc)
|
||||
this.compileError(`I couldn't find an entity named "${name}" in this scope.`, token.$loc)
|
||||
throw new Error();
|
||||
}
|
||||
let id = eref.id;
|
||||
return eref;
|
||||
}
|
||||
|
||||
resolveEntityRef(scope: EntityScope, ref: ForwardRef) : number {
|
||||
let id = this.findEntityByName(scope, ref.token).id;
|
||||
if (ref.reftype) {
|
||||
// TODO: make this a function? elo ehi etc?
|
||||
let atypes = this.em.archetypesMatching(ref.reftype.query);
|
||||
@ -450,11 +453,29 @@ export class ECSCompiler extends Tokenizer {
|
||||
return id;
|
||||
}
|
||||
|
||||
parseSystemRef() : System {
|
||||
parseSystemInstanceRef() : SystemInstance {
|
||||
let name = this.expectIdent().str;
|
||||
let sys = this.em.getSystemByName(name);
|
||||
if (!sys) this.compileError(`I couldn't find a system named "${name}".`, this.lasttoken.$loc);
|
||||
return sys;
|
||||
let system = this.em.getSystemByName(name);
|
||||
if (!system) this.compileError(`I couldn't find a system named "${name}".`, this.lasttoken.$loc);
|
||||
let params = {};
|
||||
if (this.peekToken().str == 'with') {
|
||||
this.consumeToken();
|
||||
params = this.parseSystemInstanceParameters();
|
||||
}
|
||||
let inst = { system, params, id: 0 };
|
||||
return inst;
|
||||
}
|
||||
|
||||
parseSystemInstanceParameters() : SystemInstanceParameters {
|
||||
let scope = this.currentScope;
|
||||
if (scope == null) throw new Error();
|
||||
this.expectToken('#');
|
||||
let entname = this.expectIdent();
|
||||
this.expectToken('.');
|
||||
let fieldname = this.expectIdent();
|
||||
let entity = this.findEntityByName(scope, entname);
|
||||
let cf = this.getEntityField(entity, fieldname.str);
|
||||
return { refEntity: entity, refField: cf };
|
||||
}
|
||||
|
||||
exportToFile(src: SourceFileExport) {
|
||||
|
@ -59,6 +59,17 @@ export interface System extends SourceLocated {
|
||||
tempbytes?: number;
|
||||
}
|
||||
|
||||
export interface SystemInstanceParameters {
|
||||
refEntity?: Entity;
|
||||
refField?: ComponentFieldPair;
|
||||
}
|
||||
|
||||
export interface SystemInstance extends SourceLocated {
|
||||
system: System;
|
||||
params: SystemInstanceParameters;
|
||||
id: number;
|
||||
}
|
||||
|
||||
export const SELECT_TYPE = ['once', 'foreach', 'join', 'with', 'if', 'select'] as const;
|
||||
|
||||
export type SelectType = typeof SELECT_TYPE[number];
|
||||
@ -166,7 +177,7 @@ interface ConstByte {
|
||||
bitofs: number;
|
||||
}
|
||||
|
||||
interface ComponentFieldPair {
|
||||
export interface ComponentFieldPair {
|
||||
c: ComponentType;
|
||||
f: DataField;
|
||||
}
|
||||
@ -227,6 +238,11 @@ export class Dialect_CA65 {
|
||||
@__skipxhi:
|
||||
`
|
||||
|
||||
ASM_LOOKUP_REF_X = `
|
||||
ldx {{%reffield}}
|
||||
{{%code}}
|
||||
`
|
||||
|
||||
// TODO
|
||||
ASM_MAP_RANGES = `
|
||||
txa
|
||||
@ -312,8 +328,8 @@ export class Dialect_CA65 {
|
||||
else return `.byte (${b.symbol} >> ${b.bitofs})` // TODO?
|
||||
}
|
||||
}
|
||||
tempLabel(sys: System) {
|
||||
return `${sys.name}__tmp`;
|
||||
tempLabel(inst: SystemInstance) {
|
||||
return `${inst.system.name}__${inst.id}__tmp`; // TODO: multiple instances?
|
||||
}
|
||||
equate(symbol: string, value: string): string {
|
||||
return `${symbol} = ${value}`;
|
||||
@ -517,15 +533,25 @@ class ActionEval {
|
||||
|
||||
constructor(
|
||||
readonly scope: EntityScope,
|
||||
readonly sys: System,
|
||||
readonly instance: SystemInstance,
|
||||
readonly action: Action)
|
||||
{
|
||||
this.em = scope.em;
|
||||
this.dialect = scope.em.dialect;
|
||||
this.oldState = scope.state;
|
||||
this.tmplabel = this.dialect.tempLabel(this.instance);
|
||||
let q = (action as ActionWithQuery).query;
|
||||
if (q) this.qr = new EntitySet(scope, q);
|
||||
else this.qr = new EntitySet(scope, undefined, [], []);
|
||||
// TODO? error if none?
|
||||
if (instance.params.refEntity && instance.params.refField) {
|
||||
let rf = instance.params.refField;
|
||||
if (rf.f.dtype == 'ref') {
|
||||
let rq = rf.f.query;
|
||||
this.qr = this.qr.intersection(new EntitySet(scope, rq));
|
||||
//console.log('with', instance.params, rq, this.qr);
|
||||
}
|
||||
}
|
||||
this.entities = this.qr.entities;
|
||||
//let query = (this.action as ActionWithQuery).query;
|
||||
//TODO? if (query && this.entities.length == 0)
|
||||
@ -565,8 +591,11 @@ class ActionEval {
|
||||
this.entities = int.entities; // TODO?
|
||||
}
|
||||
} else if (this.action.select == 'with') {
|
||||
if (this.qr.entities.length != 1)
|
||||
throw new ECSError(`${this.sys.name} query outside of loop must match exactly one entity`, this.action); //TODO
|
||||
if (this.instance.params.refEntity && this.instance.params.refField) {
|
||||
state.x = this.qr;
|
||||
// ???
|
||||
} else if (this.qr.entities.length != 1)
|
||||
throw new ECSError(`${this.instance.system.name} query outside of loop must match exactly one entity`, this.action); //TODO
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -583,7 +612,7 @@ class ActionEval {
|
||||
return '';
|
||||
|
||||
let action = this.action;
|
||||
let sys = this.sys;
|
||||
let sys = this.instance.system;
|
||||
let code = action.text;
|
||||
let label = `${sys.name}__${action.event}__${this.em.seq++}`; // TODO: better label that won't conflict (seq?)
|
||||
let props: { [name: string]: string } = {};
|
||||
@ -612,7 +641,18 @@ class ActionEval {
|
||||
// filter entities from loop?
|
||||
// TODO: when to ignore if entities.length == 1 and not in for loop?
|
||||
if (action.select == 'with') {
|
||||
code = this.wrapCodeInFilter(code);
|
||||
// TODO? when to load x?
|
||||
if (this.instance.params.refEntity && this.instance.params.refField) {
|
||||
let re = this.instance.params.refEntity;
|
||||
let rf = this.instance.params.refField;
|
||||
code = this.wrapCodeInRefLookup(code);
|
||||
// TODO: only fetches 1st entity in list, need offset
|
||||
let range = this.scope.bss.getFieldRange(rf.c, rf.f.name) || this.scope.rodata.getFieldRange(rf.c, rf.f.name);
|
||||
let eidofs = re.id - range.elo;
|
||||
props['%reffield'] = `${this.dialect.fieldsymbol(rf.c, rf.f, 0)}+${eidofs}`;
|
||||
} else {
|
||||
code = this.wrapCodeInFilter(code);
|
||||
}
|
||||
}
|
||||
if (action.select == 'if') {
|
||||
code = this.wrapCodeInFilter(code);
|
||||
@ -699,10 +739,11 @@ class ActionEval {
|
||||
}
|
||||
__local(args: string[]) {
|
||||
let tempinc = parseInt(args[0]);
|
||||
let tempbytes = this.instance.system.tempbytes;
|
||||
if (isNaN(tempinc)) throw new ECSError(`bad temporary offset`, this.action);
|
||||
if (!this.sys.tempbytes) throw new ECSError(`this system has no locals`, this.action);
|
||||
if (tempinc < 0 || tempinc >= this.sys.tempbytes) throw new ECSError(`this system only has ${this.sys.tempbytes} locals`, this.action);
|
||||
this.scope.updateTempLiveness(this.sys);
|
||||
if (!tempbytes) throw new ECSError(`this system has no locals`, this.action);
|
||||
if (tempinc < 0 || tempinc >= tempbytes) throw new ECSError(`this system only has ${tempbytes} locals`, this.action);
|
||||
this.scope.updateTempLiveness(this.instance);
|
||||
return `${this.tmplabel}+${tempinc}`;
|
||||
}
|
||||
__bss_init(args: string[]) {
|
||||
@ -735,6 +776,10 @@ class ActionEval {
|
||||
}
|
||||
return code;
|
||||
}
|
||||
wrapCodeInRefLookup(code: string) {
|
||||
code = this.dialect.ASM_LOOKUP_REF_X.replace('{{%code}}', code);
|
||||
return code;
|
||||
}
|
||||
generateCodeForField(fieldName: string, bitofs: number, canWrite: boolean): string {
|
||||
const action = this.action;
|
||||
const qr = this.jr || this.qr; // TODO: why not both!
|
||||
@ -841,10 +886,10 @@ class ActionEval {
|
||||
export class EntityScope implements SourceLocated {
|
||||
$loc: SourceLocation;
|
||||
childScopes: EntityScope[] = [];
|
||||
systems: System[] = [];
|
||||
instances: SystemInstance[] = [];
|
||||
entities: Entity[] = [];
|
||||
fieldtypes: { [name: string]: 'init' | 'const' } = {};
|
||||
sysstats = new Map<System, SystemStats>();
|
||||
sysstats = new Map<SystemInstance, SystemStats>();
|
||||
actionstats = new Map<Action, ActionStats>();
|
||||
bss = new UninitDataSegment();
|
||||
rodata = new ConstDataSegment();
|
||||
@ -876,9 +921,14 @@ export class EntityScope implements SourceLocated {
|
||||
this.entities.push(entity);
|
||||
return entity;
|
||||
}
|
||||
addUsingSystem(system: System) {
|
||||
if (!system) throw new Error();
|
||||
this.systems.push(system);
|
||||
newSystemInstance(inst: SystemInstance) {
|
||||
if (!inst) throw new Error();
|
||||
inst.id = this.instances.length+1;
|
||||
this.instances.push(inst);
|
||||
return inst;
|
||||
}
|
||||
newSystemInstanceWithDefaults(system: System) {
|
||||
return this.newSystemInstance({ system, params: {}, id:0 });
|
||||
}
|
||||
getEntityByName(name: string) {
|
||||
return this.entities.find(e => e.name == name);
|
||||
@ -1093,18 +1143,18 @@ export class EntityScope implements SourceLocated {
|
||||
// generate code
|
||||
let s = this.dialect.code();
|
||||
//s += `\n; event ${event}\n`;
|
||||
systems = systems.filter(s => this.systems.includes(s));
|
||||
for (let sys of systems) {
|
||||
let instances = this.instances.filter(inst => systems.includes(inst.system));
|
||||
for (let inst of instances) {
|
||||
let sys = inst.system;
|
||||
for (let action of sys.actions) {
|
||||
if (action.event == event) {
|
||||
// TODO: use Tokenizer so error msgs are better
|
||||
// TODO: keep event tree
|
||||
let codeeval = new ActionEval(this, sys, action);
|
||||
codeeval.tmplabel = this.dialect.tempLabel(sys);
|
||||
let codeeval = new ActionEval(this, inst, action);
|
||||
codeeval.begin();
|
||||
s += this.dialect.comment(`start action ${sys.name} ${event}`); // TODO
|
||||
s += this.dialect.comment(`start action ${sys.name} ${inst.id} ${event}`); // TODO
|
||||
s += codeeval.codeToString();
|
||||
s += this.dialect.comment(`end action ${sys.name} ${event}`);
|
||||
s += this.dialect.comment(`end action ${sys.name} ${inst.id} ${event}`);
|
||||
// TODO: check that this happens once?
|
||||
codeeval.end();
|
||||
this.getActionStats(action).callcount++;
|
||||
@ -1113,11 +1163,11 @@ export class EntityScope implements SourceLocated {
|
||||
}
|
||||
return s;
|
||||
}
|
||||
getSystemStats(sys: System) : SystemStats {
|
||||
let stats = this.sysstats.get(sys);
|
||||
getSystemStats(inst: SystemInstance) : SystemStats {
|
||||
let stats = this.sysstats.get(inst);
|
||||
if (!stats) {
|
||||
stats = new SystemStats();
|
||||
this.sysstats.set(sys, stats);
|
||||
this.sysstats.set(inst, stats);
|
||||
}
|
||||
return stats;
|
||||
}
|
||||
@ -1129,8 +1179,8 @@ export class EntityScope implements SourceLocated {
|
||||
}
|
||||
return stats;
|
||||
}
|
||||
updateTempLiveness(sys: System) {
|
||||
let stats = this.getSystemStats(sys);
|
||||
updateTempLiveness(inst: SystemInstance) {
|
||||
let stats = this.getSystemStats(inst);
|
||||
let n = this.eventSeq;
|
||||
if (stats.tempstartseq && stats.tempendseq) {
|
||||
stats.tempstartseq = Math.min(stats.tempstartseq, n);
|
||||
@ -1148,14 +1198,14 @@ export class EntityScope implements SourceLocated {
|
||||
let maxTempBytes = 128 - this.bss.size; // TODO: multiple data segs
|
||||
let bssbin = new Bin({ left:0, top:0, bottom: this.eventSeq+1, right: maxTempBytes });
|
||||
pack.bins.push(bssbin);
|
||||
for (let sys of this.systems) {
|
||||
let stats = this.getSystemStats(sys);
|
||||
if (sys.tempbytes && stats.tempstartseq && stats.tempendseq) {
|
||||
for (let instance of this.instances) {
|
||||
let stats = this.getSystemStats(instance);
|
||||
if (instance.system.tempbytes && stats.tempstartseq && stats.tempendseq) {
|
||||
let v = {
|
||||
sys,
|
||||
inst: instance,
|
||||
top: stats.tempstartseq,
|
||||
bottom: stats.tempendseq+1,
|
||||
width: sys.tempbytes,
|
||||
width: instance.system.tempbytes,
|
||||
height: stats.tempendseq - stats.tempstartseq + 1,
|
||||
};
|
||||
pack.boxes.push(v);
|
||||
@ -1166,9 +1216,9 @@ export class EntityScope implements SourceLocated {
|
||||
if (bssbin.extents.right > 0) {
|
||||
this.bss.allocateBytes('TEMP', bssbin.extents.right);
|
||||
for (let b of pack.boxes) {
|
||||
let sys : System = (b as any).sys;
|
||||
console.log(sys.name, b.box?.left);
|
||||
this.bss.equates[this.dialect.tempLabel(sys)] = `TEMP+${b.box?.left}`;
|
||||
let inst : SystemInstance = (b as any).inst;
|
||||
console.log(inst.system.name, b.box?.left);
|
||||
this.bss.equates[this.dialect.tempLabel(inst)] = `TEMP+${b.box?.left}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1184,7 +1234,7 @@ export class EntityScope implements SourceLocated {
|
||||
let start;
|
||||
let initsys = this.em.getSystemByName('Init');
|
||||
if (isMainScope && initsys) {
|
||||
this.addUsingSystem(initsys); //TODO: what if none?
|
||||
this.newSystemInstanceWithDefaults(initsys); //TODO: what if none?
|
||||
start = this.generateCodeForEvent('main_init');
|
||||
} else {
|
||||
start = this.generateCodeForEvent('start');
|
||||
@ -1197,8 +1247,9 @@ export class EntityScope implements SourceLocated {
|
||||
//this.showStats();
|
||||
}
|
||||
showStats() {
|
||||
for (let sys of this.systems) {
|
||||
console.log(sys.name, this.getSystemStats(sys));
|
||||
for (let inst of this.instances) {
|
||||
// TODO?
|
||||
console.log(inst.system.name, this.getSystemStats(inst));
|
||||
}
|
||||
for (let action of Array.from(this.actionstats.keys())) {
|
||||
console.log(action.event, this.getActionStats(action));
|
||||
|
@ -118,7 +118,7 @@ export class Tokenizer {
|
||||
switch (rule.type) {
|
||||
case TokenType.CatchAll:
|
||||
if (this.errorOnCatchAll) {
|
||||
this.compileError(`I didn't expect the character "${m[0]}" here.`);
|
||||
this.compileError(`I didn't expect the character "${m[0]}" here.`, loc);
|
||||
}
|
||||
default:
|
||||
this.pushToken({ str: s, type: rule.type, $loc: loc });
|
||||
|
@ -39,10 +39,10 @@ TEMP:
|
||||
.res 1
|
||||
.res 1
|
||||
.res 1
|
||||
Kernel2Sprite__tmp = TEMP+0
|
||||
Joystick__tmp = TEMP+0
|
||||
SpriteShuffler__tmp = TEMP+1
|
||||
SpriteHider__tmp = TEMP+3
|
||||
Kernel2Sprite__2__tmp = TEMP+0
|
||||
Joystick__3__tmp = TEMP+0
|
||||
SpriteShuffler__8__tmp = TEMP+1
|
||||
SpriteHider__9__tmp = TEMP+3
|
||||
.code
|
||||
KernelSection_lines_b0:
|
||||
.byte 192
|
||||
@ -117,7 +117,7 @@ Main__INITDATA:
|
||||
__Start:
|
||||
.code
|
||||
|
||||
;;; start action Init main_init
|
||||
;;; start action Init 10 main_init
|
||||
|
||||
.include "vcs-ca65.h"
|
||||
.macpack longbranch
|
||||
@ -135,20 +135,20 @@ __BRK:
|
||||
; initialize data segment
|
||||
.code
|
||||
|
||||
;;; start action FrameLoop start
|
||||
;;; start action FrameLoop 1 start
|
||||
|
||||
FrameLoop__start__2__NextFrame:
|
||||
FRAME_START
|
||||
.code
|
||||
|
||||
;;; start action Kernel2Sprite preframe
|
||||
;;; start action Kernel2Sprite 2 preframe
|
||||
|
||||
.define KLINES #192
|
||||
.define KPAD 32
|
||||
|
||||
;;; end action Kernel2Sprite preframe
|
||||
;;; end action Kernel2Sprite 2 preframe
|
||||
|
||||
;;; start action Kernel2Sprite preframe
|
||||
;;; start action Kernel2Sprite 2 preframe
|
||||
|
||||
ldy #0
|
||||
Kernel2Sprite__preframe__4____each:
|
||||
@ -162,76 +162,76 @@ Kernel2Sprite__preframe__4____each:
|
||||
lda KLINES+KPAD
|
||||
sec
|
||||
sbc HasYpos_ypos_b0,x
|
||||
sta Kernel2Sprite__tmp+11
|
||||
sta Kernel2Sprite__2__tmp+11
|
||||
; calculate bitmap pointer
|
||||
stx Kernel2Sprite__tmp+12 ; save X (Sprite index)
|
||||
stx Kernel2Sprite__2__tmp+12 ; save X (Sprite index)
|
||||
lda HasBitmap_bitmap_b0,x ; deref bitmap
|
||||
tax
|
||||
lda Bitmap_bitmapdata_b0,x
|
||||
sec
|
||||
sbc Kernel2Sprite__tmp+11
|
||||
sta Kernel2Sprite__tmp+0,y ; Y = sprite slot index
|
||||
sbc Kernel2Sprite__2__tmp+11
|
||||
sta Kernel2Sprite__2__tmp+0,y ; Y = sprite slot index
|
||||
lda Bitmap_bitmapdata_b8,x
|
||||
sbc #0
|
||||
sta Kernel2Sprite__tmp+2,y
|
||||
sta Kernel2Sprite__2__tmp+2,y
|
||||
; get bitmap height
|
||||
lda Bitmap_height_b0,x
|
||||
sta Kernel2Sprite__tmp+8,y
|
||||
sta Kernel2Sprite__2__tmp+8,y
|
||||
; calculate colormap pointer
|
||||
ldx Kernel2Sprite__tmp+12 ; restore X
|
||||
ldx Kernel2Sprite__2__tmp+12 ; restore X
|
||||
lda HasColormap_colormap_b0,x ; deref colormap
|
||||
tax
|
||||
lda Colormap_colormapdata_b0,x
|
||||
sec
|
||||
sbc Kernel2Sprite__tmp+11
|
||||
sta Kernel2Sprite__tmp+4,y
|
||||
sbc Kernel2Sprite__2__tmp+11
|
||||
sta Kernel2Sprite__2__tmp+4,y
|
||||
lda Colormap_colormapdata_b8,x
|
||||
sbc #0
|
||||
sta Kernel2Sprite__tmp+6,y
|
||||
sta Kernel2Sprite__2__tmp+6,y
|
||||
; save ypos
|
||||
ldx Kernel2Sprite__tmp+12 ; restore X
|
||||
ldx Kernel2Sprite__2__tmp+12 ; restore X
|
||||
lda HasYpos_ypos_b0,x
|
||||
sta Kernel2Sprite__tmp+10,y
|
||||
sta Kernel2Sprite__2__tmp+10,y
|
||||
|
||||
iny
|
||||
cpy #2
|
||||
jne Kernel2Sprite__preframe__4____each
|
||||
Kernel2Sprite__preframe__4____exit:
|
||||
|
||||
;;; end action Kernel2Sprite preframe
|
||||
;;; end action Kernel2Sprite 2 preframe
|
||||
|
||||
;;; start action Kernel2Sprite preframe
|
||||
;;; start action Kernel2Sprite 2 preframe
|
||||
|
||||
; L0 L1 H0 H1 -> L0 H0 L1 H1
|
||||
lda Kernel2Sprite__tmp+1
|
||||
ldy Kernel2Sprite__tmp+2
|
||||
sty Kernel2Sprite__tmp+1
|
||||
sta Kernel2Sprite__tmp+2
|
||||
lda Kernel2Sprite__tmp+5
|
||||
ldy Kernel2Sprite__tmp+6
|
||||
sty Kernel2Sprite__tmp+5
|
||||
sta Kernel2Sprite__tmp+6
|
||||
lda Kernel2Sprite__2__tmp+1
|
||||
ldy Kernel2Sprite__2__tmp+2
|
||||
sty Kernel2Sprite__2__tmp+1
|
||||
sta Kernel2Sprite__2__tmp+2
|
||||
lda Kernel2Sprite__2__tmp+5
|
||||
ldy Kernel2Sprite__2__tmp+6
|
||||
sty Kernel2Sprite__2__tmp+5
|
||||
sta Kernel2Sprite__2__tmp+6
|
||||
|
||||
;;; end action Kernel2Sprite preframe
|
||||
;;; end action Kernel2Sprite 2 preframe
|
||||
|
||||
;;; start action Kernel2Sprite preframe
|
||||
;;; start action Kernel2Sprite 2 preframe
|
||||
|
||||
lda #162
|
||||
sta COLUBK
|
||||
|
||||
;;; end action Kernel2Sprite preframe
|
||||
;;; end action Kernel2Sprite 2 preframe
|
||||
|
||||
;;; start action Kernel2Sprite preframe
|
||||
;;; start action Kernel2Sprite 2 preframe
|
||||
|
||||
;;; end action Kernel2Sprite preframe
|
||||
;;; end action Kernel2Sprite 2 preframe
|
||||
|
||||
;;; start action SetXPos preframe
|
||||
;;; start action SetXPos 6 preframe
|
||||
|
||||
sta HMCLR
|
||||
|
||||
;;; end action SetXPos preframe
|
||||
;;; end action SetXPos 6 preframe
|
||||
|
||||
;;; start action SetXPos preframe
|
||||
;;; start action SetXPos 6 preframe
|
||||
|
||||
ldy #0
|
||||
SetXPos__preframe__8____each:
|
||||
@ -240,7 +240,7 @@ SetXPos__preframe__8____each:
|
||||
lda HasXpos_xpos_b0,x
|
||||
.code
|
||||
|
||||
;;; start action SetHorizPos SetHorizPos
|
||||
;;; start action SetHorizPos 7 SetHorizPos
|
||||
|
||||
; SetHorizPos routine
|
||||
; A = X coordinate
|
||||
@ -259,7 +259,7 @@ SetHorizPos__SetHorizPos__9__DivideLoop:
|
||||
sta RESP0,y ; fix coarse position
|
||||
sta HMP0,y ; set fine offset
|
||||
|
||||
;;; end action SetHorizPos SetHorizPos
|
||||
;;; end action SetHorizPos 7 SetHorizPos
|
||||
|
||||
|
||||
iny
|
||||
@ -267,61 +267,61 @@ SetHorizPos__SetHorizPos__9__DivideLoop:
|
||||
jne SetXPos__preframe__8____each
|
||||
SetXPos__preframe__8____exit:
|
||||
|
||||
;;; end action SetXPos preframe
|
||||
;;; end action SetXPos 6 preframe
|
||||
|
||||
;;; start action SetXPos preframe
|
||||
;;; start action SetXPos 6 preframe
|
||||
|
||||
;;; end action SetXPos preframe
|
||||
;;; end action SetXPos 6 preframe
|
||||
|
||||
;;; start action SetXPos preframe
|
||||
;;; start action SetXPos 6 preframe
|
||||
|
||||
sta WSYNC
|
||||
sta HMOVE
|
||||
|
||||
;;; end action SetXPos preframe
|
||||
;;; end action SetXPos 6 preframe
|
||||
|
||||
KERNEL_START
|
||||
.code
|
||||
|
||||
;;; start action Kernel2Sprite kernel
|
||||
;;; start action Kernel2Sprite 2 kernel
|
||||
|
||||
ldy #0
|
||||
sty VDELP0
|
||||
iny
|
||||
sta VDELP1
|
||||
|
||||
;;; end action Kernel2Sprite kernel
|
||||
;;; end action Kernel2Sprite 2 kernel
|
||||
|
||||
;;; start action Kernel2Sprite kernel
|
||||
;;; start action Kernel2Sprite 2 kernel
|
||||
|
||||
; define macro for each line
|
||||
.macro Kernel2Sprite__kernel__12__DrawLine do_wsync
|
||||
.local DoDraw1
|
||||
.local DoDraw2
|
||||
; draw player 0
|
||||
lda Kernel2Sprite__tmp+8 ; height
|
||||
dcp Kernel2Sprite__tmp+10 ; ypos
|
||||
lda Kernel2Sprite__2__tmp+8 ; height
|
||||
dcp Kernel2Sprite__2__tmp+10 ; ypos
|
||||
bcs DoDraw1
|
||||
lda #0
|
||||
.byte $2C
|
||||
DoDraw1:
|
||||
lda (Kernel2Sprite__tmp+0),y
|
||||
lda (Kernel2Sprite__2__tmp+0),y
|
||||
.if do_wsync
|
||||
sta WSYNC
|
||||
.endif
|
||||
sta GRP0
|
||||
lda (Kernel2Sprite__tmp+4),y
|
||||
lda (Kernel2Sprite__2__tmp+4),y
|
||||
sta COLUP0
|
||||
; draw player 1
|
||||
lda Kernel2Sprite__tmp+9 ; height
|
||||
dcp Kernel2Sprite__tmp+11 ; ypos
|
||||
lda Kernel2Sprite__2__tmp+9 ; height
|
||||
dcp Kernel2Sprite__2__tmp+11 ; ypos
|
||||
bcs DoDraw2
|
||||
lda #0
|
||||
.byte $2C
|
||||
DoDraw2:
|
||||
lda (Kernel2Sprite__tmp+2),y
|
||||
lda (Kernel2Sprite__2__tmp+2),y
|
||||
sta GRP1
|
||||
lda (Kernel2Sprite__tmp+6),y
|
||||
lda (Kernel2Sprite__2__tmp+6),y
|
||||
sta COLUP1
|
||||
.endmacro
|
||||
|
||||
@ -329,9 +329,9 @@ DoDraw2:
|
||||
Kernel2Sprite__kernel__12__LVScan:
|
||||
.code
|
||||
|
||||
;;; start action Kernel2Sprite scanline1
|
||||
;;; start action Kernel2Sprite 2 scanline1
|
||||
|
||||
;;; end action Kernel2Sprite scanline1
|
||||
;;; end action Kernel2Sprite 2 scanline1
|
||||
|
||||
Kernel2Sprite__kernel__12__DrawLine 1 ; macro: draw scanline w/ WSYNC
|
||||
dey ; next scanline
|
||||
@ -341,9 +341,9 @@ Kernel2Sprite__kernel__12__LVScan:
|
||||
dey ; next scanline
|
||||
bne Kernel2Sprite__kernel__12__LVScan ; repeat until out of lines
|
||||
|
||||
;;; end action Kernel2Sprite kernel
|
||||
;;; end action Kernel2Sprite 2 kernel
|
||||
|
||||
;;; start action Kernel2Sprite kernel
|
||||
;;; start action Kernel2Sprite 2 kernel
|
||||
|
||||
lda #0
|
||||
sta GRP0
|
||||
@ -351,29 +351,29 @@ Kernel2Sprite__kernel__12__LVScan:
|
||||
sta GRP0
|
||||
sta GRP1
|
||||
|
||||
;;; end action Kernel2Sprite kernel
|
||||
;;; end action Kernel2Sprite 2 kernel
|
||||
|
||||
KERNEL_END
|
||||
.code
|
||||
|
||||
;;; start action Joystick postframe
|
||||
;;; start action Joystick 3 postframe
|
||||
|
||||
; 2 control inputs share a single byte, 4 bits each
|
||||
lda SWCHA
|
||||
sta Joystick__tmp+0
|
||||
sta Joystick__3__tmp+0
|
||||
|
||||
;;; end action Joystick postframe
|
||||
;;; end action Joystick 3 postframe
|
||||
|
||||
;;; start action Joystick postframe
|
||||
;;; start action Joystick 3 postframe
|
||||
|
||||
ldx #0
|
||||
Joystick__postframe__15____each:
|
||||
|
||||
asl Joystick__tmp+0
|
||||
asl Joystick__3__tmp+0
|
||||
bcs Joystick__postframe__15__SkipMoveRight
|
||||
.code
|
||||
|
||||
;;; start action MoveJoyX joyright
|
||||
;;; start action MoveJoyX 4 joyright
|
||||
|
||||
lda HasXpos_xpos_b0,x
|
||||
clc
|
||||
@ -383,14 +383,14 @@ Joystick__postframe__15____each:
|
||||
sta HasXpos_xpos_b0,x
|
||||
MoveJoyX__joyright__16__nomove:
|
||||
|
||||
;;; end action MoveJoyX joyright
|
||||
;;; end action MoveJoyX 4 joyright
|
||||
|
||||
Joystick__postframe__15__SkipMoveRight:
|
||||
asl Joystick__tmp+0
|
||||
asl Joystick__3__tmp+0
|
||||
bcs Joystick__postframe__15__SkipMoveLeft
|
||||
.code
|
||||
|
||||
;;; start action MoveJoyX joyleft
|
||||
;;; start action MoveJoyX 4 joyleft
|
||||
|
||||
lda HasXpos_xpos_b0,x
|
||||
sec
|
||||
@ -399,14 +399,14 @@ Joystick__postframe__15__SkipMoveRight:
|
||||
sta HasXpos_xpos_b0,x
|
||||
MoveJoyX__joyleft__17__nomove:
|
||||
|
||||
;;; end action MoveJoyX joyleft
|
||||
;;; end action MoveJoyX 4 joyleft
|
||||
|
||||
Joystick__postframe__15__SkipMoveLeft:
|
||||
asl Joystick__tmp+0
|
||||
asl Joystick__3__tmp+0
|
||||
bcs Joystick__postframe__15__SkipMoveDown
|
||||
.code
|
||||
|
||||
;;; start action MoveJoyY joydown
|
||||
;;; start action MoveJoyY 5 joydown
|
||||
|
||||
lda HasYpos_ypos_b0,x
|
||||
clc
|
||||
@ -416,14 +416,14 @@ Joystick__postframe__15__SkipMoveLeft:
|
||||
sta HasYpos_ypos_b0,x
|
||||
MoveJoyY__joydown__18__nomove:
|
||||
|
||||
;;; end action MoveJoyY joydown
|
||||
;;; end action MoveJoyY 5 joydown
|
||||
|
||||
Joystick__postframe__15__SkipMoveDown:
|
||||
asl Joystick__tmp+0
|
||||
asl Joystick__3__tmp+0
|
||||
bcs Joystick__postframe__15__SkipMoveUp
|
||||
.code
|
||||
|
||||
;;; start action MoveJoyY joyup
|
||||
;;; start action MoveJoyY 5 joyup
|
||||
|
||||
lda HasYpos_ypos_b0,x
|
||||
sec
|
||||
@ -432,7 +432,7 @@ Joystick__postframe__15__SkipMoveDown:
|
||||
sta HasYpos_ypos_b0,x
|
||||
MoveJoyY__joyup__19__nomove:
|
||||
|
||||
;;; end action MoveJoyY joyup
|
||||
;;; end action MoveJoyY 5 joyup
|
||||
|
||||
Joystick__postframe__15__SkipMoveUp:
|
||||
|
||||
@ -441,15 +441,15 @@ Joystick__postframe__15__SkipMoveUp:
|
||||
jne Joystick__postframe__15____each
|
||||
Joystick__postframe__15____exit:
|
||||
|
||||
;;; end action Joystick postframe
|
||||
;;; end action Joystick 3 postframe
|
||||
|
||||
;;; start action SpriteShuffler postframe
|
||||
;;; start action SpriteShuffler 8 postframe
|
||||
|
||||
; load two sprite slots at left side of array
|
||||
lda SpriteSlot_sprite_b0
|
||||
sta SpriteShuffler__tmp+0
|
||||
sta SpriteShuffler__8__tmp+0
|
||||
lda SpriteSlot_sprite_b0+1
|
||||
sta SpriteShuffler__tmp+1
|
||||
sta SpriteShuffler__8__tmp+1
|
||||
; move two slots to the left
|
||||
ldx #0
|
||||
SpriteShuffler__postframe__20__loop:
|
||||
@ -459,21 +459,21 @@ SpriteShuffler__postframe__20__loop:
|
||||
cpx #4-2
|
||||
bne SpriteShuffler__postframe__20__loop
|
||||
; store two sprite slots at right side of array
|
||||
lda SpriteShuffler__tmp+0
|
||||
lda SpriteShuffler__8__tmp+0
|
||||
sta SpriteSlot_sprite_b0+4-2
|
||||
lda SpriteShuffler__tmp+1
|
||||
lda SpriteShuffler__8__tmp+1
|
||||
sta SpriteSlot_sprite_b0+4-1
|
||||
|
||||
;;; end action SpriteShuffler postframe
|
||||
;;; end action SpriteShuffler 8 postframe
|
||||
|
||||
;;; start action SpriteHider postframe
|
||||
;;; start action SpriteHider 9 postframe
|
||||
|
||||
lda #4-1
|
||||
sta SpriteHider__tmp+0
|
||||
sta SpriteHider__9__tmp+0
|
||||
|
||||
;;; end action SpriteHider postframe
|
||||
;;; end action SpriteHider 9 postframe
|
||||
|
||||
;;; start action SpriteHider postframe
|
||||
;;; start action SpriteHider 9 postframe
|
||||
|
||||
ldy #0
|
||||
SpriteHider__postframe__22____each:
|
||||
@ -485,12 +485,12 @@ SpriteHider__postframe__22____each:
|
||||
; swap this sprite slot with slot at end of array
|
||||
lda SpriteSlot_sprite_b0,y
|
||||
pha
|
||||
ldx SpriteHider__tmp+0 ; clobbers X, but no longer used
|
||||
ldx SpriteHider__9__tmp+0 ; clobbers X, but no longer used
|
||||
lda SpriteSlot_sprite_b0,x
|
||||
sta SpriteSlot_sprite_b0,y
|
||||
pla
|
||||
sta SpriteSlot_sprite_b0,x
|
||||
dec SpriteHider__tmp+0
|
||||
dec SpriteHider__9__tmp+0
|
||||
SpriteHider__postframe__22__skip:
|
||||
|
||||
iny
|
||||
@ -498,14 +498,14 @@ SpriteHider__postframe__22__skip:
|
||||
jne SpriteHider__postframe__22____each
|
||||
SpriteHider__postframe__22____exit:
|
||||
|
||||
;;; end action SpriteHider postframe
|
||||
;;; end action SpriteHider 9 postframe
|
||||
|
||||
FRAME_END
|
||||
.code
|
||||
|
||||
jmp FrameLoop__start__2__NextFrame ; loop to next frame
|
||||
|
||||
;;; end action FrameLoop start
|
||||
;;; end action FrameLoop 1 start
|
||||
; start main routine
|
||||
.segment "VECTORS"
|
||||
Return: .word $6060
|
||||
@ -513,7 +513,7 @@ VecNMI:
|
||||
VecReset: .word Main::__Reset
|
||||
VecBRK: .word Main::__BRK
|
||||
|
||||
;;; end action Init main_init
|
||||
;;; end action Init 10 main_init
|
||||
|
||||
.endscope
|
||||
Main__Start = Main::__Start
|
@ -5,7 +5,7 @@ PFColor_pfcolor_b0:
|
||||
.res 1
|
||||
TEMP:
|
||||
.res 1
|
||||
Local__tmp = TEMP+0
|
||||
Local__6__tmp = TEMP+0
|
||||
.code
|
||||
KernelSection_lines_b0:
|
||||
.byte 2
|
||||
@ -46,7 +46,7 @@ Main__INITDATA:
|
||||
__Start:
|
||||
.code
|
||||
|
||||
;;; start action Init main_init
|
||||
;;; start action Init 7 main_init
|
||||
|
||||
.include "vcs-ca65.h"
|
||||
.define PAL 0
|
||||
@ -63,24 +63,24 @@ __BRK:
|
||||
; initialize data segment
|
||||
.code
|
||||
|
||||
;;; start action FrameLoop start
|
||||
;;; start action FrameLoop 1 start
|
||||
|
||||
FrameLoop__start__2__NextFrame:
|
||||
FRAME_START
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel preframe
|
||||
;;; start action StaticKernel 4 preframe
|
||||
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
lda #24
|
||||
sta COLUBK
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #0+2
|
||||
jcs StaticKernel__kernelsetup__5____skipxhi
|
||||
@ -95,9 +95,9 @@ StaticKernel__kernelsetup__5____skipxlo:
|
||||
|
||||
StaticKernel__kernelsetup__5____skipxhi:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #0+4
|
||||
jcs StaticKernel__kernelsetup__6____skipxhi
|
||||
@ -116,15 +116,15 @@ StaticKernel__kernelsetup__6____skipxlo:
|
||||
|
||||
StaticKernel__kernelsetup__6____skipxhi:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
|
||||
;;; end action StaticKernel preframe
|
||||
;;; end action StaticKernel 4 preframe
|
||||
|
||||
KERNEL_START
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel kernel
|
||||
;;; start action StaticKernel 4 kernel
|
||||
|
||||
ldx #0
|
||||
StaticKernel__kernel__7____each:
|
||||
@ -132,14 +132,14 @@ StaticKernel__kernel__7____each:
|
||||
sta WSYNC
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
lda BGColor_bgcolor_b0,x
|
||||
sta COLUBK
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #5+2
|
||||
jcs StaticKernel__kernelsetup__9____skipxhi
|
||||
@ -154,9 +154,9 @@ StaticKernel__kernelsetup__9____skipxlo:
|
||||
|
||||
StaticKernel__kernelsetup__9____skipxhi:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #4
|
||||
jcc StaticKernel__kernelsetup__10____skipxlo
|
||||
@ -170,7 +170,7 @@ StaticKernel__kernelsetup__9____skipxhi:
|
||||
|
||||
StaticKernel__kernelsetup__10____skipxlo:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
ldy KernelSection_lines_b0,x
|
||||
StaticKernel__kernel__7__loop:
|
||||
@ -185,50 +185,50 @@ StaticKernel__kernel__7__loop:
|
||||
jne StaticKernel__kernel__7____each
|
||||
StaticKernel__kernel__7____exit:
|
||||
|
||||
;;; end action StaticKernel kernel
|
||||
;;; end action StaticKernel 4 kernel
|
||||
|
||||
KERNEL_END
|
||||
.code
|
||||
|
||||
;;; start action JoyButton postframe
|
||||
;;; start action JoyButton 5 postframe
|
||||
|
||||
lda INPT4 ;read button input
|
||||
bmi JoyButton__postframe__11__NotPressed
|
||||
.code
|
||||
|
||||
;;; start action Local joybutton
|
||||
;;; start action Local 6 joybutton
|
||||
|
||||
inc Local__tmp+0
|
||||
inc Local__6__tmp+0
|
||||
inc PFColor_pfcolor_b0
|
||||
|
||||
;;; end action Local joybutton
|
||||
;;; end action Local 6 joybutton
|
||||
|
||||
JoyButton__postframe__11__NotPressed:
|
||||
|
||||
;;; end action JoyButton postframe
|
||||
;;; end action JoyButton 5 postframe
|
||||
|
||||
FRAME_END
|
||||
.code
|
||||
|
||||
;;; start action ResetSwitch nextframe
|
||||
;;; start action ResetSwitch 2 nextframe
|
||||
|
||||
lsr SWCHB ; test Game Reset switch
|
||||
bcs ResetSwitch__nextframe__13__NoStart
|
||||
.code
|
||||
|
||||
;;; start action ResetConsole resetswitch
|
||||
;;; start action ResetConsole 3 resetswitch
|
||||
|
||||
jmp Main::__Reset ; jump to Reset handler
|
||||
|
||||
;;; end action ResetConsole resetswitch
|
||||
;;; end action ResetConsole 3 resetswitch
|
||||
|
||||
ResetSwitch__nextframe__13__NoStart:
|
||||
|
||||
;;; end action ResetSwitch nextframe
|
||||
;;; end action ResetSwitch 2 nextframe
|
||||
|
||||
jmp FrameLoop__start__2__NextFrame ; loop to next frame
|
||||
|
||||
;;; end action FrameLoop start
|
||||
;;; end action FrameLoop 1 start
|
||||
; start main routine
|
||||
.segment "VECTORS"
|
||||
Return: .word $6060
|
||||
@ -236,7 +236,7 @@ VecNMI:
|
||||
VecReset: .word Main::__Reset
|
||||
VecBRK: .word Main::__BRK
|
||||
|
||||
;;; end action Init main_init
|
||||
;;; end action Init 7 main_init
|
||||
|
||||
.endscope
|
||||
Main__Start = Main::__Start
|
@ -5,7 +5,7 @@ PFColor_pfcolor_b0:
|
||||
.res 1
|
||||
TEMP:
|
||||
.res 1
|
||||
Local__tmp = TEMP+0
|
||||
Local__6__tmp = TEMP+0
|
||||
.code
|
||||
KernelSection_lines_b0:
|
||||
.byte 2
|
||||
@ -46,7 +46,7 @@ Main__INITDATA:
|
||||
__Start:
|
||||
.code
|
||||
|
||||
;;; start action Init main_init
|
||||
;;; start action Init 7 main_init
|
||||
|
||||
.include "vcs-ca65.h"
|
||||
.macpack longbranch
|
||||
@ -64,24 +64,24 @@ __BRK:
|
||||
; initialize data segment
|
||||
.code
|
||||
|
||||
;;; start action FrameLoop start
|
||||
;;; start action FrameLoop 1 start
|
||||
|
||||
FrameLoop__start__2__NextFrame:
|
||||
FRAME_START
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel preframe
|
||||
;;; start action StaticKernel 4 preframe
|
||||
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
lda #24
|
||||
sta COLUBK
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #0+2
|
||||
jcs StaticKernel__kernelsetup__5____skipxhi
|
||||
@ -96,9 +96,9 @@ StaticKernel__kernelsetup__5____skipxlo:
|
||||
|
||||
StaticKernel__kernelsetup__5____skipxhi:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #0+4
|
||||
jcs StaticKernel__kernelsetup__6____skipxhi
|
||||
@ -117,15 +117,15 @@ StaticKernel__kernelsetup__6____skipxlo:
|
||||
|
||||
StaticKernel__kernelsetup__6____skipxhi:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
|
||||
;;; end action StaticKernel preframe
|
||||
;;; end action StaticKernel 4 preframe
|
||||
|
||||
KERNEL_START
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel kernel
|
||||
;;; start action StaticKernel 4 kernel
|
||||
|
||||
ldx #0
|
||||
StaticKernel__kernel__7____each:
|
||||
@ -133,14 +133,14 @@ StaticKernel__kernel__7____each:
|
||||
sta WSYNC
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
lda BGColor_bgcolor_b0,x
|
||||
sta COLUBK
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #5+2
|
||||
jcs StaticKernel__kernelsetup__9____skipxhi
|
||||
@ -155,9 +155,9 @@ StaticKernel__kernelsetup__9____skipxlo:
|
||||
|
||||
StaticKernel__kernelsetup__9____skipxhi:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
;;; start action StaticKernel kernelsetup
|
||||
;;; start action StaticKernel 4 kernelsetup
|
||||
|
||||
cpx #4
|
||||
jcc StaticKernel__kernelsetup__10____skipxlo
|
||||
@ -171,11 +171,11 @@ StaticKernel__kernelsetup__9____skipxhi:
|
||||
|
||||
StaticKernel__kernelsetup__10____skipxlo:
|
||||
|
||||
;;; end action StaticKernel kernelsetup
|
||||
;;; end action StaticKernel 4 kernelsetup
|
||||
|
||||
.code
|
||||
|
||||
;;; start action StaticKernel kerneldraw
|
||||
;;; start action StaticKernel 4 kerneldraw
|
||||
|
||||
ldy KernelSection_lines_b0,x
|
||||
StaticKernel__kerneldraw__11__loop:
|
||||
@ -184,7 +184,7 @@ StaticKernel__kerneldraw__11__loop:
|
||||
dey
|
||||
bne StaticKernel__kerneldraw__11__loop
|
||||
|
||||
;;; end action StaticKernel kerneldraw
|
||||
;;; end action StaticKernel 4 kerneldraw
|
||||
|
||||
|
||||
|
||||
@ -193,50 +193,50 @@ StaticKernel__kerneldraw__11__loop:
|
||||
jne StaticKernel__kernel__7____each
|
||||
StaticKernel__kernel__7____exit:
|
||||
|
||||
;;; end action StaticKernel kernel
|
||||
;;; end action StaticKernel 4 kernel
|
||||
|
||||
KERNEL_END
|
||||
.code
|
||||
|
||||
;;; start action JoyButton postframe
|
||||
;;; start action JoyButton 5 postframe
|
||||
|
||||
lda INPT4 ;read button input
|
||||
bmi JoyButton__postframe__12__NotPressed
|
||||
.code
|
||||
|
||||
;;; start action Local joybutton
|
||||
;;; start action Local 6 joybutton
|
||||
|
||||
inc Local__tmp+0
|
||||
inc Local__6__tmp+0
|
||||
inc PFColor_pfcolor_b0
|
||||
|
||||
;;; end action Local joybutton
|
||||
;;; end action Local 6 joybutton
|
||||
|
||||
JoyButton__postframe__12__NotPressed:
|
||||
|
||||
;;; end action JoyButton postframe
|
||||
;;; end action JoyButton 5 postframe
|
||||
|
||||
FRAME_END
|
||||
.code
|
||||
|
||||
;;; start action ResetSwitch nextframe
|
||||
;;; start action ResetSwitch 2 nextframe
|
||||
|
||||
lsr SWCHB ; test Game Reset switch
|
||||
bcs ResetSwitch__nextframe__14__NoStart
|
||||
.code
|
||||
|
||||
;;; start action ResetConsole resetswitch
|
||||
;;; start action ResetConsole 3 resetswitch
|
||||
|
||||
jmp Main::__Reset ; jump to Reset handler
|
||||
|
||||
;;; end action ResetConsole resetswitch
|
||||
;;; end action ResetConsole 3 resetswitch
|
||||
|
||||
ResetSwitch__nextframe__14__NoStart:
|
||||
|
||||
;;; end action ResetSwitch nextframe
|
||||
;;; end action ResetSwitch 2 nextframe
|
||||
|
||||
jmp FrameLoop__start__2__NextFrame ; loop to next frame
|
||||
|
||||
;;; end action FrameLoop start
|
||||
;;; end action FrameLoop 1 start
|
||||
; start main routine
|
||||
.segment "VECTORS"
|
||||
Return: .word $6060
|
||||
@ -244,7 +244,7 @@ VecNMI:
|
||||
VecReset: .word Main::__Reset
|
||||
VecBRK: .word Main::__BRK
|
||||
|
||||
;;; end action Init main_init
|
||||
;;; end action Init 7 main_init
|
||||
|
||||
.endscope
|
||||
Main__Start = Main::__Start
|
Loading…
x
Reference in New Issue
Block a user