Mechanic · input & timing · baseball
Pitch control
How a baseball game lets the pitcher set a pitch's speed and path, before the release and while the ball is in the air.
On this page
Pitch control is what the pitcher decides about a pitch and when. In Konami’s Baseball a meter that runs before the pitch picks one of 12 steps, 1.40 to 3.55 px per run1, and a direction held while the ball is in the air moves it across its path, faster the longer it’s held for all but the fastest pitches2.
- Meter and steerKonami's Baseball (1984). A meter running 70 to 160 sets the speed; a direction held in flight moves the ball sideways faster and faster.1,2
Games
| Game | Year | How | Note |
|---|---|---|---|
| Konami's Baseball | 1984 | Meter and steer | a meter running 70 to 160 sets the speed; a direction held in flight moves the ball sideways faster and faster |
Every claim about this mechanic, by game (2)
References
- ^ abIn Konami's Baseball a meter runs on every frame of a match until the pitch starts: a three-digit decimal count that starts at 70, rises by one per frame to 160, then falls by one per frame, and is reset to 70 and rising when it falls back to 70. A speed index starts at 0, rises by one each time the count passes a ten on the way up, and falls by one each time the count's units digit wraps from 0 to 9 on the way down (80 to 79), so it is the count's tens less 7: 0 at 70 to 79, 8 at 150 to 159, and 9 only at the peak of 160 (computed). Pressing a button with no direction, or with down (bit 1, which the disassembly's comment on the arrow-key table names as down), starts the wind-up, which stops the meter. The speed index then picks the ball's step from a 12-entry table, 358 to 910 in 1/256 pixel (about 1.40 to 3.55 pixels), added toward the plate each time the pitch routine runs, which is on even frames only; the meter alone gives indexes 0 to 9. In flight a first counter (0xE127) is lowered by the pixels moved each run and reloaded with 3 more when it wraps; only on runs where it has just wrapped, a second counter (0xE128, starting at 10) is lowered too, and when that one wraps it is reset to 10 and the index falls by one, not below 0, and the step is re-read, so the pitch slows on its way (the atlas's reading).Codeantxiko/KonamisBaseball-disassemblyrevised
How we know
DATOS tabla_de_flechas: Traduce las cuatro flechas de la fila 8 del teclado … lo que sale lleva bit 0 arriba, bit 1 ; abajo, bit 2 izquierda y bit 3 derecha.
src/baseball.asm#L601-L607 · upstream ↗ interrupcion: ; El manejador que INIT engancha en H.KEYI. Todo el juego corre aqui dentro … (0xE003): solo con la partida en marcha corren las tres rutinas de abajo … call lleva_el_medidor
src/baseball.asm#L32-L68 · upstream ↗ lleva_el_medidor: ; El medidor que se llena mientras el lanzador prepara. … sube_el_medidor: ; Suma uno en BCD al contador de 0xE361 … inc (hl) … ; (0xE363), un paso mas … cp 060h … ; en 60 se da la vuelta
src/baseball.asm#L2125-L2168 · upstream ↗ baja_el_medidor: ; Lo mismo del reves: resta uno en BCD … dec (hl) … ; (0xE363), un paso menos … cp 070h … ; 0x70: se acabo … jp pone_el_medidor_a_cero … ld (hl),001h … ; (0xE360) := 1: de bajada
src/baseball.asm#L2176-L2223 · upstream ↗ pone_el_medidor_a_cero: ; Deja el medidor listo: contador en 0x70 … ld (hl),070h … ; (0xE361) := 0x70, el contador … ld (hl),a … ; (0xE363) := 0
src/baseball.asm#L2551-L2562 · upstream ↗ and 0f0h … ; los cuatro bits altos: sin nada pulsado no pasa nada … bit 1,b … ; el bit 1, abajo jr nz,arma_el_brazo … and 00dh … ; los bits 0, 2 y 3 jr z,arma_el_brazo
src/baseball.asm#L1621-L1641 · upstream ↗ ld a,(0e363h) … ; (0xE363), la velocidad … ld hl,04f97h … ; tabla_4f97, indexada por la velocidad por dos … ld (de),a … ; ...es el paso de la pelota
src/baseball.asm#L1655-L1692 · upstream ↗ DATOS pasos_de_la_pelota: Doce parejas de 16 bits: el paso por cuadro de la … ; pelota para cada velocidad de lanzamiento.
src/baseball.asm#L2088-L2093 · upstream ↗ lleva_la_pelota_en_el_aire: ; La pelota volando hacia el bateador. … adc hl,de … ; sumados … ld hl,0e130h … ; HL = 0xE130, la columna de la pelota add a,(hl) … ; mas lo andado
src/baseball.asm#L1773-L1812 · upstream ↗ ld hl,0e127h … ; HL = 0xE127, el contador de posturas … sub b … ; menos lo andado … ld (hl),00ah … ; diez cuadros para el siguiente … cp 0ffh … ; agotado el efecto, ya no se toca mas … ld hl,04f97h … ; tabla_4f97 otra vez, con la velocidad nueva … ld hl,0e125h … ; y el paso de la pelota se rehace
src/baseball.asm#L1876-L1908 · upstream ↗ ld a,(0e000h) … ; el contador de cuadros rrca … ; su bit 0 decide la mitad jr c,la_otra_mitad_del_cuadro … call lleva_el_lanzamiento
src/baseball.asm#L6447-L6452 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Revised after a check by a second AI model, 2026-10-22.
- ^ abIn Konami's Baseball, once the pitch is in the air the routine that moves the ball also reads a controller and moves the ball's row, across its path to the plate. The disassembly's labels and comments call this part the bat; the atlas reads it as the pitcher's, because it calls the same controller routine (el_mando_del_que_ataca) as the code that starts the pitch, while the batter's routine calls the other one (el_mando_del_que_defiende). The first press of bit 1, 2, or 3 of the controller byte fixes the direction: bit 3 moves the row by +1, bit 1 or 2 alone by -1. The disassembly's comment on the arrow-key table names those bits down (1), left (2), and right (3), which makes it right for +1 and down or left for -1. The row then moves one pixel every n runs of the routine, which runs on even frames. For speed indexes 0 to 7, n starts at 8 and, while one of those directions stays held, becomes 4 after 8 runs, 3 after 4 more, and 2 after 3 more, where it stays; letting go keeps the current n (computed). The values come from four identical table rows of 8, 4, 3, 2, 1 (the 1 is never reached), the row picked by the pitch's speed index halved and capped at 4. At speed index 8 or 9 that is a fifth row, past the table's end, so n is read from the first bytes of the next routine: 33 runs per pixel at first, then a 0, which the countdown treats as 256, so the fastest pitches barely move across (the atlas's reading, computed).Codeantxiko/KonamisBaseball-disassemblyrevised
How we know
DATOS tabla_de_flechas: Traduce las cuatro flechas de la fila 8 del teclado … lo que sale lleva bit 0 arriba, bit 1 ; abajo, bit 2 izquierda y bit 3 derecha.
src/baseball.asm#L601-L607 · upstream ↗ lleva_el_lanzamiento: ; El cuadro del lanzador. … call el_mando_del_que_ataca … ; lee el mando del jugador que lanza
src/baseball.asm#L1621-L1632 · upstream ↗ lleva_al_bateador: ; El cuadro del bateador. … call el_mando_del_que_defiende … ; lee el mando del bateador
src/baseball.asm#L4653-L4665 · upstream ↗ mira_el_mando_del_bateador: ; Con 0xE12A a cero todavia no se ha empezado a batear … call el_mando_del_que_ataca … ; lee el mando del bateador … and 00eh … ; los bits 1, 2 y 3 … bit 3,a … ; el bit 3 elige el sentido del bate … inc (hl) … ; la primera postura del bate
src/baseball.asm#L1909-L1937 · upstream ↗ ld hl,04faah … ; HL = 0x4faa, la tabla de posturas … djnz salta_una_fila_de_posturas … cp 005h … ; de la quinta en adelante... … ld a,004h … ; ...se queda en la cuarta … ld (hl),b … ; guardado … ld (hl),b … ; y el tercero siempre
src/baseball.asm#L1938-L1968 · upstream ↗ 1969sigue_el_bate: ; Con el bate ya en marcha: mientras se siga pulsando, cada vuelta del contador cambia de posturasrc/baseball.asm lines 1969–2003 at d687f54 · upstream ↗ DATOS posturas_del_bate: Cuatro filas de cinco tiles … 0x4faf..0x4fc3 (20 bytes)
src/baseball.asm#L2108-L2119 · upstream ↗ srl a … ; la velocidad partida por dos... cp 004h … ld a,004h … ; ...y recortada a 4 como mucho … ld (hl),a … ; la potencia, ya recortada … xor a … ; y los tres bytes siguientes de la ficha, a cero
src/baseball.asm#L1687-L1699 · upstream ↗ lleva_el_medidor: … ld hl,0e100h … ; HL = 0xE100, la palabra de estado
src/baseball.asm#L2125-L2126 · upstream ↗ 5108el_mando_del_que_ataca: ; Lo mismo pero para el otro, con el acarreo cambiadosrc/baseball.asm lines 5104–5116 at d687f54 · upstream ↗ calcula_flancos: ; Para cada jugador, deja en el tercer byte de su bloque solo los bits RECIEN pulsados … cp (hl) … ; contra la del fotograma anterior … jr nz,L_43EE … inc hl … ld (hl),a
src/baseball.asm#L663-L677 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Revised after a check by a second AI model, 2026-10-22.
Sources
Code
- antxiko. 2026. “Konami's Baseball (MSX), commented disassembly (antxiko).” Commit d687f54. antxiko/KonamisBaseball-disassembly @ d687f54 · licence, all uses