OpenCores
URL https://opencores.org/ocsvn/light8080/light8080/trunk

Subversion Repositories light8080

[/] [light8080/] [trunk/] [c/] [HELLO.LST] - Rev 78

Go to most recent revision | Compare with Previous | Blame | View Log

AS80 Assembler for i8080-Z180 [1.11].                                Page    1
--------------------------------- HELLO.ASM ----------------------------------

-------------------------------- Symbol Table --------------------------------

              Symbol   Value        Decimal

               ccand : $0064            100
               ccasl : $00d4            212
               ccasr : $00c6            198
             ccbcneg : $0157            343
               cccmp : $0091            145
           cccmpbcde : $0167            359
              cccmp1 : $009e            158
               cccom : $00e7            231
             ccdeneg : $014f            335
               ccdiv : $010e            270
              ccdiv1 : $0124            292
              ccdiv2 : $013b            315
              ccdiv3 : $0144            324
                cceq : $006b            107
             ccgchar : $0042             66
                ccge : $0085            133
              ccgint : $0048             72
                ccgt : $0077            119
                ccle : $007e            126
                cclt : $008b            139
              ccmult : $00ee            238
             ccmult1 : $00f3            243
                ccne : $0071            113
               ccneg : $00e2            226
                ccor : $0056             86
             ccpchar : $004d             77
              ccpint : $0050             80
              ccrdel : $015f            351
               ccsub : $00db            219
               ccsxt : $0043             67
              ccucmp : $00bb            187
               ccuge : $00a1            161
               ccugt : $00ad            173
               ccule : $00b4            180
               ccult : $00a7            167
               ccxor : $005d             93
                 cc1 : $03d0            976
                cc10 : $02bb            699
                cc11 : $0310            784
                cc12 : $0322            802
                cc13 : $03b1            945
                cc14 : $03cf            975
                cc15 : $03cc            972
                 cc2 : $016c            364
                 cc3 : $0181            385
                 cc4 : $01ae            430
                 cc5 : $01b2            434
                 cc6 : $01c4            452
                 cc7 : $01f4            500
                 cc8 : $0224            548
                 cc9 : $0262            610
           __getbyte : $018c            396
          __int0_isr : $0324            804
              __main : $0330            816
                __nl : $01b3            435
            __outint : $0231            561
          __printdec : $01f5            501
          __printhex : $028a            650
AS80 Assembler for i8080-Z180 [1.11].                                Page    2
--------------------------------- HELLO.ASM ----------------------------------

          __printstr : $01c4            452
            __rxbyte : $042c           1068
          __sendbyte : $016c            364
            __tstary : $042d           1069
            __8080__ : $0001              1

63 labels used

919 lines read, no errors in pass 1.
AS80 Assembler for i8080-Z180 [1.11].                                Page    3
--------------------------------- HELLO.ASM ----------------------------------

                        ; <><><>   Small-C  V1.2  DOS--CP/M Cross Compiler   <
                        ; <><><><><>   CP/M Large String Space Version   <><><
                        ; <><><><><><><><><><>   By Ron Cain   <><><><><><><><
                        ;
                                code
0000 =                          org #0000
0000 : 21000c                   ld hl,3072
0003 : f9                       ld sp,hl
0004 : cd3003                   call __main
                        ;//---------------------------------------------------
                        ;//     Project:                        light8080 SOC           WiCores Solutions 
                        ;//
                        ;//     File name:                      hello.c                                 (February 04, 2012)
                        ;//
                        ;//     Writer:                         Moti Litochevski 
                        ;//
                        ;//     Description:
                        ;//             This file contains a simple program written in Sm
                        ;//             the UART and then switches to echo received bytes
                        ;//             This example also include a simple interrupt exam
                        ;//             verilog testbench. the testbench 
                        ;//
                        ;//     Revision History:
                        ;//
                        ;//     Rev <revnumber>                 <Date>                  <owner> 
                        ;//             <comment>
                        ;//---------------------------------------------------
                        ;// define interrupt vectors 
                        ;// note that this file must be edited to enable inter
                        ;#include intr_vec.h 
                        ;//---------------------------------------------------
                        ;//     Project:                        light8080 SOC           WiCores Solutions 
                        ;//
                        ;//     File name:                      intr_vec.h                      (March 03, 2012)
                        ;//
                        ;//     Writer:                         Moti Litochevski 
                        ;//
                        ;//     Description:
                        ;//             This file contains a simple example of calling in
                        ;//             file defines the interrupt vector for external in
                        ;//             0x0008. the interrupts vectors addresses are set 
                        ;//             controller "intr_ctrl.v" file. 
                        ;//             Code is generated for all 4 supported external in
                        ;//             are not called. 
                        ;//             On execution of an interrupt the CPU will automat
                        ;//             enable flag set by the EI instruction. the interr
                        ;//             enable the interrupts again after interrupt servi
                        ;//             nested interrupts just move the EI instruction to
                        ;//             call instruction to the service routine (see comm
                        ;//             Note that this code is not optimized in any way. 
                        ;//             verify the interrupt mechanism of the light8080 C
                        ;//
                        ;//     Revision History:
                        ;//
                        ;//     Rev <revnumber>                 <Date>                  <owner> 
                        ;//             <comment>
                        ;//---------------------------------------------------
                        ;// to support interrupt enable the respective interru
                        ;// beginning of the output assembly file. only the in
                        ;// should call a valid interrupt service routine name
                        ;// C function name should be prefixed by "__". 
                        ;#asm
AS80 Assembler for i8080-Z180 [1.11].                                Page    4
--------------------------------- HELLO.ASM ----------------------------------

                        ;Preserve space for interrupt routines 
                        ;interrupt 0 vector 
0008 =                          org #0008
0008 : f5                       push af
0009 : c5                       push bc
000a : d5                       push de
000b : e5                       push hl 
                        ;       ei                                      ; to enable nested interrupts uncomment this 
000c : cd2403                   call __int0_isr 
000f : e1                       pop hl 
0010 : d1                       pop de 
0011 : c1                       pop bc
0012 : f1                       pop af
0013 : fb                       ei                                      ; interrupt are not enabled during the execut
0014 : c9                       ret 
                        ;interrupt 1 vector 
0018 =                          org #0018
0018 : f5                       push af
0019 : c5                       push bc
001a : d5                       push de
001b : e5                       push hl 
                        ;       call __int1_isr         ; interrupt not used 
001c : e1                       pop hl 
001d : d1                       pop de 
001e : c1                       pop bc
001f : f1                       pop af
0020 : fb                       ei 
0021 : c9                       ret 
                        ;interrupt 2 vector 
0028 =                          org #0028
0028 : f5                       push af
0029 : c5                       push bc
002a : d5                       push de
002b : e5                       push hl 
                        ;       call __int2_isr         ; interrupt not used 
002c : e1                       pop hl 
002d : d1                       pop de 
002e : c1                       pop bc
002f : f1                       pop af
0030 : fb                       ei 
0031 : c9                       ret 
                        ;interrupt 3 vector 
0038 =                          org #0038
0038 : f5                       push af
0039 : c5                       push bc
003a : d5                       push de
003b : e5                       push hl 
                        ;       call __int3_isr         ; interrupt not used 
003c : e1                       pop hl 
003d : d1                       pop de 
003e : c1                       pop bc
003f : f1                       pop af
0040 : fb                       ei 
0041 : c9                       ret 
                        ;//---------------------------------------------------
                        ;//                                             Th.. Th.. Th.. Thats all folks !!!
                        ;//---------------------------------------------------
                        ;// insert c80 assmbly library to the output file 
                        ;#include ..\tools\c80\c80.lib
                        ;#asm
                        ;
                        ;-----------------------------------------------------
AS80 Assembler for i8080-Z180 [1.11].                                Page    5
--------------------------------- HELLO.ASM ----------------------------------

                        ;       Small-C  Run-time Librray
                        ;
                        ;       V4d     As of July 16, 1980 (gtf)
                        ;                  Added EXIT() function
                        ;-----------------------------------------------------
                        ;
                        ;Fetch a single byte from the address in HL and sign e
0042 :                  ccgchar: 
0042 : 7e                       ld a,(hl)
0043 :                  ccsxt:  
0043 : 6f                       ld l,a
0044 : 07                       rlca
0045 : 9f                       sbc     a
0046 : 67                       ld      h,a
0047 : c9                       ret
                        ;Fetch a full 16-bit integer from the address in HL
0048 :                  ccgint: 
0048 : 7e                       ld a,(hl)
0049 : 23                       inc     hl
004a : 66                       ld      h,(hl)
004b : 6f                       ld l,a
004c : c9                       ret
                        ;Store a single byte from HL at the address in DE
004d :                  ccpchar: 
004d : 7d                       ld      a,l
004e : 12                       ld      (de),a
004f : c9                       ret
                        ;Store a 16-bit integer in HL at the address in DE
0050 :                  ccpint: 
0050 : 7d                       ld      a,l
0051 : 12                       ld      (de),a
0052 : 13                       inc     de
0053 : 7c                       ld      a,h
0054 : 12                       ld      (de),a
0055 : c9                       ret
                        ;Inclusive "or" HL and DE into HL
0056 :                  ccor:   
0056 : 7d                       ld      a,l
0057 : b3                       or      e
0058 : 6f                       ld l,a
0059 : 7c                       ld      a,h
005a : b2                       or      d
005b : 67                       ld      h,a
005c : c9                       ret
                        ;Exclusive "or" HL and DE into HL
005d :                  ccxor:  
005d : 7d                       ld      a,l
005e : ab                       xor     e
005f : 6f                       ld l,a
0060 : 7c                       ld      a,h
0061 : aa                       xor     d
0062 : 67                       ld      h,a
0063 : c9                       ret
                        ;"And" HL and DE into HL
0064 :                  ccand:  
0064 : 7d                       ld      a,l
0065 : a3                       and     e
0066 : 6f                       ld l,a
0067 : 7c                       ld      a,h
0068 : a2                       and     d
0069 : 67                       ld      h,a
006a : c9                       ret
AS80 Assembler for i8080-Z180 [1.11].                                Page    6
--------------------------------- HELLO.ASM ----------------------------------

                        ;Test if HL = DE and set HL = 1 if true else 0
006b :                  cceq:   
006b : cd9100                   call cccmp
006e : c8                       ret z
006f : 2b                       dec     hl
0070 : c9                       ret
                        ;Test if DE ~= HL
0071 :                  ccne:   
0071 : cd9100                   call cccmp
0074 : c0                       ret nz
0075 : 2b                       dec     hl
0076 : c9                       ret
                        ;Test if DE > HL (signed)
0077 :                  ccgt:   
0077 : eb                       ex de,hl
0078 : cd9100                   call cccmp
007b : d8                       ret c
007c : 2b                       dec     hl
007d : c9                       ret
                        ;Test if DE <= HL (signed)
007e :                  ccle:   
007e : cd9100                   call cccmp
0081 : c8                       ret z
0082 : d8                       ret c
0083 : 2b                       dec hl
0084 : c9                       ret
                        ;Test if DE >= HL (signed)
0085 :                  ccge:   
0085 : cd9100                   call cccmp
0088 : d0                       ret nc
0089 : 2b                       dec hl
008a : c9                       ret
                        ;Test if DE < HL (signed)
008b :                  cclt:   
008b : cd9100                   call cccmp
008e : d8                       ret c
008f : 2b                       dec hl
0090 : c9                       ret
                        ; Signed compare of DE and HL
                        ; Performs DE - HL and sets the conditions:
                        ;       Carry reflects sign of difference (set means DE < HL
                        ;       Zero/non-zero set according to equality.
0091 :                  cccmp:
0091 : 7b                       ld      a,e
0092 : 95                       sub     l
0093 : 5f                       ld      e,a
0094 : 7a                       ld      a,d
0095 : 9c                       sbc     h
0096 : 210100                   ld      hl,1
0099 : fa9e00                   jp      m,cccmp1
009c : b3                       or      e       ;"OR" resets carry
009d : c9                       ret
009e :                  cccmp1: 
009e : b3                       or      e
009f : 37                       scf             ;set carry to signal minus
00a0 : c9                       ret
                        ;Test if DE >= HL (unsigned)
00a1 :                  ccuge:  
00a1 : cdbb00                   call ccucmp
00a4 : d0                       ret nc
00a5 : 2b                       dec hl
00a6 : c9                       ret     
AS80 Assembler for i8080-Z180 [1.11].                                Page    7
--------------------------------- HELLO.ASM ----------------------------------

                        ;Test if DE < HL (unsigned)
00a7 :                  ccult:  
00a7 : cdbb00                   call ccucmp
00aa : d8                       ret c
00ab : 2b                       dec hl
00ac : c9                       ret
                        ;Test if DE > HL (unsigned)
00ad :                  ccugt:  
00ad : eb                       ex de,hl
00ae : cdbb00                   call ccucmp
00b1 : d8                       ret c
00b2 : 2b                       dec hl
00b3 : c9                       ret
                        ;Test if DE <= HL (unsigned)
00b4 :                  ccule:  
00b4 : cdbb00                   call ccucmp
00b7 : c8                       ret z
00b8 : d8                       ret c
00b9 : 2b                       dec hl
00ba : c9                       ret
                        ;Routine to perform unsigned compare
                        ;carry set if DE < HL
                        ;zero/nonzero set accordingly
00bb :                  ccucmp: 
00bb : 7a                       ld      a,d
00bc : bc                       cp      h
00bd : c2c200                   jp      nz,$+5
00c0 : 7b                       ld      a,e
00c1 : bd                       cp      l
00c2 : 210100                   ld      hl,1
00c5 : c9                       ret
                        ;Shift DE arithmetically right by HL and return in HL
00c6 :                  ccasr:  
00c6 : eb                       ex      de,hl
00c7 : 7c                       ld      a,h
00c8 : 17                       rla
00c9 : 7c                       ld      a,h
00ca : 1f                       rra
00cb : 67                       ld      h,a
00cc : 7d                       ld      a,l
00cd : 1f                       rra
00ce : 6f                       ld      l,a
00cf : 1d                       dec     e
00d0 : c2c700                   jp      nz,ccasr+1
00d3 : c9                       ret
                        ;Shift DE arithmetically left by HL and return in HL
00d4 :                  ccasl:  
00d4 : eb                       ex      de,hl
00d5 : 29                       add     hl,hl
00d6 : 1d                       dec     e
00d7 : c2d500                   jp      nz,ccasl+1
00da : c9                       ret
                        ;Subtract HL from DE and return in HL
00db :                  ccsub:  
00db : 7b                       ld      a,e
00dc : 95                       sub     l
00dd : 6f                       ld l,a
00de : 7a                       ld      a,d
00df : 9c                       sbc     h
00e0 : 67                       ld      h,a
00e1 : c9                       ret
                        ;Form the two's complement of HL
AS80 Assembler for i8080-Z180 [1.11].                                Page    8
--------------------------------- HELLO.ASM ----------------------------------

00e2 :                  ccneg:  
00e2 : cde700                   call cccom
00e5 : 23                       inc     hl
00e6 : c9                       ret
                        ;Form the one's complement of HL
00e7 :                  cccom:  
00e7 : 7c                       ld      a,h
00e8 : 2f                       cpl
00e9 : 67                       ld      h,a
00ea : 7d                       ld      a,l
00eb : 2f                       cpl
00ec : 6f                       ld l,a
00ed : c9                       ret
                        ;Multiply DE by HL and return in HL
00ee :                  ccmult: 
00ee : 44                       ld      b,h
00ef : 4d                       ld      c,l
00f0 : 210000                   ld      hl,0
00f3 :                  ccmult1: 
00f3 : 79                       ld      a,c
00f4 : 0f                       rrca
00f5 : d2f900                   jp      nc,$+4
00f8 : 19                       add     hl,de
00f9 : af                       xor     a
00fa : 78                       ld      a,b
00fb : 1f                       rra
00fc : 47                       ld      b,a
00fd : 79                       ld      a,c
00fe : 1f                       rra
00ff : 4f                       ld      c,a
0100 : b0                       or      b
0101 : c8                       ret z
0102 : af                       xor     a
0103 : 7b                       ld      a,e
0104 : 17                       rla
0105 : 5f                       ld      e,a
0106 : 7a                       ld      a,d
0107 : 17                       rla
0108 : 57                       ld      d,a
0109 : b3                       or      e
010a : c8                       ret z
010b : c3f300                   jp      ccmult1
                        ;Divide DE by HL and return quotient in HL, remainder 
010e :                  ccdiv:  
010e : 44                       ld      b,h
010f : 4d                       ld      c,l
0110 : 7a                       ld      a,d
0111 : a8                       xor     b
0112 : f5                       push af
0113 : 7a                       ld      a,d
0114 : b7                       or      a
0115 : fc4f01                   call m,ccdeneg
0118 : 78                       ld      a,b
0119 : b7                       or      a
011a : fc5701                   call m,ccbcneg
011d : 3e10                     ld      a,16
011f : f5                       push af 
0120 : eb                       ex      de,hl
0121 : 110000                   ld      de,0
0124 :                  ccdiv1: 
0124 : 29                       add hl,hl 
0125 : cd5f01                   call ccrdel
AS80 Assembler for i8080-Z180 [1.11].                                Page    9
--------------------------------- HELLO.ASM ----------------------------------

0128 : ca3b01                   jp      z,ccdiv2
012b : cd6701                   call cccmpbcde
012e : fa3b01                   jp      m,ccdiv2
0131 : 7d                       ld      a,l
0132 : f601                     or      1
0134 : 6f                       ld l,a
0135 : 7b                       ld      a,e
0136 : 91                       sub     c
0137 : 5f                       ld      e,a
0138 : 7a                       ld      a,d
0139 : 98                       sbc     b
013a : 57                       ld      d,a
013b :                  ccdiv2: 
013b : f1                       pop af
013c : 3d                       dec     a
013d : ca4401                   jp      z,ccdiv3
0140 : f5                       push af
0141 : c32401                   jp      ccdiv1
0144 :                  ccdiv3: 
0144 : f1                       pop af
0145 : f0                       ret     p
0146 : cd4f01                   call ccdeneg
0149 : eb                       ex de,hl
014a : cd4f01                   call ccdeneg
014d : eb                       ex de,hl
014e : c9                       ret
014f :                  ccdeneg: 
014f : 7a                       ld      a,d
0150 : 2f                       cpl
0151 : 57                       ld      d,a
0152 : 7b                       ld      a,e
0153 : 2f                       cpl
0154 : 5f                       ld      e,a
0155 : 13                       inc     de
0156 : c9                       ret
0157 :                  ccbcneg: 
0157 : 78                       ld      a,b
0158 : 2f                       cpl
0159 : 47                       ld      b,a
015a : 79                       ld      a,c
015b : 2f                       cpl
015c : 4f                       ld      c,a
015d : 03                       inc     bc
015e : c9                       ret
015f :                  ccrdel: 
015f : 7b                       ld      a,e
0160 : 17                       rla
0161 : 5f                       ld      e,a
0162 : 7a                       ld      a,d
0163 : 17                       rla
0164 : 57                       ld      d,a
0165 : b3                       or      e
0166 : c9                       ret
0167 :                  cccmpbcde: 
0167 : 7b                       ld      a,e
0168 : 91                       sub     c
0169 : 7a                       ld      a,d
016a : 98                       sbc     b
016b : c9                       ret
                        ;// UART IO registers 
                        ;port (128) UDATA;              // uart data register used for bot
                        ;port (129) UBAUDL;             // low byte of baud rate register
AS80 Assembler for i8080-Z180 [1.11].                                Page   10
--------------------------------- HELLO.ASM ----------------------------------

                        ;port (130) UBAUDH;             // low byte of baud rate register
                        ;port (131) USTAT;              // uart status register 
                        ;// digital IO ports registers 
                        ;port (132) P1DATA;             // port 1 data register 
                        ;port (133) P1DIR;              // port 1 direction register contr
                        ;port (134) P2DATA;             // port 2 data register 
                        ;port (135) P2DIR;              // port 2 direction register contr
                        ;// interrupt controller register 
                        ;port (136) INTRENA;            // interrupts enable register 
                        ;// simulation end register 
                        ;// writing any value to this port will end the verilo
                        ;// test bench. 
                        ;port (255) SIMEND;
                        ;// registers bit fields definition 
                        ;// uart status register decoding 
                        ;#define UTXBUSY                1
                        ;#define URXFULL                16
                        ;// globals 
                        ;char rxbyte;           // byte received from the uart 
                        ;int tstary[2] = {1234, 5678};
                        ;//---------------------------------------------------
                        ;// send a single byte to the UART 
                        ;sendbyte(by) 
016c :                  __sendbyte:
                        ;char by;
                        ;{
                        ;       while (USTAT & UTXBUSY);
016c :                  cc2:
016c : db83                     in a,(131)
016e : cd4300                   call ccsxt
0171 : e5                       push hl
0172 : 210100                   ld hl,1
0175 : d1                       pop de
0176 : cd6400                   call ccand
0179 : 7c                       ld a,h
017a : b5                       or l
017b : ca8101                   jp z,cc3
017e : c36c01                   jp cc2
0181 :                  cc3:
                        ;       UDATA = by;
0181 : 210200                   ld hl,2
0184 : 39                       add hl,sp
0185 : cd4200                   call ccgchar
0188 : 7d                       ld a,l
0189 : d380                     out (128),a
                        
                        ;}
018b : c9                       ret
                        ;// check if a byte was received by the uart 
                        ;getbyte()
018c :                  __getbyte:
                        ;{
                        ;       if (USTAT & URXFULL) {
018c : db83                     in a,(131)
018e : cd4300                   call ccsxt
0191 : e5                       push hl
0192 : 211000                   ld hl,16
0195 : d1                       pop de
0196 : cd6400                   call ccand
0199 : 7c                       ld a,h
019a : b5                       or l
019b : caae01                   jp z,cc4
AS80 Assembler for i8080-Z180 [1.11].                                Page   11
--------------------------------- HELLO.ASM ----------------------------------

                        ;               rxbyte = UDATA;
019e : db80                     in a,(128)
01a0 : cd4300                   call ccsxt
01a3 : 7d                       ld a,l
01a4 : 322c04                   ld (__rxbyte),a
                        ;               return 1;
01a7 : 210100                   ld hl,1
01aa : c9                       ret
                        ;       } 
                        ;       else 
01ab : c3b201                   jp cc5
01ae :                  cc4:
                        ;               return 0;
01ae : 210000                   ld hl,0
01b1 : c9                       ret
01b2 :                  cc5:
                        ;}
01b2 : c9                       ret
                        ;// send new line to the UART 
                        ;nl()
01b3 :                  __nl:
                        ;{
                        ;       sendbyte(13);
01b3 : 210d00                   ld hl,13
01b6 : e5                       push hl
01b7 : cd6c01                   call __sendbyte
01ba : c1                       pop bc
                        ;       sendbyte(10);
01bb : 210a00                   ld hl,10
01be : e5                       push hl
01bf : cd6c01                   call __sendbyte
01c2 : c1                       pop bc
                        ;}
01c3 : c9                       ret
                        ;// sends a string to the UART 
                        ;printstr(sptr)
01c4 :                  __printstr:
                        ;char *sptr;
                        ;{
                        ;       while (*sptr != 0) 
01c4 :                  cc6:
01c4 : 210200                   ld hl,2
01c7 : 39                       add hl,sp
01c8 : cd4800                   call ccgint
01cb : cd4200                   call ccgchar
01ce : e5                       push hl
01cf : 210000                   ld hl,0
01d2 : d1                       pop de
01d3 : cd7100                   call ccne
01d6 : 7c                       ld a,h
01d7 : b5                       or l
01d8 : caf401                   jp z,cc7
                        ;               sendbyte(*sptr++);
01db : 210200                   ld hl,2
01de : 39                       add hl,sp
01df : e5                       push hl
01e0 : cd4800                   call ccgint
01e3 : 23                       inc hl
01e4 : d1                       pop de
01e5 : cd5000                   call ccpint
01e8 : 2b                       dec hl
01e9 : cd4200                   call ccgchar
AS80 Assembler for i8080-Z180 [1.11].                                Page   12
--------------------------------- HELLO.ASM ----------------------------------

01ec : e5                       push hl
01ed : cd6c01                   call __sendbyte
01f0 : c1                       pop bc
01f1 : c3c401                   jp cc6
01f4 :                  cc7:
                        ;}
01f4 : c9                       ret
                        ;// sends a decimal value to the UART 
                        ;printdec(dval) 
01f5 :                  __printdec:
                        ;int dval;
                        ;{
                        ;       if (dval<0) {
01f5 : 210200                   ld hl,2
01f8 : 39                       add hl,sp
01f9 : cd4800                   call ccgint
01fc : e5                       push hl
01fd : 210000                   ld hl,0
0200 : d1                       pop de
0201 : cd8b00                   call cclt
0204 : 7c                       ld a,h
0205 : b5                       or l
0206 : ca2402                   jp z,cc8
                        ;               sendbyte('-');
0209 : 212d00                   ld hl,45
020c : e5                       push hl
020d : cd6c01                   call __sendbyte
0210 : c1                       pop bc
                        ;               dval = -dval;
0211 : 210200                   ld hl,2
0214 : 39                       add hl,sp
0215 : e5                       push hl
0216 : 210400                   ld hl,4
0219 : 39                       add hl,sp
021a : cd4800                   call ccgint
021d : cde200                   call ccneg
0220 : d1                       pop de
0221 : cd5000                   call ccpint
                        ;       }
                        ;       outint(dval);
0224 :                  cc8:
0224 : 210200                   ld hl,2
0227 : 39                       add hl,sp
0228 : cd4800                   call ccgint
022b : e5                       push hl
022c : cd3102                   call __outint
022f : c1                       pop bc
                        ;}
0230 : c9                       ret
                        ;// function copied from c80dos.c 
                        ;outint(n)      
0231 :                  __outint:
                        ;int n;
                        ;{      
                        ;int q;
0231 : c5                       push bc
                        ;       q = n/10;
0232 : 210000                   ld hl,0
0235 : 39                       add hl,sp
0236 : e5                       push hl
0237 : 210600                   ld hl,6
023a : 39                       add hl,sp
AS80 Assembler for i8080-Z180 [1.11].                                Page   13
--------------------------------- HELLO.ASM ----------------------------------

023b : cd4800                   call ccgint
023e : e5                       push hl
023f : 210a00                   ld hl,10
0242 : d1                       pop de
0243 : cd0e01                   call ccdiv
0246 : d1                       pop de
0247 : cd5000                   call ccpint
                        ;       if (q) outint(q);
024a : 210000                   ld hl,0
024d : 39                       add hl,sp
024e : cd4800                   call ccgint
0251 : 7c                       ld a,h
0252 : b5                       or l
0253 : ca6202                   jp z,cc9
0256 : 210000                   ld hl,0
0259 : 39                       add hl,sp
025a : cd4800                   call ccgint
025d : e5                       push hl
025e : cd3102                   call __outint
0261 : c1                       pop bc
                        ;       sendbyte('0'+(n-q*10));
0262 :                  cc9:
0262 : 213000                   ld hl,48
0265 : e5                       push hl
0266 : 210600                   ld hl,6
0269 : 39                       add hl,sp
026a : cd4800                   call ccgint
026d : e5                       push hl
026e : 210400                   ld hl,4
0271 : 39                       add hl,sp
0272 : cd4800                   call ccgint
0275 : e5                       push hl
0276 : 210a00                   ld hl,10
0279 : d1                       pop de
027a : cdee00                   call ccmult
027d : d1                       pop de
027e : cddb00                   call ccsub
0281 : d1                       pop de
0282 : 19                       add hl,de
0283 : e5                       push hl
0284 : cd6c01                   call __sendbyte
0287 : c1                       pop bc
                        ;}
0288 : c1                       pop bc
0289 : c9                       ret
                        ;// sends a hexadecimal value to the UART 
                        ;printhex(hval) 
028a :                  __printhex:
                        ;int hval;
                        ;{      
                        ;int q;
028a : c5                       push bc
                        ;       q = hval/16;
028b : 210000                   ld hl,0
028e : 39                       add hl,sp
028f : e5                       push hl
0290 : 210600                   ld hl,6
0293 : 39                       add hl,sp
0294 : cd4800                   call ccgint
0297 : e5                       push hl
0298 : 211000                   ld hl,16
029b : d1                       pop de
AS80 Assembler for i8080-Z180 [1.11].                                Page   14
--------------------------------- HELLO.ASM ----------------------------------

029c : cd0e01                   call ccdiv
029f : d1                       pop de
02a0 : cd5000                   call ccpint
                        ;       if (q) printhex(q);
02a3 : 210000                   ld hl,0
02a6 : 39                       add hl,sp
02a7 : cd4800                   call ccgint
02aa : 7c                       ld a,h
02ab : b5                       or l
02ac : cabb02                   jp z,cc10
02af : 210000                   ld hl,0
02b2 : 39                       add hl,sp
02b3 : cd4800                   call ccgint
02b6 : e5                       push hl
02b7 : cd8a02                   call __printhex
02ba : c1                       pop bc
                        ;       q = hval-q*16;
02bb :                  cc10:
02bb : 210000                   ld hl,0
02be : 39                       add hl,sp
02bf : e5                       push hl
02c0 : 210600                   ld hl,6
02c3 : 39                       add hl,sp
02c4 : cd4800                   call ccgint
02c7 : e5                       push hl
02c8 : 210400                   ld hl,4
02cb : 39                       add hl,sp
02cc : cd4800                   call ccgint
02cf : e5                       push hl
02d0 : 211000                   ld hl,16
02d3 : d1                       pop de
02d4 : cdee00                   call ccmult
02d7 : d1                       pop de
02d8 : cddb00                   call ccsub
02db : d1                       pop de
02dc : cd5000                   call ccpint
                        ;       if (q > 9)
02df : 210000                   ld hl,0
02e2 : 39                       add hl,sp
02e3 : cd4800                   call ccgint
02e6 : e5                       push hl
02e7 : 210900                   ld hl,9
02ea : d1                       pop de
02eb : cd7700                   call ccgt
02ee : 7c                       ld a,h
02ef : b5                       or l
02f0 : ca1003                   jp z,cc11
                        ;               sendbyte('A'+q-10);
02f3 : 214100                   ld hl,65
02f6 : e5                       push hl
02f7 : 210200                   ld hl,2
02fa : 39                       add hl,sp
02fb : cd4800                   call ccgint
02fe : d1                       pop de
02ff : 19                       add hl,de
0300 : e5                       push hl
0301 : 210a00                   ld hl,10
0304 : d1                       pop de
0305 : cddb00                   call ccsub
0308 : e5                       push hl
0309 : cd6c01                   call __sendbyte
030c : c1                       pop bc
AS80 Assembler for i8080-Z180 [1.11].                                Page   15
--------------------------------- HELLO.ASM ----------------------------------

                        ;       else 
030d : c32203                   jp cc12
0310 :                  cc11:
                        ;               sendbyte('0'+q);
0310 : 213000                   ld hl,48
0313 : e5                       push hl
0314 : 210200                   ld hl,2
0317 : 39                       add hl,sp
0318 : cd4800                   call ccgint
031b : d1                       pop de
031c : 19                       add hl,de
031d : e5                       push hl
031e : cd6c01                   call __sendbyte
0321 : c1                       pop bc
0322 :                  cc12:
                        ;}
0322 : c1                       pop bc
0323 : c9                       ret
                        ;// external interrupt 0 service routine 
                        ;int0_isr()
0324 :                  __int0_isr:
                        ;{
                        ;       printstr("Interrupt 0 was asserted."); nl();
0324 : 21d003                   ld hl,cc1+0
0327 : e5                       push hl
0328 : cdc401                   call __printstr
032b : c1                       pop bc
032c : cdb301                   call __nl
                        ;}
032f : c9                       ret
                        ;// program main routine 
                        ;main()
0330 :                  __main:
                        ;{
                        ;       // configure UART baud rate - set to 9600 for 30MHz 
                        ;       // BAUD = round(<clock>/<baud rate>/16) = round(30e6
                        ;       // Note: Usage of a minimum divider value of 1 will 
                        ;       UBAUDL = 195;
0330 : 21c300                   ld hl,195
0333 : 7d                       ld a,l
0334 : d381                     out (129),a
                        
                        ;       UBAUDH = 0;
0336 : 210000                   ld hl,0
0339 : 7d                       ld a,l
033a : d382                     out (130),a
                        
                        ;       // configure both ports to output and digital output
                        ;       P1DATA = 0x00;
033c : 210000                   ld hl,0
033f : 7d                       ld a,l
0340 : d384                     out (132),a
                        
                        ;       P1DIR = 0xff;
0342 : 21ff00                   ld hl,255
0345 : 7d                       ld a,l
0346 : d385                     out (133),a
                        
                        ;       P2DATA = 0x00;
0348 : 210000                   ld hl,0
034b : 7d                       ld a,l
034c : d386                     out (134),a
AS80 Assembler for i8080-Z180 [1.11].                                Page   16
--------------------------------- HELLO.ASM ----------------------------------

                        
                        ;       P2DIR = 0xff;
034e : 21ff00                   ld hl,255
0351 : 7d                       ld a,l
0352 : d387                     out (135),a
                        
                        ;       // enable interrupt 0 only 
                        ;       INTRENA = 0x01; 
0354 : 210100                   ld hl,1
0357 : 7d                       ld a,l
0358 : d388                     out (136),a
                        
                        ;       // enable CPU interrupt 
                        ;#asm 
035a : fb                       ei 
                        ;       // print message 
                        ;       printstr("Hello World!!!"); nl();
035b : 21ea03                   ld hl,cc1+26
035e : e5                       push hl
035f : cdc401                   call __printstr
0362 : c1                       pop bc
0363 : cdb301                   call __nl
                        ;       printstr("Dec value: "); printdec(tstary[1]); nl();
0366 : 21f903                   ld hl,cc1+41
0369 : e5                       push hl
036a : cdc401                   call __printstr
036d : c1                       pop bc
036e : 212d04                   ld hl,__tstary
0371 : e5                       push hl
0372 : 210100                   ld hl,1
0375 : 29                       add hl,hl
0376 : d1                       pop de
0377 : 19                       add hl,de
0378 : cd4800                   call ccgint
037b : e5                       push hl
037c : cdf501                   call __printdec
037f : c1                       pop bc
0380 : cdb301                   call __nl
                        ;       printstr("Hex value: 0x"); printhex(tstary[0]); nl()
0383 : 210504                   ld hl,cc1+53
0386 : e5                       push hl
0387 : cdc401                   call __printstr
038a : c1                       pop bc
038b : 212d04                   ld hl,__tstary
038e : e5                       push hl
038f : 210000                   ld hl,0
0392 : 29                       add hl,hl
0393 : d1                       pop de
0394 : 19                       add hl,de
0395 : cd4800                   call ccgint
0398 : e5                       push hl
0399 : cd8a02                   call __printhex
039c : c1                       pop bc
039d : cdb301                   call __nl
                        ;       // assert bit 0 of port 1 to test external interrupt
                        ;       P1DATA = 0x01;
03a0 : 210100                   ld hl,1
03a3 : 7d                       ld a,l
03a4 : d384                     out (132),a
                        
                        ;               
                        ;       printstr("Echoing received bytes: "); nl();
AS80 Assembler for i8080-Z180 [1.11].                                Page   17
--------------------------------- HELLO.ASM ----------------------------------

03a6 : 211304                   ld hl,cc1+67
03a9 : e5                       push hl
03aa : cdc401                   call __printstr
03ad : c1                       pop bc
03ae : cdb301                   call __nl
                        ;       // loop forever 
                        ;       while (1) {
03b1 :                  cc13:
03b1 : 210100                   ld hl,1
03b4 : 7c                       ld a,h
03b5 : b5                       or l
03b6 : cacf03                   jp z,cc14
                        ;               // check if a new byte was received 
                        ;               if (getbyte()) 
03b9 : cd8c01                   call __getbyte
03bc : 7c                       ld a,h
03bd : b5                       or l
03be : cacc03                   jp z,cc15
                        ;                       // echo the received byte to the UART 
                        ;                       sendbyte(rxbyte); 
03c1 : 3a2c04                   ld a,(__rxbyte)
03c4 : cd4300                   call ccsxt
03c7 : e5                       push hl
03c8 : cd6c01                   call __sendbyte
03cb : c1                       pop bc
                        ;       }
03cc :                  cc15:
03cc : c3b103                   jp cc13
03cf :                  cc14:
                        ;}
03cf : c9                       ret
                        ;//---------------------------------------------------
                        ;//                                             Th.. Th.. Th.. Thats all folks !!!
                        ;//---------------------------------------------------
03d0 :                  cc1:
03d0 : 496e7465727275..         db 73,110,116,101,114,114,117,112,116,32
03da : 30207761732061..         db 48,32,119,97,115,32,97,115,115,101
03e4 : 727465642e0048..         db 114,116,101,100,46,0,72,101,108,108
03ee : 6f20576f726c64..         db 111,32,87,111,114,108,100,33,33,33
03f8 : 00446563207661..         db 0,68,101,99,32,118,97,108,117,101
0402 : 3a200048657820..         db 58,32,0,72,101,120,32,118,97,108
040c : 75653a20307800..         db 117,101,58,32,48,120,0,69,99,104
0416 : 6f696e67207265..         db 111,105,110,103,32,114,101,99,101,105
0420 : 76656420627974..         db 118,101,100,32,98,121,116,101,115,58
042a : 2000                     db 32,0
042c :                  __rxbyte:
042c : 00                       ds 1
042d :                  __tstary:
042d : d2042e16                 db -46,4,46,22
                        
                        ; --- End of Compilation ---
No errors in pass 2.

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.