URL
https://opencores.org/ocsvn/light8080/light8080/trunk
Subversion Repositories light8080
[/] [light8080/] [trunk/] [c/] [HELLO.LST] - Rev 67
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.