Montador do Patinho Feio/Apêndices/Exemplo de Programa Absoluto
Ir para navegação
Ir para pesquisar
Apêndice G: Exemplo de Progama Absoluto:
MEM E00 LER E01 LEY E7C ARM E34 SAI E72 LIR E23 LEX E25 GUA E31 PRE E4F VRC E49 CAI E4D ENA E5F WAT E65 WFF E76 IGR E7E ACC E84 LOP E86 DIS EC5 ACH EB5 BRO EB5 ARA EB8 /00 SI ▊PASSO2 1 @BLTC 2 E00 ORG /E00 3 * 4 * HEXAM - PROGRAMA QUE CARREGA A MEMORIA 5 * A PARTIR DE DADOS FORNECIDOS 6 * EM HEXADECIMAL PELA CONSOLE 7 * 8 ******************************************************************** 9 * 10 * HEXAM - INSTRUCOES DE UTILIZACAO: 11 * 12 * 1. ENDERECAR HEXAM 13 * 2. DAR PARTIDA 14 * 3. O CANAL B VAI FICAR ESPERANDO ENDERECAMENTO. 15 * 4. PARA ENDERECAR A QUALQUER MOMENTO, BATER ARROBA (@). 16 * 5. O COMPUTADOR RESPONDE C/ RETURN, 2 LINEFEEDS. 17 * 6. ENTRAR C/ ENDERECO EM HEXA, COM 3 DIGITOS 18 * 7. SE ERRAR, BASTA VOLTAR P/ 4 OU BATER UM BRANCO. 19 * NESTE CASO, O PROGRAMA IGNORA A ENTRADA ANTERIOR 20 * E AGUARDA NOVO ENDERECO. 21 * 8. UMA VEZ ENDERECADO, OS DADOS QUE FOREM FORNECIDOS 22 * SERAO GUARDADOS EM SEQUENCIA A PARTIR DO ENDERECO 23 * ESPECIFICADO. 24 * 9. OS DADOS DEVERAO VIR SEPARADOS POR UM UNICO BRANCO. 25 *10. O ULTIMO DADO DA LINHA NAO DEVE SER SEGUIDO DE BRANCO, 26 * SENDO QUE NESTE CASO UM LINEFEED, RETURN OU VICE 27 * VERSA O SUBSTITUIRA'. 28 *11. UM BRANCO OU RETURN DEPOIS DO DADO E' UMA ORDEM P/ 29 * QUE O DADO SEJA ARMAZENADO. 30 *12. DEPOIS DE CADA BRANCO OU RETURN O BUFFER E' ZERADO, 31 * E PORTANTO SE FOREM DADOS 2 BRANCOS EM SEQUENCIA 32 * SERA' GUARDADO UM ZERO NO LUGAR DO SEGUNDO BRANCO. 33 *13. EM CASO DE ERRO NOS DADOS, SE O CARACTER FORNECIDO 34 * FOR HEXADECIMAL,BASTA BATER DE NOVO EM SEGUIDA, SEM 35 * BRANCOS, O DADO CORRETO. SO' SAO GUARDADOS NA MEMORIA 36 * OS DOIS ULTIMOS DIGITOS. 37 *14. SE O CARATER NAO FOR HEXADECIMAL, O COMPUTADOR RESPONDE 38 * COM UMA SETA (_) E PARA O PROESSAMENTO. 39 *15. NESTE CASO, DANDO PARTIDA, O PROGRAMA VOLTA A SER 40 * EXECUTADO COMO NO CASO 14. 41 *16. ANTES DE DAR ENDERECAMENTO, E' PRECISO NAO ESQUECER 42 * DE GUARDAR O DADO ANTERIOR. SE NAO FOR DADO UM BRANCO 43 * OU RETURN, O DADO NAO SERA' ARMAZENADO. 44 * 45 ******************************************************************** 46 * 47 E00 9A HEXAM INIB * INIBE INTERRUPCAO 48 * 49 * SECAO DE LEITURA DE ENDERECO 50 * 51 E01 FE 7C LEENDER PUG LECONV LE PRIMEIRO CAR. DO END. 52 E03 AE 01 PLAN LEENDER SE BCO. OU RETURN, VOLTA 53 E05 D2 20 XOR /20 NAO| MONTA "ARM" 54 E07 2E 34 ARM ARM GUARDA P/EXECUTAR 55 E09 FE 7C PUG LECONV LE SEG. CARATER 56 E0B AE 01 PLAN LEENDER SE BCO, VOLTA A LER ENDERECO 57 E0D D1 4F DE 4 AJEITA P/ COMPOR 58 E0F 2E 35 ARM ARM-1 GUARDA 59 E11 FE 7C PUG LECONV LE TERCEIRO CARATER 60 E13 AE 01 PLAN LEENDER SE BCO, VOLTA A LER END. 61 E15 6E 35 SOM ARM+1 SE NAO COMPOE COM SEGUNDO DIG. 62 E17 2E 35 ARM ARM+1 GUARDA P/ EXECUTAR 63 E19 DA 0D CARI /0D SAI RETURN 64 E1B FE 72 PUG SAI NA TTY 65 E1D DA 0A CARI /0A SAI LINEFEED 66 E1F FE 72 PUG SAI NA TTY 67 E21 FE 72 PUG SAI IDEM 68 * 69 * LEITURA DE UMA PALAVRA 70 * 71 E23 80 LIMPA LIMPO * ZERA 72 E24 99 TRE * EXTENSAO 73 E25 FE 7C LEPROX PUG LECONV LE UM CARATER 74 E27 AE 31 PLAN GUARDA SE BCO OU LINEFEED, STORE. 75 E29 99 TRE * SE NAO, TRAZ EXTENSAO 76 E2A D1 4F DE 4 AJEITA PARA COMPOR 77 E2C 60 01 SOM /001 COMPOE 78 E2E 99 TRE * C/ DIGITO LIDO 79 E2F 0E 25 PLA LEPROX CONTINUA LENDO ATE' ACHAR BCO/RET 80 * 81 * ARMAZENAMENTO NA MEMORIA 82 * 83 E31 FE 4F GUARDA PUG PROTEGE TESTA SE ENDERECO INVADE 84 E33 99 TRE * HEXAM. SE NAO, 85 E34 20 00 ARM ARM *-* GUARDA EXTENSAO NO ENDERECO CONV. 86 E36 4E 35 CAR ARM+1 INCREMENTA 87 E38 85 INC * SEGUNDA PALAVRA 88 E39 2E 35 ARM ARM+1 DO ENDERECO. 89 E3B 96 SV 1 SE NAO DEU CARRY, 90 E3C 0E 23 PLA LIMPA VAI LER A PROXIMA PALAVRA 91 E3E 4E 34 CAR ARM SE DEU, 92 E40 85 INC * INCREMENTA PRIMEIRA PALAVRA 93 E41 2E 34 ARM ARM GUARDA 94 E43 D1 0F DD 4 TESTA SE DEU CARRY 95 E45 D8 FE SOMI -/02 ALEM DO BIT 11 96 E47 BE 23 PLAZ LIMPA NAO: VAI LER PROXIMA PAL. 97 E49 86 UNEG UNEG * SIM: PARA EM LOOP 98 E4A 9D PARE * COM /FF 99 E4B 0E 49 PLA UNEG NO ACUMULADOR 100 * 101 * 102 * PROTECAO DO PROGRAMA PARA QUE NAO SEJA DESTRUIDO PELOS DADOS 103 * OU POR ENDERECAMENTO INVALIDO. 104 * 105 * 106 E4D DA 00 CARI CARI /00 RESTAURA ACUMULADOR 107 * 108 E4F 00 00 PROTEGE PLA 0 RETORNA 109 E51 2E 4E ARM CARI+1 SALVA ACUMULADOR 110 E53 4E 34 CAR ARM SEPARA 4 BITS 111 E55 D1 4F DE 4 MAIS SIGNIFICATIVOS 112 E57 D1 6F GE 4 DO ENDERECO 113 E59 D8 F2 SOMI -/0E TESTA SE ENDERECO >= /E00 114 E5B AE 4D PLAN CARI NAO: VAI RETORNAR 115 E5D 0E 49 PLA UNEG SIM: VAI PARAR EM LOOP 116 * 117 * ENTRA: DRIVER DE ENTRADA DE DADOS, SEM BIT DE PARIDADE 118 * 119 E5F 00 00 ENTRA PLA 0 120 E61 CB 11 FNC /B1 CLF 121 E63 CB 16 FNC /B6 STC 122 E65 CB 21 WAIT SAL /B1 ESPERA 123 E67 0E 65 PLA WAIT FLAG 124 E69 CB 40 ENTR /B0 ENTRA DADO COMPLEMENTADO 125 E6B 82 CMP1 * DESCOMPLEMENTA 126 E6C D1 41 DE 1 LIMPA PARIDADE 127 E6E D1 21 GD 1 DO DADO 128 E70 0E 5F PLA ENTRA RETORNA 129 * 130 * SAI - DRIVER DE SAIDA 131 * 132 E72 00 00 SAI PLA 0 133 E74 CB 80 SAI /B0 SAI DADO 134 E76 CB 21 WFF SAL /B1 ESPERA 135 E78 0E 76 PLA WFF FLAG 136 E7A 0E 72 PLA SAI RETORNA 137 * 138 * LECONV = ROTINA DE "CONVERSAO" HEXBIN 139 * 140 E7C 00 00 LECONV PLA 0 141 E7E DA 0F IGNOR CARI /0F FAZ INDICE 142 E80 9E TRI * _/0F(NUMERO DE DIGITOS) 143 E81 FE 5F PUG ENTRA OBTEM DADO 144 E83 83 CMP2 * TROCA SINAL 145 E84 2E C4 ARM ACC SALVA DADO COMPLEMENTADO 146 E86 4E C4 LOOP CAR ACC CARREGA DADO COMPLEMENTADO 147 E88 BE 7E PLAZ IGNOR SE FFRM, IGNORA-O 148 E8A 7E C5 SOMX DIGITOS TESTA SE E' DIGITO 149 E8C BE B2 PLAZ ACH SE FOR, => ACH 150 E8E E0 00 SUS 0 SE NAO, APONTAR PROXIMO 151 E90 0E 86 PLA LOOP E VAI TESTAR NOVAMENTE 152 E92 4E C4 CAR ACC SE NAO DIGITO, RECUPERA DADO 153 E94 D8 20 SOMI @ TESTA SE E' BRANCO 154 E96 BE B5 PLAZ BRANCO SIM: => BRANCO 155 E98 4E C4 CAR ACC NAO=> CARREGA DADO 156 E9A D8 0D SOMI /0D TESTA SE E' RETURN 157 E9C BE B5 PLAZ BRANCO SIM=> BRANCO 158 E9E 4E C4 CAI ACC NAO=> TESTA SE 159 EA0 DB 0A SOMI /0A E' LINEFEED 160 EA2 BE 7E PLAZ IGNOR SIM=> IGNORA 161 EA4 4E C4 CAR ACC NAO=> TESTA SE 162 EA6 D8 40 SOMI @@ ARROBA 163 EA8 BE B8 PLAZ ARROBA SIM=> ARROBA 164 EAA DA 3F CARI @_ NAO=> INVALIDO! 165 EAC FE 72 PUG SAI IMPRIME "_" NA CONSOLE 166 EAE 80 LIMPO * ZERA ACUMULADOR 167 EAF 9D PARE * PARA 168 EB0 0E 7E PLA IGNOR E IGNORA O CARATER 169 EB2 9E ACH TRI * (INDICE=DIGITO CONVERTIDO) 170 EB3 0E 7C PLA LECONV JOGA NO ACC E VOLTA 171 EB5 86 BRANCO UNEG * RETORNA C/ -1 172 EB6 0E 7C PLA LECONV SE FOR BRANCO OU RETURN 173 * 174 EB8 DA 0D ARROBA CARI /0D SAI 175 EBA FE 72 PUG SAI RETURN 176 EBC DA 0A CARI /0A SAI 177 EBE FE 72 PUG SAI DOIS 178 EC0 FE 72 PUG SAI LINEFEEDS 179 EC2 0E 01 PLA LEENDER VOLTA A LER ENDERECO. 180 * 181 * BUFFERS E CONSTANTES 182 * 183 * 184 EC4 00 ACC DEFC 0 P/ SALVAR ACUMULADOR 185 EC5 30 DIGITOS DEFC @0 186 EC6 31 DEFC @1 187 EC7 32 DEFC @2 188 EC8 33 DEFC @3 189 EC9 34 DEFC @4 190 ECA 35 DEFC @5 191 ECB 36 DEFC @6 192 ECC 37 DEFC @7 193 ECD 38 DEFC @8 194 ECE 39 DEFC @9 195 ECF 41 DEFC @A 196 ED0 42 DEFC @B 197 ED1 43 DEFC @C 198 ED2 44 DEFC @D 199 ED3 45 DEFC @E 200 ED4 46 DEFC @F ▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ 201 000 FIM 0