How I made typing Chinese on the Apple II possible

Bueno, ahora que Windows 11 está oficialmente disponible, he decidido cambiarme a Apple. Solo han pasado unos 40 años desde la era de los 8 bits para algunas personas que pueden no parecer mucho tiempo, pero el lanzamiento de Apple II está más cerca. hasta el final de la Segunda Guerra Mundial de lo que es hoy en día, muchas personas pueden pensar en 8 bits como una especie de palabra de moda, como el arte de píxeles y los juegos retro, que son tan populares que no muchas personas pueden darse cuenta de que las cosas se veían y actuaban de esa manera simplemente por a las limitaciones de hardware de esa época, ahora cualquier máquina comercial moderna es capaz de ejecutar software que la gente ni siquiera podía soñar con escribir hace unas décadas, los sistemas operativos ejecutan docenas de programas a la vez y llaman a cientos de comandos más en el fondo, pero el progreso de la tecnología no es nada nuevo para las personas, hubo períodos de la historia humana que llamamos la edad de piedra, la edad de bronce, la edad de hierro e incluso ahora la era de la computadora porque esas tecnologías han revolucionado profundamente la sociedad humana y durante esos épocas hubo más invenciones que afectaron la historia humana de las que podemos mencionar montando canicas de pólvora, plástico y, por supuesto, tipos móviles, muchos dan crédito a Gutenberg por la invención de los tipos móviles, pero la historia real de cómo se creó nos lleva a la antigua China inventada por shang durante la dinastía Song, los bloques de caracteres individuales se crearon por primera vez a partir de un material cerámico o de madera y los caracteres en sí tenían que escribirse al revés.

Estos bloques de tipos individuales se colocarían en un marco cepillado con tinta y presionado sobre una hoja de papel. este proceso fue laborioso, ya que cada bloque de caracteres debía elaborarse meticulosamente a mano, pero revolucionó el registro y la distribución de información, ya no era necesario escribir cada documento individual a mano, sino que una vez que se colocaba un documento en el marco, se podía imprimir tantas veces como fuera necesario. durante muchos siglos este fue el apogeo de la escritura no solo en china sino en todo el mundo no sería hasta 700 años después con la invención de la máquina de escribir en 1868 que la escritura vería otra revolución la máquina de escribir en cierto modo es como un personal imprenta, aunque es posible que no pueda reimprimir el mismo documento, escribir es, sin embargo, más limpio, más rápido y más fácil que escribir.

Máquina de escribir con tantos caracteres, en realidad de todos los caracteres chinos, solo se necesitan unos pocos miles para cubrir la mayor parte de lo que se debe escribir a diario y, de hecho, había algunas versiones de una máquina de escribir con caracteres chinos que tenía varios miles de caracteres algunos de los más notables son la máquina de escribir ho quinn cho tong chur que usaba una rueda que el usuario giraba hacia el carácter correcto para imprimir la máquina de escribir china de ibm que le daba a cada carácter chino un código de cuatro dígitos que tendría que ser perforado o el doble máquina de escribir de paloma que tenía todos los caracteres en la bandeja inferior y el usuario navegaba hasta el correcto e imprimía en la página la historia detrás de estas máquinas sin duda merece un video por sí mismo y lo vincularé a un video de junio furno que entra en detalles con cada uno de estos con la introducción de la computadora personal a fines de los 70 y principios de los 80, hubo una mezcla de computadoras y máquinas de escribir conocida como el procesador de textos, lo que nuevamente fue tan fácil de implementar para aquellos con un alfabeto latino.

se convirtió en un problema difícil para aquellos en el este su solución no era tan simple con computadoras que usaban el teclado típico de una máquina de escribir para ingresar ¿cómo se podría escribir en chino? la respuesta llegó en 1958 cuando el primer congreso popular nacional aprobó un sistema oficial de romanización para chino conocido como pinyin este sistema le dio a cada carácter chino una forma estandarizada de deletrear su pronunciación usando el alfabeto latino ahora saltemos de los años 50 a la china de los años 80 [Música] zhang xiaoping estaba liderando la república popular de china chan xu hua está en la radio y los niños están en la calle comiendo una paleta helada La computación personal apenas comienza a ser una palabra susurrada al oído de unos pocos, pero todos esos sistemas estaban basados ​​en inglés, ningún sistema estaba disponible para el profano hasta la creación.

del procesador de textos chino eléctrico eche un vistazo al procesador de textos inglés chino stone que se vendió en china a mediados de la década de 1980 haciendo zoom podemos ver cómo stone adaptó esta computadora para ser una máquina de escritura china ideal el teclado revela que si bien aún conserva la configuración qwerty básica cada letra y número también está ligado a una consonante o terminación pinyin diferente, lo que permite que el usuario escriba mucho más rápido el carácter rojo en cada tecla también son caracteres abreviados las palabras más utilizadas en chino que puede escribir directamente manteniendo presionada la tecla con texto rojo que dice los caracteres de uso frecuente en la parte inferior izquierda, seguidos de la tecla de la letra aparte de los procesadores de texto, ¿qué pasa con las computadoras personales convencionales? Bueno, no sería hasta 1985 cuando e10, con sede en Taiwán, desarrolló un sistema operativo compatible con ibm pc capaz de tomar chino.

En ese momento, los estadounidenses y otros países habían estado disfrutando de la informática personal durante casi una década, pero ¿tenía que ser así? ¿Habría sido posible tomar una computadora común y corriente de 8 bits y producir algo? eso podría al menos ser el equivalente de un procesador de textos chino, bueno, ahora que mi máquina principal era una de esas computadoras, una Apple 2e lanzada originalmente en 1983, decidí tratar de empujar la máquina lo más lejos posible y ver si podía crear tal un programa, la única pregunta real era cómo creo exactamente un procesador de texto chino para una máquina de 40 años, como las máquinas de escribir de las que hablamos antes. Sabía que no era práctico ni necesario incluir todos los caracteres chinos, pero quería tener un número decente de caracteres después de tener en cuenta mi máquina y las formas de almacenamiento de datos disponibles para ella un disquete de 140 kilobytes y cinco pulgadas y media determiné que probablemente podría tener cómodamente 3500 caracteres disponibles para usar en mi programa nuevamente no cubriría todo, pero si eso fue lo suficientemente bueno para ibm, entonces fue lo suficientemente bueno para mí, repasemos rápidamente con qué tipo de máquina trabajaré.

Junto con 64 kilobytes de RAM, sí, son solo 64 kilobytes en total para trabajar y con estas restricciones en mente, abrí mi propio procesador de textos favorito y comencé a planificar. La primera decisión de diseño fue fácil. ¿ En qué idioma escribo el programa básico? o el ensamblaje probablemente sea obvio para cualquiera que realmente haya trabajado con estas máquinas antes de que tuviera que ir con el ensamblaje, nada en contra de lo básico, solo necesito que mi programa sea lo más rápido posible, sin embargo, dado que nunca había programado nada en el ensamblaje antes de comenzar buscando en los archivos Internet en busca de algún tipo de guía.

Eventualmente, comencé a recopilar archivos PDF y sitios favoritos que me sirvieron como punto de partida como una nota para cualquier otra persona interesada en aprender sobre programación de ensamblaje para Apple. una buena experiencia con el ensamblaje 6502 antes de leer este libro y todavía tengo que encontrar un libro que diga que este es el primer tutorial de ensamblaje del bebé de todos modos después de leer varias guías me di cuenta de que necesitaba el software adecuado para escribir y ejecutar mi código de ensamblaje ingrese edeasm apple's sistema de desarrollo de ensamblaje, el único problema es que la escuela en la que compré mi apple ii y los discos no tenía una copia de edasm, así que en lugar de comprar uno de esos discos de cinco pulgadas y media a puertos usb para copiar el archivo de disco de puntos que encontré en línea, uso un software realmente genial llamado c2t que le permite al usuario copiar datos de un dispositivo que reproduce un sonido en el puerto de casete de Apple 2 y en un disco real y, por lo tanto, Edasm estaba en mi propia computadora, pero también decidí escribir el programa real Usando el emulador Apple Wind y transfiéralo de la misma manera más tarde para poder obtener buenas imágenes del proceso, así que con mis discos en la mano, mis muchas guías abiertas y mi espíritu lleno de esperanza, me sumergí en el abismo oscuro que es la programación de ensamblaje 6502.

Tenía un esquema aproximado de cómo quería que funcionara mi procesador de textos, como puede ver en esta maqueta de Photoshop, pero primero tuve que aprender los trucos del oficio de la programación de ensamblaje, esencialmente lo dividí en tres secciones, una obtiene la entrada del usuario del teclado dos dibujar en la pantalla y tres leer datos de un disco obtener la entrada del usuario fue bastante fácil el apple ii tiene subrutinas de monitor preexistentes a las que puedo llamar para obtener cualquier tecla que se escriba, sin embargo, curiosamente apple ii ascii es un poco diferente al ascii estándar y sigue el cuadro que se muestra aquí, hay secciones para parpadeo inverso y caracteres normales, pero para ser honesto, esto no es algo de lo que deba preocuparme, solo tengo que asegurarme de que cualquier dato que lea o escriba tenga la misma codificación que estos los caracteres normales en esta sección se dibujan en la pantalla, sin embargo, es donde las cosas se complican un poco y, por poco, me refiero a un byte. El modo de gráficos de Apple II no es como las pantallas modernas donde cero cero está en la esquina superior izquierda.

Controlado por 7680 bytes que controlan siete píxeles cada uno, sí, así es, siete píxeles cada uno. Se desglosa de esta manera, los primeros siete bits en el byte controlan qué píxeles están activados o desactivados y el bit alto controla qué paleta de colores se usa ahora, visualmente puede parecer confuso con las líneas que se cruzan, pero recuerda que escribimos los números con el valor más alto a la izquierda, por lo que tiene sentido que el primer bit del byte controle el píxel 1, el 2 controle el píxel 2 y así sucesivamente, tampoco voy a hablar de eso. los pares de colores o las diferentes paletas en este momento esa es una historia para otro día ahora las líneas en la pantalla no están dispuestas en la memoria secuencialmente eso sería demasiado obvio no en lugar de donde comienza la memoria de la pantalla, los bytes 0 a 39 son seguidos de la línea 1 by bytes 40 a 79 aquí en la línea 64 80 a 119 aquí en la línea 128 solo para volver hasta aquí para que los bytes 128 a 167 estén en la línea 8.

Línea 8 ahora no sé si está confundido no se preocupe literalmente nunca cerré el sitio web explicando cómo funcionó todo para determinar a qué byte va en función de su coordenada x y use la siguiente fórmula lo entendió bien la mejor parte sobre la memoria de la pantalla fue que una vez que escribí mi código ensamblador para esta fórmula nunca tuve que preocuparme de que pasara de ese lío hablemos de dibujar en la pantalla dado que cada byte controla 7 píxeles, decidí usar un 12 por 12 fuente china de esa manera dejaría algo de espacio entre los caracteres a diferencia de lo que haría usando una fuente de 14 por 14, así que aquí hay un ejemplo de lo que hago para dibujar la palabra dios, la pego en una cuadrícula de 14 por 12 y luego analizo cada uno píxel para ver cuáles están activados cambiando todos esos valores con un píxel dibujado en un 1. Todo lo que tengo que hacer entonces es establecer la ubicación de memoria correcta en este valor así, pero oh, esas celdas de color son un dolor, cambiaré paso a un monitor monocromático por el resto del tiempo y ahí vamos, ahora solo un truco más para aprender y estoy listo para comenzar a programar el disco.

Ha visto alguna pregunta reciente sobre el desbordamiento de la pila o la computación retro, no el intercambio de bocadillos, ese fui yo y gracias a esas excelentes personas que respondieron a todas mis preguntas, pero aun así disgaea fue difícil en varios puntos, incluso pensé en rendirme por completo o al menos simplemente tratando de cargar tantos caracteres como pude directamente en la memoria, pero hay una razón por la que nadie lo ha intentado todavía porque usando toda la memoria disponible e incluso usando los bancos de rom intercambiables solo podría caber en unos mil caracteres muy por debajo de lo que quería eventualmente, después de leer muchos más libros, me di cuenta de que tendría que cambiar de mi versión dos de edasm a una versión pro dos porque si usaba un disco formateado para pro dos sería mucho más fácil leer cantidades más pequeñas de datos que podía leer en 512 bytes a la vez una sección llamada bloque uno de estos manuales de ensamblaje pro dos tenía un programa de ejemplo en la parte posterior que le mostraba cómo leer un bloque de datos y escribir ese programa línea por línea de ese libro ciertamente me hizo sentir como todas esas personas que crecieron en los años 80 hablando sobre cómo escribirían estos programas de la parte posterior de la revista informática que compraron en la tienda y, finalmente, con esta ayuda profesional finalmente pude leer en mi archivo de datos y Estaba listo para iniciar el programa real.

Ahora, este fue el punto en el que me di cuenta de lo inconveniente que es mi máquina para editar mi código. Enciendo la máquina. Puedo ponerme a trabajar para probar mi código. Tengo que guardarlo. Esperar un día y medio para que se ensamble. Salir de Edasm y luego ejecutar el archivo de código de mi máquina. yo en este momento, considerando que así era como se hacían los programas en el pasado y, sinceramente, me siento mal por los programadores que tuvieron que sentarse a través de esta canción y bailar día tras día, no quiero extenderme demasiado sobre esto pero cuando tenía cientos de líneas y código de máquina para ensamblar, a veces tomaba tanto tiempo que olvidaba lo que realmente quería probar cuando comenzaba a ejecutar el programa en segundo plano.

He estado jugando un verdadero- video de tiempo de cuánto tiempo tomó ensamblar mi programa una vez que avancé en el proyecto, pero de todos modos, aparte de lo lento que era, me sentí muy bien una vez que me familiaricé con los comandos de ensamblaje y comencé a escribir docenas de líneas a la vez, pero ahora hablemos más sobre el producto final en sí y cómo funcionará comenzando con el archivo de datos el disco de datos se divide en tres secciones comenzando con la sección uno la sección ascii que incluye todos los números en mayúsculas, minúsculas y puntuación cada uno recibe su valor ascii de un byte de el gráfico de Apple, luego los 12 bytes de sus datos de pantalla, ¿dónde obtuve los datos de pantalla? Empecé usando una fuente llamada fungzhengxiangsu y luego, con un script de Python, leí rápidamente cada píxel de cada carácter y determiné el valor de las 12 líneas por letra.

Como mostré anteriormente, la sección 2 de los datos es el piñón de cada uno de los 35 caracteres. Curiosamente, solo había 394 pinyin únicos y todos estos fueron seguidos en el archivo con un número de bloque que indicaría que los datos de la pantalla de caracteres se ubicarían en el desplazamiento del bloque interno. y el número de caracteres con ese piñón que se ubicaría en ese bloque, por ejemplo, cualquier palabra con el pinyin tien se ubica en el bloque 12 tiene un desplazamiento interno de 96 y tiene una longitud de 8 caracteres que coinciden con ese pinyin esto hace que sea fácil de cargue en la parte correcta de la sección 3, la sección más grande del disco, que son los 24 bytes de datos sin procesar para cada carácter, uno tras otro, esta sección aquí es por qué no puedo almacenarlo todo en la memoria física de la computadora, tiene más de 90 kilobytes y si bien eso puede no parecer mucho, recuerde que todo el sistema con el que estoy trabajando tiene solo 64 kilobytes en total y si intenta crear su propio disco de datos en casa, asegúrese de tener alguna forma de verificar que sus datos son realmente correcto, de lo contrario, puede terminar como yo preguntándome por qué la mitad izquierda se está imprimiendo correctamente mientras que la mitad derecha no está tratando desesperadamente de encontrar algún error en su programa solo para darse cuenta cinco horas después de que el problema estaba en sus propios datos, así que ¿cómo será el problema real? el trabajo del programa empiezo cargando la sección uno y dos del disco de datos en la memoria de esa manera escribiendo cualquier carácter ascii y cargando el número de bloque para cada carácter chino será rápido, entonces si el usuario escribe una letra ascii normal, el programa busca a través del datos hasta que encuentra la letra correspondiente marca los 12 bytes de datos de pantalla calcula la posición de la pantalla en función de dónde está el cursor y luego traza los 12 bytes si el usuario cambia al modo de entrada de piñón el programa busca a través de la sección de piñón para encontrar si hay una coincidencia si se encuentra una, entonces la sección del bloque se carga, en realidad se cargan tres bloques cada vez, ya que 24 bytes suman mucho cuando se multiplican por 40 o más, luego usa el desplazamiento para determinar dónde comienzan y se muestran los 24 bytes de los caracteres adecuados ellos como opciones en la línea inferior de la pantalla, el usuario puede usar su tecla de flecha para ver más caracteres si están disponibles cuando hacen su selección de hasta 9 en la línea inferior déjame presionar las teclas 1 a 9 para escribir en lugar del piñón que acaban de escribir, incluso esta es solo una breve descripción del programa y hay muchas más cosas que estoy revisando para calcular debajo del capó, pero este no es un tutorial paso a paso, sino que es más mostrando un prototipo mis primeros diseños para este programa eran más extensos e incluían cosas como el guardado de archivos el desplazamiento de la página múltiples elementos de entrada de opinión que en realidad se convertirían en un procesador de textos decente lo que he escrito aquí es literalmente entrada china básica no lo hace No incluyo ningún truco estándar de la industria que haga que escribir chino sea realmente conveniente, como la predicción de caracteres o la asociación de palabras, pero en este punto siento que logré lo que me propuse hacer.

Quería demostrar que era posible hacer un procesador de textos chino. computadora personal de bits seguro que podría expandir el programa y escribir mil o diez mil líneas más, convirtiéndolo en el mejor procesador de textos en Apple dos, pero también tengo que preguntarme quién lo usaría. Creé principalmente este programa para mostrar lo que podría ser. hecho retrocediendo a cuando salió el apple ii por primera vez, podría haber sido un gran éxito comercial en china desde el principio si las personas adecuadas estuvieran allí para hacer el software adecuado para él y, de hecho, los clones de apple ii eventualmente fueron grandes en china mira esto encontré un libro de texto chino que enseña a los niños cómo usar Apple II y aquí hay un software real que encontré antes de que comenzara a aprender a ensamblar para este proyecto cuando era solo una idea de la universidad xiaotong de shanghai. Chinese word star, un procesador de textos chino decente para el apple ii aunque fue escrito en 1989 durante el ocaso de la vida comercial de la máquina y mi propio trabajo demuestra que sí, programas como este no solo son posibles de escribir, sino que un tipo en una zona con algunas herramientas modernas podría escribir uno en un unas pocas semanas, así que ahora copiémoslo en un disco físico y ejecútelo en mi Apple real.

Este proyecto me ha enseñado muchas cosas, una de las cuales es que ya no considero que escribir mayúsculas sea un grito. También me ha inculcado un aprecio por el poder y la velocidad de las computadoras modernas, incluso nuestros lenguajes de programación modernos son como magia en comparación con lo que la gente tenía que enfrentar hace solo unos años, fácilmente podría haber escrito un programa como este en una tarde usando un lenguaje de programación moderno para un moderno plataforma pero de nuevo ese no es el punto el punto es esta [Música] mi [Música].