Por qué
Si eres un entusiasta de las computadoras retro, puedes saltarte el discurso motivador de manera segura y pasar a la siguiente sección.
Todo agosto de 2018, yo y mi hijo
Ivanq de 13 años pasamos escribiendo una demostración de
Good Apple . En el festival
Chaos Constructions , nuestro trabajo obtuvo el segundo lugar, por el cual recibimos un premio en efectivo de 35 mil rublos, que honestamente dividimos en partes iguales. Para un niño, este es un buen ingreso, aunque al crear sitios ganó la misma cantidad en menos tiempo. Obviamente, podría pasar mi tiempo con un mayor beneficio económico ... ¡Pero no agosto! Una vez debemos descansar del trabajo. La programación para su propio placer es un lujo que solo puede permitirse en vacaciones.

La recompensa material, por supuesto, no sirve como motivación, sino que refuerza las emociones positivas. Sorprendentemente, la demostración de una computadora soviética olvidada reunió
miles de visitas en YouTube y terminó en una
lista de reproducción con casi cien mil visitas. ¡Pero aún más sorprendente, en 2018, se le otorga un premio en efectivo! Quizás la misma improbabilidad de lo que está sucediendo da lugar a un aumento tan emocional.
Sin embargo, hay algo más importante.
Al crear "Good Apple" tuvimos que trabajar con hardware real, ya que utilizamos las capacidades de la computadora, que los emuladores no se reproducen correctamente. En primer lugar, quería lograr un trabajo igualmente estable con los discos duros IDE y con sus sustitutos modernos en forma de Compact Flash.
Fue en este proyecto que mi hijo de 13 años adquirió una experiencia invaluable en el desarrollo industrial. Hierro defectuoso. Buen hardware que no se comporta como se describe en la documentación. Documentación redactada con errores. Falta de documentación sobre una serie de cuestiones. Escribir sus propias pruebas para identificar problemas con el hierro. Plazos salientes. Pruebas en diferentes máquinas y configuraciones. Escribir su propio ensamblador cruzado (cuando quedó claro que las soluciones existentes dificultan el proceso de desarrollo). Y finalmente, después de una breve celebración del éxito: el lanzamiento obligatorio de la versión final, corrigiendo una serie de errores.
A primera vista, parece que se podría obtener una experiencia similar con algunos Arduino modernos. De hecho, tuvimos que sumergirnos en la jungla de los circuitos. Calculamos el número de medidas para las cuales se ejecutan las instrucciones. En diferentes tipos de memoria, esta vez es diferente. El controlador de memoria y el procesador funcionan a diferentes frecuencias, por lo que los mismos comandos se pueden ejecutar en diferentes momentos, incluso en el mismo tipo de memoria. La duración de la ejecución del subprograma no es igual a la suma de las duraciones de las instrucciones de este subprograma. Tuvimos que escribir nuestras propias herramientas para probar y optimizar el código en hardware real.

Terminó que mi hijo estaba estudiando el circuito BK 0011 (a qué bordes de la señal llegan cuando se activa RPLY, etc., ya no entiendo nada sobre esto). Entonces se le ocurrió la idea de crear su propio emulador BK, compatible con hardware real preciso al ritmo, e incluso escribió el núcleo ... Sin embargo, esta es otra historia.
En total, en un mes, desde estudiar ensamblador hasta crear sus propias herramientas de desarrollo, desde pruebas duras hasta el trabajo multimedia terminado. Todo esto sería imposible sin lo principal: la planificación. Quizás la lección más valiosa aprendida. Tomas una tarea imposible. Entiendes que encontrarás dificultades insuperables. Estan planeando Usted lo hace El resultado sorprende tanto a todos que incluso los entendidos culpan al engaño ("¡overclockearon el procesador!").
¿Por qué no el ZX Spectrum?

Nuevamente, comenzaré con una extraña: finanzas. A juzgar por los anuncios en Avito, en promedio, el BC 0010 cuesta varias veces más que el ZX Spectrum. Está claro que para una rara instancia del Spectrum nativo en perfecto estado, solicitarán una suma redonda. Pero el BC 0011m completamente cargado seguirá siendo más caro. Si en absoluto capaz de encontrar. Los precios hablan por sí mismos: el valor de recolección de BC 0010 es más alto. Y BK 0011m, y aún más. Tener una computadora así en casa es muy agradable.
El segundo argumento es de 16 bits. No hay nada de 8 bits en BC 0010. El procesador ni siquiera sabe cómo agregar números de 8 bits; no tiene un comando ADDB. 16 bits en todo. La razón de esto es la arquitectura DEC PDP-11. Muchos llaman al sistema de comando del procesador PDP-11 el más exitoso y más conveniente jamás creado. Por supuesto, hay quienes quieren discutir esta afirmación. Pero aquí hay un hecho: en el Yandex
Demodulation Festival, tres seminarios se dedicaron a arquitecturas de procesador, y dos de ellos fueron sobre PDP-11. Esto, de hecho, es una leyenda, un hito en la historia de la tecnología informática, que todavía sigue excitando las mentes de los entusiastas. BK 0010 hace posible tocar esta leyenda. Y no solo tocar, sino comprenderlo hasta el más mínimo detalle, sentir toda la belleza y la gracia del ensamblador DEC: registros absolutamente iguales, ocho métodos de direccionamiento, memoria lineal: ¡belleza!
El tercer argumento: muchas demos han sido escritas para el ZX Spectrum. Para BC 0010:
menos de cincuenta , contando pequeños de 256 bytes y 4 kilobytes. El lugar en el demoscene es casi gratis, ¡allí es donde incluso un principiante puede mostrarse!
Y la última consideración, puramente subjetiva. He estado viendo el demoscene ruso desde 1994. El partido spektrumistov me parece, desafortunadamente, más tóxico y hostil. ¡Por supuesto, hay personas maravillosas y amigables! Los respeto mucho a ellos y a su trabajo. Pero en general, probablemente debido a su carácter masivo, la escena de Spectrum se llenó de conflictos, aclaraciones de relaciones e incluso intrigas como la votación de nombres (cuando votan solo por "lo suyo" en los concursos). Mientras están en el pequeño escenario de BC-shnoy, no hacen preguntas como "quién es más cool" y están contentos con cada nuevo participante. Repito: esta es mi impresión puramente personal, que puedes ignorar.
Hierro real
Pasaron 20 años antes de que volviera a escribir programas para BC. Durante los 20 años, mucho ha cambiado. Para mí personalmente, se produjo un cambio importante en la mente: "Piensa diferente". Este eslogan se coloca en los créditos finales de nuestra demostración "Good Apple".
Solíamos cargar juegos desde una grabadora durante 5 minutos. Luego vinieron los controladores de la unidad. Detrás de ellos están los discos duros. Luego,
nuevas réplicas de controladores con Compact Flash a bordo. Ahora es costumbre emular unidades flash en la escena retro ... Pero espera, en 2019 tenemos una fuente de sonido portátil de alta calidad: iPhone. Así que tomemos el cable de audio estándar DIN-5: miniconector (ni siquiera tendrá que volver a soldar) y cargue el BK desde el iPhone a alta velocidad.
Revisé el rastro de la ROM,
revelé cómo podía superar ligeramente el algoritmo de arranque de la grabadora y hacer que el BC leyera los datos 4 veces más rápido.
El siguiente paso fue escribir un microcargador de arranque que lea datos en un
formato turbo especialmente diseñado. Tanto el cargador como los datos se colocaron uno tras otro en un solo archivo WAV (el
convertidor fue escrito por
Lenar Zakirov ). BK 0010 lee e inicia automáticamente el microcargador, que, a su vez, lee el resto de los datos del archivo. Las frecuencias en formato turbo alcanzan los 22 KHz, por lo que los requisitos para la calidad de la fuente de sonido son altos. El iPhone está haciendo frente. Un buen reproductor de música aún más. Tarjeta de sonido de computadora también.
Luego fue el turno del
ensamblador cruzado . Agregó opciones para guardar el programa en WAV (tanto en formato estándar como turbo). Además, el ensamblador cruzado puede reproducir inmediatamente WAV a través de una tarjeta de sonido. ¡Imagínese cómo aceleró el desarrollo! No es necesario molestarse en escribir una imagen de disco en una tarjeta CF después de cada compilación. Simplemente haga cambios en el código, haga clic en "Construir", el sonido fluye en el CD y después de unos segundos el programa ya se está ejecutando en hardware real. Para recibir sonido en un formato estándar, simplemente presione las teclas L (Cargar) e Intro en el BC 0011 (cargue el primer programa encontrado). Para transmitir sonido en formato turbo, primero debe ejecutar el microcargador de arranque (para mí, se inicia automáticamente desde el disco duro cuando se enciende el BC; en cualquier momento puede iniciar sesión en el sistema presionando la tecla STOP).

Es más fácil conectar el BK al televisor en modo monocromo, en la entrada AV compuesta habitual. Es necesario soldar el cable con un "tulipán" en un extremo y DIN-5 en el otro. Una señal monocromática proviene del cuarto pin de DIN-5 del conector BK, designado "TV". El suelo se asocia tradicionalmente con el segundo pin de DIN-5.
Personalmente, soy un fanático de las pantallas CRT monocromáticas: proporcionan claridad de imagen inalcanzable en monitores en color con su rejilla de apertura. Pero la mayoría de los juegos y todas las demostraciones son preferibles para ver en color. Para hacer esto, use la salida BK "TVC" y conéctese al televisor a través de SCART RGB. Contactos 3, 4, 5 en DIN-5 - respectivamente rojo, azul, verde. Pin 1 - Sincronización El pin 2 está conectado a tierra. Cuando se conecta a un televisor LCD, es útil aplicar +5 voltios al pin 16 del SCART (a través de una resistencia de 200 ohmios más o menos). Por lo general, se toman 5 voltios del conector adyacente "TV" (pin 1).
Puede usar un convertidor SCART-HDMI. Le advertiré de inmediato que BC muestra una imagen con una frecuencia no de 48 cuadros por segundo, sino de 48.83, por lo que en lugar de desplazarse suavemente por los monitores LCD, se notará una contracción periódica. Resolví este problema
reemplazando el resonador de cristal de cuarzo de 12 megahercios a 12.288 MHz. Sin embargo, las contracciones solo se notaron en algunas demostraciones. La mayoría de los programas BC no usan sincronización de velocidad de cuadros.
¿Por qué no contentarse con el emulador, para el cual puede ser necesaria una computadora real? Encontré cuatro cosas que están mal emuladas:
- Comportamiento del hablante a altas frecuencias.
- Sincronización de la imagen y paletas con el haz.
- Hora exacta de ejecución de los comandos (importante para la música a través de Covox).
- Trabaja con discos duros IDE a altas velocidades.
Si no planea hacer nada de lo anterior, el emulador es suficiente para usted.
Emulación
En MacOS, uso el emulador
BK2010 . No es muy preciso, pero es adecuado para la mayoría de las tareas.
El emulador
GID más avanzado se ejecuta actualmente en Windows. También se ejecuta en CrossOver para MacOS y Wine para Linux. El emulador tiene un buen depurador, un visor de páginas de memoria y similares.
Para escribir imágenes de disco en Compact Flash, utilizo la utilidad multiplataforma
Etcher . Pero más a menudo transmito datos a través del canal de audio.
Herramientas de desarrollo

Los chicos del grupo de demostración
Excess Team incitaron al ensamblador cruzado Alexei Morozov. Al principio lo usamos, pero pronto Ivanq escribió el suyo, multiplataforma, en Python. Funciona más lento, pero mucho más rico en funcionalidad. Esto incluye soporte para proyectos de múltiples archivos y expresiones aritméticas complejas, tipos de datos de doble palabra, integración con Sublime Text y soporte extendido para errores de compilación, guardar el resultado en un formato de archivo de sonido, compilación no solo para BC, sino también para UKSC, y mucho más. Puedes leer sobre todo esto en la documentación oficial.
El ensamblador cruzado se llama
PDPy11 .
Algunos veteranos se quejan de que PDPy11 carece de macros del clásico ensamblador de macros DEC (Macro-11). El ensamblador de macros es, en cierto sentido, un lenguaje diferente. Probablemente sea bueno para escribir programas de sistema, pero juegos serios y demos para BC fueron escritos, hasta donde yo sé, en un ensamblador clásico ordinario. Irónicamente: para el código fuente de los programas BK, es habitual utilizar la extensión de archivo .mac (de "macro") incluso en aquellos ensambladores que no admiten macros. En cualquier caso, las capacidades de PDPy11 son suficientes para escribir programas de cualquier nivel de complejidad.
El depurador está integrado en el emulador
GID . Le permite establecer las direcciones de los puntos de interrupción, interrumpir o continuar la ejecución del programa en cualquier momento, ver el contenido de los registros y la memoria, ejecutar el programa paso a paso, cambiar el contenido de la memoria, etc.
Para
convertir gráficos al formato BC, escribimos un
convertidor en línea . Resolución BK: 256x256 píxeles en modo color o 512x256 en monocromo. Es mejor que las imágenes más grandes no se ingresen al convertidor.
La documentación
Yuri Zaltsman escribió un gran
tutorial sobre programación en lenguaje ensamblador. Las diferencias entre BC 0011m y BC 0010 se escriben
aquí . También estaba el modelo BK 0011 (sin la "m"), pero se retiró rápidamente de la producción, reconociéndolo como no exitoso.
A pesar de que el BC 0011m tiene grandes capacidades (paletas de colores, páginas de memoria adicionales), al principio aconsejo programar para el BC 0010: este modelo es más simple y más comprensible. Cualquier programa escrito correctamente para BC 0010 también se ejecutará en BC 0011m.
El dispositivo procesador y el conjunto de instrucciones están bien descritos en
Wikipedia .
Para los más valientes:
programación en códigos .
Hola mundo
El área de la memoria de pantalla en BC 0010 comienza con la dirección 40000 (esquina superior izquierda) y termina con la dirección 77777 (esquina inferior derecha de la pantalla). Como puede suponer, la arquitectura PDP-11 utiliza un sistema de números de 8 decimales. Pero el ensamblador cruzado PDPy11, por supuesto, le permite escribir números también en sistemas binarios, decimales y hexadecimales, haga lo que quiera.
Para poner un
punto en la pantalla , debe escribir algún número en el área de la memoria de la pantalla. Los argumentos en el ensamblador DEC se escriben de izquierda a derecha: fuente, luego receptor Por ejemplo:
MOV #100000,@#60040 ;
El signo # significa que el argumento es solo un número (no una dirección). El signo @ # significa que el argumento es una dirección absoluta (es decir, no cambiará cuando el programa se mueva a otra ubicación de memoria).
La limpieza de pantalla se ve así:
MOV #40000,R1 ; MOV #20000,R0 ; 1: CLR (R1)+ ; , R1 SOB R0,1 ;
El direccionamiento indirecto (R1) utiliza el registro R1 como puntero de dirección. La memoria en el BC se direcciona por byte, pero la instrucción CLR borra inmediatamente dos bytes vecinos: primero 40000 y 40001, en el siguiente paso del ciclo 40002 y 40003, y así sucesivamente. La notación (R1) + significa que después de usar el argumento necesita aumentarlo. En este caso, por 2, porque el comando procesa 2 bytes. El contador de bucles puede ser cualquier registro. SOB resta una unidad del registro y va a la etiqueta 1. Las etiquetas locales se indican con números y dos puntos, su alcance entre dos etiquetas globales. Las etiquetas globales deben comenzar con una letra y también terminar con dos puntos.
Se puede hacer que la instrucción CLR funcione con bytes agregando la letra "B". Entonces CLRB (R1) + aumentará el registro R1 no en 2, sino en 1.
MOV #40000,R1 MOV R1,R0 ; 1: CLRB (R1)+ SOB R0,1
Puedes hacer lo mismo más corto. Limpiamos la pantalla de abajo hacia arriba utilizando el método de índice de direccionamiento:
MOV #40000,R0 1: CLRB 37777(R0) ; (37777+R0) SOB R0,1
Si se necesita alta velocidad, es mejor borrar la memoria no por bytes, sino inmediatamente con palabras. Será el doble de rápido. Pero puede acelerar más allá de eso: por alguna razón, el comando CLR es más lento que el MOV. Por lo tanto:
CLR R2 ; R2 MOV #40000,R1 ; MOV #20000,R0 ; 1: MOV R2,(R1)+ ; , R1 SOB R0,1 ;
Ahora, eligiendo una de las cuatro formas de borrar la pantalla, ya puede establecer puntos. En modo de color, cada punto corresponde a dos bits. En monocromo, un bit. BC no tiene un interruptor de programa de modos de pantalla. A qué salida conecté el monitor, recibí esa imagen.
Para mayor claridad, escribimos los colores de los puntos en el sistema de números binarios:
MOVB #0b00001100,@#50010 MOVB #0b00110000,@#50112 MOVB #0b11000000,@#50313
Los colores en cada par de bits se codifican de la siguiente manera: si solo se establece un bit par - un punto verde, solo un bit impar - azul, ambos bits se establecen - rojo, ambos bits se restablecen - negro. Bueno, un monitor monocromo muestra cada bit como un punto separado.
El comando MOVB escribe 4 puntos en la memoria en pantalla a la vez, y el comando MOV escribe 8 puntos. Si no desea afectar los puntos vecinos, utilice los comandos BIC (Bit Clear) y BIS (Bit Set), por ejemplo:
BICB #0b00001100,@#50112 ; BISB #0b00000100,@#50112 ;
Un punto interesante: en el texto escribimos los bits menos significativos a la derecha de los más significativos. Y en la pantalla, por el contrario: los puntos correspondientes a los bits menos significativos aparecen a la izquierda.
Eso, de hecho, se trata del dispositivo de memoria en pantalla BK 0010.
¿Pero qué pasa con la
salida de texto ?
MOV #Text,R1 ; EMT 20 ; HALT ; Text: .ASCII “Hello, World!” .BYTE 0 ;
Mostrar la fuente!

Será más fácil comenzar mirando el código fuente de las demostraciones terminadas:
In Your Space - demo para Covox, fuentes en el archivo.
Good Apple : fuentes de GitLab (un complejo proyecto de varios archivos).
EIS es un emulador de instrucciones aritméticas extendidas con códigos fuente.
Fuentes de tres demos de 256 bytes.
En el número 28 de la revista
Downgrade, un gran artículo sobre la evolución de los algoritmos de música tracker en BC 0010, con fragmentos de programas y explicaciones detalladas. Una historia nostálgica de una demostración temprana para arrancar.
Cuando empezar
Ahora mismo Después de 4 semanas en Kazán se llevará a cabo demopati
CAFe 2019 . El programa del festival tiene un concurso
BK 0010 - 512 bytes . Este tamaño se ajusta a 85 a 256 instrucciones, ideal para principiantes. Dos semanas son suficientes para manejar las herramientas y escribir la primera demostración simple. Después de eso, todavía habrá una semana y media para escribir un segundo trabajo más serio.
¡Adelante, puedes!
Telegram chat , foro
zx-pk : te ayudarán en todas partes. envíe trabajo al concurso, y mejor aún, venga usted mismo.
¡La escena está viva !