This commit is contained in:
Pecusx
2024-08-15 10:13:13 +02:00
parent 87f8752c61
commit 52d1180275
9 changed files with 658 additions and 356 deletions
+30 -19
View File
@@ -24,6 +24,7 @@ swap_table=$0600 ; table for swap bytes in left characters :)
.zpvar JumpPhase .byte .zpvar JumpPhase .byte
.zpvar Hit .byte .zpvar Hit .byte
.zpvar Level .byte .zpvar Level .byte
.zpvar play_flag .byte
;--------------------------------------------------- ;---------------------------------------------------
icl 'lib/ATARISYS.ASM' icl 'lib/ATARISYS.ASM'
icl 'lib/MACRO.ASM' icl 'lib/MACRO.ASM'
@@ -42,9 +43,9 @@ swap_table=$0600 ; table for swap bytes in left characters :)
;--------------------------------------------------- ;---------------------------------------------------
org $2000 org $2000
PLAYER PLAYER
ins 'music/pl_2000.bin',+6 ; MPT player $2000 icl 'music/playlzs16.asm' ; Music Player
org $2800 org $3000
PMgraph PMgraph
org PMGraph+$800 ; P/M graphics for clouds org PMGraph+$800 ; P/M graphics for clouds
;--------------------------------------------------- ;---------------------------------------------------
@@ -127,6 +128,7 @@ NewGame
jsr PlayInGameMusic jsr PlayInGameMusic
jsr GameR jsr GameR
jsr GameOverR jsr GameOverR
jsr PlayGameOverMusic
AnyKey AnyKey
jsr FadeColorsOUT jsr FadeColorsOUT
jsr HiScoreR jsr HiScoreR
@@ -137,6 +139,7 @@ NewGame
jsr PlayInGameMusic jsr PlayInGameMusic
jsr GameL jsr GameL
jsr GameOverL jsr GameOverL
jsr PlayGameOverMusic
AnyKey AnyKey
jsr FadeColorsOUT jsr FadeColorsOUT
jsr HiScoreL jsr HiScoreL
@@ -1304,29 +1307,35 @@ pressed
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc PrepareMusicPlayer .proc PrepareMusicPlayer
;jsr StopMusic jsr StopMusic
VMAIN VBLinterrupt,7 ; jsr SetVBL VMAIN VBLinterrupt,7 ; jsr SetVBL
rts rts
.endp .endp
.proc PlayInGameMusic .proc PlayInGameMusic
lda #$00 jsr StopMusic
ldy #<MUSIC1_DATA mwa #MUSIC1_DATA song_start_ptr
ldx #>MUSIC1_DATA mwa #MUSIC1_DATA_END song_end_ptr
jmp PLAYER ; rts jsr init_song
mva #1 play_flag
rts
.endp .endp
.proc PlayGameOverMusic .proc PlayGameOverMusic
lda #$00 jsr StopMusic
ldy #<MUSIC2_DATA mwa #MUSIC2_DATA song_start_ptr
ldx #>MUSIC2_DATA mwa #MUSIC2_DATA_END song_end_ptr
jmp PLAYER ; rts jsr init_song
mva #1 play_flag
rts
.endp .endp
.proc StopMusic .proc StopMusic
lda #$02 mva #0 play_flag
jmp PLAYER ; rts rts
.endp .endp
.proc VBLinterrupt .proc VBLinterrupt
jsr PLAYER+3 lda play_flag
pla beq @+
jsr PLAYER
@ pla
tay tay
pla pla
tax tax
@@ -1365,10 +1374,12 @@ font4l
; SCR_HEIGHT lines 256bytes each ; SCR_HEIGHT lines 256bytes each
screen screen
.ds $100*SCR_HEIGHT .ds $100*SCR_HEIGHT
org $6900 ; POZOR!!! .align $100
MUSIC1_DATA MUSIC1_DATA
ins 'music/ingame.mpt',+6 ; ingame music ins 'music/InGame.lzss' ; ingame music
MUSIC1_DATA_END
.align $100
MUSIC2_DATA MUSIC2_DATA
ins 'music/gameover.mpt',+6 ; game over music ins 'music/GameOver.lzss' ; game over music
MUSIC2_DATA_END
run FirstSTART run FirstSTART
BIN
View File
Binary file not shown.
+35 -3
View File
@@ -11,9 +11,14 @@
;--------------------------------------------------- ;---------------------------------------------------
icl '../lib/ATARISYS.ASM' icl '../lib/ATARISYS.ASM'
icl '../lib/MACRO.ASM' icl '../lib/MACRO.ASM'
;---------------------------------------------------
org $2000
PLAYER
icl '../music/playlzs16.asm' ; Music Player
;--------------------------------------------------- ;---------------------------------------------------
; BASIC off ; BASIC off
ORG $2c00 ORG $2c00
start1
mva #$ff portb mva #$ff portb
mwa #DL_pre dlptrs mwa #DL_pre dlptrs
lda #@dmactl(narrow|dma) ; narrow screen width, DL on lda #@dmactl(narrow|dma) ; narrow screen width, DL on
@@ -22,7 +27,7 @@
sta COLBAK sta COLBAK
mva #15 COLOR1 mva #15 COLOR1
jsr wait_for_releasing_keyz jsr wait_for_releasing_keyz
jsr PlayMusic
leet_anim leet_anim
; test for going further ; test for going further
lda CONSOL lda CONSOL
@@ -72,6 +77,7 @@ next_letter
jmp @- jmp @-
leet_end leet_end
jsr StopMusic
jsr wait_for_releasing_keyz jsr wait_for_releasing_keyz
rts rts
@@ -135,8 +141,34 @@ leet_speeks_h
.by >leet_speek4 .by >leet_speek4
leet_screen leet_screen
.ds 32*9 .ds 32*9
leet_screen_end leet_screen_end
ini $2000 ;--------------------------------------------------
.proc PlayMusic
mwa #MUSIC_DATA song_start_ptr
mwa #MUSIC_DATA_END song_end_ptr
jsr init_song
VMAIN VBLinterrupt,7 ; jsr SetVBL
rts
.endp
.proc StopMusic
VMAIN XITVBV,7 ; jsr SetVBL
rts
.endp
.proc VBLinterrupt
jsr PLAYER
pla
tay
pla
tax
pla
rti
.endp
.align $100
MUSIC_DATA
ins '../music/Title.lzss' ; title music
MUSIC_DATA_END
ini start1
;--------------------------------------------------- ;---------------------------------------------------
org $3000 org $3000
+54 -25
View File
@@ -1,4 +1,4 @@
mads 2.1.7 mads 2.1.7 build 3 (13 Sep 23)
Label table: Label table:
00 E400 EDITRV 00 E400 EDITRV
00 E410 SCRENV 00 E410 SCRENV
@@ -577,36 +577,65 @@ FFFD 0000 @KBCODE
00 0082 TEMP_B 00 0082 TEMP_B
00 0083 TEMP_W2 00 0083 TEMP_W2
00 0085 TEMP_W3 00 0085 TEMP_W3
00 2C24 LEET_ANIM 00 2000 PLAYER
00 2C4D 0@ 00 00E0 SONG_START_PTR
00 2C71 NEXT_LETTER 00 00E2 SONG_END_PTR
00 2C90 LEET_END 00 00E4 CHN_COPY
00 2C94 WAIT_FOR_RELEASING_KEYZ 00 00ED CHN_POS
00 2C94 WAIT_FOR_RELEASING_KEYZ.1@ 00 00F6 BPTR
00 2C9B WAIT_FOR_RELEASING_KEYZ.2@ 00 00F8 CUR_POS
00 2CA6 WAIT_FOR_RELEASING_KEYZ.3@ 00 00F9 CHN_BITS
00 2CAC DL_PRE 00 00FA BIT_DATA
00 2CCC PRE_SCREEN 00 2003 INIT_SONG
00 2DEC PRE_SCREEN_END 00 2006 INIT_SONG.0@
00 2DEC LEET_SPEEK1 00 2040 INIT_SONG.CLEAR
00 2E06 LEET_SPEEK2 00 2048 INIT_SONG.CBUF
00 2E20 LEET_SPEEK3 00 2056 PLAY_FRAME
00 2E3A LEET_SPEEK4 00 2062 PLAY_FRAME.CHN_LOOP
00 2E54 LEET_SPEEKS_L 00 2074 PLAY_FRAME.GOT_BIT
00 2E58 LEET_SPEEKS_H 00 2080 PLAY_FRAME.DO_COPY_BYTE
00 2E5C LEET_SCREEN 00 2088 PLAY_FRAME.STORE
00 2F7C LEET_SCREEN_END 00 208F PLAY_FRAME.SKIP_CHN
00 2096 PLAY_FRAME.CHECK_END_SONG
00 20A8 GET_BYTE
00 20A9 SONG_PTR
00 2100 BUFFERS
00 2C00 START1
00 2C27 LEET_ANIM
00 2C50 1@
00 2C74 NEXT_LETTER
00 2C93 LEET_END
00 2C9A WAIT_FOR_RELEASING_KEYZ
00 2C9A WAIT_FOR_RELEASING_KEYZ.2@
00 2CA1 WAIT_FOR_RELEASING_KEYZ.3@
00 2CAC WAIT_FOR_RELEASING_KEYZ.4@
00 2CB2 DL_PRE
00 2CD2 PRE_SCREEN
00 2DF2 PRE_SCREEN_END
00 2DF2 LEET_SPEEK1
00 2E0C LEET_SPEEK2
00 2E26 LEET_SPEEK3
00 2E40 LEET_SPEEK4
00 2E5A LEET_SPEEKS_L
00 2E5E LEET_SPEEKS_H
00 2E62 LEET_SCREEN
00 2F82 LEET_SCREEN_END
00 2F82 PLAYMUSIC
00 2F9F STOPMUSIC
00 2FA9 VBLINTERRUPT
00 3000 MUSIC_DATA
00 357F MUSIC_DATA_END
00 3000 SCREEN 00 3000 SCREEN
00 3410 DL 00 3410 DL
00 343C START 00 343C START
00 3482 PLEASE_WAIT_LOOP 00 3482 PLEASE_WAIT_LOOP
00 3498 4@ 00 3498 5@
00 3499 SAMPLE_LOAD 00 3499 SAMPLE_LOAD
00 34FA 5@ 00 34FA 6@
00 3504 EXIT_TECH_DIFF 00 3504 EXIT_TECH_DIFF
00 3504 6@ 00 3504 7@
00 350B 7@ 00 350B 8@
00 3516 8@ 00 3516 9@
00 352A SAMPLE1 00 352A SAMPLE1
00 4896 SAMPLE_END1 00 4896 SAMPLE_END1
00 4896 SAMPLE2 00 4896 SAMPLE2
+530 -300
View File
@@ -931,157 +931,387 @@ Source: MACRO.ASM
186 mva #3 SKSTAT 186 mva #3 SKSTAT
187 .ENDM 187 .ENDM
14 ;--------------------------------------------------- 14 ;---------------------------------------------------
15 ; BASIC off 15 org $2000
16 ORG $2700 16 PLAYER
17 FFFF> 2700-295B> A9 FF + mva #$ff portb 17 icl '../music/playlzs16.asm' ; Music Player
18 2705 A9 AC 8D 30 02 A9 + mwa #DL_pre dlptrs Source: playlzs16.asm
19 270F A9 21 lda #@dmactl(narrow|dma) ; narrow screen width, DL on 1 ;
20 2711 8D 2F 02 sta dmactls 2 ; LZSS Compressed SAP player for 16 match bits
21 2714 A9 00 8D C6 02 mva #0 COLOR2 3 ; --------------------------------------------
22 2719 8D 1A D0 sta COLBAK 4 ;
23 271C A9 0F 8D C5 02 mva #15 COLOR1 5 ; (c) 2020 DMSC
24 2721 20 94 27 jsr wait_for_releasing_keyz 6 ; Code under MIT license, see LICENSE file.
25 7 ;
26 2724 leet_anim 8 ; This player uses:
27 ; test for going further 9 ; Match length: 8 bits (1 to 256)
28 2724 AD 1F D0 lda CONSOL 10 ; Match offset: 8 bits (1 to 256)
29 2727 C9 07 cmp #7 11 ; Min length: 2
30 2729 D0 65 bne leet_end 12 ; Total match bits: 16 bits
31 ; check keyboard 13 ;
32 272B AD 0F D2 lda SKSTAT 14 ; Compress using:
33 272E C9 F7 cmp #$f7 ; SHIFT 15 ; lzss -b 16 -o 8 -m 1 input.rsap test.lz12
34 2730 F0 5E beq leet_end 16 ;
35 2732 C9 FF cmp #$ff 17 ; Assemble this file with MADS assembler, the compressed song is expected in
36 2734 D0 5A bne leet_end 18 ; the `test.lz16` file at assembly time.
37 2736 AD 10 D0 lda TRIG0 19 ;
38 2739 F0 55 beq leet_end 20 ; The plater needs 256 bytes of buffer for each pokey register stored, for a
39 21 ; full SAP file this is 2304 bytes.
40 22 ;
41 273B A9 CC 85 80 A9 27 + mwa #pre_screen temp_w 23 org $e0
42 2743 A9 5C 85 85 A9 29 + mwa #leet_screen temp_w3 24
43 274B A0 00 ldy #0 25 = 00E0 song_start_ptr .ds 2
44 @ 26 = 00E2 song_end_ptr .ds 2
45 274D B1 80 lda (temp_w),y 27 = 00E4 chn_copy .ds 9
46 274F F0 20 beq next_letter ; ignore zeroes 28 = 00ED chn_pos .ds 9
47 ;is the letter leetable? 29 = 00F6 bptr .ds 2
48 2751 C9 61 cmp #"a" 30 = 00F8 cur_pos .ds 1
49 2753 90 1C bcc next_letter 31 = 00F9 chn_bits .ds 1
50 2755 C9 7B cmp #"z"+1 32
51 2757 B0 18 bcs next_letter 33 = 00FA bit_data .ds 1
52 ;letter is leetable 34
53 2759 F0 16 beq next_letter 35
54 275B 38 sec 36
55 275C E9 61 sbc #"a" 37 ;POKEY = $D200
56 275E A8 tay ;save the letter 38
57 275F AD 0A D2 lda RANDOM 39 org $2000
58 2762 29 03 and #%00000011 ; 0-3 40
59 2764 AA tax 41
60 2765 BD 54 29 lda leet_speeks_l,x 42 ;player
61 2768 85 83 sta temp_w2 43 FFFF> 2000-20B3> 4C 56 + jmp play_frame
62 276A BD 58 29 lda leet_speeks_h,x 44 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63 276D 85 84 sta temp_w2+1 45 ; Song Initialization - this runs in the first tick:
64 276F B1 83 lda (temp_w2),y 46 ;
65 2771 next_letter 47 2003 .proc init_song
66 2771 A0 00 ldy #0 48
67 2773 91 85 sta (temp_w3),y 49 ;clear buffers
68 2775 E6 80 D0 02 E6 81 inw temp_w 50 2003 A9 00 lda #0
69 277B E6 85 D0 02 E6 86 inw temp_w3 51 2005 AA tax
70 2781 A5 81 C9 28 D0 04 + cpw temp_w #pre_screen_end 52 @
71 278B F0 97 beq leet_anim 53 2006 9D 00 21 9D 00 22 + :9 sta buffers+#*$100,x
72 278D 4C 4D 27 jmp @- 54 2021 E8 inx
73 55 2022 D0 E2 bne @-
74 2790 leet_end 56
75 2790 20 94 27 jsr wait_for_releasing_keyz 57 2024 A9 01 85 FA mva #1 bit_data
76 2793 60 rts 58
77 59 ; here initializes song pointer:
78 60 2028 18 A5 E0 69 01 8D + adw song_start_ptr #1 song_ptr
79 2794 .proc wait_for_releasing_keyz 61
80 2794 AD 1F D0 @ lda CONSOL 62 2037 A9 21 8D 4A 20 mva #>(buffers+255) cbuf+2
81 2797 C9 07 cmp #7 63 ; Init all channels:
82 2799 D0 F9 bne @- 64 203C A2 08 ldx #8
83 ; check keyboard 65 203E A0 00 ldy #0
84 279B AD 0F D2 @ lda SKSTAT 66 2040 clear
85 279E C9 F7 cmp #$f7 ; SHIFT 67 ; Read just init value and store into buffer and POKEY
86 27A0 F0 F9 beq @- 68 2040 20 A8 20 jsr get_byte
87 27A2 C9 FF cmp #$ff 69 2043 9D 00 D2 sta POKEY, x
88 27A4 D0 F5 bne @- 70 2046 94 E4 sty chn_copy, x
89 27A6 AD 10 D0 @ lda TRIG0 71 2048 cbuf
90 27A9 F0 FB beq @- 72 2048 8D FF 21 sta buffers + 255
91 27AB 60 rts 73 204B EE 4A 20 inc cbuf + 2
92 .endp 74 204E CA dex
93 75 204F 10 EF bpl clear
94 27AC DL_pre 76
95 27AC 70 70 70 70 70 70 + :8 .by SKIP8 77 ; Initialize buffer pointer:
96 27B4 42 .by LMS+MODE2 78 2051 84 F6 sty bptr
97 27B5 5C 29 .wo leet_screen 79 2053 84 F8 sty cur_pos
98 27B7 00 02 .by SKIP1, MODE2 80 2055 60 rts
99 27B9 70 .by SKIP8 81 .endp
100 27BA 00 02 .by SKIP1, MODE2 82
101 27BC 70 .by SKIP8 83
102 27BD 00 02 00 02 00 02 + :6 .by SKIP1, MODE2 84 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
103 27C9 41 .by JVB 85 ; Play one frame of the song
104 27CA AC 27 .wo DL_pre 86 ;
105 27CC pre_screen 87 2056 .proc play_frame
106 ; 01234567890123456789012345678901" 88 2056 A9 21 lda #>buffers
107 27CC 74 68 69 73 00 6C + dta "this little game was created in " 89 2058 85 F7 sta bptr+1
108 27EC 00 66 6F 75 72 00 + dta " four evenings before SV2K24SE " 90
109 280C 73 6F 72 72 79 00 + dta "sorry for technical difficulties" 91 205A A0 00 ldy #0
110 282C 63 6F 64 65 1A 00 + dta "code: " 92 205C B1 E0 lda (song_start_ptr),y
111 284C 00 00 00 00 00 00 + dta " pecus & pirx " 93 205E 85 F9 sta chn_bits
112 286C 73 6F 75 6E 64 1A + dta "sound: " 94 2060 A2 08 ldx #8
113 288C 00 00 00 00 00 00 + dta " alex, jochen hippel " 95
114 28AC 67 66 78 1A 00 00 + dta "gfx: " 96 ; Loop through all "channels", one for each POKEY register
115 28CC 00 00 00 00 00 00 + dta " alphabet, inc. " 97 2062 chn_loop:
116 28EC pre_screen_end 98 2062 46 F9 lsr chn_bits
117 28EC leet_speek1 99 2064 B0 29 bcs skip_chn ; C=1 : skip this channel
118 28EC 61 62 63 64 65 66 + dta "abcdefghijklmnopqrstuvwxyz" 100
119 2906 leet_speek2 101 2066 B5 E4 lda chn_copy, x ; Get status of this stream
120 2906 21 22 23 24 25 26 + dta "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 102 2068 D0 16 bne do_copy_byte ; If > 0 we are copying bytes
121 2920 leet_speek3 103
122 2920 14 06 3B 09 65 26 + dta "4&[)eF9-|jk_mn0p@r57uvw*y2" 104 ; We are decoding a new match/literal
123 293A leet_speek4 105 206A 46 FA lsr bit_data ; Get next bit
124 293A 3E 62 08 1E 5B 41 + dta "^b(>",$5b,$41,"gh1",$4c+$80,"k",$4b+$80,"M\",$54,$49+$80,"q",$51,"5",$57,"uvwxy/" 106 206C D0 06 bne got_bit
125 107 206E 20 A8 20 jsr get_byte ; Not enough bits, refill!
126 2954 leet_speeks_l 108 2071 6A ror ; Extract a new bit and add a 1 at the high bit (from C set above)
127 2954 EC .by <leet_speek1 109 2072 85 FA sta bit_data ;
128 2955 06 .by <leet_speek2 110 2074 got_bit:
129 2956 20 .by <leet_speek3 111 2074 20 A8 20 jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte"
130 2957 3A .by <leet_speek4 112 2077 B0 0F bcs store ; Bit = 1 is "literal", bit = 0 is "match"
131 2958 leet_speeks_h 113
132 2958 28 .by >leet_speek1 114 2079 95 ED sta chn_pos, x ; Store in "copy pos"
133 2959 29 .by >leet_speek2 115
134 295A 29 .by >leet_speek3 116 207B 20 A8 20 jsr get_byte
135 295B 29 .by >leet_speek4 117 207E 95 E4 sta chn_copy, x ; Store in "copy length"
136 295C leet_screen 118
137 = 295C .ds 32*9 119 ; And start copying first byte
138 2A7C leet_screen_end 120 2080 do_copy_byte:
139 02E2-02E3> 00 20 ini $2000 121 2080 D6 E4 dec chn_copy, x ; Decrease match length, increase match position
140 ;--------------------------------------------------- 122 2082 F6 ED inc chn_pos, x
123 2084 B4 ED ldy chn_pos, x
124
125 ; Now, read old data, jump to data store
126 2086 B1 F6 lda (bptr), y
127
128 2088 store:
129 2088 A4 F8 ldy cur_pos
130 208A 9D 00 D2 sta POKEY, x ; Store to output and buffer
131 208D 91 F6 sta (bptr), y
132
133 208F skip_chn:
134 ; Increment channel buffer pointer
135 208F E6 F7 inc bptr+1
136
137 2091 CA dex
138 2092 10 CE bpl chn_loop ; Next channel
139
140 2094 E6 F8 inc cur_pos
141 141
142 org $3000 142 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
143 3000 screen 143 ; Check for ending of song and jump to the next frame
144 3000-98F4> FF FE FF F0 + ins 'difficulties.bmp',+62 144 ;
145 3410 DL 145 2096 check_end_song
146 3410 70 70 70 70 70 70 + :13 .by SKIP8 146 2096 AD AA 20 C5 E3 D0 + cpw song_ptr song_end_ptr
147 341D 4F .by MODEF+LMS 147 20A2 90 03 20 03 20 scc:jsr init_song
148 341E 00 30 .wo screen 148 20A7 60 rts
149 3420 0F 0F 0F 0F 0F 0F + :25 .by MODEF 149 .endp
150 3439 41 .by JVB 150 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
151 343A 10 34 .wo DL 151 20A8 get_byte
152 152 20A8 AD FF FF lda song_ptr: $ffff ;song_data+1
153 343C start 153 20AB EE A9 20 D0 03 EE + inw song_ptr
154 343C A9 10 8D 30 02 A9 + mwa #DL dlptrs 154 20B3 60 rts
155 3446 A9 3E lda #@dmactl(standard|dma|players|missiles|lineX1) ; normal screen width, DL on, P/M on 155 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
156 3448 8D 2F 02 sta dmactls 156 /* start
157 344B A9 00 8D C6 02 mva #0 COLOR2 157 mwa #song_data song_start_ptr
158 3450 8D 1A D0 sta COLBAK 158 mwa #song_end song_end_ptr
159 3453 A9 0F 8D C5 02 mva #15 COLOR1 159 jsr init_song
160 3458 POKEY_INIT 160 @
161 lda:cmp:req 20
162 jsr player
163
164 lda $d01f ;consol
165 cmp #7
166 seq:jsr init_song
167
168 jmp @- */
168
169
170
171
172
173 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
174 20B4 .align $100
175 2100 buffers
176 = 2100 .ds 256 * 9
177
178 ;song_data
179 ; ins 'InGame.lzss'
180 ;song_end
181
182
183 ; run start
184
18 ;---------------------------------------------------
19 ; BASIC off
20 ORG $2c00
21 2C00 start1
22 2C00-2E61> A9 FF 8D 01 + mva #$ff portb
23 2C05 A9 B2 8D 30 02 A9 + mwa #DL_pre dlptrs
24 2C0F A9 21 lda #@dmactl(narrow|dma) ; narrow screen width, DL on
25 2C11 8D 2F 02 sta dmactls
26 2C14 A9 00 8D C6 02 mva #0 COLOR2
27 2C19 8D 1A D0 sta COLBAK
28 2C1C A9 0F 8D C5 02 mva #15 COLOR1
29 2C21 20 9A 2C jsr wait_for_releasing_keyz
30 2C24 20 82 2F jsr PlayMusic
31 2C27 leet_anim
32 ; test for going further
33 2C27 AD 1F D0 lda CONSOL
34 2C2A C9 07 cmp #7
35 2C2C D0 65 bne leet_end
36 ; check keyboard
37 2C2E AD 0F D2 lda SKSTAT
38 2C31 C9 F7 cmp #$f7 ; SHIFT
39 2C33 F0 5E beq leet_end
40 2C35 C9 FF cmp #$ff
41 2C37 D0 5A bne leet_end
42 2C39 AD 10 D0 lda TRIG0
43 2C3C F0 55 beq leet_end
44
45
46 2C3E A9 D2 85 80 A9 2C + mwa #pre_screen temp_w
47 2C46 A9 62 85 85 A9 2E + mwa #leet_screen temp_w3
48 2C4E A0 00 ldy #0
49 @
50 2C50 B1 80 lda (temp_w),y
51 2C52 F0 20 beq next_letter ; ignore zeroes
52 ;is the letter leetable?
53 2C54 C9 61 cmp #"a"
54 2C56 90 1C bcc next_letter
55 2C58 C9 7B cmp #"z"+1
56 2C5A B0 18 bcs next_letter
57 ;letter is leetable
58 2C5C F0 16 beq next_letter
59 2C5E 38 sec
60 2C5F E9 61 sbc #"a"
61 2C61 A8 tay ;save the letter
62 2C62 AD 0A D2 lda RANDOM
63 2C65 29 03 and #%00000011 ; 0-3
64 2C67 AA tax
65 2C68 BD 5A 2E lda leet_speeks_l,x
66 2C6B 85 83 sta temp_w2
67 2C6D BD 5E 2E lda leet_speeks_h,x
68 2C70 85 84 sta temp_w2+1
69 2C72 B1 83 lda (temp_w2),y
70 2C74 next_letter
71 2C74 A0 00 ldy #0
72 2C76 91 85 sta (temp_w3),y
73 2C78 E6 80 D0 02 E6 81 inw temp_w
74 2C7E E6 85 D0 02 E6 86 inw temp_w3
75 2C84 A5 81 C9 2D D0 04 + cpw temp_w #pre_screen_end
76 2C8E F0 97 beq leet_anim
77 2C90 4C 50 2C jmp @-
78
79 2C93 leet_end
80 2C93 20 9F 2F jsr StopMusic
81 2C96 20 9A 2C jsr wait_for_releasing_keyz
82 2C99 60 rts
83
84
85 2C9A .proc wait_for_releasing_keyz
86 2C9A AD 1F D0 @ lda CONSOL
87 2C9D C9 07 cmp #7
88 2C9F D0 F9 bne @-
89 ; check keyboard
90 2CA1 AD 0F D2 @ lda SKSTAT
91 2CA4 C9 F7 cmp #$f7 ; SHIFT
92 2CA6 F0 F9 beq @-
93 2CA8 C9 FF cmp #$ff
94 2CAA D0 F5 bne @-
95 2CAC AD 10 D0 @ lda TRIG0
96 2CAF F0 FB beq @-
97 2CB1 60 rts
98 .endp
99
100 2CB2 DL_pre
101 2CB2 70 70 70 70 70 70 + :8 .by SKIP8
102 2CBA 42 .by LMS+MODE2
103 2CBB 62 2E .wo leet_screen
104 2CBD 00 02 .by SKIP1, MODE2
105 2CBF 70 .by SKIP8
106 2CC0 00 02 .by SKIP1, MODE2
107 2CC2 70 .by SKIP8
108 2CC3 00 02 00 02 00 02 + :6 .by SKIP1, MODE2
109 2CCF 41 .by JVB
110 2CD0 B2 2C .wo DL_pre
111 2CD2 pre_screen
112 ; 01234567890123456789012345678901"
113 2CD2 74 68 69 73 00 6C + dta "this little game was created in "
114 2CF2 00 66 6F 75 72 00 + dta " four evenings before SV2K24SE "
115 2D12 73 6F 72 72 79 00 + dta "sorry for technical difficulties"
116 2D32 63 6F 64 65 1A 00 + dta "code: "
117 2D52 00 00 00 00 00 00 + dta " pecus & pirx "
118 2D72 73 6F 75 6E 64 1A + dta "sound: "
119 2D92 00 00 00 00 00 00 + dta " alex, jochen hippel "
120 2DB2 67 66 78 1A 00 00 + dta "gfx: "
121 2DD2 00 00 00 00 00 00 + dta " alphabet, inc. "
122 2DF2 pre_screen_end
123 2DF2 leet_speek1
124 2DF2 61 62 63 64 65 66 + dta "abcdefghijklmnopqrstuvwxyz"
125 2E0C leet_speek2
126 2E0C 21 22 23 24 25 26 + dta "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
127 2E26 leet_speek3
128 2E26 14 18 3B 09 65 26 + dta "48[)eF9-|jk_mn0p@r57uvw*y2"
129 2E40 leet_speek4
130 2E40 3E 62 08 1E 5B 41 + dta "^b(>",$5b,$41,"gh1",$4c+$80,"k",$4b+$80,"M\",$54,$49+$80,"q",$51,"5",$57,"uvwxy/"
131
132 2E5A leet_speeks_l
133 2E5A F2 .by <leet_speek1
134 2E5B 0C .by <leet_speek2
135 2E5C 26 .by <leet_speek3
136 2E5D 40 .by <leet_speek4
137 2E5E leet_speeks_h
138 2E5E 2D .by >leet_speek1
139 2E5F 2E .by >leet_speek2
140 2E60 2E .by >leet_speek3
141 2E61 2E .by >leet_speek4
142 2E62 leet_screen
143 = 2E62 .ds 32*9
144 2F82 leet_screen_end
145 ;--------------------------------------------------
146 2F82 .proc PlayMusic
147 2F82-2FB1> A9 00 85 E0 + mwa #MUSIC_DATA song_start_ptr
148 2F8A A9 7F 85 E2 A9 35 + mwa #MUSIC_DATA_END song_end_ptr
149 2F92 20 03 20 jsr init_song
150 2F95 VMAIN VBLinterrupt,7 ; jsr SetVBL
Macro: VMAIN [Source: MACRO.ASM]
15 2F95 A0 A9 LDY # <VBLINTERRUPT
16 2F97 A2 2F LDX # >VBLINTERRUPT
17 2F99 A9 07 LDA #7
18 2F9B 20 5C E4 JSR SETVBV
Source: tech_diff.asm
151 2F9E 60 rts
152 .endp
153 2F9F .proc StopMusic
154 2F9F VMAIN XITVBV,7 ; jsr SetVBL
Macro: VMAIN [Source: MACRO.ASM]
15 2F9F A0 62 LDY # <XITVBV
16 2FA1 A2 E4 LDX # >XITVBV
17 2FA3 A9 07 LDA #7
18 2FA5 20 5C E4 JSR SETVBV
Source: tech_diff.asm
155 2FA8 60 rts
156 .endp
157 2FA9 .proc VBLinterrupt
158 2FA9 20 00 20 jsr PLAYER
159 2FAC 68 pla
160 2FAD A8 tay
161 2FAE 68 pla
162 2FAF AA tax
163 2FB0 68 pla
164 2FB1 40 rti
165 .endp
166 2FB2 .align $100
167 3000 MUSIC_DATA
168 3000-357E> 00 04 88 00 + ins '../music/Title.lzss' ; title music
169 357F MUSIC_DATA_END
170
171 02E2-02E3> 00 2C ini start1
172 ;---------------------------------------------------
173
174 org $3000
175 3000 screen
176 3000-98F4> FF FE FF F0 + ins 'difficulties.bmp',+62
177 3410 DL
178 3410 70 70 70 70 70 70 + :13 .by SKIP8
179 341D 4F .by MODEF+LMS
180 341E 00 30 .wo screen
181 3420 0F 0F 0F 0F 0F 0F + :25 .by MODEF
182 3439 41 .by JVB
183 343A 10 34 .wo DL
184
185 343C start
186 343C A9 10 8D 30 02 A9 + mwa #DL dlptrs
187 3446 A9 3E lda #@dmactl(standard|dma|players|missiles|lineX1) ; normal screen width, DL on, P/M on
188 3448 8D 2F 02 sta dmactls
189 344B A9 00 8D C6 02 mva #0 COLOR2
190 3450 8D 1A D0 sta COLBAK
191 3453 A9 0F 8D C5 02 mva #15 COLOR1
192 3458 POKEY_INIT
Macro: POKEY_INIT [Source: MACRO.ASM] Macro: POKEY_INIT [Source: MACRO.ASM]
2 3458 A9 00 8D 08 D2 mva #0 AUDCTL 2 3458 A9 00 8D 08 D2 mva #0 AUDCTL
3 345D A9 03 8D 0F D2 mva #3 SKSTAT 3 345D A9 03 8D 0F D2 mva #3 SKSTAT
Source: tech_diff.asm Source: tech_diff.asm
161 3462 pause 3 193 3462 pause 3
Macro: PAUSE [Source: MACRO.ASM] Macro: PAUSE [Source: MACRO.ASM]
2 3462 A2 03 ldx #3 2 3462 A2 03 ldx #3
3 3464 ?PAUSELOOP 3 3464 ?PAUSELOOP
@@ -1097,157 +1327,157 @@ Source: tech_diff.asm
5 3477 CA dex 5 3477 CA dex
6 3478 D0 EA bne ?PAUSELOOP 6 3478 D0 EA bne ?PAUSELOOP
Source: tech_diff.asm Source: tech_diff.asm
162 347A A9 00 lda #0 194 347A A9 00 lda #0
163 347C 8D 0E D4 sta $d40e ; NMI OFF 195 347C 8D 0E D4 sta $d40e ; NMI OFF
164 347F 78 sei ; IRQ OFF 196 347F 78 sei ; IRQ OFF
165 197
166 198
167 ;-----playa-da-sampla----- 199 ;-----playa-da-sampla-----
168 3480 A2 00 ldx #0 200 3480 A2 00 ldx #0
169 201
170 3482 please_wait_loop 202 3482 please_wait_loop
171 3482 BD C9 98 lda samples_l,x 203 3482 BD C9 98 lda samples_l,x
172 3485 8D 99 34 sta sample_load 204 3485 8D 99 34 sta sample_load
173 3488 BD D4 98 lda samples_h,x 205 3488 BD D4 98 lda samples_h,x
174 348B 8D 9A 34 sta sample_load+1 206 348B 8D 9A 34 sta sample_load+1
175 207
176 348E BD DF 98 lda samples_end_l,x 208 348E BD DF 98 lda samples_end_l,x
177 3491 85 80 sta temp_w 209 3491 85 80 sta temp_w
178 3493 BD EA 98 lda samples_end_h,x 210 3493 BD EA 98 lda samples_end_h,x
179 3496 85 81 sta temp_w+1 211 3496 85 81 sta temp_w+1
180 212
181 @ 213 @
182 3498 AD FF FF lda sample_load: $ffff 214 3498 AD FF FF lda sample_load: $ffff
183 349B A8 tay 215 349B A8 tay
184 349C 38 sec 216 349C 38 sec
185 349D 6A 6A 6A 6A :4 ror 217 349D 6A 6A 6A 6A :4 ror
186 34A1 8D 01 D2 sta AUDC1 218 34A1 8D 01 D2 sta AUDC1
187 34A4 8D 03 D2 sta AUDC2 219 34A4 8D 03 D2 sta AUDC2
188 34A7 8D 05 D2 sta AUDC3 220 34A7 8D 05 D2 sta AUDC3
189 ;sta AUDC4 221 ;sta AUDC4
190 34AA 8D 0A D4 sta wsync ;------------ 222 34AA 8D 0A D4 sta wsync ;------------
191 ; test for going further 223 ; test for going further
192 34AD AD 1F D0 lda CONSOL 224 34AD AD 1F D0 lda CONSOL
193 34B0 C9 07 cmp #7 225 34B0 C9 07 cmp #7
194 34B2 D0 50 bne exit_tech_diff 226 34B2 D0 50 bne exit_tech_diff
195 ; check keyboard 227 ; check keyboard
196 34B4 AD 0F D2 lda SKSTAT 228 34B4 AD 0F D2 lda SKSTAT
197 34B7 C9 F7 cmp #$f7 ; SHIFT 229 34B7 C9 F7 cmp #$f7 ; SHIFT
198 34B9 F0 49 beq exit_tech_diff 230 34B9 F0 49 beq exit_tech_diff
199 34BB C9 FF cmp #$ff 231 34BB C9 FF cmp #$ff
200 34BD D0 45 bne exit_tech_diff 232 34BD D0 45 bne exit_tech_diff
201 34BF 8D 0A D4 sta wsync ;------------ 233 34BF 8D 0A D4 sta wsync ;------------
202 34C2 AD 10 D0 lda TRIG0 234 34C2 AD 10 D0 lda TRIG0
203 34C5 F0 3D beq exit_tech_diff 235 34C5 F0 3D beq exit_tech_diff
204 34C7 8D 0A D4 sta wsync ;------------ 236 34C7 8D 0A D4 sta wsync ;------------
205 237
206 34CA 98 tya 238 34CA 98 tya
207 34CB 29 0F and #$0F 239 34CB 29 0F and #$0F
208 34CD 09 10 ora #$10 240 34CD 09 10 ora #$10
209 34CF 8D 01 D2 sta AUDC1 241 34CF 8D 01 D2 sta AUDC1
210 34D2 8D 03 D2 sta AUDC2 242 34D2 8D 03 D2 sta AUDC2
211 34D5 8D 05 D2 sta AUDC3 243 34D5 8D 05 D2 sta AUDC3
212 ;sta AUDC4 244 ;sta AUDC4
213 245
214 246
215 34D8 EE 99 34 D0 03 EE + inw sample_load 247 34D8 EE 99 34 D0 03 EE + inw sample_load
216 34E0 8D 0A D4 sta wsync 248 34E0 8D 0A D4 sta wsync
217 34E3 AD 9A 34 C5 81 D0 + cpw sample_load temp_w 249 34E3 AD 9A 34 C5 81 D0 + cpw sample_load temp_w
218 34EF 8D 0A D4 sta wsync 250 34EF 8D 0A D4 sta wsync
219 34F2 F0 06 beq @+ 251 34F2 F0 06 beq @+
220 34F4 8D 0A D4 sta wsync 252 34F4 8D 0A D4 sta wsync
221 34F7 4C 98 34 jmp @- 253 34F7 4C 98 34 jmp @-
222 @ 254 @
223 34FA E8 inx 255 34FA E8 inx
224 34FB E0 0B cpx #11 256 34FB E0 0B cpx #11
225 34FD D0 02 A2 01 sne:ldx #1 257 34FD D0 02 A2 01 sne:ldx #1
226 3501 4C 82 34 jmp please_wait_loop 258 3501 4C 82 34 jmp please_wait_loop
227 259
228 3504 exit_tech_diff 260 3504 exit_tech_diff
229 ; wait for releasing keyz 261 ; wait for releasing keyz
230 3504 AD 1F D0 @ lda CONSOL 262 3504 AD 1F D0 @ lda CONSOL
231 3507 C9 07 cmp #7 263 3507 C9 07 cmp #7
232 3509 D0 F9 bne @- 264 3509 D0 F9 bne @-
233 ; check keyboard 265 ; check keyboard
234 350B AD 0F D2 @ lda SKSTAT 266 350B AD 0F D2 @ lda SKSTAT
235 350E C9 F7 cmp #$f7 ; SHIFT 267 350E C9 F7 cmp #$f7 ; SHIFT
236 3510 F0 F9 beq @- 268 3510 F0 F9 beq @-
237 3512 C9 FF cmp #$ff 269 3512 C9 FF cmp #$ff
238 3514 D0 F5 bne @- 270 3514 D0 F5 bne @-
239 3516 AD 10 D0 @ lda TRIG0 271 3516 AD 10 D0 @ lda TRIG0
240 3519 F0 FB beq @- 272 3519 F0 FB beq @-
241 273
242 ; 274 ;
243 351B A9 40 lda #$40 275 351B A9 40 lda #$40
244 351D 8D 0E D4 sta $d40e ; NMI On 276 351D 8D 0E D4 sta $d40e ; NMI On
245 3520 58 cli ; IRQ on 277 3520 58 cli ; IRQ on
246 3521 A9 00 8D 2F 02 mva #0 DMACTLS 278 3521 A9 00 8D 2F 02 mva #0 DMACTLS
247 3526 8D 00 D4 sta dmactl 279 3526 8D 00 D4 sta dmactl
248 3529 60 rts 280 3529 60 rts
249 281
250 352A sample1 282 352A sample1
251 352A 57 77 77 77 77 77 + ins 'wait1.wav.bin' 283 352A 57 77 77 77 77 77 + ins 'wait1.wav.bin'
252 4896 sample_end1 284 4896 sample_end1
253 4896 sample2 285 4896 sample2
254 4896 43 33 33 33 33 33 + ins 'wait2.wav.bin' 286 4896 43 33 33 33 33 33 + ins 'wait2.wav.bin'
255 6B7B sample_end2 287 6B7B sample_end2
256 6B7B sample3 288 6B7B sample3
257 6B7B 32 22 22 22 22 22 + ins 'wait3.wav.bin' 289 6B7B 32 22 22 22 22 22 + ins 'wait3.wav.bin'
258 6E15 sample_end3 290 6E15 sample_end3
259 6E15 sample4 291 6E15 sample4
260 6E15 56 66 66 66 66 66 + ins 'wait4.wav.bin' 292 6E15 56 66 66 66 66 66 + ins 'wait4.wav.bin'
261 70AF sample_end4 293 70AF sample_end4
262 70AF sample5 294 70AF sample5
263 70AF 57 67 67 67 67 67 + ins 'wait5.wav.bin' 295 70AF 57 67 67 67 67 67 + ins 'wait5.wav.bin'
264 98C9 sample_end5 296 98C9 sample_end5
265 297
266 98C9 samples_l 298 98C9 samples_l
267 98C9 2A .by <sample1 299 98C9 2A .by <sample1
268 98CA 96 .by <sample2 300 98CA 96 .by <sample2
269 98CB 7B .by <sample3 301 98CB 7B .by <sample3
270 98CC 96 .by <sample2 302 98CC 96 .by <sample2
271 98CD 15 .by <sample4 303 98CD 15 .by <sample4
272 98CE 96 .by <sample2 304 98CE 96 .by <sample2
273 98CF AF .by <sample5 305 98CF AF .by <sample5
274 98D0 96 .by <sample2 306 98D0 96 .by <sample2
275 98D1 7B .by <sample3 307 98D1 7B .by <sample3
276 98D2 96 .by <sample2 308 98D2 96 .by <sample2
277 98D3 15 .by <sample4 309 98D3 15 .by <sample4
278 98D4 samples_h 310 98D4 samples_h
279 98D4 35 .by >sample1 311 98D4 35 .by >sample1
280 98D5 48 .by >sample2 312 98D5 48 .by >sample2
281 98D6 6B .by >sample3 313 98D6 6B .by >sample3
282 98D7 48 .by >sample2 314 98D7 48 .by >sample2
283 98D8 6E .by >sample4 315 98D8 6E .by >sample4
284 98D9 48 .by >sample2 316 98D9 48 .by >sample2
285 98DA 70 .by >sample5 317 98DA 70 .by >sample5
286 98DB 48 .by >sample2 318 98DB 48 .by >sample2
287 98DC 6B .by >sample3 319 98DC 6B .by >sample3
288 98DD 48 .by >sample2 320 98DD 48 .by >sample2
289 98DE 6E .by >sample4 321 98DE 6E .by >sample4
290 98DF samples_end_l 322 98DF samples_end_l
291 98DF 96 .by <sample_end1 323 98DF 96 .by <sample_end1
292 98E0 7B .by <sample_end2 324 98E0 7B .by <sample_end2
293 98E1 15 .by <sample_end3 325 98E1 15 .by <sample_end3
294 98E2 7B .by <sample_end2 326 98E2 7B .by <sample_end2
295 98E3 AF .by <sample_end4 327 98E3 AF .by <sample_end4
296 98E4 7B .by <sample_end2 328 98E4 7B .by <sample_end2
297 98E5 C9 .by <sample_end5 329 98E5 C9 .by <sample_end5
298 98E6 7B .by <sample_end2 330 98E6 7B .by <sample_end2
299 98E7 15 .by <sample_end3 331 98E7 15 .by <sample_end3
300 98E8 7B .by <sample_end2 332 98E8 7B .by <sample_end2
301 98E9 AF .by <sample_end4 333 98E9 AF .by <sample_end4
302 98EA samples_end_h 334 98EA samples_end_h
303 98EA 48 .by >sample_end1 335 98EA 48 .by >sample_end1
304 98EB 6B .by >sample_end2 336 98EB 6B .by >sample_end2
305 98EC 6E .by >sample_end3 337 98EC 6E .by >sample_end3
306 98ED 6B .by >sample_end2 338 98ED 6B .by >sample_end2
307 98EE 70 .by >sample_end4 339 98EE 70 .by >sample_end4
308 98EF 6B .by >sample_end2 340 98EF 6B .by >sample_end2
309 98F0 98 .by >sample_end5 341 98F0 98 .by >sample_end5
310 98F1 6B .by >sample_end2 342 98F1 6B .by >sample_end2
311 98F2 6E .by >sample_end3 343 98F2 6E .by >sample_end3
312 98F3 6B .by >sample_end2 344 98F3 6B .by >sample_end2
313 98F4 70 .by >sample_end4 345 98F4 70 .by >sample_end4
314 98F5 finito 346 98F5 finito
315 02E2-02E3> 3C 34 ini start 347 02E2-02E3> 3C 34 ini start
Binary file not shown.
+9 -9
View File
@@ -34,19 +34,18 @@ bit_data .ds 1
POKEY = $D200 ;POKEY = $D200
org $2000 org $2000
player ;player
jmp play_frame jmp play_frame
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Song Initialization - this runs in the first tick: ; Song Initialization - this runs in the first tick:
; ;
.proc init_song .proc init_song
mva #>(buffers+255) cbuf+1
;clear buffers ;clear buffers
lda #0 lda #0
tax tax
@@ -60,6 +59,7 @@ player
; here initializes song pointer: ; here initializes song pointer:
adw song_start_ptr #1 song_ptr adw song_start_ptr #1 song_ptr
mva #>(buffers+255) cbuf+2
; Init all channels: ; Init all channels:
ldx #8 ldx #8
ldy #0 ldy #0
@@ -153,7 +153,7 @@ get_byte
inw song_ptr inw song_ptr
rts rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start /* start
mwa #song_data song_start_ptr mwa #song_data song_start_ptr
mwa #song_end song_end_ptr mwa #song_end song_end_ptr
jsr init_song jsr init_song
@@ -165,7 +165,7 @@ start
cmp #7 cmp #7
seq:jsr init_song seq:jsr init_song
jmp @- jmp @- */
@@ -175,10 +175,10 @@ start
buffers buffers
.ds 256 * 9 .ds 256 * 9
song_data ;song_data
ins 'InGame.lzss' ; ins 'InGame.lzss'
song_end ;song_end
run start ; run start
Binary file not shown.
BIN
View File
Binary file not shown.