ORG 0A000H PLAYER_ADRS equ 08040H PLAY_SONG equ PLAYER_ADRS + 010H ;play song INIT_BGM equ PLAYER_ADRS + 013H ;init BGM PLAY_BGM equ PLAYER_ADRS + 016H ;play BGM (1 tick) STOP_PCG equ PLAYER_ADRS + 019H ;stop tone ;increase # of car ;LD A,100 ;100 Cars ;LD (0C51EH),A CALL SET_PCG_CHR ;for fuel ;set normal timer (for BGM1, BGM2) LD A,0C3H ;jump LD (0DA0AH),A LD HL,TIMER LD (0DA0BH),HL ;set fuel timer (for BGM3) LD HL,FUEL_TIMER LD (0D9A4H),HL ;opening song timing LD A,0C3H LD (0E4F3H),A LD HL,OPENING LD (0E4F4H),HL ;crush timing LD HL,CRUSH LD (0DFC8H),HL ;clear timing LD HL,CLEAR LD (0D98AH),HL ;clear end timing LD HL,CLEAR_END LD (0D98DH),HL ;bonus stage timing LD HL,BONUS LD (0E5A7H),HL JP 0E400H PLAY_SONG_NUM: PUSH HL LD HL,SONG_NUMBER LD (HL),A CALL PLAY_SONG ;play song POP HL RET INIT_BGM_NUM: PUSH HL LD HL,SONG_NUMBER LD (HL),A CALL INIT_BGM ;init BGM POP HL RET PLAY_BGM_NUM: PUSH HL LD HL,NUM_TICK LD (HL),A CALL PLAY_BGM ;play BGM POP HL RET OPENING: ;*** wait ret key IN A,(001H) BIT 7,A JR NZ,OPENING ;*** play opning song XOR A CALL PLAY_SONG_NUM ;Play Song (#0:Game Start) ;*** set BGM1 LD A,1 CALL INIT_BGM_NUM ;Set BGM1 (#1:Normal BGM) RET CRUSH: ;*** stop BGM CALL STOP_PCG ;Stop PCG PUSH HL LD HL,SONG_NUMBER CALL INIT_BGM ;init work (start from top) POP HL JP 0E5C2H CLEAR: PUSH AF ;*** stop BGM1,2 CALL STOP_PCG ;Stop PCG ;*** play clear song LD A,2 CALL PLAY_SONG_NUM ;play song (#2:Stage Clear) CALL STOP_PCG ;Stop PCG ;*** beep invalid PUSH HL LD HL,0003EH ;beep invliad LD (0E7F6H),HL POP HL ;*** set BGM3 LD A,3 CALL INIT_BGM_NUM ;Set BGM3 (#3:Fuel) POP AF JP 0D98FH CLEAR_END: PUSH AF ;*** stop BGM3 CALL STOP_PCG ;Stop PCG ;*** beep valid PUSH HL LD HL,0203EH ;beep valid LD (0E7F6H),HL POP HL ;*** set BGM1 LD A,1 CALL INIT_BGM_NUM ;Set BGM1 (#1:Normal BGM) POP AF JP 0C526H BONUS: PUSH AF LD A,4 CALL PLAY_SONG_NUM ;play song (#4:Bonus State Start) CALL STOP_PCG ;Stop PCG LD A,5 CALL INIT_BGM_NUM ;Set BGM3 (#5:Bonus Stage) POP AF RET FUEL_TIMER: LD DE,00001H XOR A FUEL_LOOP: DEC A JR NZ,FUEL_LOOP OR A SBC HL,DE JR NZ,FUEL_LOOP LD A,4 CALL PLAY_BGM_NUM ;play 4 ticks RET TIMER: LD DE,00001H XOR A TIMER_LOOP: DEC A JR NZ,TIMER_LOOP OR A SBC HL,DE JR NZ,TIMER_LOOP LD A,1 CALL PLAY_BGM_NUM ;play 1 tick IN A,(008H) BIT 4,A ;check GRPH RET Z LD A,1 CALL PLAY_BGM_NUM ;play 1 tick IN A,(008H) BIT 6,A ;check SHIFT RET NZ LD A,4 CALL PLAY_BGM_NUM ;play 4 ticks RET SONG_NUMBER: DB 0 NUM_TICK: DB 0 SET_PCG_CHR: LD B,64 LD C,56 LD HL,PCG_DATA SET_PCG_CHR_LOOP: LD A,(HL) INC HL OUT (0),A LD A,C INC C OUT (1),A LD A,16 OUT (2),A XOR A OUT (2),A DJNZ SET_PCG_CHR_LOOP RET PCG_DATA DB 255,255,255,255,255,255,255,255 DB 128,128,128,128,128,128,128,128 DB 192,192,192,192,192,192,192,192 DB 224,224,224,224,224,224,224,224 DB 240,240,240,240,240,240,240,240 DB 248,248,248,248,248,248,248,248 DB 252,252,252,252,252,252,252,252 DB 254,254,254,254,254,254,254,254