====== Tutorial de CP/M ====== Gracias al usuario ~anthk encontrarás una máquina virtual prearmada con [[CP/M]] libre. ==== Introducción ==== Sigue este tutorial para aprender algunos rudimentos de este sistema operativo clásico para [[microcomputadora#microcomputadoras hobbistas|microcomputadoras]]. === Instala CP/M === En tu sistema Linux/BSD o en nuestro entorno compartido texto-plano descarga la **máquina virtual Altair 8800 con microprocesador Zilog Z80** del usuario //~anthk//, y descomprímela: cd ~ wget https://caja.texto-plano.xyz/anthk/emu/altair.tgz tar xvzf altair.tgz Inicia ahora **CP/M 2.2** mediante: cd ~/altair/ sh cpm Tras unos instantes se iniciará una microcomputadora Altair 8800 con microprocesador Zilog Z80 (virtualizada). {{ :altair_8800.jpg?direct&200 |}} Te presentará una devolución en tu terminal y un prompt que indica la letra de unidad de diskette en la que te encuentras: ''A>'' Altair 8800 (Z80) simulator V4.0-0 Current git commit id: $Format: /home/fulana/altair/src/cpm22/cpm2-8> set cpu 2k Non-existent parameter 64K CP/M Version 2.2 (SIMH ALTAIR 8800, BIOS V1.27, 2 HD, 02-May-2009) A> Ya estás list@ para operar CP/M desde la unidad de diskette ''A:''. === Salir de CP/M === Es muy importante detener correctamente la Altair 8800 emulada. Detén esta máquina virtual con el comando ''A:HALT'', o bien presionando **Ctrl+AltGr+\**. Aparecerá el prompt ''sim>'' donde debes introducir el comando **exit**. >Si no detienes correctamente la máquina virtual, podría quedar consumiendo recursos innecesariamente en el sistema compartido. ¡Por favor sé responsable y detén su uso si no la utilizas! ==== CP/M inicial ==== Inicia nuevamente CP/M y lista el contenido de la unidad de diskette ''A:'' actual, con el comando ''DIR''. También puedes utilizar el listador avanzado ''LS''. Entre los ficheros listados encontrarás algunos con la extensión ''.COM'': estos son ejecutables de CP/M. Presenta en tu terminal el contenido de un fichero de la unidad ''A:'' con el comando ''TYPE''. Por ejemplo, el fichero ''CCPZ.TXT'': A> type a:ccpz.txt >La Unidad de diskette ''B:'' contiene programas adicionales. La unidad de diskette ''I:'' contiene un diskette libre para que puedas crear tu propio contenido, en tanto que la unidad de diskette ''J:'' contiene algunos intérpretes y utilidades adicionales. Pasa a la unidad B: y juega al **Colossal Cave Adventure** para CP/M. A> b: B> adv Podrás abandonar esta aventura de texto introduciendo el comando ''exit''. Cuando te indique si deseas abandonar la aventura, introduce **y** para volver al microsistema CP/M. ==== Programando BASIC en CP/M ==== Utiliza el intérprete de [[basic|MBASIC-80]] en CP/M. Ejecuta el intérprete: a:mbasic {{ :mbasic_5.21.jpg?200|}} BASIC-80 Rev. 5.21 [CP/M Version] Copyright 1977-1981 (C) by Microsoft Created: 28-Jul-81 32824 Bytes free Ok Carga un programa ''[[ELIZA.BAS]]'': LOAD "ELIZA.BAS" ...o bien introduce [[biblioteca_de_programas#programas_en_basic|algún programa escrito en BASIC]]. Listalo con ''LIST'' o ejecútalo con ''RUN''. Puedes utilizar **Ctrl+c** para interrumpir un programa BASIC. Sal del intérprete MBASIC y vuelve al microsistema CP/M con el comando **''SYSTEM''**. Su material de referencia es el [[https://archive.org/stream/BASIC-80_MBASIC_Reference_Manual/BASIC-80_MBASIC_Reference_Manual_djvu.txt|Manual de MBASIC-80 (en inglés)]]. ==== Programando en Ensablador Z80 en CP/M ==== El Ensamblador Z80 es el lenguaje de programación de alto nivel; para operar con él debemos escribir el código con el editor [[ed]] utilizando nemónicos de Zilog Z80, ensamblarlo con //asm//, y compilarlo con //load//. === ¡Programa! === Ejecuta el editor [[ed]] indicando un fichero de código fuente de extensión ''.asm''. Por ejemplo, para crear un programa llamado ''sl.asm'' en la unidad de diskette ''I:'', inbtroduce: A> ed i:sl.asm El editor //ed// te indicará que estás en un fichero nuevo: NEW FILE Pasa a //modo inserción// con ''*i''... : *i ...e introduce estas 9 líneas de código fuente de Ensamblador Z80. Puedes pegarlas o bien utilizar la **tecla tab** para hacer las columnas. Utiliza la **tecla Intro** para confirmar cada nuevas líneas (Ed indicará un número de línea en las medida que las vayas agregando): ORG 0100H BDOS EQU 0005H START: MVI C,9 LXI D,MSG$ CALL BDOS RET MSG$ DB 'COMPARTE TU SOFTWARE!$' END START Presiona **Ctrl+z** para detener el //modo inserción//, y luego guarda el cambio en el diskette y sal del editor //ed// con el comando ''*e'': : *e Tras haber editado tu código fuente, pasa a la unidad de diskette ''I:''... A> i: === ¡Ensambla! === Ensambla el código: a> asm i:sl CP/M ASSEMBLER - VER 2.0 011F 000H USE FACTOR END OF ASSEMBLY El ensamblador creará una serie de ficheros nuevos en la unidad de disquete virtual. Observa desensamblado para el microprocesador Z80 del código fuente con. TYPE I:SL.PRN Observa el volcado hexadecimal del mismo: I> TYPE I:SL.HEX ===¡Compila!=== Compila el fichero: I> load i:sl El compilador automático creará un ejecutable ''SL.COM''. Vuelca en pantalla el código objeto del programa binario ''SL.COM''. I> dump sl.com ===¡Corre!=== Y finalmente, ¡cargalo en memoria y córrelo! I> i:sl COMPARTE TU SOFTWARE! ==== Conclusión ==== ¡Enhorabuena! Has aprendido a utilizar CP/M en tu propia sesión en el entorno compartido. Compártelo en [[gab]] para que todos lo sepan: gab -m "¡He terminado el tutorial de CP/M, y he compartido mi software!"