                        ;******************************************************************************
                        ; Prog Monitor_COSMAC.asm - programa monitor para placa COSMAC by Arne
                        ;
                        ;
                        ; Desenvolvido por: Eng. Márcio José Soares
                        ; versão 1.0: 09/05/2026
                        ;
                        ; Compilador: a18
                        ; Plataforma: placa CPU COSMAC + placa extensora COSMAC by Arne (home built)
                        ;
                        ;******************************************************************************

                        ;******************************************************************************
                        
                        ;******************************************************************************
                        ; Define CPU
                        ;
                                    CPU     1802
                        
                        ;******************************************************************************
                        ; Define registradores
                        ;
   0000                 R0		    EQU	     0
   0001                 R1		    EQU	     1
   0002                 R2		    EQU	     2
   0003                 R3		    EQU	     3
   0004                 R4		    EQU	     4
   0005                 R5		    EQU	     5
   0006                 R6		    EQU	     6
   0007                 R7		    EQU	     7
   0008                 R8		    EQU	     8
   0009                 R9		    EQU	     9
   000A                 R10		    EQU	    10
   000B                 R11		    EQU	    11
   000C                 R12		    EQU	    12
   000D                 R13		    EQU	    13
   000E                 R14		    EQU	    14
   000F                 R15         EQU	    15
                        
                        ;******************************************************************************
                        ; Define endereços das PORTAS de I/O
                        ;
   7000                 SLED        EQU     7000H
   7005                 DISPSEG     EQU     7005H
   7006                 DISPKS      EQU     7006H
   7004                 TECO        EQU     7004H
   7004                 TECI        EQU     7004H
                        
                        ;******************************************************************************
                        ; Define posições na RAM
                        ;
   0031                 TAMDATA     EQU     31H             ; RAM para dados internos 49 bytes máximos!
   0080                 TAMBUFFER   EQU     80H             ; buffer de 128 bytes
   7FFF                 TAMRAM      EQU     7FFFH           ; 07FFH - 6116, 1FFFH - 6264, 7FFFH - 62256
   FFFF                 RAMTOP      EQU     0FFFFH          ; RAM TOP máximo - 64K - necessário manter o Fxxx para garantir
                                                            ; o acesso a RAM 1xxx xxxx xxxx xxxx
   8000                 RAMPRG      EQU     8000H           ; endereço inicial do programa do usuário
   FF4D                 POSDATA     EQU     ((RAMPRG+TAMRAM) - (TAMDATA+TAMBUFFER+1));
                        
                        ;******************************************************************************
                        ; Flags
                        ;
   0001                 HAVETEC     EQU     01H
   0002                 ALTADDR     EQU     02H
   0004                 ALTDATA     EQU     04H
   0008                 DSPBIT0     EQU     08H
   0010                 DSPBIT1     EQU     10H
   0020                 DSPBIT2     EQU     20H
   0040                 MYSHIFT     EQU     40H
                        
                        ;******************************************************************************
                        ; Endereços na ROM
                        ;
   0080                 STACK_H     EQU     80H            ; endereço
   0064                 STACK_L     EQU     64H
   0000                 DISPLAY_H   EQU     00H
   002F                 DISPLAY_L   EQU     2FH
                        
                        ;******************************************************************************
                        ; Endereços na RAM
                        ;
   FF4D                 mydisp1      EQU    POSDATA         ; displays
   FF4E                 mydisp2      EQU    POSDATA+1
   FF4F                 mydisp3      EQU    POSDATA+2
   FF50                 mydisp4      EQU    POSDATA+3
   FF51                 mydisp5      EQU    POSDATA+4
   FF52                 mydisp6      EQU    POSDATA+5
                        
   FF53                 myCatodos    EQU    POSDATA+6       ; controle dos catodos
                        
   FF54                 myTecOut    EQU     POSDATA+7       ; valor a ser inserido nas colunas do teclado
   FF55                 myNrCols    EQU     POSDATA+8       ; numero da coluna utilizada
   FF56                 aux         EQU     POSDATA+9
   FF57                 myTecla     EQU     POSDATA+10      ; se houve uma tecla a mesma será colocada aqui
   FF58                 myFlags     EQU     POSDATA+11      ; meus flags
                                                            ; 0 0 0 0  0 0 0 0
                                                            ; bit 0 - Informa que tem tecla
                                                            ; bit 1 - Informa que pediu para alterar Address
                                                            ; bit 2 - Informa que pediu para alterar Dado
                                                            ; bit 3 - Informa pos disps - 1 à 6
                                                            ; bit 4 - Informa pos disps - 1 à 6
                                                            ; bit 5 - Informa pos disps - 1 à 6
                                                            ; bit 6 - Informa seleção Shift
                                                            ; bit 7 - vago
                        
   FF59                 myDispPos   EQU     POSDATA+12      ; guarda a posição do display para próxima tecla
   FF5A                 myAddrMSB   EQU     POSDATA+13      ; guarda MSB do endereço atual
   FF5B                 myAddrLSB   EQU     POSDATA+14      ; guarda LSB do endereço atual
   FF5C                 myData      EQU     POSDATA+15      ; guarda o dado
                        
   FF5D                 aux1        EQU     POSDATA+16
   FF5E                 aux2        EQU     POSDATA+17
   FF5F                 aux3        EQU     POSDATA+18
   FF60                 aux4        EQU     POSDATA+19
                        
                        ;******************************************************************************
                        ; Endereço onde tudo começa!!!
                        ;
   0000                             ORG     #0000
   0000   30 02                     BR      STARTDISP
                        
                        ;******************************************************************************
                        ; sub-rotina para iniciar displays
                        ;
   0002   F8 FF BB F8   STARTDISP:  LOAD    R11,mydisp1      ; em R11, endereço da RAM para display 1
   0006   4D AB         
   0008   EB                        SEX     R11
   0009   F8 08                     LDI     08H             ; carrega D com 8
   000B   5B                        STR     R11             ; guarda
                        
   000C   F8 FF BB F8               LOAD    R11,mydisp2     ; em R11, endereço da RAM para display 2
   0010   4E AB         
   0012   EB                        SEX     R11
   0013   F8 00                     LDI     00H             ; carrega D com 0
   0015   5B                        STR     R11             ; guarda
                        
   0016   F8 FF BB F8               LOAD    R11,mydisp3     ; em R11, endereço da RAM para display 3
   001A   4F AB         
   001C   EB                        SEX     R11
   001D   F8 00                     LDI     00H             ; carrega D com 0
   001F   5B                        STR     R11             ; guarda
                        
   0020   F8 FF BB F8               LOAD    R11,mydisp4     ; em R11, endereço da RAM para display 4
   0024   50 AB         
   0026   EB                        SEX     R11
   0027   F8 00                     LDI     00H             ; carrega D com 0
   0029   5B                        STR     R11             ; guarda
                        
   002A   F8 00                     LDI     00H             ; em D 00H
   002C   B4                        PHI     R4              ; carrega no MSB de R4 conteúdo de D
   002D   F8 01                     LDI     01H
   002F   A4                        PLO     R4              ; no LSB de R4 01H - disp1 ligado
                        
   0030   F8 70 B7 F8               LOAD    R7,DISPKS       ; R7 aponta p/ endereço 7006H - saída catodos dos displays
   0034   06 A7         
   0036   E7                        SEX     R7
   0037   84                        GLO     R4              ; recupera LSB em D
   0038   57                        STR     R7              ; envia p/ catodos dos segmentos dos displays
                        
   0039   F8 70 B6 F8               LOAD    R6,DISPSEG      ; R6 aponta p/ endereço 7005H - saída para segmentos dos displays
   003D   05 A6         
   003F   E6                        SEX     R6
   0040   94                        GHI     R4              ; recupera MSB de R4 em D
   0041   56                        STR     R6              ; envia p/ segmentos dos displays
                        
   0042   F8 70 B5 F8               LOAD    R5,SLED         ; R5 aponta p/ endereço 7000H
   0046   00 A5         
   0048   E5                        SEX     R5
                                    ;LDI     31H
   0049   84                        GLO     R4              ; recupera LSB em D
   004A   55                        STR     R5              ; envia p/ LEDs
                        
                        ;******************************************************************************
                        ; sub-rotina para iniciar teclado
                        ;
   004B   F8 FF BB F8   STARTTEC:   LOAD    R11,myTecOut    ; em R11 o endereço da RAM para saída do teclado
   004F   54 AB         
   0051   EB                        SEX     R11
   0052   F8 20                     LDI     20H             ; b0010 0000 -> b1101 1111
   0054   5B                        STR     R11             ; guarda
                        
   0055   F8 FF BB F8               LOAD    R11,myNrCols    ; em R11 o endereço da RAM para nr da coluna no teclado
   0059   55 AB         
   005B   EB                        SEX     R11
   005C   F8 01                     LDI     01H             ; carrega D com 1 - começa varredura na coluna 6, conta ao contrário
   005E   5B                        STR     R11             ; guarda
                        
                        ;******************************************************************************
                        ; sub-rotina para limpar variáveis
                        ;
   005F                 LIMPAVARS:  ;LOAD    R11,RAMPRG     ; apenas para testes - remover p/ final!
                                    ;SEX     R11
                                    ;LDI     02H
                                    ;STR     R11
                        
   005F   F8 FF BB F8               LOAD    R11,myTecla     ;
   0063   57 AB         
   0065   EB                        SEX     R11
   0066   F8 00                     LDI     00H             ; vars começam sempre com zero
   0068   5B                        STR     R11
                        
   0069   F8 FF BB F8               LOAD    R11,myFlags
   006D   58 AB         
   006F   EB                        SEX     R11
   0070   F8 00                     LDI     00H             ; vars começam sempre com zero
   0072   5B                        STR     R11
                        
   0073   F8 FF BB F8               LOAD    R11,myDispPos
   0077   59 AB         
   0079   EB                        SEX     R11
   007A   F8 00                     LDI     00H             ; vars começam sempre com zero
   007C   5B                        STR     R11
                        
   007D   F8 FF BB F8               LOAD    R11,myAddrMSB    ; em R11 o endereço da RAM para MSB do ADDR
   0081   5A AB         
   0083   EB                        SEX     R11
   0084   F8 80                     LDI     80H             ; carrega D
   0086   5B                        STR     R11             ; guarda
                        
   0087   EB                        SEX     R11             ; x=11
   0088   0B                        LDN     R11             ; lê o que estiver lá e coloca en D
   0089   BC                        PHI     R12
                        
   008A   F8 FF BB F8               LOAD    R11,myAddrLSB    ; em R11 o endereço da RAM para LSB do ADDR
   008E   5B AB         
   0090   EB                        SEX     R11
   0091   F8 00                     LDI     00H             ; carrega D
   0093   5B                        STR     R11             ; guarda
                        
   0094   EB                        SEX     R11             ; x=11
   0095   0B                        LDN     R11             ; lê o que estiver lá e coloca en D
   0096   AC                        PLO     R12             ; endereço completo em R12
                        
   0097   EC                        SEX     R12             ; x=12
   0098   0C                        LDN     R12             ; coleta dado e coloca em D
   0099   FA F0                     ANI     0F0H            ; limpa LSB
   009B   F6                        SHR
   009C   F6                        SHR
   009D   F6                        SHR
   009E   F6                        SHR
   009F   A9                        PLO     R9              ; salva em R9
                        
   00A0   F8 FF BB F8               LOAD    R11,mydisp5     ; pega end da var
   00A4   51 AB         
   00A6   EB                        SEX     R11             ; x=11
   00A7   89                        GLO     R9              ; recupera valor
   00A8   5B                        STR     R11             ; salva
                        
   00A9   EC                        SEX     R12             ; x=12
   00AA   0C                        LDN     R12             ; coleta dado e coloca em D
   00AB   FA 0F                     ANI     0FH             ; limpa MSB
   00AD   A9                        PLO     R9              ; salva em R9
   00AE   F8 FF BB F8               LOAD    R11,mydisp6     ; pega end da var
   00B2   52 AB         
   00B4   EB                        SEX     R11             ; x=11
   00B5   89                        GLO     R9              ; recupera valor
   00B6   5B                        STR     R11             ; salva
                        
   00B7   F8 FF BB F8               LOAD    R11,aux1        ; apenas para testes - remover p/ final!
   00BB   5D AB         
   00BD   EB                        SEX     R11
   00BE   F8 A1                     LDI     0A1H            ;
   00C0   5B                        STR     R11
                        
   00C1   F8 FF BB F8               LOAD    R11,aux2        ;
   00C5   5E AB         
   00C7   EB                        SEX     R11
   00C8   F8 B2                     LDI     0B2H            ;
   00CA   5B                        STR     R11
                        
   00CB   F8 FF BB F8               LOAD    R11,aux3        ;
   00CF   5F AB         
   00D1   EB                        SEX     R11
   00D2   F8 C3                     LDI     0C3H            ;
   00D4   5B                        STR     R11
                        
   00D5   F8 FF BB F8               LOAD    R11,aux4        ;
   00D9   60 AB         
   00DB   EB                        SEX     R11
   00DC   F8 D4                     LDI     0D4H            ;
   00DE   5B                        STR     R11
                        
                        ;******************************************************************************
                        ; sub-rotina principal
                        ;
                        ;******************************************************************************
                        ; sub-rotina principal
                        ;
   00DF                 MAIN:
   00DF   F8 01 BA F8   CALLTEC:    LOAD    R10,TECLADO     ; aponta para subrotina teclado
   00E3   08 AA         
   00E5   EA                        SEX     R10             ; x = 10
   00E6   DA                        SEP     R10             ; desvia
                        
   00E7   F8 FF BB F8   CALLTTEC:   LOAD    R11,myFlags     ; lê end de memória - var
   00EB   58 AB         
   00ED   EB                        SEX     R11             ; x=11
   00EE   0B                        LDN     R11             ; coloca em D a var
                        
   00EF   FA 01                     ANI     01H             ; testa primeiro bit
   00F1   C2 00 FC                  LBZ     CALLDISP        ; sem tecla para tratar, desvia
                        
   00F4   F8 03 BA F8               LOAD    R10,TRATATEC    ; aponta para subrotina de tratamento de tecla
   00F8   21 AA         
   00FA   EA                        SEX     R10             ; x=10
   00FB   DA                        SEP     R10             ; desvia
                        
   00FC   F8 01 BA F8   CALLDISP:   LOAD    R10,DISPLAY     ; aponta para subrotina display
   0100   C7 AA         
   0102   EA                        SEX     R10             ; x = 10
   0103   DA                        SEP     R10             ; desvia
                        
   0104   C0 00 DF      CALLRET:    LBR     MAIN            ; volta - laço eterno!
   0107   00                        IDL                     ; break se chegar aqui
                        
                        ;******************************************************************************
                        ; sub-rotina TECLADO - faz o tratamento do teclado
                        ;
   0108                 TECLADO:    ;*******************************************************************
                                    ; Lê valor para as colunas
                                    ;
   0108   F8 FF BB F8               LOAD    R11,myTecOut    ; pega end da var
   010C   54 AB         
   010E   EB                        SEX     R11             ; x=11
   010F   0B                        LDN     R11             ; lê conteúdo do endereço em D
   0110   FB 3F                     XRI     3FH             ; inverte os bits
   0112   A7                        PLO     R7              ; guarda na parte LSB de R9
                        
                                    ;*******************************************************************
                                    ; coloca valor nas colunas
                                    ;
   0113   F8 70 B4 F8               LOAD    R4,TECO         ; aponta para endereço 7004H - saída teclado
   0117   04 A4         
   0119   87                        GLO     R7              ; recupera valor lido na memória
   011A   E4                        SEX     R4              ; x=4
   011B   54                        STR     R4              ; envia para saída byte em D
                        
   011C   C4                        NOP
   011D   C4                        NOP
   011E   C4                        NOP
   011F   C4                        NOP
                        
                                     ;*******************************************************************
                                    ; lê as linhas
                                    ;
   0120   F8 70 B5 F8               LOAD    R5,TECI         ; prepara para ler endereço 7004H - entrada teclado
   0124   04 A5         
   0126   E5                        SEX     R5              ; x=5
   0127   05                        LDN     R5              ; pega dado da entrada 7004H e coloca em D
   0128   FA 0F                     ANI     0FH             ; limpa bits MSB
   012A   B7                        PHI     R7
                        
                                    ;*******************************************************************
                                    ; compara com 0FH (Sub D Immediate) - se igual desvia - sem tecla
                                    ; se diferente trata
                                    ;
   012B   97                        GHI     R7              ; recupera byte lido da entrada do teclado
   012C   FD 0F                     SDI     0FH             ; D = M(R7.1) - D -> compara R7 Hi com 0FH
   012E   C2 01 7C                  LBZ     TECCONT         ; se igual desvia
                        
   0131   F8 FF BB F8               LOAD    R11,myNrCols    ; pega nr atual da coluna
   0135   55 AB         
   0137   EB                        SEX     R11
   0138   0B                        LDN     R11             ; nr agora em D
   0139   FE                        SHL                     ; faz shift a esquerda para ficar no MSB
   013A   FE                        SHL
   013B   FE                        SHL
   013C   FE                        SHL
   013D   A7                        PLO     R7              ; guarda em R7.0 (Low)
                        
   013E   97                        GHI     R7              ; recupera High em D
   013F   F8 FF B3 F8               LOAD    R3,aux          ; aponta para aux
   0143   56 A3         
   0145   E3                        SEX     R3              ; x=3
   0146   87                        GLO     R7              ; guarda o LSB de R7 em aux
   0147   53                        STR     R3              ; guarda
   0148   97                        GHI     R7              ; recupera a parte alta
   0149   F1                        OR                      ; M(R3) or D -> resultado em D
   014A   B7                        PHI     R7              ; guarda D no MSB de R7
                        
                                    ;*******************************************************************
                                    ; mostra valor nos LEDSs - MSB nr da coluna - LSB tecla
                                    ;
   014B   F8 70 B6 F8               LOAD    R6,SLED         ; R6 aponta p/ endereço 7000H
   014F   00 A6         
   0151   97                        GHI     R7
   0152   FB 0F                     XRI     0FH             ; inverte os bits no LSB... zero vira 1 e vice-versa!
   0154   B7                        PHI     R7              ; salvo novamente
   0155   E6                        SEX     R6              ; x=6
   0156   56                        STR     R6              ; envia p/ os LEDs
                        
                                    ;*******************************************************************
                                    ; Guarda dados na var para tratamento
                                    ;
   0157   F8 FF B6 F8               LOAD    R6,myTecla      ; R6 aponta p/ var
   015B   57 A6         
   015D   E6                        SEX     R6              ; x=6
   015E   97                        GHI     R7
   015F   56                        STR     R6              ; guarda na var o valor
                        
   0160   F8 FF B6 F8               LOAD    R6,myFlags      ; R6 aponta p/ var
   0164   58 A6         
   0166   E6                        SEX     R6              ; x=6
   0167   06                        LDN     R6              ; lê dado para D
                        
   0168   F9 01                     ORI     HAVETEC         ; marca flag
   016A   E6                        SEX     R6              ; x=6
   016B   56                        STR     R6              ; salva com novo valor
                        
                                    ;*******************************************************************
                                    ; Retorna valores ao inicio quando tem tecla
                                    ;
                                    ;LOAD    R11,myTecOut    ; em R11 o endereço da RAM para saída do teclado
                                    ;SEX     R11
                                    ;LDI     20H             ; b0010 0000 -> b1101 1111
                                    ;STR     R11             ; guarda
                        
                                    ;LOAD    R11,myNrCols    ; em R11 o endereço da RAM para nr da coluna no teclado
                                    ;SEX     R11
                                    ;LDI     01H             ; carrega D com 1 - começa varredura na coluna 6, conta ao contrário
                                    ;STR     R11             ; guarda
                        
                                    ;*******************************************************************
                                    ; pequeno bounce se encontrou - 75ms
                                    ;
   016C   F8 10         TECTIME:    LDI     10H             ; carga imediata em D
   016E   B9                        PHI     R9              ; coloca D no MSB de R9
   016F   F8 88                     LDI     88H             ; carga imediata em D
   0171   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   0172   29            LOOPTIME:   DEC     R9              ; 1 ciclo
   0173   99                        GHI     R9              ; 2 ciclos
   0174   3A 72                     BNZ     LOOPTIME        ; 2 ciclos
   0176   89                        GLO     R9              ; 2 ciclos
   0177   3A 72                     BNZ     LOOPTIME        ; 2 ciclos -> total 9 ciclos
                        
   0179   C0 01 BA                  LBR     ALTQ
                        
                                    ;*******************************************************************
                                    ; avança pós coluna se não achou nada, avança nr das colunas também
                                    ; linhas sem comentários devem ser retiradas... colocadas aqui só para dar
                                    ; tempo de ver a var myTecOut nos LEDs
   017C   F8 FF BB F8   TECCONT:    LOAD    R11,myTecOut    ; pega novamente o valor
   0180   54 AB         
   0182   EB                        SEX     R11             ; x = 11
   0183   0B                        LDN     R11             ; pega o valor e coloca em D
   0184   B9                        PHI     R9
   0185   F6                        SHR                     ; faz shift a direita
   0186   5B                        STR     R11             ; guarda valor
                        
   0187   F8 FF BB F8               LOAD    R11,myNrCols    ; pega o nr atual da coluna
   018B   55 AB         
   018D   EB                        SEX     R11             ; x=11
   018E   0B                        LDN     R11             ; pega o valor e coloca em D
   018F   FC 01                     ADI     01H             ; adiciona 1
   0191   A7                        PLO     R7              ; guarda em R7 LSB
                        
   0192   FD 07                     SDI     07H             ; passou do limite?
   0194   CA 01 A4                  LBNZ    TECSAV          ; não?! apenas desvia, se sim recarrega tudo
                        
   0197   F8 FF BB F8               LOAD    R11,myTecOut    ; em R11 o endereço da RAM para saída do teclado
   019B   54 AB         
   019D   EB                        SEX     R11
   019E   F8 20                     LDI     20H             ; b0010 0000 -> b1101 1111
   01A0   5B                        STR     R11             ; guarda
                        
   01A1   F8 01                     LDI     01H             ; recarrega 01 para myNrCols
   01A3   A7                        PLO     R7              ; coloca em R7
                        
   01A4   F8 FF BB F8   TECSAV:     LOAD    R11,myNrCols    ; pega o nr atual da coluna
   01A8   55 AB         
   01AA   EB                        SEX     R11             ; x=11
   01AB   87                        GLO     R7              ; recupera R7
   01AC   5B                        STR     R11             ; guarda na VAR
                        
                                    ;*******************************************************************
                                    ; pequeno bounce - 30ms
                                    ;
   01AD   F8 00         TECTIME2:   LDI     00H             ; prepara para temporizar!
   01AF   B9                        PHI     R9
   01B0   F8 40                     LDI     40H             ; carga imediata em D
   01B2   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   01B3   29            LOOPTIME2:  DEC     R9              ; 1 ciclo
   01B4   99                        GHI     R9              ; 2 ciclos
   01B5   3A B3                     BNZ     LOOPTIME2       ; 2 ciclos
   01B7   89                        GLO     R9              ; 2 ciclos
   01B8   3A B3                     BNZ     LOOPTIME2       ; 2 ciclos -> total 9 ciclos
                        
                                    ;*******************************************************************
                                    ; altera estado de Q
                                    ;
   01BA   CD            ALTQ:       LSQ                     ; se Q = 1 pula as duas próximas instruções
   01BB   7B                        SEQ                     ; liga Q
   01BC   38                        SKP                     ; pula a próxima instrução
   01BD   7A                        REQ                     ; desliga Q
                        
                                    ;*******************************************************************
                                    ; Fim da brincadeira
   01BE   F8 00 B3 F8   TECEND:     LOAD    R3,CALLTTEC     ; retorna para main - testa tecla
   01C2   E7 A3         
   01C4   E3                        SEX     R3
   01C5   D3                        SEP     R3
                        
   01C6   00                        IDL                     ; break se chegar aqui
                        
                        ;******************************************************************************
                        ; sub-rotina DISPLAY - mostra valores nos displays
                        ;
   01C7   F8 00         DISPLAY:    LDI     00H             ; em D 00H
   01C9   B4                        PHI     R4              ; carrega no MSB de R4 conteúdo de D
   01CA   F8 01                     LDI     01H
   01CC   A4                        PLO     R4              ; no LSB de R4 01H - disp1 ligado
                        
   01CD   F8 FF BB F8               LOAD    R11,mydisp1     ; pega endereço
   01D1   4D AB         
   01D3   EB                        SEX     R11             ; x=11
   01D4   0B                        LDN     R11             ; lê conteúdo do endereço em D
                        
   01D5   F8 07 B8 F8               LOAD    R8,_7SEGDATA    ; R8 contem agora o endereço da tabela
   01D9   15 A8         
   01DB   88                        GLO     R8              ; recupera conteúdo
   01DC   F4                        ADD                     ; soma
   01DD   A8                        PLO     R8              ; guarda na parte baixa de R8
   01DE   E8                        SEX     R8              ; indice agora em R8
   01DF   72                        LDXA                    ; em D o byte presente na tabela
                        
   01E0   B4                        PHI     R4              ; coloca D na parte alta de R4
                        
   01E1   F8 70 B6 F8   DISP1:      LOAD    R6,DISPSEG      ; R6 aponta p/ endereço 7005H - saída para segmentos dos displays
   01E5   05 A6         
   01E7   E6                        SEX     R6              ; x=6
   01E8   94                        GHI     R4              ; recupera byte lido em _7SEGDATA
   01E9   56                        STR     R6              ; envia p/ os segmentos
                        
   01EA   F8 70 B7 F8               LOAD    R7,DISPKS       ; R7 aponta p/ endereço 7006H - saída catodos dos displays
   01EE   06 A7         
   01F0   E7                        SEX     R7              ; x=7
   01F1   84                        GLO     R4              ; recupera byte inserido no LSB
   01F2   57                        STR     R7              ; liga disp
                        
   01F3   F8 00                     LDI     00H             ; prepara para temporizar!
   01F5   B9                        PHI     R9
   01F6   F8 96                     LDI     96H             ; carga imediata de 100 em D
   01F8   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   01F9   29            LOOP1:      DEC     R9              ; decrementa R9
   01FA   89                        GLO     R9              ; colaca em D a parte MSB de R9
   01FB   3A F9                     BNZ     LOOP1          ; desvia se não for zero
                        
   01FD   F8 FF BB F8               LOAD    R11,mydisp2     ; pega endereço
   0201   4E AB         
   0203   EB                        SEX     R11             ; x=11
   0204   0B                        LDN     R11             ; lê conteúdo do endereço em D
                        
   0205   F8 07 B8 F8               LOAD    R8,_7SEGDATA    ; R8 contem agora o endereço da tabela
   0209   15 A8         
   020B   88                        GLO     R8              ; recupera conteúdo
   020C   F4                        ADD                     ; soma
   020D   A8                        PLO     R8              ; guarda na parte baixa de R8
   020E   E8                        SEX     R8              ; indice agora em R8
   020F   72                        LDXA                    ; em D o byte presente na tabela
                        
   0210   B4                        PHI     R4              ; coloca D na parte alta de R4
                        
   0211   F8 70 B6 F8   DIPS2:      LOAD    R6,DISPSEG      ; R6 aponta p/ endereço 7005H - saída para segmentos dos displays
   0215   05 A6         
   0217   E6                        SEX     R6              ; x=6
   0218   94                        GHI     R4              ; recupera byte lido em _7SEGDATA
   0219   56                        STR     R6              ; envia p/ os segmentos
                        
   021A   F8 70 B7 F8               LOAD    R7,DISPKS       ; R7 aponta p/ endereço 7006H - saída catodos dos displays
   021E   06 A7         
   0220   F8 02                     LDI     02H             ; manda para segundo display
   0222   E7                        SEX     R7              ; x=7
   0223   57                        STR     R7              ; liga disp
                        
   0224   F8 00                     LDI     00H             ; prepara para temporizar!
   0226   B9                        PHI     R9
   0227   F8 96                     LDI     96H             ; carga imediata de 100 em D
   0229   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   022A   29            LOOP2:      DEC     R9              ; decrementa R9
   022B   89                        GLO     R9              ; colaca em D a parte MSB de R9
   022C   3A 2A                     BNZ     LOOP2           ; desvia se não for zero
                        
   022E   F8 FF BB F8               LOAD    R11,mydisp3     ; pega endereço
   0232   4F AB         
   0234   EB                        SEX     R11             ; x=11
   0235   0B                        LDN     R11             ; lê conteúdo do endereço em D
                        
   0236   F8 07 B8 F8               LOAD    R8,_7SEGDATA    ; R8 contem agora o endereço da tabela
   023A   15 A8         
   023C   88                        GLO     R8              ; recupera conteúdo
   023D   F4                        ADD                     ; soma
   023E   A8                        PLO     R8              ; guarda na parte baixa de R8
   023F   E8                        SEX     R8              ; indice agora em R8
   0240   72                        LDXA                    ; em D o byte presente na tabela
                        
   0241   B4                        PHI     R4              ; coloca D na parte alta de R4
                        
   0242   F8 70 B6 F8   DSIP3:      LOAD    R6,DISPSEG      ; R6 aponta p/ endereço 7005H - saída para segmentos dos displays
   0246   05 A6         
   0248   E6                        SEX     R6              ; x=6
   0249   94                        GHI     R4              ; recupera byte lido em _7SEGDATA
   024A   56                        STR     R6              ; envia p/ os segmentos
                        
   024B   F8 70 B7 F8               LOAD    R7,DISPKS       ; R7 aponta p/ endereço 7006H - saída catodos dos displays
   024F   06 A7         
   0251   F8 04                     LDI     04H             ; manda para terceiro display
   0253   E7                        SEX     R7              ; x=7
   0254   57                        STR     R7              ; liga disp
                        
   0255   F8 00                     LDI     00H             ; prepara para temporizar!
   0257   B9                        PHI     R9
   0258   F8 96                     LDI     96H             ; carga imediata de 100 em D
   025A   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   025B   29            LOOP3:      DEC     R9              ; decrementa R9
   025C   89                        GLO     R9              ; colaca em D a parte MSB de R9
   025D   CA 02 5B                  LBNZ    LOOP3           ; desvia se não for zero
                        
   0260   F8 FF BB F8               LOAD    R11,mydisp4     ; pega endereço
   0264   50 AB         
   0266   EB                        SEX     R11             ; x=11
   0267   0B                        LDN     R11             ; lê conteúdo do endereço em D
                        
   0268   F8 07 B8 F8               LOAD    R8,_7SEGDATA    ; R8 contem agora o endereço da tabela
   026C   15 A8         
   026E   88                        GLO     R8              ; recupera conteúdo
   026F   F4                        ADD                     ; soma
   0270   A8                        PLO     R8              ; guarda na parte baixa de R8
   0271   E8                        SEX     R8              ; indice agora em R8
   0272   72                        LDXA                    ; em D o byte presente na tabela
                        
   0273   B4                        PHI     R4              ; coloca D na parte alta de R4
                        
   0274   F8 FF B6 F8               LOAD    R6,myFlags      ; lê os flags
   0278   58 A6         
   027A   E6                        SEX     R6              ; x=6
   027B   06                        LDN     R6              ; lê conteúdo e coloca em D
                        
   027C   FA 02                     ANI     ALTADDR         ; verifica se setado
   027E   32 84                     BZ      DISP4           ; não?? desvia
                        
   0280   94                        GHI     R4              ; restaura r4 em D
   0281   F9 80                     ORI     80H             ; liga bit do ponto
   0283   B4                        PHI     R4              ; salva em R4
                        
   0284   F8 70 B6 F8   DISP4:      LOAD    R6,DISPSEG      ; R6 aponta p/ endereço 7005H - saída para segmentos dos displays
   0288   05 A6         
   028A   E6                        SEX     R6              ; x=6
   028B   94                        GHI     R4              ; recupera byte lido em _7SEGDATA
   028C   56                        STR     R6              ; envia p/ os segmentos
                        
   028D   F8 70 B7 F8               LOAD    R7,DISPKS       ; R7 aponta p/ endereço 7006H - saída catodos dos displays
   0291   06 A7         
   0293   F8 08                     LDI     08H             ; manda para quarto display
   0295   E7                        SEX     R7              ; x=7
   0296   57                        STR     R7              ; liga disp
                        
   0297   F8 00                     LDI     00H             ; prepara para temporizar!
   0299   B9                        PHI     R9
   029A   F8 96                     LDI     96H             ; carga imediata de 100 em D
   029C   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   029D   29            LOOP4:      DEC     R9              ; decrementa R9
   029E   89                        GLO     R9              ; colaca em D a parte MSB de R9
   029F   CA 02 9D                  LBNZ     LOOP4           ; desvia se não for zero
                        
   02A2   F8 FF BB F8               LOAD    R11,mydisp5     ; pega endereço
   02A6   51 AB         
   02A8   EB                        SEX     R11             ; x=11
   02A9   0B                        LDN     R11             ; lê conteúdo do endereço em D
                        
   02AA   F8 07 B8 F8               LOAD    R8,_7SEGDATA    ; R8 contem agora o endereço da tabela
   02AE   15 A8         
   02B0   88                        GLO     R8              ; recupera conteúdo
   02B1   F4                        ADD                     ; soma
   02B2   A8                        PLO     R8              ; guarda na parte baixa de R8
   02B3   E8                        SEX     R8              ; indice agora em R8
   02B4   72                        LDXA                    ; em D o byte presente na tabela
                        
   02B5   B4                        PHI     R4              ; coloca D na parte alta de R4
                        
   02B6   F8 70 B6 F8   DISP5:      LOAD    R6,DISPSEG      ; R6 aponta p/ endereço 7005H - saída para segmentos dos displays
   02BA   05 A6         
   02BC   E6                        SEX     R6              ; x=6
   02BD   94                        GHI     R4              ; recupera byte lido em _7SEGDATA
   02BE   56                        STR     R6              ; envia p/ os segmentos
                        
   02BF   F8 70 B7 F8               LOAD    R7,DISPKS       ; R7 aponta p/ endereço 7006H - saída catodos dos displays
   02C3   06 A7         
   02C5   F8 10                     LDI     10H             ; manda para quinto display
   02C7   E7                        SEX     R7              ; x=7
   02C8   57                        STR     R7              ; liga disp
                        
   02C9   F8 00                     LDI     00H             ; prepara para temporizar!
   02CB   B9                        PHI     R9
   02CC   F8 96                     LDI     96H             ; carga imediata de 100 em D
   02CE   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   02CF   29            LOOP5:      DEC     R9              ; decrementa R9
   02D0   89                        GLO     R9              ; colaca em D a parte MSB de R9
   02D1   3A CF                     BNZ    LOOP5           ; desvia se não for zero
                        
   02D3   F8 FF BB F8               LOAD    R11,mydisp6     ; pega endereço
   02D7   52 AB         
   02D9   EB                        SEX     R11             ; x=11
   02DA   0B                        LDN     R11             ; lê conteúdo do endereço em D
                        
   02DB   F8 07 B8 F8               LOAD    R8,_7SEGDATA    ; R8 contem agora o endereço da tabela
   02DF   15 A8         
   02E1   88                        GLO     R8              ; recupera conteúdo
   02E2   F4                        ADD                     ; soma
   02E3   A8                        PLO     R8              ; guarda na parte baixa de R8
   02E4   E8                        SEX     R8              ; indice agora em R8
   02E5   72                        LDXA                    ; em D o byte presente na tabela
                        
   02E6   B4                        PHI     R4              ; coloca D na parte alta de R4
                        
   02E7   F8 FF B6 F8               LOAD    R6,myFlags      ; lê os flags
   02EB   58 A6         
   02ED   E6                        SEX     R6              ; x=6
   02EE   06                        LDN     R6              ; lê conteúdo e coloca em D
                        
   02EF   FA 04                     ANI     ALTDATA         ; verifica se setado
   02F1   C2 02 F8                  LBZ     DISP6           ; não?? desvia
                        
   02F4   94                        GHI     R4              ; restaura r4 em D
   02F5   F9 80                     ORI     80H             ; liga bit do ponto
   02F7   B4                        PHI     R4              ; salva em R4
                        
   02F8   F8 70 B6 F8   DISP6:      LOAD    R6,DISPSEG      ; R6 aponta p/ endereço 7005H - saída para segmentos dos displays
   02FC   05 A6         
   02FE   E6                        SEX     R6              ; x=6
   02FF   94                        GHI     R4              ; recupera byte lido em _7SEGDATA
   0300   56                        STR     R6              ; envia p/ os segmentos
                        
   0301   F8 70 B7 F8               LOAD    R7,DISPKS       ; R7 aponta p/ endereço 7006H - saída catodos dos displays
   0305   06 A7         
   0307   F8 20                     LDI     20H             ; manda para sexto display
   0309   E7                        SEX     R7              ; x=7
   030A   57                        STR     R7              ; liga disp
                        
   030B   F8 00                     LDI     00H             ; prepara para temporizar!
   030D   B9                        PHI     R9
   030E   F8 96                     LDI     96H             ; carga imediata de 100 em D
   0310   A9                        PLO     R9              ; coloca D no LSB de R9
                        
   0311   29            LOOP6:      DEC     R9              ; decrementa R9
   0312   89                        GLO     R9              ; colaca em D a parte MSB de R9
   0313   3A 11                     BNZ     LOOP6           ; desvia se não for zero
                        
   0315   F8 01         EXIT_D:     LDI     01H
   0317   A4                        PLO     R4
                        
   0318   F8 01 B3 F8               LOAD    R3,CALLRET
   031C   04 A3         
   031E   E3                        SEX     R3
   031F   D3                        SEP     R3
                        
   0320   00                        IDL                     ; break se chegar aqui
                        
                        ;******************************************************************************
                        ; sub-rotina TRATATEC - subrotina para tratar a tecla capturada
                        ; tecla em myTecla
                        ;
   0321   EB            TRATATEC:   SEX     R11             ; R11 apontava para myFlags
   0322   0B                        LDN     R11             ; pega R11
   0323   FA FE                     ANI     0FEH            ; limpa flag HAVETEC
   0325   EB                        SEX     R11             ; x=11
   0326   5B                        STR     R11             ; guarda com bit limpo
                        
   0327   F8 FF BB F8               LOAD    R11,myTecla     ; pega end da var
   032B   57 AB         
   032D   EB                        SEX     R11             ; x=11
   032E   0B                        LDN     R11             ; pega tecla
                        
   032F   AF                        PLO     R15             ; salva no LSB de R15
                        
   0330   FF 21                     SMI     21H             ; D = D - 21H
   0332   CB 04 A2                  LBNF    TEC_RIGHT       ; DF=0??? então é menor, então teclas de comando a direita
                        
   0335   8F                        GLO     R15             ; restaura D
   0336   FF 59                     SMI     59H             ; D = D - 59H
   0338   C3 03 F3                  LBDF    TEC_LEFT        ; DF=1??? então é maior igual, teclas de comando a esquerda
                        
                        ;******************************************************************************
                        ; Teclas 0-9 e A-F
                        ;
   033B   8F            EH0:        GLO     R15             ; se chegou aqui é tecla entre 0-9 ou A-F
   033C   FF 58                     SMI     58H             ; é 0?
   033E   CA 03 47                  LBNZ    EH1             ; não desvia
                        
   0341   F8 00                     LDI     00H             ; achou a tecla
   0343   AF                        PLO     R15             ; guarda para escrever
   0344   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   0347   8F            EH1:        GLO     R15             ; restaura D
   0348   FF 48                     SMI     48H             ; é 1?
   034A   CA 03 53                  LBNZ    EH2             ; não desvia
                        
   034D   F8 01                     LDI     01H             ; achou a tecla
   034F   AF                        PLO     R15             ; guarda para escrever
   0350   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   0353   8F            EH2:        GLO     R15             ; restaura D
   0354   FF 38                     SMI     38H             ; é 2?
   0356   CA 03 5F                  LBNZ    EH3             ; não desvia
                        
   0359   F8 02                     LDI     02H             ; achou a tecla
   035B   AF                        PLO     R15             ; guarda para escrever
   035C   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   035F   8F            EH3:        GLO     R15             ; restaura D
   0360   FF 54                     SMI     54H             ; é 3?
   0362   CA 03 6B                  LBNZ    EH4             ; não desvia
                        
   0365   F8 03                     LDI     03H             ; achou a tecla
   0367   AF                        PLO     R15             ; guarda para escrever
   0368   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   036B   8F            EH4:        GLO     R15             ; restaura D
   036C   FF 44                     SMI     44H             ; é 4?
   036E   CA 03 77                  LBNZ    EH5             ; não desvia
                        
   0371   F8 04                     LDI     04H             ; achou a tecla
   0373   AF                        PLO     R15             ; guarda para escrever
   0374   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   0377   8F            EH5:        GLO     R15             ; restaura D
   0378   FF 34                     SMI     34H             ; é 5?
   037A   CA 03 83                  LBNZ    EH6             ; não desvia
                        
   037D   F8 05                     LDI     05H             ; achou a tecla
   037F   AF                        PLO     R15             ; guarda para escrever
   0380   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   0383   8F            EH6:        GLO     R15             ; restaura D
   0384   FF 52                     SMI     52H             ; é 6?
   0386   CA 03 8F                  LBNZ    EH7             ; não desvia
                        
   0389   F8 06                     LDI     06H             ; achou a tecla
   038B   AF                        PLO     R15             ; guarda para escrever
   038C   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   038F   8F            EH7:        GLO     R15             ; restaura D
   0390   FF 42                     SMI     42H             ; é 7?
   0392   3A 9A                     BNZ     EH8             ; não desvia
                        
   0394   F8 07                     LDI     07H             ; achou a tecla
   0396   AF                        PLO     R15             ; guarda para escrever
   0397   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   039A   8F            EH8:        GLO     R15             ; restaura D
   039B   FF 32                     SMI     32H             ; é 8?
   039D   3A A5                     BNZ     EH9             ; não desvia
                        
   039F   F8 08                     LDI     08H             ; achou a tecla
   03A1   AF                        PLO     R15             ; guarda para escrever
   03A2   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   03A5   8F            EH9:        GLO     R15             ; restaura D
   03A6   FF 51                     SMI     51H             ; é 9?
   03A8   3A B0                     BNZ     EHA             ; não desvia
                        
   03AA   F8 09                     LDI     09H             ; achou a tecla
   03AC   AF                        PLO     R15             ; guarda para escrever
   03AD   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   03B0   8F            EHA:        GLO     R15             ; restaura D
   03B1   FF 41                     SMI     41H             ; é A?
   03B3   3A BB                     BNZ     EHB             ; não desvia
                        
   03B5   F8 0A                     LDI     0AH             ; achou a tecla
   03B7   AF                        PLO     R15             ; guarda para escrever
   03B8   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   03BB   8F            EHB:        GLO     R15             ; restaura D
   03BC   FF 31                     SMI     31H             ; é b?
   03BE   3A C6                     BNZ     EHC             ; não desvia
                        
   03C0   F8 0B                     LDI     0BH             ; achou a tecla
   03C2   AF                        PLO     R15             ; guarda para escrever
   03C3   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   03C6   8F            EHC:        GLO     R15             ; restaura D
   03C7   FF 21                     SMI     21H             ; é C?
   03C9   3A D1                     BNZ     EHD             ; não desvia
                        
   03CB   F8 0C                     LDI     0CH             ; achou a tecla
   03CD   AF                        PLO     R15             ; guarda para escrever
   03CE   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   03D1   8F            EHD:        GLO     R15             ; restaura D
   03D2   FF 22                     SMI     22H             ; é D?
   03D4   3A DC                     BNZ     EHE             ; não desvia
                        
   03D6   F8 0D                     LDI     0DH             ; achou a tecla
   03D8   AF                        PLO     R15             ; guarda para escrever
   03D9   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   03DC   8F            EHE:        GLO     R15             ; restaura D
   03DD   FF 24                     SMI     24H             ; é E?
   03DF   3A E7                     BNZ     EHF             ; não desvia
                        
   03E1   F8 0E                     LDI     0EH             ; achou a tecla
   03E3   AF                        PLO     R15             ; guarda para escrever
   03E4   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        
   03E7   8F            EHF:        GLO     R15             ; restaura D
   03E8   FF 28                     SMI     28H             ; é F?
   03EA   CA 07 0C                  LBNZ    EXIT_TRT        ; não desvia
                        
   03ED   F8 0F                     LDI     0FH             ; achou a tecla
   03EF   AF                        PLO     R15             ; guarda para escrever
   03F0   C0 05 ED                  LBR     WRITE_DISP      ; desvia para escrever
                        
                        ;******************************************************************************
                        ; Teclas de comando a esquerda: ADDR, DATA, PC e Shift
                        ;
   03F3                 TEC_LEFT:
   03F3   8F            EHADDR:     GLO     R15             ; restaura D
   03F4   FF 61                     SMI     61H             ; é ADDR?!
   03F6   CA 04 3C                  LBNZ    EHDT            ; não? desvia
                        
   03F9   F8 FF BB F8               LOAD    R11,myFlags     ; pega var flags
   03FD   58 AB         
   03FF   EB                        SEX     R11             ; x=11
   0400   0B                        LDN     R11             ; em D o valor em mydisp1
   0401   F9 02                     ORI     ALTADDR         ; liga flag de ADDR
   0403   FA BB                     ANI     0BBH            ; desliga flag DATA e SHIFT
   0405   EB                        SEX     R11             ; x=11
   0406   5B                        STR     R11             ; salva
                        
   0407   F8 FF BB F8               LOAD    R11,myDispPos   ; pega end da var
   040B   59 AB         
   040D   EB                        SEX     R11             ; x=11
   040E   F8 01                     LDI     01H             ; carrega D
   0410   5B                        STR     R11             ; salva
                        
   0411   F8 FF BB F8               LOAD    R11,mydisp1     ; pega end da var
   0415   4D AB         
   0417   EB                        SEX     R11             ; x=11
   0418   F8 11                     LDI     11H             ; mostra traço
   041A   5B                        STR     R11
                        
   041B   F8 FF BB F8               LOAD    R11,mydisp2     ; pega end da var
   041F   4E AB         
   0421   EB                        SEX     R11             ; x=11
   0422   F8 11                     LDI     11H             ; mostra traço
   0424   5B                        STR     R11
                        
   0425   F8 FF BB F8               LOAD    R11,mydisp3     ; pega end da var
   0429   4F AB         
   042B   EB                        SEX     R11             ; x=11
   042C   F8 11                     LDI     11H             ; mostra traço
   042E   5B                        STR     R11
                        
   042F   F8 FF BB F8               LOAD    R11,mydisp4     ; pega end da var
   0433   50 AB         
   0435   EB                        SEX     R11             ; x=11
   0436   F8 11                     LDI     11H             ; mostra traço
   0438   5B                        STR     R11
                        
   0439   C0 07 0C                  LBR     EXIT_TRT        ; desvia para o fim
                        
   043C   8F            EHDT:       GLO     R15             ; restaura D
   043D   FF 62                     SMI     62H             ; é DATA?!
   043F   CA 04 71                  LBNZ    EHPC            ; desvia
                        
   0442   F8 FF BB F8               LOAD    R11,myFlags     ; pega var flags
   0446   58 AB         
   0448   EB                        SEX     R11             ; x=11
   0449   0B                        LDN     R11             ; em D o valor em mydisp1
   044A   F9 04                     ORI     ALTDATA         ; liga flag de DATA
   044C   FA BD                     ANI     0BDH            ; desliga flag ADDR e SHIFT
   044E   EB                        SEX     R11             ; x=11
   044F   5B                        STR     R11             ; salva
                        
   0450   F8 FF BB F8               LOAD    R11,myDispPos   ; pega end da var
   0454   59 AB         
   0456   EB                        SEX     R11             ; x=11
   0457   F8 05                     LDI     05H             ; carrega D
   0459   5B                        STR     R11             ; salva
                        
   045A   F8 FF BB F8               LOAD    R11,mydisp5     ; pega end da var
   045E   51 AB         
   0460   EB                        SEX     R11             ; x=11
   0461   F8 11                     LDI     11H             ; mostra traço
   0463   5B                        STR     R11
                        
   0464   F8 FF BB F8               LOAD    R11,mydisp6     ; pega end da var
   0468   52 AB         
   046A   EB                        SEX     R11             ; x=11
   046B   F8 11                     LDI     11H             ; mostra traço
   046D   5B                        STR     R11
                        
   046E   C0 07 0C                  LBR     EXIT_TRT        ; desvia para o fim
                        
   0471   8F            EHPC:       GLO     R15             ; restaura D
   0472   FF 64                     SMI     64H             ; é PC?!
   0474   CA 04 7A                  LBNZ    EHSH            ; desvia
   0477   C0 04 9F                  LBR     EHFIM           ; desvia para o fim
                        
   047A   8F            EHSH:       GLO     R15             ; restaura D
   047B   FF 68                     SMI     68H             ; é SHIFT?!
   047D   CA 04 9F                  LBNZ    EHFIM           ; desvia
                        
   0480   F8 FF BB F8               LOAD    R11,myFlags     ; pega var flags
   0484   58 AB         
   0486   EB                        SEX     R11             ; x=11
   0487   0B                        LDN     R11             ; em D o valor em mydisp1
   0488   F9 40                     ORI     MYSHIFT         ; liga flag de shift
   048A   5B                        STR     R11             ; salva!
                        
   048B   F8 FF BB F8               LOAD    R11,mydisp5     ; pega end da var
   048F   51 AB         
   0491   EB                        SEX     R11             ; x=11
   0492   F8 12                     LDI     12H             ; mostra traço alto
   0494   5B                        STR     R11
                        
   0495   F8 FF BB F8               LOAD    R11,mydisp6     ; pega end da var
   0499   52 AB         
   049B   EB                        SEX     R11             ; x=11
   049C   F8 12                     LDI     12H             ; mostra traço alto
   049E   5B                        STR     R11
                        
   049F   C0 07 0C      EHFIM:      LBR     EXIT_TRT        ; desvia para o fim
                        
                        ;******************************************************************************
                        ; Teclas de comandos a direita - UP, DOWN, GO e ENTER (CR)
                        ;
   04A2                 TEC_RIGHT:
   04A2   8F            EHUP:       GLO     R15             ; restaura
   04A3   FF 11                     SMI     11H             ; compara
   04A5   CA 04 D0                  LBNZ    EHDOWN          ; desvia
                        
   04A8   F8 FF BB F8               LOAD    R11,myAddrMSB   ; carrega end da var
   04AC   5A AB         
   04AE   EB                        SEX     R11             ; x=11
   04AF   0B                        LDN     R11             ; em D a var
   04B0   BC                        PHI     R12             ; salva
                        
   04B1   F8 FF BB F8               LOAD    R11,myAddrLSB   ; carrega end da var
   04B5   5B AB         
   04B7   EB                        SEX     R11             ; x=11
   04B8   0B                        LDN     R11             ; em D a var
   04B9   AC                        PLO     R12             ; agora R12 contem o endereço!
                        
   04BA   1C                        INC     R12             ; incrementa reg
                        
   04BB   F8 FF BB F8               LOAD    R11,myAddrMSB   ; carrega end da var
   04BF   5A AB         
   04C1   EB                        SEX     R11             ; x=11
   04C2   9C                        GHI     R12             ; recupera R12
   04C3   5B                        STR     R11             ; salva
                        
   04C4   F8 FF BB F8               LOAD    R11,myAddrLSB   ; carrega end da var
   04C8   5B AB         
   04CA   EB                        SEX     R11             ; x=11
   04CB   8C                        GLO     R12             ; recupera R12
   04CC   5B                        STR     R11             ; salva
                        
   04CD   C0 04 FB                  LBR     ATUALADDR       ; desvia para atualizar vars do display
                        
                        
   04D0   8F            EHDOWN:     GLO     R15             ; restaura
   04D1   FF 12                     SMI     12H             ; compara
   04D3   CA 05 3E                  LBNZ    EHGO            ; desvia
                        
   04D6   F8 FF BB F8               LOAD    R11,myAddrMSB   ; carrega end da var
   04DA   5A AB         
   04DC   EB                        SEX     R11             ; x=11
   04DD   0B                        LDN     R11             ; em D a var
   04DE   BC                        PHI     R12             ; salva
                        
   04DF   F8 FF BB F8               LOAD    R11,myAddrLSB   ; carrega end da var
   04E3   5B AB         
   04E5   EB                        SEX     R11             ; x=11
   04E6   0B                        LDN     R11             ; em D a var
   04E7   AC                        PLO     R12             ; agora R12 contem o endereço!
                        
   04E8   2C                        DEC     R12             ; incrementa reg
                        
   04E9   F8 FF BB F8               LOAD    R11,myAddrMSB   ; carrega end da var
   04ED   5A AB         
   04EF   EB                        SEX     R11             ; x=11
   04F0   9C                        GHI     R12             ; recupera R12
   04F1   5B                        STR     R11             ; salva
                        
   04F2   F8 FF BB F8               LOAD    R11,myAddrLSB   ; carrega end da var
   04F6   5B AB         
   04F8   EB                        SEX     R11             ; x=11
   04F9   8C                        GLO     R12             ; recupera R12
   04FA   5B                        STR     R11             ; salva
                        
   04FB   9C            ATUALADDR:  GHI     R12             ; restaura MSB do ADDR
   04FC   FA F0                     ANI     0F0H            ; limpa o LSB BCD
   04FE   F6                        SHR
   04FF   F6                        SHR
   0500   F6                        SHR
   0501   F6                        SHR
   0502   FA 0F                     ANI     0FH;            ; limpa
   0504   A9                        PLO     R9
                        
   0505   F8 FF BB F8               LOAD    R11,mydisp1     ; carrega end da var
   0509   4D AB         
   050B   EB                        SEX     R11             ; x=11
   050C   89                        GLO     R9              ; recupera R9
   050D   5B                        STR     R11             ; salva
                        
   050E   9C                        GHI     R12             ; restaura MSB do ADDR
   050F   FA 0F                     ANI     0FH             ; limpa o MSB BCD
   0511   A9                        PLO     R9
                        
   0512   F8 FF BB F8               LOAD    R11,mydisp2     ; carrega end da var
   0516   4E AB         
   0518   EB                        SEX     R11             ; x=11
   0519   89                        GLO     R9              ; recupera R9
   051A   5B                        STR     R11             ; salva
                        
   051B   8C                        GLO     R12             ; restaura LSB do ADDR
   051C   FA F0                     ANI     0F0H            ; limpa o LSB BCD
   051E   F6                        SHR
   051F   F6                        SHR
   0520   F6                        SHR
   0521   F6                        SHR
   0522   FA 0F                     ANI     0FH;            ; limpa
   0524   A9                        PLO     R9
                        
   0525   F8 FF BB F8               LOAD    R11,mydisp3     ; carrega end da var
   0529   4F AB         
   052B   EB                        SEX     R11             ; x=11
   052C   89                        GLO     R9              ; recupera R9
   052D   5B                        STR     R11             ; salva
                        
   052E   8C                        GLO     R12             ; restaura LSB do ADDR
   052F   FA 0F                     ANI     0FH             ; limpa o MSB BCD
   0531   A9                        PLO     R9
                        
   0532   F8 FF BB F8               LOAD    R11,mydisp4     ; carrega end da var
   0536   50 AB         
   0538   EB                        SEX     R11             ; x=11
   0539   89                        GLO     R9              ; recupera R9
   053A   5B                        STR     R11             ; salva
                        
   053B   C0 05 C8                  LBR     SHOWB           ; desvia para mostrar o byte
                        
   053E   8F            EHGO:       GLO     R15             ; restaura
   053F   FF 14                     SMI     14H             ; compara
   0541   CA 05 84                  LBNZ    EHCR            ; desvia
                        
                        
   0544   F8 FF BB F8   EXECPRG:    LOAD    R11,myAddrMSB   ; carrega end da var
   0548   5A AB         
   054A   EB                        SEX     R11             ; x=11
   054B   0B                        LDN     R11             ; em D a var
   054C   BD                        PHI     R13             ; salva
                        
   054D   F8 FF BB F8               LOAD    R11,myAddrLSB   ; carrega end da var
   0551   5B AB         
   0553   EB                        SEX     R11             ; x=11
   0554   0B                        LDN     R11             ; em D a var
   0555   AD                        PLO     R13             ; agora R13 contem o endereço do programa em RAM!
                        
   0556   F8 70 BB F8               LOAD    R11,DISPKS      ; aponta p/ endereço 7006H - saída catodos dos displays
   055A   06 AB         
   055C   EB                        SEX     R11
   055D   F8 00                     LDI     00H
   055F   5B                        STR     R11             ; desliga todos os catodos
                        
   0560   F8 70 BB F8               LOAD    R11,DISPSEG     ; aponta p/ endereço 7005H - saída para segmentos dos displays
   0564   05 AB         
   0566   EB                        SEX     R11
   0567   F8 00                     LDI     00H
   0569   5B                        STR     R11             ; desliga todos os segmentos
                        
   056A   F8 70 BB F8               LOAD    R11,SLED        ; aponta p/ endereço 7000H
   056E   00 AB         
   0570   EB                        SEX     R11
   0571   F8 00                     LDI     00H
   0573   5B                        STR     R11             ; desliga todos os LEDs
                        
   0574   F8 70 BB F8               LOAD    R11,TECO        ; aponta para endereço 7004H - saída para colunas do teclado
   0578   04 AB         
   057A   EB                        SEX     R11
   057B   F8 00                     LDI     00H             ;
   057D   5B                        STR     R11             ; todas colunas desligadas
                        
   057E   7A                        REQ                     ; desliga Q
                        
   057F   ED                        SEX     R13             ; x=13
   0580   DD                        SEP     R13             ; desvia para processar o que estiver na RAM
                        
   0581   C0 07 0C                  LBR     EXIT_TRT        ; desvia para o fim
                        
   0584   8F            EHCR:       GLO     R15             ; restaura
   0585   FF 18                     SMI     18H             ; compara
   0587   CA 07 0C                  LBNZ    EXIT_TRT        ; desvia
                        
   058A   F8 FF BB F8               LOAD    R11,myAddrMSB   ; carrega end da var
   058E   5A AB         
   0590   EB                        SEX     R11             ; x=11
   0591   0B                        LDN     R11             ; em D a var
   0592   BC                        PHI     R12             ; salva
                        
   0593   F8 FF BB F8               LOAD    R11,myAddrLSB   ; carrega end da var
   0597   5B AB         
   0599   EB                        SEX     R11             ; x=11
   059A   0B                        LDN     R11             ; em D a var
   059B   AC                        PLO     R12             ; agora R12 contem o endereço!
                        
   059C   F8 FF BB F8               LOAD    R11,myFlags     ; pega endereço
   05A0   58 AB         
   05A2   EB                        SEX     R11             ; x=11
   05A3   0B                        LDN     R11             ; conteúdo em D
   05A4   B9                        PHI     R9              ; salva no MSB de R9
   05A5   FA 02                     ANI     ALTADDR         ; testa para ver se está ativado endereço
   05A7   3A C8                     BNZ     SHOWB           ; desvia se sim
   05A9   99                        GHI     R9              ; restaura MSB de R9
   05AA   FA 04                     ANI     ALTDATA         ; testa para ver se está ativado DATA
   05AC   32 C8                     BZ      SHOWB           ; desvia se não
                        
   05AE   F8 FF BB F8               LOAD    R11,myData      ; pega end da var
   05B2   5C AB         
   05B4   EB                        SEX     R11             ; x=11
   05B5   0B                        LDN     R11             ; conteúdo em D
   05B6   B9                        PHI     R9              ; transfere para MSB de R9
                        
   05B7   EC                        SEX     R12             ; aponta para endereço
   05B8   99                        GHI     R9              ; em D MSB de R9
   05B9   5C                        STR     R12             ; salva
                        
   05BA   F8 FF BB F8               LOAD    R11,myFlags     ; pega var flags - volta ponteiro para ADDR
   05BE   58 AB         
   05C0   EB                        SEX     R11             ; x=11
   05C1   0B                        LDN     R11             ; em D
   05C2   F9 02                     ORI     ALTADDR         ; liga flag de ADDR
   05C4   FA BB                     ANI     0BBH            ; desliga flag DATA e Shift
   05C6   EB                        SEX     R11             ; x=11
   05C7   5B                        STR     R11             ; salva
                        
   05C8   EC            SHOWB:      SEX     R12             ; x=12
   05C9   0C                        LDN     R12             ; lê o que estiver lá e coloca en D
   05CA   FA F0                     ANI     0F0H            ; limpa LSB
   05CC   F6                        SHR                     ; shift a direita - MSB em LSB
   05CD   F6                        SHR
   05CE   F6                        SHR
   05CF   F6                        SHR
   05D0   FA 0F                     ANI     0FH;            ; limpa o MSB
   05D2   A9                        PLO     R9              ; salva em R9
                        
   05D3   F8 FF BB F8               LOAD    R11,mydisp5     ; pega end da var
   05D7   51 AB         
   05D9   EB                        SEX     R11             ; x=11
   05DA   89                        GLO     R9              ; recupera valor
   05DB   5B                        STR     R11             ; salva
                        
   05DC   EC                        SEX     R12             ; x=12
   05DD   0C                        LDN     R12             ; lê o que estiver lá e coloca en D
   05DE   FA 0F                     ANI     0FH             ; limpa MSB
   05E0   A9                        PLO     R9              ; salva em R9
   05E1   F8 FF BB F8               LOAD    R11,mydisp6     ; pega end da var
   05E5   52 AB         
   05E7   EB                        SEX     R11             ; x=11
   05E8   89                        GLO     R9              ; recupera valor
   05E9   5B                        STR     R11             ; salva
                        
   05EA   C0 07 0C                  LBR     EXIT_TRT        ; desvia para o fim
                        
                        
                        ;******************************************************************************
                        ; Escreve nos displays durante uso do teclado
                        ;
   05ED   F8 FF BB F8   WRITE_DISP: LOAD    R11,myDispPos   ; pega end da var
   05F1   59 AB         
   05F3   EB                        SEX     R11             ; x=11
   05F4   0B                        LDN     R11
   05F5   BF                        PHI     R15             ; salva em R15 - high
   05F6   C2 07 0C                  LBZ     EXIT_TRT        ; não pediu entrada nem de ADD nem DT
                        
   05F9   9F            WRTDISP1:   GHI     R15             ; restaura
   05FA   FF 01                     SMI     01H             ; testa se primeiro do endereço
   05FC   CA 06 21                  LBNZ    WRTDISP2        ; não?! pode ser o segundo?!
                        
   05FF   F8 FF BC F8               LOAD    R12,mydisp1     ; pega end da var
   0603   4D AC         
   0605   EC                        SEX     R12             ; x=12
   0606   8F                        GLO     R15             ; recupera valor
   0607   5C                        STR     R12             ; carrega
                        
   0608   8F                        GLO     R15             ; prepara para gravar 1° digito do ADDR - Xxxx
   0609   FA 0F                     ANI     0FH             ; limpa MSB
   060B   FE                        SHL                     ; troca LSB pelo MSB
   060C   FE                        SHL
   060D   FE                        SHL
   060E   FE                        SHL
   060F   AF                        PLO     R15             ; grava a var
                        
   0610   F8 FF BC F8               LOAD    R12,myAddrMSB   ; carrega end da var
   0614   5A AC         
   0616   EC                        SEX     R12             ; x=12
   0617   0C                        LDN     R12             ; carrega
   0618   FA 0F                     ANI     0FH             ; limpa MSB
   061A   5C                        STR     R12             ; salva
                        
   061B   8F                        GLO     R15             ; recupera
   061C   F1                        OR                      ; or de D com endereço 12
   061D   5C                        STR     R12             ; salva D na var
                        
   061E   C0 06 DA                  LBR     SV_NXDIG        ; desvia para posicionar o próximo
                        
   0621   9F            WRTDISP2:   GHI     R15             ; restaura
   0622   FF 02                     SMI     02H             ; testa se segundo do endereço
   0624   CA 06 45                  LBNZ    WRTDISP3        ; não?! pode ser o terceiro?!
                        
   0627   F8 FF BC F8               LOAD    R12,mydisp2     ; pega end da var
   062B   4E AC         
   062D   EC                        SEX     R12             ; x=12
   062E   8F                        GLO     R15             ; recupera valor
   062F   5C                        STR     R12             ; carrega
                        
   0630   8F                        GLO     R15             ; prepara para gravar 2° digito do ADDR - xXxx
   0631   FA 0F                     ANI     0FH             ; limpa MSB
   0633   AF                        PLO     R15
                        
   0634   F8 FF BC F8               LOAD    R12,myAddrMSB   ; carrega end da var
   0638   5A AC         
   063A   EC                        SEX     R12             ; x=12
   063B   0C                        LDN     R12             ; carrega
   063C   FA F0                     ANI     0F0H            ; limpa LSB
   063E   5C                        STR     R12             ; salva
                        
   063F   8F                        GLO     R15             ; recupera
   0640   F1                        OR                      ; or de D com endereço 12
   0641   5C                        STR     R12             ; salva D na var
                        
   0642   C0 06 DA                  LBR     SV_NXDIG        ; desvia para posicionar o próximo
                        
   0645   9F            WRTDISP3:   GHI     R15             ; restaura
   0646   FF 03                     SMI     03H             ; testa se terceiro do endereço
   0648   CA 06 6D                  LBNZ    WRTDISP4        ; não?! pode ser o quarto?!
                        
   064B   F8 FF BC F8               LOAD    R12,mydisp3     ; pega end da var
   064F   4F AC         
   0651   EC                        SEX     R12             ; x=12
   0652   8F                        GLO     R15             ; recupera valor
   0653   5C                        STR     R12             ; carrega
                        
   0654   8F                        GLO     R15             ; prepara para gravar 1° digito do ADDR - Xxxx
   0655   FA 0F                     ANI     0FH             ; limpa MSB
   0657   FE                        SHL                     ; troca LSB pelo MSB
   0658   FE                        SHL
   0659   FE                        SHL
   065A   FE                        SHL
   065B   AF                        PLO     R15             ; grava a var
                        
   065C   F8 FF BC F8               LOAD    R12,myAddrLSB   ; carrega end da var
   0660   5B AC         
   0662   EC                        SEX     R12             ; x=12
   0663   0C                        LDN     R12             ; carrega
   0664   FA 0F                     ANI     0FH             ; limpa MSB
   0666   5C                        STR     R12             ; salva
                        
   0667   8F                        GLO     R15             ; recupera
   0668   F1                        OR                      ; or de D com endereço 12
   0669   5C                        STR     R12             ; salva D na var
                        
   066A   C0 06 DA                  LBR     SV_NXDIG        ; desvia para posicionar o próximo
                        
   066D   9F            WRTDISP4:   GHI     R15             ; restaura
   066E   FF 04                     SMI     04H             ; testa se quarto do endereço
   0670   CA 06 91                  LBNZ    WRTDISP5        ; não?! pode ser o primeiro do dado?!
                        
   0673   F8 FF BC F8               LOAD    R12,mydisp4     ; pega end da var
   0677   50 AC         
   0679   EC                        SEX     R12             ; x=12
   067A   8F                        GLO     R15             ; recupera valor
   067B   5C                        STR     R12             ; carrega
                        
   067C   8F                        GLO     R15             ; prepara para gravar 2° digito do ADDR - xXxx
   067D   FA 0F                     ANI     0FH             ; limpa MSB
   067F   AF                        PLO     R15
                        
   0680   F8 FF BC F8               LOAD    R12,myAddrLSB   ; carrega end da var
   0684   5B AC         
   0686   EC                        SEX     R12             ; x=12
   0687   0C                        LDN     R12             ; carrega
   0688   FA F0                     ANI     0F0H            ; limpa LSB
   068A   5C                        STR     R12             ; salva
                        
   068B   8F                        GLO     R15             ; recupera
   068C   F1                        OR                      ; or de D com endereço 12
   068D   5C                        STR     R12             ; salva D na var
                        
   068E   C0 06 DA                  LBR     SV_NXDIG        ; desvia para posicionar o próximo
                        
   0691   9F            WRTDISP5:   GHI     R15             ; restaura
   0692   FF 05                     SMI     05H             ; testa se primeiro do dado
   0694   CA 06 B9                  LBNZ    WRTDISP6        ; não?! pode ser o segundo do dado?!
                        
   0697   F8 FF BC F8               LOAD    R12,mydisp5     ; pega end da var
   069B   51 AC         
   069D   EC                        SEX     R12             ; x=12
   069E   8F                        GLO     R15             ; recupera valor
   069F   5C                        STR     R12             ; carrega
                        
   06A0   8F                        GLO     R15             ; prepara para gravar 1° digito do ADDR - Xxxx
   06A1   FA 0F                     ANI     0FH             ; limpa MSB
   06A3   FE                        SHL                     ; troca LSB pelo MSB
   06A4   FE                        SHL
   06A5   FE                        SHL
   06A6   FE                        SHL
   06A7   AF                        PLO     R15             ; grava a var
                        
   06A8   F8 FF BC F8               LOAD    R12,myData      ; carrega end da var
   06AC   5C AC         
   06AE   EC                        SEX     R12             ; x=12
   06AF   0C                        LDN     R12             ; carrega
   06B0   FA 0F                     ANI     0FH             ; limpa MSB
   06B2   5C                        STR     R12             ; salva
                        
   06B3   8F                        GLO     R15             ; recupera
   06B4   F1                        OR                      ; or de D com endereço 12
   06B5   5C                        STR     R12             ; salva D na var
                        
   06B6   C0 06 DA                  LBR     SV_NXDIG        ; desvia para posicionar o próximo
                        
   06B9   9F            WRTDISP6:   GHI     R15             ; restaura
   06BA   FF 06                     SMI     06H             ; testa se segundo do dado
   06BC   CA 07 0C                  LBNZ    EXIT_TRT        ; não?! zuado!
                        
   06BF   F8 FF BC F8               LOAD    R12,mydisp6     ; pega end da var
   06C3   52 AC         
   06C5   EC                        SEX     R12             ; x=12
   06C6   8F                        GLO     R15             ; recupera valor
   06C7   5C                        STR     R12             ; carrega
                        
   06C8   8F                        GLO     R15             ; prepara para gravar 2° digito do ADDR - xXxx
   06C9   FA 0F                     ANI     0FH             ; limpa MSB
   06CB   AF                        PLO     R15
                        
   06CC   F8 FF BC F8               LOAD    R12,myData      ; carrega end da var
   06D0   5C AC         
   06D2   EC                        SEX     R12             ; x=12
   06D3   0C                        LDN     R12             ; carrega
   06D4   FA F0                     ANI     0F0H            ; limpa LSB
   06D6   5C                        STR     R12             ; salva
                        
   06D7   8F                        GLO     R15             ; recupera
   06D8   F1                        OR                      ; or de D com endereço 12
   06D9   5C                        STR     R12             ; salva D na var
                        
   06DA   9F            SV_NXDIG:   GHI     R15             ; recurera em R15 - High
   06DB   FC 01                     ADI     01H             ; soma 1
   06DD   BF                        PHI     R15             ; guarda
                        
   06DE   F8 FF BC F8               LOAD    R12,myFlags     ; pega flags
   06E2   58 AC         
   06E4   EC                        SEX     R12             ; x=12
   06E5   0C                        LDN     R12             ; carrega D
   06E6   A9                        PLO     R9              ; guarda
                        
   06E7   89                        GLO     R9              ; restaura
   06E8   FA 02                     ANI     ALTADDR         ; faz AND com flag
   06EA   3A F5                     BNZ     SV_ADD          ; desvia para tratar ADDR
                        
   06EC   89                        GLO     R9              ; restaura
   06ED   FA 04                     ANI     ALTDATA         ; AND com flag
   06EF   CA 07 01                  LBNZ    SV_DATA         ; desvia para tratar DADO
   06F2   C0 07 0C                  LBR     EXIT_TRT
                        
   06F5   9F            SV_ADD:     GHI     R15             ; restaura
   06F6   FF 05                     SMI     05H             ; chegou ao fim?!
   06F8   CA 07 09                  LBNZ    SV_CONT         ; salva
   06FB   F8 01                     LDI     01H             ; restaura valor
   06FD   BF                        PHI     R15             ; salva
   06FE   C0 07 09                  LBR     SV_CONT
                        
   0701   9F            SV_DATA:    GHI     R15             ; restaura
   0702   FF 07                     SMI     07H             ; chegou ao fim?!
   0704   3A 09                     BNZ     SV_CONT         ; salva
   0706   F8 05                     LDI     05H             ; restaura valor
   0708   BF                        PHI     R15             ; salva
                        
   0709   9F            SV_CONT:    GHI     R15             ; recupera valor da var
   070A   EB                        SEX     R11             ; x=11
   070B   5B                        STR     R11             ; salva
                        
   070C   F8 00 B3 F8   EXIT_TRT:   LOAD    R3,CALLDISP
   0710   FC A3         
   0712   E3                        SEX     R3
   0713   D3                        SEP     R3
                        
   0714   00                        IDL                     ; break se chegar aqui
                        ;******************************************************************************
                        ; Constantes inseridas na ROM
                        ;
   0715   3F 06 5B 4F   _7SEGDATA:  DB      03FH,06H,5BH,4FH,66H,6DH,7DH,07H
   0719   66 6D 7D 07   
   071D   7F 67 77 7C               DB      7FH,67H,77H,7CH,39H,5EH,79H,71H,80H
   0721   39 5E 79 71   
   0725   80            
   0726   40 01 00                  DB      40H,01H,00H
                        
                        ;******************************************************************************
                        ; Fim
                        ;
   0729                             END
0002  ALTADDR       0004  ALTDATA       01BA  ALTQ          04FB  ATUALADDR 
00FC  CALLDISP      0104  CALLRET       00DF  CALLTEC       00E7  CALLTTEC  
0211  DIPS2         01E1  DISP1         0284  DISP4         02B6  DISP5     
02F8  DISP6         7006  DISPKS        01C7  DISPLAY       0000  DISPLAY_H 
002F  DISPLAY_L     7005  DISPSEG       0242  DSIP3         0008  DSPBIT0   
0010  DSPBIT1       0020  DSPBIT2       033B  EH0           0347  EH1       
0353  EH2           035F  EH3           036B  EH4           0377  EH5       
0383  EH6           038F  EH7           039A  EH8           03A5  EH9       
03B0  EHA           03F3  EHADDR        03BB  EHB           03C6  EHC       
0584  EHCR          03D1  EHD           04D0  EHDOWN        043C  EHDT      
03DC  EHE           03E7  EHF           049F  EHFIM         053E  EHGO      
0471  EHPC          047A  EHSH          04A2  EHUP          0544  EXECPRG   
0315  EXIT_D        070C  EXIT_TRT      0001  HAVETEC       005F  LIMPAVARS 
01F9  LOOP1         022A  LOOP2         025B  LOOP3         029D  LOOP4     
02CF  LOOP5         0311  LOOP6         0172  LOOPTIME      01B3  LOOPTIME2 
00DF  MAIN          0040  MYSHIFT       FF4D  POSDATA       0000  R0        
0001  R1            000A  R10           000B  R11           000C  R12       
000D  R13           000E  R14           000F  R15           0002  R2        
0003  R3            0004  R4            0005  R5            0006  R6        
0007  R7            0008  R8            0009  R9            8000  RAMPRG    
FFFF  RAMTOP        05C8  SHOWB         7000  SLED          0080  STACK_H   
0064  STACK_L       0002  STARTDISP     004B  STARTTEC      06F5  SV_ADD    
0709  SV_CONT       0701  SV_DATA       06DA  SV_NXDIG      0080  TAMBUFFER 
0031  TAMDATA       7FFF  TAMRAM        017C  TECCONT       01BE  TECEND    
7004  TECI          0108  TECLADO       7004  TECO          01A4  TECSAV    
016C  TECTIME       01AD  TECTIME2      03F3  TEC_LEFT      04A2  TEC_RIGHT 
0321  TRATATEC      05ED  WRITE_DISP    05F9  WRTDISP1      0621  WRTDISP2  
0645  WRTDISP3      066D  WRTDISP4      0691  WRTDISP5      06B9  WRTDISP6  
0715  _7SEGDATA     FF56  aux           FF5D  aux1          FF5E  aux2      
FF5F  aux3          FF60  aux4          FF5B  myAddrLSB     FF5A  myAddrMSB 
FF53  myCatodos     FF5C  myData        FF59  myDispPos     FF58  myFlags   
FF55  myNrCols      FF54  myTecOut      FF57  myTecla       FF4D  mydisp1   
FF4E  mydisp2       FF4F  mydisp3       FF50  mydisp4       FF51  mydisp5   
FF52  mydisp6       

