Este projeto reagrupa um método simples para criar um ambiente de desenvolvimento cruzado para CP/M-86. Acontece que todas as ferramentas baseadas em DOS também podem ser usadas para criar programas de DOS. Este projeto foi desenvolvido para mim em um espírito nerd e muito divertido. Apenas compartilhando sem garantias.
Os idiomas suportados são:
A fonte do documento CP/M-86, fontes e binários é http://www.cpm.z80.de.
Uma distribuição limpa e kernel estão disponíveis em https://github.com/tsupplis/cpm86-kernel. Essa distribuição está funcionando bem em ambientes virtuais, corrigidos com todos os patches conhecidos, 'y2k' amigável (ele contém a versão do TOD, quais fontes estão neste projeto) e amigáveis.
Compilador Aztec C Versão 3.4/3.40A (K&R, a biblioteca CP/M-86 é fornecida como C86.lib)
Compilador AZTEC C Versão 4.2/4.10D (quase ANSI, o código da biblioteca CP/M-86 (C86.LIB) é corrigido e recompilado de 3,4 fontes, pois não faz parte da mesma maneira que o pacote de compilador. (https://www.aztecmuseum.ca/docs/aztec_c_msdos_4.10c_commercial_apr88.pdf)
RASM86/LINK86, LIB86 DOS Versão da Digital Research
ASM86.com e GENDEF.com da Digital Research
CB86.exe e bibliotecas da Reache Digital
Nasm Netwide Assembler
MASM, LINK, ASM, EXE2BIN, HEX2BIN da Microsoft (a versão do MASM neste repositório foi corrigida para trabalhar com o Emu2 e outros emuladores, consulte https://github.com/tsupplis/pcdos1-hacking para obter detalhes). Asm.com e Hex2bin.com foram reconstruídos para fontes modificadas em https://github.com/tsupplis/pcdos11-hacking.
O Super Cool EMU2 DOS emulador para executar as ferramentas DR no macOS e Linux (https://github.com/dmsc/emu2). Esta é uma maneira incrível de levar as ferramentas de desenvolvimento da linha de comando do DOS para um ambiente de desenvolvimento de shell/make/make/make/for baseado em qualquer um. Outro emulador impressionante. EMU2 e PCE são um par incrível.
Também precisamos executar alguns programas CP/M-80, para isso, o emulador TINYLPO é usado (https://gitlab.com/gbrein/tnylpo). Funciona muito bem com os programas ASM86.com e GENCMD.com
Todas as ferramentas estão envolvidas no diretório da lixeira para uso direto:
| Nome do script | programa | Descrição rápida |
|---|---|---|
| CPM_ASM86 | ASM86.CMD | DR Montador (ferramenta CP/M-80) |
| CPM_GENCMD | GENCMD.CMD | Dr. H86 Converter (ferramenta CP/M-80) |
| PCDEV_RASM86 | RASM86.EXE | DR Montador (OBJ) |
| pcdev_linkcmd | linkcmd.exe | Dr. Linker para CP/M-86 |
| pcdev_link86 | linkcmd.exe | "" "" "" |
| pcdev_linkexe | linkexe.exe | Dr. Linker para DOS |
| pcdev_lib86 | lib86.exe | Dr. Bibliotecário |
| pcdev_masm | MASM.EXE | Microsoft Assembler |
| pcdev_link | link.exe | Microsoft Linker |
| pcdev_exe2bin | exe2bin.exe | Microsoft Exe Converter |
| pcdev_hex2bin | hex2bin.com | Microsoft Hex Converter |
| pcdev_asm | ASM.com | Microsoft/86-Dos Assembler |
| pcdev_cmdinfo | cmdinfo.com | Ferramenta de informações CMD |
| pcdev_bin2cmd | bin2cmd.com | Conversor CMD |
| AZTEC34_AS | AS.EXE | Assembler asteca. |
| AZTEC34_CC | cc.exe | Compilador asteca K&R C |
| AZTEC34_SQZ | sqz.exe | Otimizador de objetos aztec c |
| AZTEC34_LINK | ln.exe | Linker Aztec C. |
| AZTEC34_LIB | lb.exe | AZTEC C LIB |
| AZTEC34_ORD | ord.exe | Helper de pedidos da biblioteca Aztec C |
| AZTEC34_OBD | obd.exe | Despejo de objeto asteca C |
| AZTEC34_HEX86 | hex86.exe | Gerador asteca C H86 |
| AZTEC42_AS | AS.EXE | Assembler asteca. |
| AZTEC42_CC | cc.exe | Compilador asteca ANSI C |
| AZTEC42_SQZ | sqz.exe | Otimizador de objetos aztec c |
| AZTEC42_LINK | ln.exe | Linker Aztec C. |
| AZTEC42_LIB | lb.exe | AZTEC C LIB |
| AZTEC42_ORD | ord.exe | Helper de pedidos da biblioteca Aztec C |
| AZTEC42_OBD | obd.exe | Despejo de objeto asteca C |
| AZTEC42_HEX86 | hex86.exe | Gerador asteca C H86 |
| drcbcpm_bc | cb86.exe | Dr. CBASIC Compiler para CP/M-86 |
| drcbcpm_link | link86.exe | Dr. CBASIC LINKER PARA CP/M-86 |
| drcbdos_bc | cb86.exe | Dr. CBASIC Compiler para DOS |
| drcbdos_link | linkexe.exe | Dr. Cbasic Linker for DOS |
| CPM86 | - | Emulador CP/M-86 |
| Hexcom | - | HEX para tradução binária |
| Doscat | - | Truncate arquivos além de ^z |
| Nasm | - | Assembler de rede |
O ambiente de desenvolvimento pode ser montado usando as seguintes etapas:
./fetch_tools
export PATH=`pwd`/bin
Ele puxa o seguinte:
Limpando o diretório é alcançado por:
./clear_tools
A ferramenta CPM86 é um emulador CPM86 para DOS puxado com asteca C. Não confio nele para obter ferramentas de construção, mas pode ser experimentado. As emulações DOS/CP/M-80 e as compilações cruzadas DOS/CP/M-80 são muito melhores e opções de minério. Em fino, a emulação adequada e o CP/M-86 são a melhor opção para teste. O PCE é uma escolha muito boa (http://www.hampa.ch/pce/).
Este pode ser um próximo passo:
Um dockerfile é fornecido para esse ambiente. Para construir a imagem do diretório do Docker, Jusr Run Make, alternativamente:
docker build --rm=true -t cpm86:latest -f Dockerfile .
Para usar a imagem criada, basta garantir que o caminho local em que a compilação tenha ficado montado corretamente:
docker run -it --rm -h cpm86 -v `pwd`:/work -w /work cpm86 pcdev_rasm86 helloa.a86
docker run -it --rm -h cpm86 -v `pwd`:/work -w /work cpm86 aztec34_cc helloc.c
A única diferença na linha de comando acontece com;
pcdev_masm hellod ;
... se torna ...
docker run -it --rm -h cpm86 -v `pwd`:/work -w /work cpm86 pcdev_masm hellod '\;'
Finalmente, é fornecido um simples makefile com uma amostra C, assembler para RASM86, assembler para ASM86:
./build_demo
drcbcpm_bc hellor.bas
drcbcpm_link hellor.cmd=hellor.o
pcdev_cmdinfo hellor.cmd
aztec34_cc helloc.c
aztec34_sqz helloc.o
aztec34_link -o helloc.cmd helloc.o -lc86
pcdev_cmdinfo helloc.cmd
Se o código estiver usando a sintaxe ANSI ...
aztec42_cc helloc.c
aztec42_sqz helloc.o
aztec42_link -o helloc.cmd helloc.o -lc86
pcdev_cmdinfo helloc.cmd
pcdev_rasm86 helloa.a86 '$' pz sz
pcdev_linkcmd helloa '[$sz]'
pcdev_cmdinfo helloa.cmd
cpm_asm86 hellob.a86
cpm_gencmd hellob.h86
pcdev_cmdinfo hellob.cmd
pcdev_masm hellod ;
pcdev_link hellod ;
pcdev_exe2bin hellod.exe
pcdev_bin2cmd hellod.bin hellod.cmd
nasm hellon.asm -fbin -o hellon.bin
pcdev_bin2cmd hellon.bin hellon.cmd
Você pode construir uma versão nativa do UNIX/DOS do bin2cmd/cmdinfo de (https://github.com/tsupplis/cpm86-cmdtools)