Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Este é um exemplo de programa de LED do usuário escrito em Z80 assembler para o computador z80-mbc2.
Fiz este exercício de teste e revisão para mim, este é meu primeiro programa Z80 em mais de 35 anos.
Aproveitar
Suprimentos
Computador Z80-mbc2
Uma cópia do Z80ASM da SLR Systems Rel. 1.32, para download de muitos arquivos cp / m
Um editor, usei ZDE16, pois já estava na imagem de boot do CP / M do z80-mbc2
Etapa 1: Instale o Z80asm em seu Z80-mbc2
Presumo alguma familiaridade com as ferramentas que você tem para o seu Z80-MBC2, ou seja, qualquer versão do cpmtools que você usa. Aqui estão as etapas se estiver usando as versões de linha de comando:
- Obtenha os arquivos z80asm.com e z80asm.doc (opcional) em um diretório em algum lugar do seu PC host
- Coloque seu cartão SD no mesmo PC, suponho abaixo que ele está aparecendo como drive E: abaixo.
- Coloquei o montador no meu CP / M disco A, para cp / m 2.2 que seria a imagem do disco DS0N00. DSK
- O comando: cpmcp -f z80mbc2-d0 e: DS0N00. DSK z80asm.com 0: irá copiar o arquivo z80asm.com para a imagem
- O comando cpmcp -f z80mbc2-d0 e: DS0N00. DSK z80asm.doc 0: irá copiar a documentação para o disco (opcional)
Ao inicializar cp / m 2.2 em seu z80-mbc, agora você deve ter z80asm.com e z80asm.doc (opcional) na unidade A
Etapa 2: Copie o código-fonte para você Z80-mbc2
Conecte-se ao z80-mbc usando seu programa de terminal
Eu sugiro que você use um disco não preenchido para salvar o código-fonte, por exemplo f: para escolher este tipo de unidade:
F:
após alguns segundos, você verá o prompt F:.
agora use o programa zde16 na unidade A para editar um arquivo em branco:
a: zde16 myled.z80
Isso criará um arquivo chamado myled.z80 no disco F:, observação: o.z80 é necessário no nome para que o z80asm funcione.
Agora copie e cole o código abaixo, dependendo da velocidade do seu terminal, etc, você pode ter que copiar e colar em pequenas seções. Ou digite! tenha aquela sensação dos anos 80 de volta também.
;
; Teste o LED do usuário e a chave do usuário; BDOS equ 05h; cp / m BDOS ponto de entrada USRLED equ 0; código de operação para controle de LED do usuário USRKEY equ 80h; código de operação para controle de troca de usuário DPORT equ 0; porta de dados i / o CPORT equ 1; saída de porta de comando; org 0100h; ld (estack), sp; manter as informações existentes para retornar a cp / m ld sp, pilha; ld hl, msg; hello mensagem chamada _puts lp: ld a, 1; ligar = 1 chamada led atraso de chamada; atrasar e esperar pela (s) tecla (s) jr nz, terminar; diferente de zero significa tecla / interruptor pressionado xor a; a = 0 atraso da chamada do led da chamada; atrasar ou aguardar a tecla / interruptor jr z, lp; se zero, nenhuma tecla / interruptor, vá novamente; terminar: xor a; a tecla ou interruptor foi pressionado, então chamada concluída led ld hl, tchau; dizer tchau chamada _puts; exibir msg HL = ld sp, (estack); pilha original ret; retornar para cp / m; led: push af; salvar valor do led 0 ou 1 ld a, USRLED out (CPORT), a; optcode enviado pop af out (DPORT), a; dados enviados ret;; Loop de atraso que verifica a tecla pressionada no terminal ou atraso da tecla do usuário: ld bc, 00e00h; CPU de aproximadamente 1 / 2s 8 mhz, suposição pura do loop 2: dec bc; conta o loop push bc; salva regs ao chamar BDOS push de ld c, 6; BDOS raw i / o verificar se a tecla foi pressionada ld e, 0ffh chamar BDOS pop de; obter nossos valores de volta da pilha pop bc ou a; verificar se a tecla foi pressionada no terminal ret nz; sim retornar (também mantém o sinalizador nz definido) ld a, USRKEY; Agora verifique a chave do usuário (CPORT), a; porta de comando em a, (DPORT); leia a chave e a, 1; apenas interessado no bit 0 ret nz; retorne se a tecla do usuário pressionou ld a, b; ou é bc = 0 ou c jr nz, loop2; não terminou a contagem, vá novamente xor a; defina o sinalizador z como 0 ret; não retorne nenhuma tecla pressionada, fim do atraso; _puts: push bc; salvar nossos regs prontos para chamadas bdos push de nxt: ld a, (hl); obter char ou a; testar se é 0, fim de msg jr z, concluído; sim, então concluído ld e, a; configurar chamada para BDOS para imprimir um char ld c, 2 push hl; salvar BDOS de chamada de ponteiro de texto; imprimi-lo pop hl inc hl; próximo char jr nxt; continuar feito: pop de; terminar restaurar regs pop bc ret; e retornar; msg db 'Teste de LED do usuário, qualquer tecla para sair' db 0ah, 0dh, 0 bye db 'Sair' db 0ah, 0dh, 0 estack dw 0 ds 256 - 2 pilha: dw 0
Salve o arquivo usando ESC x. Veja o guia de uso do ZDE16 para mais informações, é um pouco como o wordstar para a maioria das edições, exceto que as opções Ctrl-K são diferentes.
Etapa 3: compilar e executar o programa
Depois de ter seu código-fonte na máquina.
Modelo:
F>
F> a: z80asm myled / a Z80ASM Copyright (C) 1983-86 de SLR Systems Rel. 1.32 MYLED / A Fim do arquivo Aprovado 1 0 Erro (s) detectado (s). 406 Bytes absolutos. 16 símbolos detectados.
Isso irá procurar o arquivo myled.z80 e produzir um arquivo binário (.com), que é o que a opção / a significa.
Consulte o arquivo z80asm.doc para obter mais informações.
Para executar o programa, digite:
F> myled
Teste de LED do usuário, qualquer tecla para sair da Saída F>
Pressione o botão do usuário ou uma tecla no terminal para sair.
Feito.