| Chase H.Q. | Routines |
| Prev: F2FA | Up: Map | Next: F39F |
|
Relocated to $8122
|
||||
|
"Giddy up boy!"
|
||||
| speech_samples_table | F32E | DEFW $0A8C | length | |
| F330 | DEFW $C000 | address | ||
|
"Let's go Mr. Driver!"
|
||||
| F332 | DEFW $14E6 | length | ||
| F334 | DEFW $CA8C | address | ||
|
"Hold on man!"
|
||||
| F336 | DEFW $0A5A | length | ||
| F338 | DEFW $DF72 | address | ||
|
"Your time's up"
|
||||
| F33A | DEFW $0ABE | length | ||
| F33C | DEFW $E9CC | address | ||
|
Start noise
|
||||
| F33E | DEFW $0ADC | length | ||
| F340 | DEFW $F48A | address | ||
| play_speech_128k | F342 | EX AF,AF' | Bank input index (sample indices are 1..5) | |
| F343 | CALL load_stage_2 | Call silence_audio_128k | ||
| F346 | LD A,$04 | 128K: Map RAM bank 4 to $C000; Map normal screen; Map ROM 0 | ||
| F348 | LD BC,$7FFD | |||
| F34B | OUT (C),A | |||
| F34D | LD C,$FD | |||
| F34F | LD HL,$FFBF | |||
| F352 | LD D,$08 | |||
| F354 | EXX | |||
| F355 | EX AF,AF' | Unbank input index | ||
| F356 | ADD A,A | HL = $F32A + A*4 -- i.e. it's 1-indexed speech_samples_table | ||
| F357 | ADD A,A | |||
| F358 | LD HL,$811E | |||
| F35B | LD C,A | |||
| F35C | LD B,$00 | |||
| F35E | ADD HL,BC | |||
| F35F | LD E,(HL) | DE = wordat(HL); HL += 2 -- read length | ||
| F360 | INC HL | |||
| F361 | LD D,(HL) | |||
| F362 | INC HL | |||
| F363 | LD A,(HL) | HL = wordat(HL) -- read address | ||
| F364 | INC HL | |||
| F365 | LD H,(HL) | |||
| F366 | LD L,A | |||
| plsp_1 | F367 | LD C,$02 | C = 2 -- iterations (two nibbles) | |
| F369 | LD A,(HL) | A = *HL -- read a sample (or two?) | ||
| F36A | RRA | A = A ROR 4 | ||
| F36B | RRA | |||
| F36C | RRA | |||
| F36D | RRA | |||
| plsp_2 | F36E | AND $0F | A &= 15 | |
| F370 | EX AF,AF' | |||
| F371 | EXX | |||
| F372 | LD B,H | B = H which is $FF | ||
| F373 | LD A,D | A = D which is 8 -- register 8: Channel A volume | ||
| F374 | OUT (C),A | C is $FD | ||
| F376 | LD B,L | B = L which is $BF | ||
| F377 | EX AF,AF' | A = value loaded above | ||
| F378 | OUT (C),A | Write to register | ||
| F37A | EX AF,AF' | Bank it again | ||
| F37B | INC A | 8 -> 9 -- register 9: Channel B volume | ||
| F37C | LD B,H | B = $FF | ||
| F37D | OUT (C),A | C is $FD | ||
| F37F | LD B,L | B = L which is $BF | ||
| F380 | EX AF,AF' | A = value loaded above | ||
| F381 | OUT (C),A | Write to register | ||
| F383 | EX AF,AF' | Bank it again | ||
| F384 | INC A | 9 -> 10 -- register 9: Channel C volume | ||
| F385 | LD B,H | B = $FF | ||
| F386 | OUT (C),A | C is $FD | ||
| F388 | LD B,L | B = L which is $BF | ||
| F389 | EX AF,AF' | A = value loaded above | ||
| F38A | OUT (C),A | Write to register | ||
| F38C | EXX | |||
| F38D | LD B,$13 | Delay loop (lower value => higher frequency) | ||
| speech_samples_table_0 | F38F | DJNZ speech_samples_table_0 | ||
| F391 | LD A,(HL) | Load next nibble (same byte, but next nibble) | ||
| F392 | DEC C | Decrement nibble counter | ||
| F393 | JR NZ,plsp_2 | Loop plsp_2 | ||
| F395 | INC HL | Advance to next byte of sample data | ||
| F396 | DEC DE | Decrement sample data counter | ||
| F397 | LD A,D | Loop to plsp_1 while sample data remains | ||
| F398 | OR E | |||
| F399 | JP NZ,$815B | |||
| F39C | JP $8208 | Exit via relocated reset_paging_128k | ||
| Prev: F2FA | Up: Map | Next: F39F |