mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2025-02-27 13:29:32 +00:00
280 lines
4.6 KiB
Plaintext
280 lines
4.6 KiB
Plaintext
|
|
component Kernel
|
|
lines: 0..255
|
|
bgcolor: 0..255
|
|
end
|
|
|
|
component Bitmap
|
|
bitmapdata: array of 0..255
|
|
end
|
|
|
|
component HasBitmap
|
|
bitmap: [Bitmap]
|
|
end
|
|
|
|
component Colormap
|
|
colormapdata: array of 0..255
|
|
end
|
|
|
|
component HasColormap
|
|
colormap: [Colormap]
|
|
end
|
|
|
|
component Sprite
|
|
height: 0..255
|
|
plyrindex: 0..1
|
|
end
|
|
|
|
component Player end
|
|
|
|
component PlayerFlags
|
|
plyrflags: 0..63
|
|
end
|
|
|
|
component HasXpos
|
|
xpos: 0..255
|
|
end
|
|
|
|
component HasYpos
|
|
ypos: 0..255
|
|
end
|
|
|
|
component HasXYVel
|
|
xyvel: 0..255
|
|
end
|
|
|
|
system FrameLoop
|
|
on start do once [Kernel] emit (preframe, kernel, postframe)
|
|
---
|
|
{{@NextFrame}}:
|
|
FRAME_START
|
|
{{!preframe}}
|
|
KERNEL_START
|
|
{{!kernel}}
|
|
KERNEL_END
|
|
{{!postframe}}
|
|
FRAME_END
|
|
lsr SWCHB ; test Game Reset switch
|
|
bcs {{@NoStart}}
|
|
jmp Start
|
|
{{@NoStart}}:
|
|
jmp {{@NextFrame}}
|
|
---
|
|
end
|
|
|
|
system SimpleKernel
|
|
locals 12
|
|
on preframe do each [Sprite,HasBitmap,HasColormap,HasYpos]
|
|
---
|
|
lda #192 ; TODO: numlines
|
|
sec
|
|
sbc {{<ypos}}
|
|
sta {{$11}}
|
|
|
|
ldy {{<bitmap}} ; deref
|
|
lda {{<Bitmap.bitmapdata}},y
|
|
sec
|
|
sbc {{$11}}
|
|
sta {{$0}},x
|
|
lda {{>Bitmap.bitmapdata}},y
|
|
sbc #0
|
|
sta {{$2}},x
|
|
|
|
ldy {{<colormap}}
|
|
lda {{<Colormap.colormapdata}},y
|
|
sec
|
|
sbc {{$11}}
|
|
sta {{$4}},x
|
|
lda {{>Colormap.colormapdata}},y
|
|
sbc #0
|
|
sta {{$6}},x
|
|
|
|
lda {{<height}}
|
|
sta {{$8}},x
|
|
lda {{<ypos}}
|
|
sta {{$10}},x
|
|
---
|
|
on preframe do once [Sprite,HasBitmap,HasColormap,HasYpos]
|
|
---
|
|
; L0 L1 H0 H1 -> L0 H0 L1 H1
|
|
lda {{$1}}
|
|
ldy {{$2}}
|
|
sty {{$1}}
|
|
sta {{$2}}
|
|
lda {{$5}}
|
|
ldy {{$6}}
|
|
sty {{$5}}
|
|
sta {{$6}}
|
|
---
|
|
on kernel do once [Kernel]
|
|
---
|
|
lda {{<bgcolor}}
|
|
sta COLUBK
|
|
ldy {{<lines}}
|
|
@LVScan:
|
|
lda {{$8}} ; height
|
|
dcp {{$10}} ; ypos
|
|
bcs @DoDraw1
|
|
lda #0
|
|
.byte $2C
|
|
@DoDraw1:
|
|
lda ({{$0}}),y
|
|
sta WSYNC
|
|
sta GRP0
|
|
lda ({{$4}}),y
|
|
sta COLUP0
|
|
|
|
lda {{$9}} ; height
|
|
dcp {{$11}} ; ypos
|
|
bcs @DoDraw2
|
|
lda #0
|
|
.byte $2C
|
|
@DoDraw2:
|
|
lda ({{$2}}),y
|
|
sta GRP1
|
|
lda ({{$6}}),y
|
|
sta COLUP1
|
|
|
|
dey ; decrement
|
|
bne @LVScan ; repeat until 192 lines
|
|
---
|
|
end
|
|
|
|
system SetXPos
|
|
on preframe do each [Sprite,HasXpos] emit (SetHorizPos)
|
|
---
|
|
lda {{<xpos}}
|
|
ldy {{<plyrindex}}
|
|
sta HMCLR
|
|
jsr {{^SetHorizPos}}
|
|
---
|
|
end
|
|
|
|
system SetHorizPos
|
|
on SetHorizPos do once [HasXpos]
|
|
---
|
|
; SetHorizPos routine
|
|
; A = X coordinate
|
|
; Y = player number (0 or 1)
|
|
SetHorizPos:
|
|
sta WSYNC ; start a new line
|
|
sec ; set carry flag
|
|
nop
|
|
@DivideLoop:
|
|
sbc #15 ; subtract 15
|
|
bcs @DivideLoop ; branch until negative
|
|
eor #7 ; calculate fine offset
|
|
asl
|
|
asl
|
|
asl
|
|
asl
|
|
sta RESP0,y ; fix coarse position
|
|
sta HMP0,y ; set fine offset
|
|
sta WSYNC
|
|
sta HMOVE
|
|
rts ; return to caller
|
|
---
|
|
end
|
|
|
|
system JoyRead
|
|
locals 1
|
|
on postframe do once [Player]
|
|
---
|
|
lda SWCHA
|
|
sta {{$0}}
|
|
---
|
|
on postframe do each [Player] emit (joyup, joydown, joyleft, joyright, joybutton)
|
|
---
|
|
asl {{$0}}
|
|
bcs {{@SkipMoveRight}}
|
|
{{!joyright}}
|
|
{{@SkipMoveRight}}:
|
|
asl {{$0}}
|
|
bcs {{@SkipMoveLeft}}
|
|
{{!joyleft}}
|
|
{{@SkipMoveLeft}}:
|
|
asl {{$0}}
|
|
bcs {{@SkipMoveDown}}
|
|
{{!joydown}}
|
|
{{@SkipMoveDown}}:
|
|
asl {{$0}}
|
|
bcs {{@SkipMoveUp}}
|
|
{{!joyup}}
|
|
{{@SkipMoveUp}}:
|
|
---
|
|
end
|
|
|
|
system MoveJoyX
|
|
on joyleft do source [HasXpos]
|
|
---
|
|
lda {{<xpos}}
|
|
sec
|
|
sbc #1
|
|
bcc {{@nomove}}
|
|
sta {{<xpos}}
|
|
{{@nomove}}:
|
|
---
|
|
on joyright do source [HasXpos]
|
|
---
|
|
lda {{<xpos}}
|
|
clc
|
|
adc #1
|
|
cmp #150
|
|
bcs {{@nomove}}
|
|
sta {{<xpos}}
|
|
{{@nomove}}:
|
|
---
|
|
end
|
|
|
|
system MoveJoyY
|
|
on joyup do source [HasYpos]
|
|
---
|
|
lda {{<ypos}}
|
|
sec
|
|
sbc #1
|
|
bcc {{@nomove}}
|
|
sta {{<ypos}}
|
|
{{@nomove}}:
|
|
---
|
|
on joydown do source [HasYpos]
|
|
---
|
|
lda {{<ypos}}
|
|
clc
|
|
adc #1
|
|
cmp #150
|
|
bcs {{@nomove}}
|
|
sta {{<ypos}}
|
|
{{@nomove}}:
|
|
---
|
|
end
|
|
|
|
scope Main
|
|
entity Kernel [Kernel]
|
|
const lines = 192
|
|
const bgcolor = 0xa2
|
|
end
|
|
entity Bitmap1 [Bitmap]
|
|
const bitmapdata = [1, 1, 3, 7, 15, 31, 63, 127]
|
|
end
|
|
entity Bitmap2 [Bitmap]
|
|
const bitmapdata = [$18,$3e,$ff,$ff,$ff,$ff,$3e,$18]
|
|
end
|
|
entity Colormap1 [Colormap]
|
|
const colormapdata = [6, 3, 6, 9, 12, 14, 31, 63]
|
|
end
|
|
entity Player0 [Sprite,HasBitmap,HasColormap,HasXpos,HasYpos,Player]
|
|
const plyrindex = 0
|
|
init height = 8
|
|
init xpos = 50
|
|
init ypos = 50
|
|
end
|
|
entity Player1 [Sprite,HasBitmap,HasColormap,HasXpos,HasYpos,Player]
|
|
const plyrindex = 1
|
|
init height = 8
|
|
init xpos = 100
|
|
init ypos = 60
|
|
init bitmap = #Bitmap2
|
|
end
|
|
end
|
|
|