Uma corrida contra o tempo e contra outros carros que passam perigosamente pelo carro que você está controlando. A proposta é manter-se o mais rápido e no maior tempo possível sem causar acidentes.
É um jogo onde os competidores tentam, em alta velocidade, percorrer um sinuoso circuito e completar a corrida causando o menor número possível de acidentes contra o carro adversário e contra as perigosas curvas do circuito.
Neste jogo as palavras são codificadas e aparecem na tela sem nenhum significado, tornando-se um grande desafio à sua astúcia de combinar as letras, decodificando a mensagem.
Som:
Gráficos:
Jogabilidade:
Raridade no Brasil:
Algumas observações: A listagem está seguindo os mnemônicos oficiais da Intel, de acordo com o manual do processador 8048. Como não tive acesso ao código fonte original, os labels dentro do cart foram inventados para facilitar a compreensão do programa.
O cartucho possui 2K, então todo o código está em uma página de memória. No começo temos a chamada normal para a rotina Select Game da BIOS do Odyssey, e a rotina de tratamento de interrupção externa, também da BIOS. Todos os outros vetores apontam para rotinas dentro do cartucho.
A rotina de seleção de jogo inicia no endereço 717h.
788h é a rotina de interrupção do temporizador/relógio, 760h é a rotina de interrupção de VLBANK, e 79Dh da interrupção de som do cartucho
; **************************************************************************** ; SPEEDWAY.BIN DISASSEMBLY ; **************************************************************************** ; USO DA MEMORIA RAM: NUMLAP: EQU 039 039 00 DB 00 ; Número de voltas ; **************************************************************************** 400 44 C3 CRESET: JMP START ; 02C3 - Reset do console 402 04 09 CIRQ: JMP INTSVC ; 0009 - Interrupção 404 E4 88 CTIMER: JMP LAB049 ; 0788 - Timer 406 E4 60 CVSYNC: JMP LAB052 ; 0760 - Vblank 408 E4 17 CSTART: JMP GSTART ; 0717 - Início do jogo 40A E4 9D CSOUND: JMP LAB188 ; 079D - Serviço de som
Aqui temos os códigos para gerar a grade da pista do Interlagos!, sem obstáculos. Esses dados são copiados pela rotina em 485h.
No caso da grade da pista com obstáculos, são sobrescritos 6 bytes da grade vertical, com os dados a partir de 47Fh.
40C 81 HGRID: DB 81 ; X......X 40D 81 DB 81 ; X......X 40E A5 DB A5 ; X.X..X.X 40F A5 DB A5 ; X.X..X.X 410 29 DB 29 ; ..X.X..X 411 4A DB 4A ; .X..X.X. 412 4A DB 4A ; .X..X.X. 413 02 DB 02 ; ......X. 414 02 DB 02 ; ......X. 415 7F DB 7F ; .XXXXXXX 416 00 VGRID: DB 00 ; ........ 417 1C DB 1C ; ...XXX.. 418 00 DB 00 ; ........ 419 84 DB 84 ; X....X.. 41A 21 DB 21 ; ..X....X 41B 00 DB 00 ; ........ 41C 38 DB 38 ; ..XXX... 41D 00 DB 00 ; ........ 41E FE DB FE ; XXXXXXX.
Dados da posição incial dos sprites do Interlagos!
; Byte 1 - Posição vertical ; Byte 2 - Posição horizontal ; Byte 3 - Atributos: ; 8 - Não usado ; 4 - Não usado ; 2 - B ; 1 - G ; 8 - R ; 4 - Dobra o tamanho ; 2 - Alisamento ; 1 - Bit 9 da posição horizontal ; Byte 4 - Não usado ; Carro 1 41F B0 POSC1: DB B0 ; Posição vertical 420 2C DB 2C ; Posição horizontal 421 08 DB 08 ; Vermelho - pequeno 422 00 DB 00 ; ; Carro 2 423 A0 POSC2: DB A0 ; Posição vertical 424 2C DB 2C ; Posição horizontal 425 20 DB 20 ; Azul - pequeno 426 00 DB 00 ; ; Partida/Chegada 427 99 POSCHG: DB 99 ; Posição vertical 428 40 DB 40 ; Posição horizontal 429 24 DB 24 ; Azul - Grande 42A 00 DB 00 ; ; Parcial (na metade da volta) 42B 39 POSINT: DB 39 ; Posição vertical 42C 60 DB 60 ; Posição horizontal 42D 24 DB 24 ; Azul - Grande 42E 00 DB 00 ;
Este sprite é usado para fazer a partida/chegada e a parcial da pista.
ssss42F 01 CHGADA: DB 01 ; .......X 430 01 DB 01 ; .......X 431 00 DB 00 ; ........ 432 01 DB 01 ; .......X 433 01 DB 01 ; .......X 434 00 DB 00 ; ........ 435 01 DB 01 ; .......X 436 01 DB 01 ; .......X
Os próximos bytes são os dados de sprite do carro, nas oito direções que pode se movimentar. Lembrando que a memória de sprites do 8244 é invertida da esquerda pra direita em relação à imagens que é gerada: CARRO0 é o carro andando para a direita, para combinar com o retorno de CALHD. CARRO8 é o carro batido.
437 00 CARRO0: DB 00 ; ........ 438 66 DB 66 ; .XX..XX. 439 7F DB 7F ; .XXXXXXX 43A FB DB FB ; XXXXX.XX 43B FB DB FB ; XXXXX.XX 43C 7F DB 7F ; .XXXXXXX 43D 66 DB 66 ; .XX..XX. 43E 00 DB 00 ; ........ 43F 30 CARRO1: DB 30 ; ..XX.... 440 70 DB 70 ; .XXX.... 441 F8 DB F8 ; XXXXX... 442 FE DB FE ; XXXXXXX. 443 3B DB 3B ; ..XXX.XX 444 16 DB 16 ; ...X.XX. 445 1C DB 1C ; ...XXX.. 446 08 DB 08 ; ....X... 447 18 CARRO2: DB 18 ; ...XX... 448 7E DB 7E ; .XXXXXX. 449 7E DB 7E ; .XXXXXX. 44A 3C DB 3C ; ..XXXX.. 44B 3C DB 3C ; ..XXXX.. 44C 66 DB 66 ; .XX..XX. 44D 7E DB 7E ; .XXXXXX. 44E 3C DB 3C ; ..XXXX.. 44F 0C CARRO3: DB 0C ; ....XX.. 450 0E DB 0E ; ....XXX. 451 1F DB 1F ; ...XXXXX 452 7F DB 7F ; .XXXXXXX 453 DC DB DC ; XX.XXX.. 454 68 DB 68 ; .XX.X... 455 38 DB 38 ; ..XXX... 456 10 DB 10 ; ...X.... 457 00 CARRO4: DB 00 ; ........ 458 66 DB 66 ; .XX..XX. 459 FE DB FE ; XXXXXXX. 45A DF DB DF ; XX.XXXXX 45B DF DB DF ; XX.XXXXX 45C FE DB FE ; XXXXXXX. 45D 66 DB 66 ; .XX..XX. 45E 00 DB 00 ; ........ 45F 10 CARRO5: DB 10 ; ...X.... 460 38 DB 38 ; ..XXX... 461 68 DB 68 ; .XX.X... 462 DC DB DC ; XX.XXX.. 463 7F DB 7F ; .XXXXXXX 464 1F DB 1F ; ...XXXXX 465 0E DB 0E ; ....XXX. 466 0C DB 0C ; ....XX.. 467 3C CARRO6: DB 3C ; ..XXXX.. 468 7E DB 7E ; .XXXXXX. 469 66 DB 66 ; .XX..XX. 46A 3C DB 3C ; ..XXXX.. 46B 3C DB 3C ; ..XXXX.. 46C 7E DB 7E ; .XXXXXX. 46D 7E DB 7E ; .XXXXXX. 46E 18 DB 18 ; ...XX... 46F 08 CARRO7: DB 08 ; ....X... 470 1C DB 1C ; ...XXX.. 471 16 DB 16 ; ...X.XX. 472 3B DB 3B ; ..XXX.XX 473 FE DB FE ; XXXXXXX. 474 F8 DB F8 ; XXXXX... 475 70 DB 70 ; .XXX.... 476 30 DB 30 ; ..XX.... 477 00 CARRO8: DB 00 ; ........ 478 30 DB 30 ; ..XX.... 479 58 DB 58 ; .X.XX... 47A 36 DB 36 ; ..XX.XX. 47B 78 DB 78 ; .XXXX... 47C 2C DB 2C ; ..X.XX.. 47D 7C DB 7C ; .XXXXX.. 47E 00 DB 00 ; ........
Dados da grade vertical com obstáculos
47F 1E VOBST: DB 1E ; ...XXXX. 480 01 DB 01 ; .......X 481 84 DB 84 ; X....X.. 482 21 DB 21 ; ..X....X 483 02 DB 02 ; ......X. 484 3C DB 3C ; ..XXXX..
Rotina que copia um bloco de R2 bytes a partir do endereço 400h + R0, para o endereço no R1. Usado para copiar dados para o 8244. Todos os dados de origem da copia estão acima.
485 F8 P4COPY: MOV A,R0 486 A3 MOVP A,@A 487 91 MOVX @R1,A 488 18 INC R0 489 19 INC R1 48A EA 85 DJNZ R2,P4COPY ; 0485 48C 83 RET
A rotina a seguir calcula o endereço de origem (multiplicando por 8 - na verdade por 2, três vezes), seta o comprimento da cópia (registrador R2) em 8 bytes, e chama a rotina de cópia.
Para calcular o endereço, primeiro pega o valor que está no acumulador, multiplica por 8 (com três comandos RLA) e soma com 37h (O primeiro sprite está no endereço 437h). Este valor vai para o registrador R0.
48D BA 08 SETSPR: MOV R2,#08 48F E7 RL A 490 E7 RL A 491 E7 RL A 492 03 37 ADD A,#CARRO0 ; 437 -> 37 494 A8 MOV R0,A 495 94 85 CALL P4COPY ; 0485 497 83 RET
Se a gente estivesse precisando economizar bytes, poderíamos, ao invés de fazer um CALL P4COPY, fazer um JMP P4COPY (mudando o opcode de 94h para 84h). Fazendo isso, podemos omitir o RET do endereço 497h, já que o RET da rotina P4COPY retornaria para o local da chamada, e ganhamos um byte! Os programadores as vezes tinham que revisar o código fazendo isso, para que o programa coubesse na memória disponível.
Rotina para desenhar a pista do Interlagos! Primeiro desliga o display pra poder manipular a registradores do VDC, depois ajusta as primeiras 8 linhas da grade horizontal (Endereço de origem 40Ch e destino C0h), depois as colunas da grade vertical (Endereço de origem 415h destino E0h).
498 34 1C TRACK: CALL DISABL ; 011C 49A B8 0C MOV R0,#HGRID ; 40C -> 0C 49C BA 09 MOV R2,#09 49E B9 C0 MOV R1,#SVGRIH ; C0 4A0 94 85 CALL P4COPY ; 0485 4A2 B8 15 MOV R0,#VGRID ; 415 -> 15 4A4 BA 0A MOV R2,#0A 4A6 B9 E0 MOV R1,#SVGRIV ; E0 4A8 94 85 CALL P4COPY ; 0485
Ajusta a 9ª linha da grade horizontal: isto só copia o valor 01 para os endereços D4h a D8h (inclusive) - são os últimos 5 segmentos do lado direito da tela.
4AA 23 01 MOV A,#01 4AC BA 05 MOV R2,#05 4AE B9 D4 MOV R1,#SVGRIB + 4 ; D4 4B0 91 TRK1: MOVX @R1,A 4B1 19 INC R1 4B2 EA B0 DJNZ R2,TRK1 ; 04B0
Ajusta a cor da grade para azul brilhante e o fundo para ciano.
; Bits do endereço A3h (registrador de cores do 8244) ; ; 8 - Não usado ; 4 - Brilho da grade ; 2 - R do fundo ; 1 - G do fundo ; 8 - B do fundo ; 4 - R da grade ; 2 - G da grade ; 1 - B da grade 4B4 23 69 MOV A,#69 ; 01101001 4B6 B8 A3 MOV R0,#SVCOLR ; A3 - Registro de cor do VDC 4B8 90 MOVX @R0,A
Copia o padrão do carro apontando para a direita no Minor System #1, e Minor System #2.
4B9 27 CLR A 4BA B9 80 MOV R1,#SVMIP1 ; 80 4BC 94 8D CALL SETSPR ; 048D 4BE 27 CLR A 4BF B9 88 MOV R1,#SVMIP2 ; 88 4C1 94 8D CALL SETSPR ; 048D
Copia o padrão da chegada no Minor System #3 e Minor System #4.
4C3 B8 2F MOV R0,#CHGADA ; 42F 4C5 B9 90 MOV R1,#SVMIP3 ; 90 4C7 BA 08 MOV R2,#08 4C9 94 85 CALL P4COPY ; 0485 4CB B8 2F MOV R0,#CHGADA ; 42F 4CD B9 98 MOV R1,#SVMIP4 ; 98 4CF BA 08 MOV R2,#08 4D1 94 85 CALL P4COPY ; 0485
Posiciona os sprites e ajusta a cor, copiando 16 bytes do endereço 41Fh para o endereço 00 do VDC. Os registradores de cor/posição do Minor System são 00, 04, 08 e 0Ch
4D3 B8 1F MOV R0,#POSC1 ; 41F -> 1F 4D5 B9 00 MOV R1,#SVMIN1 ; 00 4D7 BA 10 MOV R2,#10 4D9 94 85 CALL P4COPY ; 0485
Exibe a mensagem de seleção do nível de dificuldade. ("SKILL? 1→"). Os parâmetros de posição X, posição Y e cor do texto são passados nos registradores R3, R4 e R6 respectivamente.
4DB BB 2A MOV R3,#2A ; X = 42 4DD BC 7E MOV R4,#7E ; Y = 126 4DF BE 0E MOV R6,#0E ; Cor branca 4E1 F5 SEL MB1 4E2 BF 04 MOV R7,#04 ; Dificuldade máxima é 4 4E4 74 53 CALL SKILL ; 0B53 4E6 E5 SEL MB0 4E7 BF 00 MOV R7,#00 4E9 37 CPL A 4EA 96 EE JNZ LAB067 ; 04EE 4EC 84 FD JMP LAB068 ; 04FD
Desliga o display, move a tecla pressionada de R1 para o acumulador, e salva no R7. Inverte os bits do acumulador, e se estiver setado o bit 1 (tecla 1 ou 2), pula a rotina que colocam obstáculos na pista.
4EE 34 1C LAB067: CALL DISABL ; 011C 4F0 F9 MOV A,R1 4F1 AF MOV R7,A 4F2 37 CPL A 4F3 32 FD JB1 LAB068 ; 04FD
Adiciona obstáculos na pista
4F5 B8 7F MOV R0,#VOBST ; 47F -> 7F 4F7 B9 E2 MOV R1,#E2 4F9 BA 06 MOV R2,#06 4FB 94 85 CALL P4COPY ; 0485
4FD 34 1C LAB068: CALL DISABL ; 011C 4FF B8 02 MOV R0,#02 501 23 06 MOV A,#06 503 14 EC CALL EXTRAM ; 00EC 505 90 MOVX @R0,A 506 B8 32 MOV R0,#32 508 23 02 MOV A,#02 50A A0 MOV @R0,A 50B B8 0C MOV R0,#0C 50D 90 MOVX @R0,A 50E 23 99 MOV A,#99 510 B8 34 MOV R0,#34 512 A0 MOV @R0,A 513 B8 0E MOV R0,#0E 515 90 MOVX @R0,A 516 14 E7 CALL SL8244 ; 00E7 518 BB 40 MOV R3,#40 ; Posição X do timer 51A BC 6A MOV R4,#6A ; Posição Y do timer 51C BE 0E MOV R6,#0E 51E 54 3A CALL TIMINT ; 023A 520 34 27 CALL ENABLE ; 0127 522 B8 39 MOV R0,#39 524 F0 MOV A,@R0 525 B9 20 MOV R1,#20 527 BB 4C MOV R3,#4C 529 BC 7E MOV R4,#7E 52B BE 0E MOV R6,#0E 52D 34 7C CALL SCORE ; 017C 52F 23 3A MOV A,#3A 531 B8 3E MOV R0,#3E 533 A0 MOV @R0,A 534 34 76 LAB069: CALL NXTINT ; 0176 - Esperar próximo VBLANK 536 BC 6A MOV R4,#6A 538 34 B0 CALL TIMER ; 01B0 53A 14 EC CALL EXTRAM ; 00EC 53C B8 02 MOV R0,#02 53E 80 MOVX A,@R0 53F 14 E7 CALL SL8244 ; 00E7 541 96 34 JNZ LAB069 ; 0534 543 B8 3E MOV R0,#3E 545 23 7B MOV A,#7B 547 A0 MOV @R0,A 548 34 76 LAB089: CALL NXTINT ; 0176 54A 34 1C CALL DISABL ; 011C 54C F4 10 CALL LAB070 ; 0710 54E B8 A2 MOV R0,#A2 550 FE MOV A,R6 551 96 55 JNZ LAB071 ; 0555 553 23 02 MOV A,#02 555 90 LAB071: MOVX @R0,A 556 FE MOV A,R6 557 E7 RL A 558 E7 RL A 559 A8 MOV R0,A 55A AC MOV R4,A 55B B9 30 MOV R1,#30 55D F1 MOV A,@R1 55E 96 73 JNZ LAB072 ; 0573 560 19 INC R1 561 F1 MOV A,@R1 562 96 73 JNZ LAB072 ; 0573 564 B9 36 MOV R1,#36 566 F1 MOV A,@R1 567 96 73 JNZ LAB072 ; 0573 569 19 INC R1 56A F1 MOV A,@R1 56B 96 73 JNZ LAB072 ; 0573 56D 23 2C MOV A,#STPSND ; 2C - silêncio 56F 34 A2 CALL SNDSET ; 01A2 571 A4 D4 JMP LAB074 ; 05D4 573 B9 3D LAB072: MOV R1,#3D 575 F1 MOV A,@R1 576 AD MOV R5,A 577 C6 9B JZ LAB073 ; 059B 579 B9 32 MOV R1,#32 57B F1 MOV A,@R1 57C 52 9B JB2 LAB073 ; 059B 57E B9 33 MOV R1,#33 580 F1 MOV A,@R1 581 A9 MOV R1,A 582 FD MOV A,R5 583 B2 9D JB5 LAB104 ; 059D 585 92 A3 JB4 LAB111 ; 05A3 587 72 94 JB3 LAB112 ; 0594 589 52 C6 JB2 LAB116 ; 05C6 58B B8 38 LAB114: MOV R0,#38 58D F0 MOV A,@R0 58E 52 9B JB2 LAB073 ; 059B 590 B9 35 MOV R1,#35 592 A4 B4 JMP LAB109 ; 05B4 594 B9 32 LAB112: MOV R1,#32 596 F1 MOV A,@R1 597 12 CF JB0 LAB113 ; 05CF 599 A4 CD JMP LAB115 ; 05CD 59B A4 D4 LAB073: JMP LAB074 ; 05D4 59D F5 LAB104: SEL MB1 59E 74 88 CALL LAB105 ; 0B88 5A0 E5 SEL MB0 5A1 A4 A7 JMP LAB108 ; 05A7 5A3 F5 LAB111: SEL MB1 5A4 74 9B CALL LAB106 ; 0B9B 5A6 E5 SEL MB0 5A7 F9 LAB108: MOV A,R1 5A8 B9 35 MOV R1,#35 5AA 12 B4 JB0 LAB109 ; 05B4 5AC B1 A8 MOV @R1,#A8 5AE 23 2E MOV A,#CRASH ; 2E - explosão 5B0 34 A2 CALL SNDSET ; 01A2 5B2 A4 BA JMP LAB110 ; 05BA 5B4 B1 22 LAB109: MOV @R1,#22 5B6 23 3C MOV A,#TONE1 ; 3C - alarme 5B8 34 A2 CALL SNDSET ; 01A2 5BA B9 32 LAB110: MOV R1,#32 5BC F1 MOV A,@R1 5BD 43 04 ORL A,#04 5BF A1 MOV @R1,A 5C0 C4 60 LAB103: JMP LAB079 ; 0660 5C2 C4 26 LAB075: JMP LAB076 ; 0626 5C4 C4 DB C4 ; XX...X.. 5C5 1E DB 1E ; ...XXXX. 5C6 B9 32 LAB116: MOV R1,#32 5C8 F1 MOV A,@R1 5C9 37 CPL A 5CA 12 CF JB0 LAB113 ; 05CF 5CC F1 MOV A,@R1 5CD 17 LAB115: INC A 5CE A1 MOV @R1,A 5CF FD LAB113: MOV A,R5 5D0 32 8B JB1 LAB114 ; 058B 5D2 12 8B JB0 LAB114 ; 058B 5D4 B9 32 LAB074: MOV R1,#32 5D6 F1 MOV A,@R1 5D7 52 C2 JB2 LAB075 ; 05C2 5D9 FE MOV A,R6 5DA A9 MOV R1,A 5DB 74 8F CALL RESLV ; 038F 5DD 74 B1 CALL CALHD ; 03B1 5DF FA MOV A,R2 5E0 AD MOV R5,A 5E1 FB MOV A,R3 5E2 AE MOV R6,A 5E3 F9 MOV A,R1 5E4 12 F1 JB0 LAB100 ; 05F1 5E6 95 CPL F0 5E7 B6 F1 JF0 LAB100 ; 05F1 5E9 FA MOV A,R2 5EA 97 CLR C 5EB F7 RLC A 5EC AA MOV R2,A 5ED FB MOV A,R3 5EE 97 CLR C 5EF F7 RLC A 5F0 AB MOV R3,A 5F1 B8 30 LAB100: MOV R0,#30 5F3 FA MOV A,R2 5F4 A0 MOV @R0,A 5F5 18 INC R0 5F6 FB MOV A,R3 5F7 A0 MOV @R0,A 5F8 96 FD JNZ LAB101 ; 05FD 5FA FA MOV A,R2 5FB C6 C0 JZ LAB103 ; 05C0 5FD B8 33 LAB101: MOV R0,#33 5FF F0 MOV A,@R0 600 D9 XRL A,R1 601 C6 1E JZ LAB102 ; 061E 603 F9 MOV A,R1 604 A0 MOV @R0,A 605 FC MOV A,R4 606 A8 MOV R0,A 607 FE MOV A,R6 608 97 CLR C 609 F7 RLC A 60A 97 CLR C 60B F7 RLC A 60C AE MOV R6,A 60D FD MOV A,R5 60E 97 CLR C 60F F7 RLC A 610 AD MOV R5,A 611 34 1C CALL DISABL ; 011C 613 80 MOVX A,@R0 614 6E ADD A,R6 615 90 MOVX @R0,A 616 18 INC R0 617 80 MOVX A,@R0 618 6D ADD A,R5 619 90 MOVX @R0,A 61A D4 F2 CALL SETCAR ; 06F2 61C C4 60 JMP LAB079 ; 0660 61E FC LAB102: MOV A,R4 61F A8 MOV R0,A 620 F5 SEL MB1 621 74 AD CALL LAB094 ; 0BAD 623 E5 SEL MB0 624 C4 60 JMP LAB079 ; 0660 626 B9 35 LAB076: MOV R1,#35 628 F1 MOV A,@R1 629 F2 47 JB7 LAB077 ; 0647 62B 07 DEC A 62C A1 MOV @R1,A 62D 96 37 JNZ LAB099 ; 0637 62F B9 32 LAB078: MOV R1,#32 631 F1 MOV A,@R1 632 53 FB ANL A,#FB 634 A1 MOV @R1,A 635 C4 60 JMP LAB079 ; 0660 637 53 03 LAB099: ANL A,#03 639 96 60 JNZ LAB079 ; 0660 63B B9 33 MOV R1,#33 63D F1 MOV A,@R1 63E 17 INC A 63F 53 07 ANL A,#07 641 A1 MOV @R1,A 642 A9 MOV R1,A 643 D4 F2 CALL SETCAR ; 06F2 645 C4 60 JMP LAB079 ; 0660 647 07 LAB077: DEC A 648 A1 MOV @R1,A 649 53 7F ANL A,#7F 64B C6 2F JZ LAB078 ; 062F 64D D3 08 XRL A,#08 64F C6 5A JZ LAB096 ; 065A 651 F1 MOV A,@R1 652 D3 A7 XRL A,#A7 654 96 60 JNZ LAB079 ; 0660 656 23 08 MOV A,#08 658 C4 5D JMP LAB098 ; 065D 65A B8 33 LAB096: MOV R0,#33 65C F0 MOV A,@R0 65D A9 LAB098: MOV R1,A 65E D4 F2 CALL SETCAR ; 06F2 660 FF LAB079: MOV A,R7 661 37 CPL A 662 12 7A JB0 LAB080 ; 067A 664 B8 38 MOV R0,#38 666 F0 MOV A,@R0 667 52 7A JB2 LAB080 ; 067A 669 B8 36 MOV R0,#36 66B F0 MOV A,@R0 66C AA MOV R2,A 66D 18 INC R0 66E F0 MOV A,@R0 66F AB MOV R3,A 670 FC MOV A,R4 671 03 04 ADD A,#04 673 53 04 ANL A,#04 675 A8 MOV R0,A 676 F5 SEL MB1 677 74 AD CALL LAB094 ; 0BAD 679 E5 SEL MB0 67A 34 27 LAB080: CALL ENABLE ; 0127 67C B8 30 MOV R0,#30 67E B9 36 MOV R1,#36 680 BA 03 MOV R2,#03 682 F0 LAB081: MOV A,@R0 683 A1 MOV @R1,A 684 18 INC R0 685 19 INC R1 686 EA 82 DJNZ R2,LAB081 ; 0682 688 B8 3E MOV R0,#3E 68A F0 MOV A,@R0 68B D3 7B XRL A,#7B 68D C6 C5 JZ LAB082 ; 06C5 68F B9 32 MOV R1,#32 691 F1 MOV A,@R1 692 37 CPL A 693 32 C5 JB1 LAB082 ; 06C5 695 37 CPL A 696 53 FC ANL A,#FC 698 A1 MOV @R1,A 699 B9 10 MOV R1,#10 69B BB 64 MOV R3,#64 69D BE 02 MOV R6,#02 69F FC MOV A,R4 6A0 C6 A8 JZ LAB092 ; 06A8 6A2 B9 18 MOV R1,#18 6A4 BB 34 MOV R3,#34 6A6 BE 08 MOV R6,#08 6A8 BC 7E LAB092: MOV R4,#7E 6AA B8 34 MOV R0,#34 6AC F0 MOV A,@R0 6AD 03 01 ADD A,#01 6AF 57 DAA 6B0 A0 MOV @R0,A 6B1 34 7C CALL SCORE ; 017C 6B3 B9 39 MOV R1,#39 6B5 B8 34 MOV R0,#34 6B7 F0 MOV A,@R0 6B8 AA MOV R2,A 6B9 F1 MOV A,@R1 6BA DA XRL A,R2 6BB 96 C5 JNZ LAB082 ; 06C5 6BD 23 2C MOV A,#STPSND ; 2C - silêncio 6BF 34 A2 CALL SNDSET ; 01A2 6C1 34 76 LAB093: CALL NXTINT ; 0176 6C3 C4 C1 JMP LAB093 ; 06C1 6C5 BC 6A LAB082: MOV R4,#6A 6C7 BE 0E MOV R6,#0E 6C9 34 B0 CALL TIMER ; 01B0 6CB 14 EC CALL EXTRAM ; 00EC 6CD F4 10 CALL LAB070 ; 0710 6CF B9 04 MOV R1,#04 6D1 C6 D5 JZ LAB083 ; 06D5 6D3 B9 0A MOV R1,#0A 6D5 B8 30 LAB083: MOV R0,#30 6D7 BA 06 MOV R2,#06 6D9 F0 LAB084: MOV A,@R0 6DA 91 MOVX @R1,A 6DB 18 INC R0 6DC 19 INC R1 6DD EA D9 DJNZ R2,LAB084 ; 06D9 6DF FE MOV A,R6 6E0 B9 0A MOV R1,#0A 6E2 C6 E6 JZ LAB085 ; 06E6 6E4 B9 04 MOV R1,#04 6E6 B8 30 LAB085: MOV R0,#30 6E8 BA 06 MOV R2,#06 6EA 81 LAB086: MOVX A,@R1 6EB A0 MOV @R0,A 6EC 18 INC R0 6ED 19 INC R1 6EE EA EA DJNZ R2,LAB086 ; 06EA 6F0 C4 FC JMP LAB087 ; 06FC
6F2 FC SETCAR: MOV A,R4 6F3 E7 RL A 6F4 03 80 ADD A,#80 6F6 29 XCH A,R1 6F7 94 8D CALL SETSPR ; 048D 6F9 83 RET
6FA 00 DB 00 ; ........ 6FB 00 DB 00 ; ........ 6FC 14 E7 LAB087: CALL SL8244 ; 00E7 6FE B9 3F MOV R1,#3F 700 F1 MOV A,@R1 701 D2 0A JB6 LAB088 ; 070A 703 FF MOV A,R7 704 12 0C JB0 LAB090 ; 070C 706 23 D0 MOV A,#D0 ; 708 34 A2 LAB091: CALL SNDSET ; 01A2 70A A4 48 LAB088: JMP LAB089 ; 0548 70C 23 F0 LAB090: MOV A,#F0 ; 70E E4 08 JMP LAB091 ; 0708 710 B8 3E LAB070: MOV R0,#3E 712 F0 MOV A,@R0 713 53 01 ANL A,#01 715 AE MOV R6,A 716 83 RET
O cartucho pula para este endereço depois da tela do SELECT GAME. Após o jogador apertar uma tecla, esta rotina checa qual foi a tecla pressionada, e chama o Interlagos caso seja dois ou três, e Crypto-Logic se for a tecla 4. Qualquer outra tecla inicia o Fórumula 1.
717 B8 39 GSTART: MOV R0,#39 719 07 DEC A 71A 07 DEC A 71B C6 38 JZ SPIN3 ; 0738 71D 07 DEC A 71E C6 3C JZ SPIN15 ; 073C 720 07 DEC A 721 F5 SEL MB1 722 C6 48 JZ CRYPTO ; 0748
Fórmula 1 começa aqui
724 B8 3F MOV R0,#3F 726 F0 MOV A,@R0 727 43 20 ORL A,#20 729 A0 MOV @R0,A 72A B8 22 MOV R0,#22 72C B0 3C MOV @R0,#3C 72E B8 26 MOV R0,#26 730 B0 3C MOV @R0,#3C 732 B8 2A MOV R0,#2A 734 B0 0C MOV @R0,#0C 736 04 00 JMP SPEEDW ; 0800
As versões de Interlagos começam aqui
738 B0 03 SPIN3: MOV @R0,#03 ; corrida de 3 voltas 73A E4 3E JMP SPNOUT ; 073E 73C B0 15 SPIN15: MOV @R0,#15 ; corrida de 15 voltas 73E B8 22 SPNOUT: MOV R0,#22 740 B0 08 MOV @R0,#08 ; salva 08 na posição 22 da ram interna 742 B8 26 MOV R0,#26 744 B0 20 MOV @R0,#20 ; salva 20 na posição 26 da ram interna 746 84 98 JMP TRACK ; 0498
Crypto-Logic começa aqui
748 64 16 CRYPTO: JMP CRYPT1 ; 0B16
74A 02 DB 02 ; ......X. 74B 37 DB 37 ; ..XX.XXX 74C 17 DB 17 ; ...X.XXX 74D AA DB AA ; X.X.X.X. 74E B9 DB B9 ; X.XXX..X 74F 21 DB 21 ; ..X....X 750 F1 DB F1 ; XXXX...X 751 AB DB AB ; X.X.X.XX 752 F4 DB F4 ; XXXX.X.. 753 62 DB 62 ; .XX...X. 754 B8 DB B8 ; X.XXX... 755 01 DB 01 ; .......X 756 80 DB 80 ; X....... 757 37 DB 37 ; ..XX.XXX 758 17 DB 17 ; ...X.XXX 759 03 DB 03 ; ......XX 75A 01 DB 01 ; .......X 75B F6 DB F6 ; XXXX.XX. 75C 5E DB 5E ; .X.XXXX. 75D 83 DB 83 ; X.....XX 75E 23 DB 23 ; ..X...XX 75F AB DB AB ; X.X.X.XX 760 B8 3F LAB052: MOV R0,#3F 762 F0 MOV A,@R0 763 37 CPL A 764 B2 74 JB5 LAB053 ; 0774 766 B8 31 MOV R0,#31 768 B9 30 MOV R1,#30 76A F0 MOV A,@R0 76B 03 46 ADD A,#46 76D F6 76 JC LAB054 ; 0776 76F 23 E9 MOV A,#E9 771 A0 LAB055: MOV @R0,A 772 62 MOV T,A 773 45 STRT CNT 774 04 1A LAB053: JMP VRTETY ; 001A
776 F1 LAB054: MOV A,@R1 777 03 7F ADD A,#7F 779 A3 MOVP A,@A 77A AA MOV R2,A 77B F0 MOV A,@R0 77C 6A ADD A,R2 77D E4 71 JMP LAB055 ; 0771 77F 00 DB 00 ; ........ 780 FF DB FF ; XXXXXXXX 781 FE DB FE ; XXXXXXX. 782 FD DB FD ; XXXXXX.X 783 FC DB FC ; XXXXXX.. 784 FA DB FA ; XXXXX.X. 785 F8 DB F8 ; XXXXX... 786 F4 DB F4 ; XXXX.X.. 787 F0 DB F0 ; XXXX....
788 C5 LAB049: SEL RB0 789 AD MOV R5,A 78A 65 STOP TCNT 78B B8 A0 MOV R0,#A0 78D 23 20 MOV A,#20 78F 90 MOVX @R0,A 790 BA 86 MOV R2,#86 792 EA 92 LAB050: DJNZ R2,LAB050 ; 0792 794 23 28 MOV A,#28 796 90 MOVX @R0,A 797 23 DB MOV A,#DB 799 62 MOV T,A 79A 45 STRT CNT 79B FD MOV A,R5 79C 93 RETR
Quando a rotina de som busca um novo evento de som, a rotina do cartucho checa se o bit 7 está setado, e caso esteja, salta para a rotina de de som do cartucho.
79D FC CNTSND: MOV A,R4 ; a = primeiro byte 79E F2 A2 JB7 NEWSND ; 07A2 7A0 04 44 JMP INTSND ; 0044 7A2 A3 NEWSND: MOVP A,@A ; recupera primeiro byte e salva em R2 7A3 A9 MOV R1,A ; R1 = primeiro byte 7A4 1C INC R4 ; R4 = proximo evento de som 7A5 D3 0F XRL A,#0F ; evento começa com 0F? 7A7 C6 AE JZ LAB190 ; 07AE 7A9 FC MOV A,R4 ; a = próximo evento de som 7AA A3 MOVP A,@A ; recupera segundo byte e salva em R2 7AB AA MOV R2,A 7AC 04 4B JMP EXTSND ; 004B 7AE B8 AA LAB190: MOV R0,#SVSDCT ; AA - controle do som 7B0 27 CLR A 7B1 90 MOVX @R0,A 7B2 B8 A7 MOV R0,#SVSDSR ; A7 - registrador de deslocamento 7B4 B9 03 MOV R1,#03 7B6 FC LAB191: MOV A,R4 7B7 A3 MOVP A,@A 7B8 90 MOVX @R0,A 7B9 18 INC R0 7BA 1C INC R4 7BB E9 B6 DJNZ R1,LAB191 ; 07B6 7BD E4 9D JMP CNTSND ; 079D
Som dos carros em várias velocidades. O som em 7D0 é usado no Interlagos!
7BF 0F DB 0F ; ....XXXX 7C0 01 DB 01 ; .......X 7C1 0F DB 0F ; ....XXXX 7C2 FF DB FF ; XXXXXXXX 7C3 44 DB 44 ; .X...X.. 7C4 D8 DB D8 ; XX.XX... 7C5 21 DB 21 ; ..X....X 7C6 10 DB 10 ; reinicia som em 7BF 7C7 BF DB BF 7C8 0F DB 0F ; ....XXXX 7C9 01 DB 01 ; .......X 7CA 0F DB 0F ; ....XXXX 7CB FF DB FF ; XXXXXXXX 7CC 44 DB 44 ; .X...X.. 7CD DA DB DA ; XX.XX.X. 7CE 10 DB 10 ; reinicia som em 7C8 7CF C8 DB C8 7D0 0F DB 0F ; ....XXXX 7D1 07 DB 07 ; .....XXX 7D2 F0 DB F0 ; XXXX.... 7D3 3F DB 3F ; ..XXXXXX 7D4 44 DB 44 ; .X...X.. 7D5 DA DB DA ; XX.XX.X. 7D6 10 DB 10 ; reinicia som em 7D0 7D7 D0 DB D0 7D8 0F DB 0F ; ....XXXX 7D9 07 DB 07 ; .....XXX 7DA F0 DB F0 ; XXXX.... 7DB 3F DB 3F ; ..XXXXXX 7DC 44 DB 44 ; .X...X.. 7DD DC DB DC ; XX.XXX.. 7DE 10 DB 10 ; reinicia som em 7D8 7DF D8 DB D8 7E0 0F DB 0F ; ....XXXX 7E1 1F DB 1F ; ...XXXXX 7E2 0F DB 0F ; ....XXXX 7E3 0F DB 0F ; ....XXXX 7E4 43 DB 43 ; .X....XX 7E5 DA DB DA ; XX.XX.X. 7E6 10 DB 10 ; reinica som em 7E0 7E7 E0 DB E0 7E8 0F DB 0F ; ....XXXX 7E9 1F DB 1F ; ...XXXXX 7EA 0F DB 0F ; ....XXXX 7EB 0F DB 0F ; ....XXXX 7EC 43 DB 43 ; .X....XX 7ED DD DB DD ; XX.XXX.X 7EE 10 DB 10 ; reinicia som em 7E8 7EF E8 DB E8 7F0 0F DB 0F ; ....XXXX 7F1 1E DB 1E ; ...XXXX. 7F2 71 DB 71 ; .XXX...X 7F3 C7 DB C7 ; XX...XXX 7F4 43 DB 43 ; .X....XX 7F5 DD DB DD ; XX.XXX.X 7F6 10 DB 10 ; reinicia som em 7F0 7F7 F0 DB F0 7F8 0F DB 0F ; ....XXXX 7F9 1E DB 1E ; ...XXXX. 7FA 71 DB 71 ; .XXX...X 7FB C7 DB C7 ; XX...XXX 7FC 43 DB 43 ; .X....XX 7FD DF DB DF ; XX.XXXXX 7FE 10 DB 10 ; reinicia som em 7F8 7FF F8 DB F8
O jogo Fórmula 1! começa aqui.
800 E5 SPEEDW: SEL MB0 801 14 EC CALL EXTRAM ; 00EC 803 B8 01 MOV R0,#01 805 23 02 MOV A,#02 807 90 MOVX @R0,A 808 18 INC R0 809 23 01 MOV A,#01 80B 90 MOVX @R0,A 80C 14 E7 CALL SL8244 ; 00E7 80E 34 1C CALL DISABL ; 011C 810 BB 70 MOV R3,#70 812 BC 50 MOV R4,#50 814 BE 08 MOV R6,#08 816 54 3A CALL TIMINT ; 023A 818 B8 3E MOV R0,#3E 81A B0 3B MOV @R0,#3B 81C BC 50 MOV R4,#50 81E BE 08 MOV R6,#08 820 34 B0 CALL TIMER ; 01B0 822 E5 LAB152: SEL MB0 823 23 2C MOV A,#STPSND ; 2C - silêncio 825 34 A2 CALL SNDSET ; 01A2 827 34 1C CALL DISABL ; 011C 829 B8 E1 MOV R0,#E1 82B 23 FF MOV A,#FF 82D 90 MOVX @R0,A 82E B8 E6 MOV R0,#E6 830 90 MOVX @R0,A 831 B8 A3 MOV R0,#A3 833 23 69 MOV A,#69 835 90 MOVX @R0,A 836 F5 SEL MB1 837 BB 03 MOV R3,#03 839 B9 80 MOV R1,#80 83B B8 E1 LAB149: MOV R0,#E1 83D BA 08 MOV R2,#08 83F 74 CE CALL LAB148 ; 0BCE 841 EB 3B DJNZ R3,LAB149 ; 083B 843 B8 D6 MOV R0,#D6 845 B9 00 MOV R1,#00 847 BA 0B MOV R2,#0B 849 74 CE CALL LAB148 ; 0BCE 84B B8 33 MOV R0,#33 84D B0 FE MOV @R0,#FE 84F 18 INC R0 850 B0 02 MOV @R0,#02 852 E5 SEL MB0 853 34 27 CALL ENABLE ; 0127 855 B8 30 MOV R0,#30 857 B0 00 MOV @R0,#00 859 B8 A2 MOV R0,#A2 85B 23 03 MOV A,#03 85D 90 MOVX @R0,A 85E 25 EN TCNTI 85F B8 3F MOV R0,#3F 861 F0 MOV A,@R0 862 92 67 JB4 LAB150 ; 0867 864 F5 SEL MB1 865 64 2D JMP LAB185 ; 0B2D 867 BC 50 LAB150: MOV R4,#50 869 BE 08 MOV R6,#08 86B 34 B0 CALL TIMER ; 01B0 86D 34 76 CALL NXTINT ; 0176 - Espera intervalo vertical
Lê os joysticks, e se o delta Y for negativo, salta para LAB124. Se estiver em VBLANK, salta para LAB125, senão salta para LAB128.
86F B9 00 MOV R1,#00 871 74 8F CALL RESLV ; 038F 873 FB MOV A,R3 874 37 CPL A 875 F2 67 JB7 LAB150 ; 0867 877 76 7C JF1 LAB151 ; 087C 879 F5 LAB153: SEL MB1 87A 24 12 JMP LAB154 ; 0912 87C E5 LAB151: SEL MB0 87D 34 27 CALL ENABLE ; 0127 87F BC 50 MOV R4,#50 881 BE 08 MOV R6,#08 883 34 B0 CALL TIMER ; 01B0 885 34 76 CALL NXTINT ; 0176 887 B8 3E MOV R0,#3E 889 F0 MOV A,@R0 88A F2 22 JB7 LAB152 ; 0822 88C 34 1C CALL DISABL ; 011C 88E B9 3D MOV R1,#3D 890 F1 MOV A,@R1 891 52 79 JB2 LAB153 ; 0879 893 B9 00 MOV R1,#00 895 74 8F CALL RESLV ; 038F 897 B8 3E MOV R0,#3E 899 F0 MOV A,@R0 89A 53 0F ANL A,#0F 89C 96 D2 JNZ LAB173 ; 08D2 89E FB MOV A,R3 89F C6 D2 JZ LAB173 ; 08D2 8A1 B8 3F MOV R0,#3F 8A3 B9 30 MOV R1,#30 8A5 F2 AE JB7 LAB178 ; 08AE 8A7 F1 MOV A,@R1 8A8 C6 D2 JZ LAB173 ; 08D2 8AA 07 DEC A 8AB A1 MOV @R1,A 8AC 76 BA JF1 LAB184 ; 08BA 8AE BB FA LAB178: MOV R3,#FA 8B0 F0 MOV A,@R0 8B1 12 B5 JB0 LAB179 ; 08B5 8B3 BB F8 MOV R3,#F8 8B5 F1 LAB179: MOV A,@R1 8B6 6B ADD A,R3 8B7 F6 D2 JC LAB173 ; 08D2 8B9 11 INC @R1 8BA F1 LAB184: MOV A,@R1 8BB 96 C1 JNZ LAB180 ; 08C1 8BD 23 2C MOV A,#2C 8BF 76 D0 JF1 LAB183 ; 08D0 8C1 07 LAB180: DEC A 8C2 96 C8 JNZ LAB181 ; 08C8 8C4 23 BF MOV A,#BF ; 8C6 76 D0 JF1 LAB183 ; 08D0 8C8 A9 LAB181: MOV R1,A 8C9 27 CLR A 8CA 03 08 LAB182: ADD A,#08 8CC E9 CA DJNZ R1,LAB182 ; 08CA 8CE 03 C0 ADD A,#C0 ; 8D0 34 A2 LAB183: CALL SNDSET ; 01A2 8D2 B8 30 LAB173: MOV R0,#30 8D4 F0 MOV A,@R0 8D5 C6 F8 JZ LAB174 ; 08F8 8D7 B8 09 MOV R0,#09 8D9 FA MOV A,R2 8DA F2 E3 JB7 LAB175 ; 08E3 8DC 80 MOVX A,@R0 8DD 03 AA ADD A,#AA 8DF E6 EA JNC LAB176 ; 08EA 8E1 76 F8 JF1 LAB174 ; 08F8 8E3 80 LAB175: MOVX A,@R0 8E4 03 E3 ADD A,#E3 8E6 F6 EA JC LAB176 ; 08EA 8E8 76 F8 JF1 LAB174 ; 08F8 8EA B9 30 LAB176: MOV R1,#30 8EC F1 MOV A,@R1 8ED 03 FB ADD A,#FB 8EF E6 F5 JNC LAB177 ; 08F5 8F1 FA MOV A,R2 8F2 97 CLR C 8F3 F7 RLC A 8F4 AA MOV R2,A 8F5 80 LAB177: MOVX A,@R0 8F6 6A ADD A,R2 8F7 90 MOVX @R0,A 8F8 F5 LAB174: SEL MB1 8F9 14 FD CALL LAB155 ; 08FD 8FB 04 7C JMP LAB151 ; 087C 8FD 34 E8 LAB155: CALL LAB156 ; 09E8 8FF B8 01 MOV R0,#01 901 B9 33 MOV R1,#33 903 34 3E CALL LAB157 ; 093E 905 B8 05 MOV R0,#05 907 B9 34 MOV R1,#34 909 34 3E CALL LAB157 ; 093E 90B E5 SEL MB0 90C 34 27 CALL ENABLE ; 0127 90E F5 SEL MB1 90F 34 A2 CALL LAB166 ; 09A2 911 83 RET 912 B8 E9 LAB154: MOV R0,#E9 914 B9 90 MOV R1,#90 916 BA 08 MOV R2,#08 918 74 CE CALL LAB148 ; 0BCE 91A E5 SEL MB0 91B 23 2E MOV A,#CRASH ; 2E - explosão 91D 34 A2 CALL SNDSET ; 01A2 91F B8 30 MOV R0,#30 921 B0 00 MOV @R0,#00 923 BF 80 MOV R7,#80 925 B8 32 MOV R0,#32 927 B0 FF MOV @R0,#FF 929 34 27 LAB172: CALL ENABLE ; 0127 92B BC 50 MOV R4,#50 92D BE 08 MOV R6,#08 92F 34 B0 CALL TIMER ; 01B0 931 34 76 CALL NXTINT ; 0176 933 34 1C CALL DISABL ; 011C 935 F5 SEL MB1 936 14 FD CALL LAB155 ; 08FD 938 E5 SEL MB0 939 EF 29 DJNZ R7,LAB172 ; 0929 93B F5 SEL MB1 93C 04 22 JMP LAB152 ; 0822 93E F1 LAB157: MOV A,@R1 93F AA MOV R2,A 940 F2 99 JB7 LAB158 ; 0999 942 80 MOVX A,@R0 943 03 AA ADD A,#AA 945 E6 49 JNC LAB159 ; 0949 947 BA FE MOV R2,#FE 949 FA LAB159: MOV A,R2 94A A1 MOV @R1,A 94B C8 DEC R0 94C B9 32 MOV R1,#32 94E F1 MOV A,@R1 94F AB MOV R3,A 950 80 MOVX A,@R0 951 D3 F8 XRL A,#F8 953 C6 79 JZ LAB160 ; 0979 955 80 MOVX A,@R0 956 03 20 ADD A,#20 958 F6 6A JC LAB164 ; 096A 95A 80 MOVX A,@R0 95B 03 F0 ADD A,#F0 95D E6 6A JNC LAB164 ; 096A 95F FB MOV A,R3 960 52 67 JB2 LAB165 ; 0967 962 FA MOV A,R2 963 F7 RLC A 964 FA MOV A,R2 965 67 RRC A 966 AA MOV R2,A 967 74 AD LAB165: CALL LAB094 ; 0BAD 969 83 RET 96A 23 F8 LAB164: MOV A,#F8 96C 90 MOVX @R0,A 96D 18 INC R0 96E B9 3E MOV R1,#3E 970 F1 MOV A,@R1 971 03 1C ADD A,#1C 973 90 MOVX @R0,A 974 18 INC R0 975 23 38 MOV A,#38 977 90 MOVX @R0,A 978 83 LAB162: RET 979 F8 LAB160: MOV A,R0 97A 03 04 ADD A,#04 97C 53 07 ANL A,#07 97E A9 MOV R1,A 97F FB MOV A,R3 980 F2 90 JB7 LAB161 ; 0990 982 81 MOVX A,@R1 983 03 70 ADD A,#70 985 E6 78 JNC LAB162 ; 0978 987 23 11 MOV A,#11 989 90 LAB163: MOVX @R0,A 98A 18 INC R0 98B 18 INC R0 98C 23 3C MOV A,#3C 98E 90 MOVX @R0,A 98F 83 RET 990 81 LAB161: MOVX A,@R1 991 03 A0 ADD A,#A0 993 F6 78 JC LAB162 ; 0978 995 23 DF MOV A,#DF 997 24 89 JMP LAB163 ; 0989 999 80 LAB158: MOVX A,@R0 99A 03 E3 ADD A,#E3 99C F6 49 JC LAB159 ; 0949 99E BA 02 MOV R2,#02 9A0 24 49 JMP LAB159 ; 0949 9A2 B8 30 LAB166: MOV R0,#30 9A4 F0 MOV A,@R0 9A5 C6 E2 JZ LAB167 ; 09E2 9A7 AA MOV R2,A 9A8 B9 35 MOV R1,#35 9AA F1 MOV A,@R1 9AB 72 B2 JB3 LAB168 ; 09B2 9AD 11 INC @R1 9AE B9 37 MOV R1,#37 9B0 24 C0 JMP LAB171 ; 09C0 9B2 FA LAB168: MOV A,R2 9B3 A1 MOV @R1,A 9B4 19 INC R1 9B5 F1 MOV A,@R1 9B6 03 01 ADD A,#01 9B8 57 DAA 9B9 A1 MOV @R1,A 9BA 19 INC R1 9BB F1 MOV A,@R1 9BC 13 00 ADDC A,#00 9BE 57 DAA 9BF A1 MOV @R1,A 9C0 B8 3E LAB171: MOV R0,#3E 9C2 F0 MOV A,@R0 9C3 D3 3B XRL A,#3B 9C5 C6 E2 JZ LAB167 ; 09E2 9C7 F0 MOV A,@R0 9C8 12 D7 JB0 LAB169 ; 09D7 9CA C9 DEC R1 9CB F1 MOV A,@R1 9CC B9 18 MOV R1,#18 9CE BB 84 MOV R3,#84 9D0 BC 80 MOV R4,#80 9D2 BE 02 MOV R6,#02 9D4 34 E3 CALL LAB170 ; 09E3 9D6 83 RET 9D7 F1 LAB169: MOV A,@R1 9D8 B9 10 MOV R1,#10 9DA BB 74 MOV R3,#74 9DC BC 80 MOV R4,#80 9DE BE 02 MOV R6,#02 9E0 34 E3 CALL LAB170 ; 09E3 9E2 83 LAB167: RET 9E3 E5 LAB170: SEL MB0 9E4 34 7C CALL SCORE ; 017C 9E6 F5 SEL MB1 9E7 83 RET
Lê o valor no endereço 30 da memória interna, e carrega o valor correspondente da tabela a partir de 9F2 no endereço 32 da memória interna.
9E8 B8 30 LAB156: MOV R0,#30 9EA F0 MOV A,@R0 9EB 03 F2 ADD A,#F2 9ED A3 MOVP A,@A 9EE B8 32 MOV R0,#32 9F0 A0 MOV @R0,A 9F1 83 RET 9F2 FB DB FB ; XXXXX.XX 9F3 01 DB 01 ; .......X 9F4 01 DB 01 ; .......X 9F5 02 DB 02 ; ......X. 9F6 02 DB 02 ; ......X. 9F7 03 DB 03 ; ......XX 9F8 03 DB 03 ; ......XX 9F9 04 DB 04 ; .....X.. 9FA 05 DB 05 ; .....X.X 9FB BF 1C CRYPT3: MOV R7,#1C 9FD 54 A2 CALL LAB122 ; 0AA2 9FF B8 20 MOV R0,#20 A01 B9 1D MOV R1,#1D A03 23 FF MOV A,#FF A05 A0 LAB131: MOV @R0,A A06 18 INC R0 A07 E9 05 DJNZ R1,LAB131 ; 0A05 A09 BA 00 MOV R2,#00 A0B B9 3E MOV R1,#3E A0D F1 MOV A,@R1 A0E AE MOV R6,A A0F E5 LAB135: SEL MB0 A10 34 3D CALL KEYCHK ; 013D A12 F5 SEL MB1 A13 AF MOV R7,A A14 D3 2E XRL A,#2E A16 96 1A JNZ LAB132 ; 0A1A A18 24 FB JMP CRYPT3 ; 09FB A1A FA LAB132: MOV A,R2 A1B 03 F2 ADD A,#F2 A1D F6 41 JC LAB133 ; 0A41 A1F FF MOV A,R7 A20 D3 2F XRL A,#2F A22 C6 51 JZ LAB136 ; 0A51 A24 FA MOV A,R2 A25 03 2E ADD A,#2E A27 A8 MOV R0,A A28 FF MOV A,R7 A29 A0 MOV @R0,A A2A F1 MOV A,@R1 A2B 53 0F LAB145: ANL A,#0F A2D A8 MOV R0,A A2E D3 0F XRL A,#0F A30 C6 3D JZ LAB144 ; 0A3D A32 07 DEC A A33 C6 3D JZ LAB144 ; 0A3D A35 F8 MOV A,R0 A36 03 20 ADD A,#20 A38 A8 MOV R0,A A39 F0 MOV A,@R0 A3A 37 CPL A A3B C6 4A JZ LAB146 ; 0A4A A3D F8 LAB144: MOV A,R0 A3E 07 DEC A A3F 44 2B JMP LAB145 ; 0A2B A41 96 4C LAB133: JNZ LAB134 ; 0A4C A43 FF MOV A,R7 A44 D3 2F XRL A,#2F A46 C6 51 JZ LAB136 ; 0A51 A48 44 4C JMP LAB134 ; 0A4C A4A FF LAB146: MOV A,R7 A4B A0 MOV @R0,A A4C FF LAB134: MOV A,R7 A4D 54 AB CALL LAB123 ; 0AAB A4F 44 0F JMP LAB135 ; 0A0F A51 B9 20 LAB136: MOV R1,#20 A53 54 FE CALL LAB137 ; 0AFE A55 B9 00 MOV R1,#00 A57 BA 0E MOV R2,#0E A59 E5 LAB142: SEL MB0 A5A 34 3D CALL KEYCHK ; 013D A5C F5 SEL MB1 A5D AF MOV R7,A A5E D3 2F XRL A,#2F A60 96 68 JNZ LAB140 ; 0A68 A62 B9 2E MOV R1,#2E A64 54 FE CALL LAB137 ; 0AFE A66 64 F1 JMP LAB128 ; 0BF1 A68 FF LAB140: MOV A,R7 A69 54 AB CALL LAB123 ; 0AAB A6B FA MOV A,R2 A6C 03 1F ADD A,#1F A6E A8 MOV R0,A A6F F0 MOV A,@R0 A70 DF XRL A,R7 A71 C6 8E JZ LAB141 ; 0A8E A73 23 28 MOV A,#TONE2 ; 28 - erro A75 E5 SEL MB0 A76 34 A2 CALL SNDSET ; 01A2 A78 F5 SEL MB1 A79 F9 MOV A,R1 A7A 03 01 ADD A,#01 A7C 57 DAA A7D A9 MOV R1,A A7E BF 20 MOV R7,#20 A80 E5 SEL MB0 A81 34 76 LAB143: CALL NXTINT ; 0176 A83 EF 81 DJNZ R7,LAB143 ; 0A81 A85 F5 SEL MB1 A86 23 0C MOV A,#0C A88 CA DEC R2 A89 54 AB CALL LAB123 ; 0AAB A8B CA DEC R2 A8C 44 59 JMP LAB142 ; 0A59 A8E 18 LAB141: INC R0 A8F F0 MOV A,@R0 A90 37 CPL A A91 96 59 JNZ LAB142 ; 0A59 A93 BF 0E MOV R7,#0E A95 54 A2 CALL LAB122 ; 0AA2 A97 F9 MOV A,R1 A98 B9 10 MOV R1,#10 A9A BB 59 MOV R3,#59 A9C E5 SEL MB0 A9D 34 7C CALL SCORE ; 017C A9F F5 SEL MB1 AA0 64 F1 JMP LAB128 ; 0BF1 AA2 BA 00 LAB122: MOV R2,#00 AA4 23 0C LAB130: MOV A,#0C AA6 54 AB CALL LAB123 ; 0AAB AA8 EF A4 DJNZ R7,LAB130 ; 0AA4 AAA 83 RET AAB AD LAB123: MOV R5,A AAC FA MOV A,R2 AAD 03 E4 ADD A,#E4 AAF 00 NOP AB0 E6 B4 JNC LAB124 ; 0AB4 AB2 64 F1 JMP LAB128 ; 0BF1 AB4 FA LAB124: MOV A,R2 AB5 03 E1 ADD A,#E1 AB7 A3 MOVP A,@A AB8 A8 MOV R0,A AB9 FA MOV A,R2 ABA E7 RL A ABB E7 RL A ABC E7 RL A ABD 03 19 ADD A,#19 ABF AB MOV R3,A AC0 FA MOV A,R2 AC1 03 F2 ADD A,#F2 AC3 F6 C9 JC LAB125 ; 0AC9 AC5 BC 4E MOV R4,#4E AC7 44 CF JMP LAB127 ; 0ACF AC9 FB LAB125: MOV A,R3 ACA 03 90 ADD A,#90 ACC AB MOV R3,A ACD BC 7E MOV R4,#7E ACF FE LAB127: MOV A,R6 AD0 03 02 LAB126: ADD A,#02 AD2 53 0E ANL A,#0E AD4 C6 D0 JZ LAB126 ; 0AD0 AD6 AE MOV R6,A AD7 E5 SEL MB0 AD8 34 1C CALL DISABL ; 011C ADA 74 EA CALL OPMJ ; 03EA ADC 34 27 CALL ENABLE ; 0127 ADE F5 SEL MB1 ADF 1A INC R2 AE0 83 RET AE1 40 DB 40 ; .X...... AE2 50 DB 50 ; .X.X.... AE3 44 DB 44 ; .X...X.. AE4 54 DB 54 ; .X.X.X.. AE5 48 DB 48 ; .X..X... AE6 58 DB 58 ; .X.XX... AE7 4C DB 4C ; .X..XX.. AE8 5C DB 5C ; .X.XXX.. AE9 10 DB 10 ; ...X.... AEA 14 DB 14 ; ...X.X.. AEB 18 DB 18 ; ...XX... AEC 1C DB 1C ; ...XXX.. AED 20 DB 20 ; ..X..... AEE 24 DB 24 ; ..X..X.. AEF 60 DB 60 ; .XX..... AF0 70 DB 70 ; .XXX.... AF1 64 DB 64 ; .XX..X.. AF2 74 DB 74 ; .XXX.X.. AF3 68 DB 68 ; .XX.X... AF4 78 DB 78 ; .XXXX... AF5 6C DB 6C ; .XX.XX.. AF6 7C DB 7C ; .XXXXX.. AF7 28 DB 28 ; ..X.X... AF8 2C DB 2C ; ..X.XX.. AF9 30 DB 30 ; ..XX.... AFA 34 DB 34 ; ..XX.X.. AFB 38 DB 38 ; ..XXX... AFC 3C DB 3C ; ..XXXX.. AFD 80 DB 80 ; X....... AFE BF 0E LAB137: MOV R7,#0E B00 BA 00 MOV R2,#00 B02 23 4A MOV A,#SCLUP ; 4A - som de select game B04 E5 SEL MB0 B05 34 A2 CALL SNDSET ; 01A2 B07 E5 LAB139: SEL MB0 B08 34 76 CALL NXTINT ; 0176 B0A F5 SEL MB1 B0B F1 MOV A,@R1 B0C 19 INC R1 B0D 37 CPL A B0E C6 13 JZ LAB138 ; 0B13 B10 37 CPL A B11 54 AB CALL LAB123 ; 0AAB B13 EF 07 LAB138: DJNZ R7,LAB139 ; 0B07 B15 83 RET
Monta a grade do Cryptologic
B16 E5 CRYPT1: SEL MB0 B17 34 1C CALL DISABL ; 011C B19 B8 C1 MOV R0,#C1 B1B BA 07 MOV R2,#07 B1D 23 28 MOV A,#28 B1F 90 CRYPT2: MOVX @R0,A B20 18 INC R0 B21 EA 1F DJNZ R2,CRYPT2 ; 0B1F B23 34 27 CALL ENABLE ; 0127
Ajusta a grade para azul, com fundo preto.
B25 B8 A3 MOV R0,#A3 B27 23 01 MOV A,#01 B29 90 MOVX @R0,A B2A F5 SEL MB1 B2B 24 FB JMP CRYPT3 ; 09FB
B2D BB 1A LAB185: MOV R3,#1A B2F BC 70 MOV R4,#70 B31 BE 0E MOV R6,#0E B33 BF 02 MOV R7,#02 ; nível máximo de dificuldade B35 74 53 CALL SKILL ; 0B53 B37 E5 SEL MB0 B38 96 40 JNZ LAB186 ; 0B40 B3A B8 3F MOV R0,#3F B3C F0 MOV A,@R0 B3D 43 01 ORL A,#01 B3F A0 MOV @R0,A B40 34 76 LAB186: CALL NXTINT ; 0176 B42 B9 00 MOV R1,#00 B44 74 8F CALL RESLV ; 038F B46 FB MOV A,R3 B47 37 CPL A B48 F2 40 JB7 LAB186 ; 0B40 B4A B8 3F MOV R0,#3F B4C F0 MOV A,@R0 B4D 43 10 ORL A,#10 B4F A0 MOV @R0,A B50 F5 SEL MB1 B51 04 7C JMP LAB151 ; 087C
Esta rotina pede o nível de dificuldade para o jogador. R7 contém o número máximo de dificuldade (2 para Fórmula 1! e 4 para Interlagos! - Começa em zero).
Espera pressionar uma tecla e retorna (valor escolhido - 1) em A e R1.
; Para Fórmula 1: ; ; Skill 1-> #00 ; Skill 2-> #01 ; ; Para Interlagos: ; ; Skill 1-> #00 ; Skill 2-> #01 ; Skill 3-> #02 ; Skill 4-> #03 B53 B9 7F SKILL: MOV R1,#SKLMSG ; B7F -> 7F B55 B8 10 MOV R0,#SVMAJ1 ; 10 B57 BA 09 MOV R2,#09 ; imprimir 9 caracteres
Exibe a mensagem "SKILL? 1→" que está na posição B7Fh
B59 E5 SEL MB0 B5A 34 1C CALL DISABL ; 011C B5C F9 SKILL1: MOV A,R1 ; pega o caracter, salva em R5 e exibe B5D A3 MOVP A,@A B5E AD MOV R5,A B5F 74 EA CALL OPMJ ; 03EA B61 19 INC R1 B62 EA 5C DJNZ R2,SKILL1 ; 0B5C
Exibe o nível máximo que o jogador pode selecionar.
B64 FF MOV A,R7 ; imprime o nível máximo B65 AD MOV R5,A B66 74 EA CALL OPMJ ; 03EA
Espera o jogador apertar uma tecla, se for inválido, assume FF, e retorna.
B68 34 27 CALL ENABLE ; 0127 B6A 34 3D CALL KEYCHK ; 013D B6C 07 DEC A B6D A9 MOV R1,A B6E 34 1C CALL DISABL ; 011C B70 34 6B CALL CLRMAJ ; 016B B72 34 27 CALL ENABLE ; 0127 B74 FF MOV A,R7 B75 07 DEC A B76 37 CPL A B77 69 ADD A,R1 B78 E6 7C JNC SKILL2 ; 0B7C B7A B9 FF MOV R1,#FF ; tecla inválida B7C F9 SKILL2: MOV A,R1 B7D F5 SEL MB1 B7E 83 RET B7F 19 SKLMSG: DB 19 ; SKILL? 1→ B80 1F DB 1F B81 16 DB 16 B82 0E DB 0E B83 0E DB 0E B84 0D DB 0D B85 0C DB 0C B86 01 DB 01 B87 36 DB 36
B88 F9 LAB105: MOV A,R1 B89 03 93 ADD A,#93 B8B A3 MOVP A,@A B8C C6 9B JZ LAB106 ; 0B9B B8E AA MOV R2,A B8F 80 LAB107: MOVX A,@R0 B90 6A ADD A,R2 B91 90 MOVX @R0,A B92 83 RET B93 00 DB 00 ; ........ B94 06 DB 06 ; .....XX. B95 06 DB 06 ; .....XX. B96 06 DB 06 ; .....XX. B97 00 DB 00 ; ........ B98 FA DB FA ; XXXXX.X. B99 FA DB FA ; XXXXX.X. B9A FA DB FA ; XXXXX.X. B9B F9 LAB106: MOV A,R1 B9C 03 A5 ADD A,#A5 B9E A3 MOVP A,@A B9F C6 88 JZ LAB105 ; 0B88 BA1 AA MOV R2,A BA2 18 INC R0 BA3 64 8F JMP LAB107 ; 0B8F BA5 FB DB FB ; XXXXX.XX BA6 FB DB FB ; XXXXX.XX BA7 00 DB 00 ; ........ BA8 05 DB 05 ; .....X.X BA9 05 DB 05 ; .....X.X BAA 05 DB 05 ; .....X.X BAB 00 DB 00 ; ........ BAC FB DB FB ; XXXXX.XX BAD 80 LAB094: MOVX A,@R0 BAE 6B ADD A,R3 BAF 90 MOVX @R0,A BB0 18 INC R0 BB1 FA MOV A,R2 BB2 F7 RLC A BB3 FA MOV A,R2 BB4 67 RRC A BB5 A9 MOV R1,A BB6 E6 CA JNC LAB095 ; 0BCA BB8 18 INC R0 BB9 F8 MOV A,R0 BBA 43 20 ORL A,#20 BBC A8 MOV R0,A BBD F0 MOV A,@R0 BBE D3 01 XRL A,#01 BC0 A0 MOV @R0,A BC1 28 XCH A,R0 BC2 53 0F ANL A,#0F BC4 28 XCH A,R0 BC5 90 MOVX @R0,A BC6 C8 DEC R0 BC7 12 CA JB0 LAB095 ; 0BCA BC9 19 INC R1 BCA 80 LAB095: MOVX A,@R0 BCB 69 ADD A,R1 BCC 90 MOVX @R0,A BCD 83 RET BCE F8 LAB148: MOV A,R0 BCF A3 MOVP A,@A BD0 91 MOVX @R1,A BD1 18 INC R0 BD2 19 INC R1 BD3 EA CE DJNZ R2,LAB148 ; 0BCE BD5 83 RET BD6 F8 DB F8 ; XXXXX... BD7 3C DB 3C ; ..XXXX.. BD8 38 DB 38 ; ..XXX... BD9 00 DB 00 ; ........ BDA F8 DB F8 ; XXXXX... BDB 3C DB 3C ; ..XXXX.. BDC 38 DB 38 ; ..XXX... BDD 00 DB 00 ; ........ BDE B0 DB B0 ; X.XX.... BDF 3C DB 3C ; ..XXXX.. BE0 0C DB 0C ; ....XX.. BE1 3C DB 3C ; ..XXXX.. BE2 7E DB 7E ; .XXXXXX. BE3 7E DB 7E ; .XXXXXX. BE4 3C DB 3C ; ..XXXX.. BE5 24 DB 24 ; ..X..X.. BE6 E7 DB E7 ; XXX..XXX BE7 FF DB FF ; XXXXXXXX BE8 7E DB 7E ; .XXXXXX. BE9 36 DB 36 ; ..XX.XX. BEA 1B DB 1B ; ...XX.XX BEB 6D DB 6D ; .XX.XX.X BEC 66 DB 66 ; .XX..XX. BED 33 DB 33 ; ..XX..XX BEE DF DB DF ; XX.XXXXX BEF E6 DB E6 ; XXX..XX. BF0 70 DB 70 ; .XXX.... BF1 E5 LAB128: SEL MB0 BF2 34 3D LAB129: CALL KEYCHK ; 013D BF4 D3 2E XRL A,#2E BF6 96 F2 JNZ LAB129 ; 0BF2 BF8 F5 SEL MB1 BF9 64 16 JMP LAB119 ; 0B16 BFB 27 DB 27 ; ..X..XXX BFC 64 DB 64 ; .XX..X.. BFD E2 DB E2 ; XXX...X. BFE 41 DB 41 ; .X.....X BFF 00 DB 00 ; ........