mirror of
https://github.com/peterdell/wudsn-ide.git
synced 2024-06-03 06:29:35 +00:00
424 lines
13 KiB
NASM
424 lines
13 KiB
NASM
processor 6502
|
||
include vcs.h
|
||
|
||
HEIGHT = 72
|
||
|
||
RED = $42
|
||
GREEN = $d6;$c6
|
||
BLUE = $86
|
||
|
||
|
||
|
||
;===============================================================================
|
||
; Z P - V A R I A B L E S
|
||
;===============================================================================
|
||
|
||
SEG.U variables
|
||
ORG $80
|
||
|
||
tmpVar .byte
|
||
tmpVar2 .byte
|
||
|
||
frameCnt .byte
|
||
|
||
ptr ds 6*2
|
||
colPtr ds 2
|
||
|
||
;===============================================================================
|
||
; M A C R O S
|
||
;===============================================================================
|
||
|
||
MAC BIT_B
|
||
.byte $24
|
||
ENDM
|
||
|
||
MAC BIT_W
|
||
.byte $2c
|
||
ENDM
|
||
|
||
MAC SLEEP
|
||
IF {1} = 1
|
||
ECHO "ERROR: SLEEP 1 not allowed !"
|
||
END
|
||
ENDIF
|
||
IF {1} & 1
|
||
nop $00
|
||
REPEAT ({1}-3)/2
|
||
nop
|
||
REPEND
|
||
ELSE
|
||
REPEAT ({1})/2
|
||
nop
|
||
REPEND
|
||
ENDIF
|
||
ENDM
|
||
|
||
|
||
;===============================================================================
|
||
; R O M - C O D E
|
||
;===============================================================================
|
||
SEG Bank0
|
||
ORG $f000
|
||
|
||
Start SUBROUTINE
|
||
sei ; Disable interrupts, if there are any.
|
||
cld ; Clear BCD math bit.
|
||
ldx #0
|
||
txs
|
||
pha ; Set stack to beginning.
|
||
txa
|
||
.clearLoop:
|
||
pha
|
||
dex
|
||
bne .clearLoop
|
||
|
||
jsr GameInit
|
||
|
||
.mainLoop:
|
||
jsr VerticalBlank
|
||
jsr GameCalc
|
||
jsr DrawScreen
|
||
jsr OverScan
|
||
jmp .mainLoop
|
||
|
||
|
||
GameInit SUBROUTINE
|
||
lda #$00
|
||
sta COLUP0
|
||
lda #$00
|
||
sta COLUP1
|
||
lda #$06
|
||
sta COLUPF
|
||
|
||
lda #1
|
||
sta CTRLPF
|
||
|
||
lda #%011
|
||
sta NUSIZ0
|
||
sta NUSIZ1
|
||
sta VDELP0
|
||
sta VDELP1
|
||
|
||
lda #>ColTbl
|
||
sta colPtr+1
|
||
|
||
sta WSYNC
|
||
SLEEP 37
|
||
sta RESP0
|
||
sta RESP1
|
||
|
||
lda #$10
|
||
sta HMP0
|
||
|
||
lda #$20
|
||
sta HMP1
|
||
|
||
sta WSYNC
|
||
sta HMOVE
|
||
|
||
|
||
rts
|
||
|
||
|
||
VerticalBlank SUBROUTINE
|
||
lda #2
|
||
sta WSYNC
|
||
sta VSYNC
|
||
sta WSYNC
|
||
sta WSYNC
|
||
lsr
|
||
ldx #44
|
||
sta WSYNC
|
||
sta VSYNC
|
||
stx TIM64T
|
||
rts
|
||
|
||
|
||
GameCalc SUBROUTINE
|
||
ldx frameCnt
|
||
dex
|
||
bpl .skipReset
|
||
ldx #2
|
||
.skipReset:
|
||
stx frameCnt
|
||
txa
|
||
clc
|
||
adc #<ColTbl
|
||
sta colPtr
|
||
|
||
lda ClownTbl_Lo,x
|
||
sta ptr
|
||
adc #HEIGHT
|
||
sta ptr+2
|
||
adc #HEIGHT
|
||
sta ptr+4
|
||
|
||
lda ClownTbl_Lo+3,x
|
||
sta ptr+6
|
||
adc #HEIGHT
|
||
sta ptr+8
|
||
adc #HEIGHT
|
||
sta ptr+10
|
||
|
||
lda ClownTbl_Hi,x
|
||
sta ptr+1
|
||
sta ptr+3
|
||
sta ptr+5
|
||
lda ClownTbl_Hi+3,x
|
||
sta ptr+7
|
||
sta ptr+9
|
||
sta ptr+11
|
||
|
||
rts
|
||
|
||
|
||
align 256
|
||
|
||
DrawScreen SUBROUTINE
|
||
ldx #227
|
||
.waitTim:
|
||
lda INTIM
|
||
bne .waitTim
|
||
sta WSYNC
|
||
;---------------------------------------
|
||
sta VBLANK ; 3
|
||
stx TIM64T ; 4
|
||
|
||
ldx #30
|
||
.wait:
|
||
dex
|
||
sta WSYNC
|
||
bne .wait
|
||
|
||
SLEEP 53
|
||
lda #%11111100 ; 2
|
||
sta PF2 ; 3
|
||
ldy #HEIGHT-1 ; 2
|
||
.loop:
|
||
sty tmpVar ; 3
|
||
lda (colPtr),y ; 5
|
||
sta COLUPF ; 3 = 11
|
||
|
||
lda (ptr+$0),y ; 5
|
||
sta GRP0 ; 3
|
||
lda (ptr+$2),y ; 5
|
||
sta GRP1 ; 3
|
||
lda (ptr+$4),y ; 5
|
||
sta GRP0 ; 3
|
||
lda (ptr+$6),y ; 5
|
||
sta tmpVar2 ; 3 = 32
|
||
|
||
lax (ptr+$a),y ; 5
|
||
lda (ptr+$8),y ; 5
|
||
ldy tmpVar2 ; 3
|
||
sty GRP1 ; 3 @43
|
||
sta GRP0 ; 3
|
||
stx GRP1 ; 3
|
||
sta GRP0 ; 3 = 25
|
||
|
||
ldy tmpVar ; 3
|
||
dey ; 2
|
||
bpl .loop ; 2<>= 7/8
|
||
|
||
;---------------------------------------------------------------
|
||
iny
|
||
sty PF2
|
||
sty GRP0
|
||
sty GRP1
|
||
sty GRP0
|
||
|
||
ldx #2
|
||
.waitScreen:
|
||
lda INTIM
|
||
bne .waitScreen
|
||
sta WSYNC
|
||
stx VBLANK
|
||
|
||
rts
|
||
|
||
|
||
OverScan SUBROUTINE
|
||
lda #36
|
||
sta TIM64T
|
||
|
||
.waitTim:
|
||
lda INTIM
|
||
bne .waitTim
|
||
rts
|
||
|
||
|
||
;===============================================================================
|
||
; R O M - T A B L E S (Bank 0)
|
||
;===============================================================================
|
||
|
||
ColTbl:
|
||
REPEAT HEIGHT/3
|
||
.byte BLUE
|
||
.byte GREEN
|
||
.byte RED
|
||
REPEND
|
||
.byte BLUE
|
||
.byte GREEN
|
||
|
||
.byte " Clown Demo - Copyright 2003, Thomas Jentzsch "
|
||
|
||
org $f200
|
||
|
||
|
||
;RGB:
|
||
Clown0_0:
|
||
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
|
||
.byte 255, 254, 254, 254, 255, 255, 255, 255, 251, 255, 255, 242
|
||
.byte 255, 255, 224, 255, 253, 224, 253, 248, 240, 252, 254, 240
|
||
.byte 255, 255, 228, 254, 236, 192, 254, 210, 128, 255, 148, 128
|
||
.byte 255, 210, 128, 255, 201, 0, 255, 169, 0, 254, 73, 0
|
||
.byte 255, 73, 0, 255, 73, 0, 255, 17, 0, 255, 1, 0
|
||
Clown0_1:
|
||
.byte 15, 15, 11, 63, 127, 19, 255, 126, 18, 119, 71, 3
|
||
.byte 15, 7, 15, 127, 255, 255, 255, 255, 127, 255, 255, 223
|
||
.byte 255, 255, 159, 255, 255, 43, 255, 127, 9, 255, 255, 3
|
||
.byte 255, 255, 7, 207, 71, 1, 71, 65, 0, 67, 65, 0
|
||
.byte 145, 128, 0, 166, 74, 12, 142, 14, 4, 205, 73, 80
|
||
.byte 227, 145, 16, 193, 65, 0, 193, 1, 0, 129, 1, 0
|
||
Clown0_2:
|
||
.byte 255, 255, 255, 255, 255, 255, 255, 223, 223, 255, 251, 237
|
||
.byte 255, 254, 248, 253, 249, 243, 255, 254, 252, 254, 250, 240
|
||
.byte 250, 242, 240, 255, 246, 100, 252, 252, 248, 248, 240, 224
|
||
.byte 232, 208, 128, 208, 192, 128, 224, 208, 200, 251, 184, 168
|
||
.byte 188, 188, 57, 159, 91, 69, 206, 69, 64, 192, 32, 0
|
||
.byte 96, 32, 0, 160, 32, 16, 80, 40, 4, 254, 43, 0
|
||
|
||
align 256
|
||
Clown0_3:
|
||
.byte 239, 239, 174, 239, 223, 223, 255, 191, 95, 223, 191, 63
|
||
.byte 127, 127, 223, 255, 255, 21, 111, 182, 2, 255, 95, 1
|
||
.byte 95, 11, 0, 149, 214, 255, 127, 39, 11, 31, 63, 11
|
||
.byte 127, 39, 15, 79, 31, 31, 159, 135, 14, 143, 221, 77
|
||
.byte 7, 142, 88, 253, 92, 28, 204, 28, 142, 222, 14, 14
|
||
.byte 13, 0, 0, 21, 0, 0, 9, 0, 1, 23, 91, 136
|
||
Clown0_4:
|
||
.byte 255, 255, 254, 255, 127, 127, 255, 255, 127, 255, 255, 127
|
||
.byte 255, 255, 255, 255, 255, 247, 255, 255, 191, 255, 255, 127
|
||
.byte 255, 127, 47, 255, 254, 250, 255, 219, 83, 247, 183, 75
|
||
.byte 223, 91, 109, 255, 253, 221, 255, 254, 182, 127, 125, 116
|
||
.byte 255, 221, 169, 255, 182, 16, 111, 83, 2, 255, 86, 4
|
||
.byte 127, 150, 4, 255, 53, 48, 255, 245, 32, 255, 106, 0
|
||
Clown0_5:
|
||
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
|
||
.byte 255, 251, 247, 247, 255, 245, 255, 247, 233, 255, 251, 237
|
||
.byte 255, 253, 233, 255, 237, 210, 255, 237, 228, 255, 247, 228
|
||
.byte 255, 246, 228, 127, 237, 160, 255, 218, 128, 255, 235, 193
|
||
.byte 223, 181, 0, 255, 214, 128, 255, 85, 0, 255, 182, 32
|
||
.byte 255, 182, 0, 255, 85, 0, 255, 107, 0, 255, 182, 0
|
||
|
||
align 256
|
||
|
||
;GBR
|
||
Clown1_0:
|
||
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
|
||
.byte 255, 255, 254, 254, 255, 255, 253, 255, 255, 249, 255, 255
|
||
.byte 241, 255, 255, 224, 255, 249, 224, 252, 252, 240, 254, 255
|
||
.byte 240, 255, 255, 208, 254, 244, 128, 254, 202, 128, 255, 201
|
||
.byte 128, 255, 210, 128, 255, 169, 128, 255, 169, 0, 253, 82
|
||
.byte 0, 255, 165, 0, 255, 73, 0, 255, 36, 0, 255, 1
|
||
Clown1_1:
|
||
.byte 5, 31, 31, 9, 127, 127, 15, 255, 123, 2, 103, 71
|
||
.byte 7, 15, 15, 15, 255, 255, 254, 255, 255, 191, 255, 255
|
||
.byte 95, 255, 255, 47, 255, 255, 18, 255, 127, 1, 255, 255
|
||
.byte 7, 255, 231, 3, 207, 71, 1, 69, 65, 0, 65, 0
|
||
.byte 0, 129, 160, 0, 142, 142, 14, 142, 5, 0, 205, 233
|
||
.byte 192, 209, 81, 0, 193, 65, 0, 129, 129, 0, 129, 0
|
||
Clown1_2:
|
||
.byte 178, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255
|
||
.byte 245, 255, 252, 241, 249, 251, 246, 255, 254, 248, 254, 249
|
||
.byte 240, 250, 250, 98, 255, 252, 236, 252, 248, 240, 248, 232
|
||
.byte 192, 232, 208, 128, 208, 192, 128, 233, 233, 161, 249, 184
|
||
.byte 180, 189, 189, 26, 95, 91, 68, 205, 65, 0, 160, 64
|
||
.byte 0, 160, 32, 0, 160, 48, 0, 104, 76, 4, 255, 74
|
||
|
||
align 256
|
||
|
||
Clown1_3:
|
||
.byte 159, 239, 239, 206, 239, 223, 158, 255, 191, 63, 223, 127
|
||
.byte 63, 127, 255, 173, 255, 127, 5, 127, 187, 1, 223, 47
|
||
.byte 1, 43, 5, 0, 223, 255, 127, 55, 15, 14, 63, 55
|
||
.byte 2, 111, 15, 15, 31, 31, 15, 135, 143, 13, 253, 107
|
||
.byte 6, 14, 125, 88, 189, 156, 12, 44, 142, 30, 78, 14
|
||
.byte 4, 19, 0, 0, 19, 0, 0, 5, 3, 2, 255, 250
|
||
Clown1_4:
|
||
.byte 127, 255, 127, 126, 255, 255, 255, 255, 255, 127, 255, 255
|
||
.byte 223, 255, 255, 255, 255, 255, 183, 255, 255, 127, 255, 255
|
||
.byte 47, 255, 127, 62, 255, 253, 229, 255, 183, 201, 219, 215
|
||
.byte 151, 255, 189, 122, 255, 251, 186, 255, 255, 109, 255, 126
|
||
.byte 180, 223, 109, 72, 255, 109, 1, 187, 83, 2, 255, 92
|
||
.byte 4, 127, 154, 16, 127, 117, 64, 255, 250, 0, 255, 170
|
||
Clown1_5:
|
||
.byte 255, 255, 255, 255, 255, 255, 247, 255, 255, 255, 255, 255
|
||
.byte 239, 255, 255, 245, 255, 247, 234, 255, 255, 234, 255, 247
|
||
.byte 236, 255, 251, 209, 239, 237, 201, 255, 251, 228, 255, 247
|
||
.byte 226, 255, 251, 201, 255, 107, 160, 255, 237, 64, 255, 235
|
||
.byte 128, 255, 173, 128, 255, 219, 0, 255, 43, 0, 255, 246
|
||
.byte 0, 255, 155, 0, 255, 106, 0, 255, 235, 0, 255, 171
|
||
|
||
|
||
align 256
|
||
Clown2_0:
|
||
.byte 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
|
||
.byte 255, 254, 255, 254, 254, 255, 255, 253, 255, 255, 242, 255
|
||
.byte 255, 224, 255, 255, 224, 253, 248, 224, 252, 252, 240, 255
|
||
.byte 255, 232, 255, 253, 192, 254, 212, 128, 255, 202, 128, 255
|
||
.byte 210, 128, 255, 201, 128, 255, 201, 128, 255, 146, 0, 255
|
||
.byte 82, 0, 255, 37, 0, 255, 36, 0, 255, 17, 0, 255
|
||
Clown2_1:
|
||
.byte 15, 3, 63, 63, 19, 127, 255, 21, 255, 103, 3, 79
|
||
.byte 7, 7, 31, 63, 183, 255, 255, 254, 255, 255, 255, 255
|
||
.byte 255, 175, 255, 255, 45, 255, 255, 9, 255, 127, 1, 255
|
||
.byte 255, 7, 239, 135, 3, 79, 67, 1, 69, 65, 0, 146
|
||
.byte 0, 0, 160, 134, 10, 142, 14, 4, 198, 73, 0, 121
|
||
.byte 225, 0, 209, 65, 0, 193, 129, 0, 129, 1, 0, 129
|
||
Clown2_2:
|
||
.byte 251, 253, 255, 255, 255, 255, 255, 111, 255, 255, 181, 255
|
||
.byte 251, 250, 253, 253, 241, 255, 251, 246, 255, 252, 248, 253
|
||
.byte 249, 240, 254, 243, 98, 254, 252, 236, 252, 248, 224, 240
|
||
.byte 224, 192, 216, 160, 128, 224, 192, 128, 245, 233, 168, 252
|
||
.byte 188, 56, 221, 94, 18, 223, 76, 65, 203, 64, 0, 192
|
||
.byte 32, 0, 160, 32, 0, 176, 48, 8, 172, 46, 1, 255
|
||
|
||
align 256
|
||
|
||
Clown2_3:
|
||
.byte 223, 174, 255, 239, 206, 255, 223, 159, 223, 95, 62, 127
|
||
.byte 127, 127, 255, 223, 149, 255, 127, 2, 119, 173, 1, 127
|
||
.byte 47, 0, 79, 5, 128, 255, 127, 23, 47, 31, 23, 111
|
||
.byte 42, 5, 95, 15, 15, 159, 159, 7, 143, 143, 93, 107
|
||
.byte 6, 140, 253, 252, 76, 188, 140, 12, 174, 94, 14, 14
|
||
.byte 12, 0, 21, 0, 0, 19, 0, 0, 11, 7, 0, 255
|
||
Clown2_4:
|
||
.byte 255, 255, 255, 255, 127, 255, 127, 127, 255, 255, 221, 255
|
||
.byte 255, 255, 255, 255, 255, 255, 255, 183, 255, 255, 127, 255
|
||
.byte 255, 175, 255, 127, 189, 255, 237, 165, 251, 237, 83, 239
|
||
.byte 151, 43, 253, 255, 117, 255, 250, 189, 255, 127, 105, 255
|
||
.byte 251, 146, 255, 221, 8, 255, 83, 1, 255, 86, 4, 223
|
||
.byte 86, 0, 255, 154, 16, 127, 117, 192, 255, 186, 0, 255
|
||
Clown2_5:
|
||
.byte 255, 255, 255, 255, 255, 255, 255, 251, 255, 255, 255, 255
|
||
.byte 255, 251, 255, 247, 214, 255, 253, 229, 255, 246, 237, 255
|
||
.byte 255, 228, 255, 237, 201, 255, 237, 201, 255, 247, 226, 255
|
||
.byte 245, 228, 255, 247, 161, 239, 211, 64, 255, 237, 64, 255
|
||
.byte 107, 0, 255, 173, 128, 255, 107, 0, 255, 171, 0, 255
|
||
.byte 182, 0, 255, 155, 0, 255, 106, 0, 255, 214, 0, 255
|
||
|
||
|
||
ClownTbl_Lo:
|
||
.byte <Clown0_0, <Clown2_0, <Clown1_0
|
||
.byte <Clown0_3, <Clown2_3, <Clown1_3
|
||
ClownTbl_Hi:
|
||
.byte >Clown0_0, >Clown2_0, >Clown1_0
|
||
.byte >Clown0_3, >Clown2_3, >Clown1_3
|
||
|
||
org $f7fc
|
||
.word Start
|
||
.word Start
|
||
|
||
|