wudsn-ide/com.wudsn.ide.ref/ASM/Atari2600/DASM/minidig/demos/clown_demo.asm
2018-12-30 16:52:33 +01:00

424 lines
13 KiB
NASM
Raw Blame History

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