 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 1 - 6/3/2005 1:23:28


       1/       0 :                     	cpu	z80
       2/       0 :                     
       3/       0 :                     	shared	porta
       4/       0 :                     	shared	portb
       5/       0 :                     	shared	portc
       6/       0 :                     	shared	portcmd
       7/       0 :                     	shared	ramtop
       8/       0 :                     
       9/       0 : =FCH                porta	equ	0fch
      10/       0 : =FDH                portb	equ	0fdh
      11/       0 : =FEH                portc	equ	0feh
      12/       0 : =FFH                portcmd	equ	0ffh
      13/       0 : =3C00H              ramtop	equ	03c00h
      14/       0 : =400H               ramsize	equ	1024
      15/       0 : =50H                monitor_area	equ	80
      16/       0 : =3FFFH              ramend	equ	ramtop+ramsize-1
      17/       0 : =0H                 romtop	equ	0
      18/       0 :                     
      19/       0 :                     	shared	port_led
      20/       0 :                     	shared	port_txd
      21/       0 :                     	shared	port_rxd
      22/       0 : =7H                 port_led	equ	7
      23/       0 : =6H                 port_txd	equ	6
      24/       0 : =3H                 port_rxd	equ	3
      25/       0 :                     
      26/    3FB0 :                     	org	ramend - monitor_area +1
      27/    3FB0 :                     	shared	gets_buf_size
      28/    3FB0 :                     	shared	gets_buf
      29/    3FB0 : =30H                gets_buf_size	equ	48
      30/    3FB0 :                     gets_buf	ds	gets_buf_size
      31/    3FE0 :                     savepc		ds	2
      32/    3FE2 :                     savesp		ds	2
      33/    3FE4 :                     savehl		ds	2
      34/    3FE6 :                     savede		ds	2
      35/    3FE8 :                     savebc		ds	2
      36/    3FEA :                     saveaf		ds	2
      37/    3FEC : =3FECH              saveaf_stack:	equ	$
      38/    3FEC :                     		ds	20
      39/    4000 : =4000H              monitor_stack:	equ	$
      40/    4000 :                     
      41/    4000 :                     ;8255 PORT-C ON/OFF Macro (18Clock)
      42/    4000 :                     ;Ex.PORTC 3,1(PORTC(6)=1) PORTC 7,0(PORT(7)=0)
      43/    4000 :                     PORTC	MACRO	arg1,arg2
      44/    4000 :                     	ld	a,arg2|(arg1<<1)
      45/    4000 :                     	out	(portcmd),a
      46/    4000 :                     	ENDM
      47/    4000 :                     
      48/       0 :                     	org	romtop
      49/       0 : C3 CA 00            	jp	init
      50/       3 :                     
      51/      38 :                     int:	org	38h
      52/      38 : C3 3B 00            	jp	debugger
      53/      3B :                     
      54/      3B :                     ;RST 38
      55/      3B :                     debugger:
      56/      3B : 22 E4 3F            	ld	(savehl),hl	;save HL
      57/      3E : E3                  	ex	(sp),hl
      58/      3F : 22 E0 3F            	ld	(savepc),hl	;save PC via stack
      59/      42 : E3                  	ex	(sp),hl
      60/      43 : F5                  	push	af
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 2 - 6/3/2005 1:23:28


      61/      44 : 21 02 00            	ld	hl,2
      62/      47 : 39                  	add	hl,sp
      63/      48 : 22 E2 3F            	ld	(savesp),hl	;save SP
      64/      4B : F1                  	pop	af
      65/      4C : 31 EC 3F            	ld	sp,saveaf_stack
      66/      4F : F5                  	push	af
      67/      50 : C5                  	push	bc
      68/      51 : D5                  	push	de
      69/      52 : 31 00 40            	ld	sp,monitor_stack
      70/      55 :                     ; any process
      71/      55 : CD 2D 03            	call	putsip
      72/      58 : 0D 0A 50 43 3A 00   	db	"\r\nPC:",0
      73/      5E : 2A E0 3F            	ld	hl,(savepc)
      74/      61 : CD 3F 03            	call	hexword
      75/      64 : CD 2D 03            	call	putsip
      76/      67 : 20 53 50 3A 00      	db	" SP:",0
      77/      6C : 2A E2 3F            	ld	hl,(savesp)
      78/      6F : CD 3F 03            	call	hexword
      79/      72 : CD 2D 03            	call	putsip
      80/      75 : 20 48 4C 3A 00      	db	" HL:",0
      81/      7A : 2A E4 3F            	ld	hl,(savehl)
      82/      7D : CD 3F 03            	call	hexword
      83/      80 : CD 2D 03            	call	putsip
      84/      83 : 20 44 45 3A 00      	db	" DE:",0
      85/      88 : 2A E6 3F            	ld	hl,(savede)
      86/      8B : CD 3F 03            	call	hexword
      87/      8E : CD 2D 03            	call	putsip
      88/      91 : 20 42 43 3A 00      	db	" BC:",0
      89/      96 : 2A E8 3F            	ld	hl,(savebc)
      90/      99 : CD 3F 03            	call	hexword
      91/      9C : CD 2D 03            	call	putsip
      92/      9F : 20 41 46 3A 00      	db	" AF:",0
      93/      A4 : 2A EA 3F            	ld	hl,(saveaf)
      94/      A7 : CD 3F 03            	call	hexword
      95/      AA : CD 08 03            $$loop	call	conin		;break any-key
      96/      AD : C2 AA 00            	jp	nz,$$loop
      97/      B0 : 79                  	ld	a,c
      98/      B1 : FE 03               	cp	3		;Ctrl-C
      99/      B3 : CA 00 00            	jp	z,0		;Reboot
     100/      B6 : 21 63 01            	ld	hl,crlf
     101/      B9 : CD 34 03            	call	puts
     102/      BC :                     ; go-back
     103/      BC : 31 E6 3F            	ld	sp,savede
     104/      BF : D1                  	pop	de
     105/      C0 : C1                  	pop	bc
     106/      C1 : F1                  	pop	af
     107/      C2 : 2A E2 3F            	ld	hl,(savesp)
     108/      C5 : F9                  	ld	sp,hl
     109/      C6 : 2A E4 3F            	ld	hl,(savehl)
     110/      C9 : C9                  	ret
     111/      CA :                     
     112/      CA :                     init:
     113/      CA : 31 B0 3F            	ld	sp,ramend-monitor_area+1
     114/      CD : 3E 81               	ld	a,010000001b	;8255 Mode0 A=OUT,B=OUT,C(HIGH)=OUT,C(LOW)=IN
     115/      CF : D3 FF               	out	(portcmd),a
     116/      D1 : (MACRO)             	PORTC	port_txd,1	;TxD STOP-BIT
     116/      D1 : 3E 0D                       ld      a,1|(PORT_TXD<<1)
     116/      D3 : D3 FF                       out     (portcmd),a
     117/      D5 :                     
     118/      D5 :                     main:
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 3 - 6/3/2005 1:23:28


     119/      D5 : CD 9E 03            	call	delay
     120/      D8 : 21 3E 01            	ld	hl,msg_clear
     121/      DB : CD 34 03            	call	puts
     122/      DE : 21 46 01            	ld	hl,msg_hello
     123/      E1 : CD 34 03            	call	puts
     124/      E4 : 21 D0 03            	ld	hl,copyright
     125/      E7 : CD 34 03            	call	puts
     126/      EA :                     
     127/      EA :                     	shared	monitor
     128/      EA :                     monitor:
     129/      EA : 0E 3E               	ld	c,'>'
     130/      EC : CD 6D 03            	call	conout		;prompt
     131/      EF : CD 40 02            	call	gets
     132/      F2 : 3A B0 3F            	ld	a,(gets_buf)
     133/      F5 : 47                  	ld	b,a		;B=First String
     134/      F6 : 21 66 01            	ld	hl,cmdtbl
     135/      F9 : 7E                  $$find	ld	a,(hl)
     136/      FA : A7                  	and	a
     137/      FB : CA 18 01            	jp	z,$$error
     138/      FE : B8                  	cp	b
     139/      FF : CA 08 01            	jp	z,$$go
     140/     102 : 23                  	inc	hl
     141/     103 : 23                  	inc	hl
     142/     104 : 23                  	inc	hl
     143/     105 : C3 F9 00            	jp	$$find
     144/     108 : 11 EA 00            $$go	ld	de,monitor
     145/     10B : D5                  	push	de		;set monitor return address
     146/     10C : 23                  	inc	hl
     147/     10D : 5E                  	ld	e,(hl)
     148/     10E : 23                  	inc	hl
     149/     10F : 56                  	ld	d,(hl)
     150/     110 : D5                  	push	de		;set command table address
     151/     111 : 21 B1 3F            	ld	hl,gets_buf+1	;set HL=argument pointer
     152/     114 : CD 2E 02            	call	skipspace
     153/     117 : C9                  	ret
     154/     118 : 0E 3F               $$error	ld	c,'?'
     155/     11A : CD 6D 03            	call	conout
     156/     11D : 21 63 01            	ld	hl,crlf
     157/     120 : CD 34 03            	call	puts
     158/     123 : C3 EA 00            	jp	monitor
     159/     126 :                     
     160/     126 :                     
     161/     126 :                     conin_conout_loopback_test:
     162/     126 : (MACRO)             	PORTC	port_led,0
     162/     126 : 3E 0E                       ld      a,0|(PORT_LED<<1)
     162/     128 : D3 FF                       out     (portcmd),a
     163/     12A : CD 08 03            	call	conin
     164/     12D : 20 F7               	jr	nz,conin_conout_loopback_test
     165/     12F : (MACRO)             	PORTC	port_led,1
     165/     12F : 3E 0F                       ld      a,1|(PORT_LED<<1)
     165/     131 : D3 FF                       out     (portcmd),a
     166/     133 : 79                  	ld	a,c
     167/     134 : CD 48 03            	call	hexout
     168/     137 : 0E 20               	ld	c,' '
     169/     139 : CD 6D 03            	call	conout
     170/     13C : 18 E8               	jr	conin_conout_loopback_test
     171/     13E :                     
     172/     13E :                     	shared	msg_clear
     173/     13E :                     	shared	msg_hello
     174/     13E :                     	shared	crlf
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 4 - 6/3/2005 1:23:28


     175/     13E : 07 1B 5B 48 1B 5B   msg_clear:	db	"\a",01bh,"[H",01bh,"[J",0
                    4A 00 
     176/     146 : 5A 2D 38 30 20 53   msg_hello:	db	"Z-80 SINGLE BOARD COMPUTER\r\n",0
                    49 4E 47 4C 45 20 
                    42 4F 41 52 44 20 
                    43 4F 4D 50 55 54 
                    45 52 0D 0A 00 
     177/     163 : 0D 0A 00            crlf:		db	"\r\n",0
     178/     166 :                     
     179/     166 :                     ;command table
     180/     166 :                     cmdtbl:
     181/     166 : 44                  	db	'D'
     182/     167 : 73 01               	dw	c_dump
     183/     169 : 47                  	db	'G'
     184/     16A : 8B 01               	dw	c_go
     185/     16C : 57                  	db	'W'
     186/     16D : 9B 01               	dw	c_write
     187/     16F : 46                  	db	'F'
     188/     170 : D9 01               	dw	c_full
     189/     172 : 00                  	db	0
     190/     173 :                     
     191/     173 :                     c_dump:
     192/     173 : CD ED 01            	call	str2bin
     193/     176 : D5                  	push	de
     194/     177 : CD 2E 02            	call	skipspace
     195/     17A : CD ED 01            	call	str2bin
     196/     17D : E1                  	pop	hl	;HL=start address, DE=end address
     197/     17E :                     ;	ld	de,07ffh
     198/     17E : D5                  $$loop	push	de
     199/     17F : CD C6 02            	call	hexdump
     200/     182 : D1                  	pop	de
     201/     183 : 7B                  	ld	a,e
     202/     184 : 95                  	sub	a,l
     203/     185 : 7A                  	ld	a,d
     204/     186 : 9C                  	sbc	a,h
     205/     187 : D2 7E 01            	jp	nc,$$loop
     206/     18A : C9                  	ret
     207/     18B :                     
     208/     18B :                     c_go:
     209/     18B : 11 94 01            	ld	de,$$ret
     210/     18E : D5                  	push	de		;set return address
     211/     18F : CD ED 01            	call	str2bin
     212/     192 : D5                  	push	de		;set jump address
     213/     193 : C9                  	ret
     214/     194 : 21 63 01            $$ret	ld	hl,crlf
     215/     197 : CD 34 03            	call	puts
     216/     19A : C9                  	ret
     217/     19B :                     
     218/     19B :                     c_write:
     219/     19B : CD ED 01            	call	str2bin
     220/     19E : D5                  	push	de
     221/     19F : E1                  	pop	hl		;HL=target address
     222/     1A0 : CD 3F 03            $$loop	call	hexword
     223/     1A3 : 0E 3A               	ld	c,':'
     224/     1A5 : CD 6D 03            	call	conout
     225/     1A8 : 7E                  	ld	a,(hl)
     226/     1A9 : CD 48 03            	call	hexout
     227/     1AC : E5                  	push	hl
     228/     1AD : CD 2D 03            	call	putsip
     229/     1B0 : 20 2D 20 00         	db	" - ",0
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 5 - 6/3/2005 1:23:28


     230/     1B4 : CD 40 02            	call	gets
     231/     1B7 : 21 B0 3F            	ld	hl,gets_buf
     232/     1BA : CD 2E 02            	call	skipspace
     233/     1BD : 7E                  	ld	a,(hl)
     234/     1BE : A7                  	and	a		;only CR
     235/     1BF : CA D4 01            	jp	z,$$skip
     236/     1C2 : CD 16 02            	call	ishex
     237/     1C5 : DA D2 01            	jp	c,$$error
     238/     1C8 : CD ED 01            	call	str2bin
     239/     1CB : 7B                  	ld	a,e
     240/     1CC : E1                  	pop	hl
     241/     1CD : 77                  	ld	(hl),a
     242/     1CE : 23                  	inc	hl
     243/     1CF : C3 A0 01            	jp	$$loop
     244/     1D2 : E1                  $$error	pop	hl
     245/     1D3 : C9                  	ret
     246/     1D4 : E1                  $$skip	pop	hl
     247/     1D5 : 23                  	inc	hl
     248/     1D6 : C3 A0 01            	jp	$$loop
     249/     1D9 :                     
     250/     1D9 :                     ;filled memory and cold start
     251/     1D9 :                     c_full:
     252/     1D9 : 21 00 3C            	ld	hl,ramtop
     253/     1DC : 11 FF 3F            	ld	de,ramend
     254/     1DF : 36 AA               $$loop	ld	(hl),0aah
     255/     1E1 : 23                  	inc	hl
     256/     1E2 : 7B                  	ld	a,e
     257/     1E3 : 7D                  	ld	a,l
     258/     1E4 : 95                  	sub	l
     259/     1E5 : 7A                  	ld	a,d
     260/     1E6 : 9C                  	sbc	a,h
     261/     1E7 : D2 DF 01            	jp	nc,$$loop	;HL <= DE ?
     262/     1EA : C3 00 00            	jp	0
     263/     1ED :                     
     264/     1ED :                     ;str2bin IN:HL(WORK POINTER) OUT:DE,HL(NEXT POINTER)
     265/     1ED :                     ;broken reg: A,B
     266/     1ED :                     	shared	str2bin	;IN=HL,OUT=DE,HL(NEXT) USE:A,B
     267/     1ED :                     str2bin:
     268/     1ED : 11 00 00            	ld	de,0
     269/     1F0 : 7E                  $$loop	ld	a,(hl)
     270/     1F1 : CD 16 02            	call	ishex	;check HEX-CHARACTOR
     271/     1F4 : D8                  	ret	c
     272/     1F5 : 06 04               	ld	b,4	;SHIFT LEFT DE-REGISTER
     273/     1F7 : 7B                  $$shift	ld	a,e
     274/     1F8 : A7                  	and	a
     275/     1F9 : 17                  	rla
     276/     1FA : 5F                  	ld	e,a
     277/     1FB : 7A                  	ld	a,d
     278/     1FC : 17                  	rla
     279/     1FD : 57                  	ld	d,a
     280/     1FE : 10 F7               	djnz	$$shift
     281/     200 : 7E                  	ld	a,(hl)
     282/     201 : CD 16 02            	call	ishex
     283/     204 : B3                  	or	e
     284/     205 : 5F                  	ld	e,a
     285/     206 : 23                  	inc	hl
     286/     207 : C3 F0 01            	jp	$$loop
     287/     20A :                     
     288/     20A :                     ;toupper IN:A OUT:A
     289/     20A :                     ;broken reg: B
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 6 - 6/3/2005 1:23:28


     290/     20A :                     	shared	toupper	;IN:A OUT:A USE:B
     291/     20A :                     toupper:
     292/     20A : 47                  	ld	b,a
     293/     20B : D6 61               	sub	a,'a'	;A < 'a'?
     294/     20D : 78                  	ld	a,b
     295/     20E : D8                  	ret	c
     296/     20F : D6 79               	sub	a,'z'-1	;A > 'z'?
     297/     211 : 78                  	ld	a,b
     298/     212 : D0                  	ret	nc
     299/     213 : D6 20               	sub	a,'a'-'A'
     300/     215 : C9                  	ret
     301/     216 :                     
     302/     216 :                     ;ishex IN:A OUT:['0'-'9''A'-'Z']=CY=0 else CY=1 A=Binary(00-0fh)
     303/     216 :                     ;broken reg: B
     304/     216 :                     	shared	ishex	;IN:A OUT:A USE:B ERR:CY=1
     305/     216 :                     ishex:
     306/     216 : D6 30               	sub	a,'0'
     307/     218 : D8                  	ret	c	;lower than '0'
     308/     219 : FE 0A               	cp	10
     309/     21B : D2 20 02            	jp	nc,$$next
     310/     21E : A7                  	and	a	;0-9,CY=0,RET
     311/     21F : C9                  	ret
     312/     220 : D6 07               $$next	sub	a,'A'-'9'-1
     313/     222 : FE 0A               	cp	10
     314/     224 : D8                  	ret	c	;lower than 'A'
     315/     225 : FE 10               	cp	a,16
     316/     227 : D2 2C 02            	jp	nc,$$over
     317/     22A : A7                  	and	a	;A-F,CY=0,RET
     318/     22B : C9                  	ret
     319/     22C : 37                  $$over	scf
     320/     22D : C9                  	ret
     321/     22E :                     
     322/     22E :                     ;skip white space
     323/     22E :                     ;IN=HL(work area)	OUT:HL(NEXT POINTER)
     324/     22E :                     ;broken reg: A
     325/     22E :                     	shared	skipspace	;IN:HL OUT:HL USE:A
     326/     22E :                     skipspace:
     327/     22E : 7E                  	ld	a,(hl)
     328/     22F : A7                  	and	a
     329/     230 : C8                  	ret	z
     330/     231 : FE 20               	cp	' '
     331/     233 : CA 3C 02            	jp	z,$$skip
     332/     236 : FE 09               	cp	'\t'
     333/     238 : CA 3C 02            	jp	z,$$skip
     334/     23B : C9                  	ret
     335/     23C : 23                  $$skip	inc	hl
     336/     23D : C3 2E 02            	jp	skipspace
     337/     240 :                     
     338/     240 :                     ;get console string zero terminated
     339/     240 :                     ;broken reg: A,B,C,D,E,H,L
     340/     240 :                     	shared	gets	;USE:A,B,C,D,E,H,L
     341/     240 :                     gets:
     342/     240 : 16 00               	ld	d,0		;D=len
     343/     242 : 21 B0 3F            	ld	hl,gets_buf
     344/     245 : 1E 01               $$init	ld	e,1		;E=ECHO FLAG
     345/     247 : D5                  $$keyin	push	de		;c=conin()
     346/     248 : CD 08 03            	call	conin
     347/     24B : D1                  	pop	de
     348/     24C : C2 47 02            	jp	nz,$$keyin
     349/     24F : 79                  	ld	a,c
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 7 - 6/3/2005 1:23:28


     350/     250 : FE 0D               	cp	a,'\r'		;CR?
     351/     252 : C2 61 02            	jp	nz,$$lf
     352/     255 : 36 00               	ld	(hl),0
     353/     257 : 1C                  	inc	e
     354/     258 : 1D                  	dec	e
     355/     259 : C8                  	ret	z		;echo mode is off?
     356/     25A : 21 63 01            	ld	hl,crlf
     357/     25D : CD 34 03            	call	puts
     358/     260 : C9                  	ret
     359/     261 : FE 0A               $$lf	cp	a,'\n'		;LF?
     360/     263 : C2 72 02            	jp	nz,$$colon
     361/     266 : 36 00               	ld	(hl),0
     362/     268 : 1C                  	inc	e
     363/     269 : 1D                  	dec	e
     364/     26A : C8                  	ret	z		;echo mode is off?
     365/     26B : 21 63 01            	ld	hl,crlf
     366/     26E : CD 34 03            	call	puts
     367/     271 : C9                  	ret
     368/     272 : FE 3A               $$colon	cp	a,':'		;':'?
     369/     274 : C2 81 02            	jp	nz,$$bs
     370/     277 : 14                  	inc	d
     371/     278 : 15                  	dec	d
     372/     279 : C2 81 02            	jp	nz,$$bs		;first ':'?
     373/     27C : 1E 00               	ld	e,0		;set echo mode is off
     374/     27E : C3 AB 02            	jp	$$proc
     375/     281 : FE 08               $$bs	cp	a,'\b'		;BS?
     376/     283 : C2 AB 02            	jp	nz,$$proc
     377/     286 : 7A                  	ld	a,d
     378/     287 : A7                  	and	a
     379/     288 : CA 47 02            	jp	z,$$keyin	;empty?
     380/     28B : 2B                  	dec	hl
     381/     28C : 15                  	dec	d
     382/     28D : 7B                  	ld	a,e
     383/     28E : 82                  	add	a,d
     384/     28F : CA 45 02            	jp	z,$$init	;echo mode is off and delete, set echo mode is on
     385/     292 : 1C                  	inc	e
     386/     293 : 1D                  	dec	e
     387/     294 : CA 47 02            	jp	z,$$keyin	;echo mode is off?
     388/     297 : D5                  	push	de
     389/     298 : 0E 08               	ld	c,'\b'		;RUB echo
     390/     29A : CD 6D 03            	call	conout
     391/     29D : 0E 20               	ld	c,' '
     392/     29F : CD 6D 03            	call	conout
     393/     2A2 : 0E 08               	ld	c,'\b'
     394/     2A4 : CD 6D 03            	call	conout
     395/     2A7 : D1                  	pop	de
     396/     2A8 : C3 47 02            	jp	$$keyin
     397/     2AB : 7A                  $$proc	ld	a,d
     398/     2AC : FE 2F               	cp	a,gets_buf_size-1
     399/     2AE : D2 47 02            	jp	nc,$$keyin	;buffer last one?
     400/     2B1 :                     ;	ld	(hl),0
     401/     2B1 :                     ;	ld	hl,crlf
     402/     2B1 :                     ;	call	puts
     403/     2B1 :                     ;	ret
     404/     2B1 : 79                  	ld	a,c
     405/     2B2 : CD 0A 02            	call	toupper
     406/     2B5 : 77                  	ld	(hl),a		;set buffer
     407/     2B6 : 23                  	inc	hl
     408/     2B7 : 14                  	inc	d
     409/     2B8 : 1C                  	inc	e
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 8 - 6/3/2005 1:23:28


     410/     2B9 : 1D                  	dec	e
     411/     2BA : CA 47 02            	jp	z,$$keyin	;echo mode is off?
     412/     2BD : D5                  	push	de		;echo
     413/     2BE : 4F                  	ld	c,a
     414/     2BF : CD 6D 03            	call	conout
     415/     2C2 : D1                  	pop	de
     416/     2C3 : C3 47 02            	jp	$$keyin
     417/     2C6 :                     
     418/     2C6 :                     ;hex dump INPUT HL(ADDRESS)
     419/     2C6 :                     ;broken reg: A,B,C,D HL=Next Address
     420/     2C6 :                     	shared	hexdump	;IN:HL OUT:HL USE:A,B,C,D
     421/     2C6 :                     hexdump:
     422/     2C6 : CD 3F 03            	call	hexword
     423/     2C9 : 0E 20               	ld	c,' '
     424/     2CB : CD 6D 03            	call	conout
     425/     2CE : E5                  	push	hl
     426/     2CF : 7E                  $$hex	ld	a,(hl)
     427/     2D0 : CD 48 03            	call	hexout
     428/     2D3 : 0E 20               	ld	c,' '
     429/     2D5 : CD 6D 03            	call	conout
     430/     2D8 : 23                  	inc	hl
     431/     2D9 : 7D                  	ld	a,l
     432/     2DA : E6 0F               	and	0fh
     433/     2DC : C2 CF 02            	jp	nz,$$hex
     434/     2DF : E1                  	pop	hl
     435/     2E0 : 0E 20               	ld	c,' '
     436/     2E2 : CD 6D 03            	call	conout
     437/     2E5 : 0E 2E               $$asc	ld	c,'.'	;non ascii code.
     438/     2E7 : 7E                  	ld	a,(hl)
     439/     2E8 : FE 20               	cp	a,' '
     440/     2EA : DA F3 02            	jp	c,$$dot	;non ascii
     441/     2ED : C6 00               	add	a,0
     442/     2EF : FA F3 02            	jp	m,$$dot	;non ascii
     443/     2F2 : 4F                  	ld	c,a
     444/     2F3 : CD 6D 03            $$dot	call	conout
     445/     2F6 : 23                  	inc	hl
     446/     2F7 : 7D                  	ld	a,l
     447/     2F8 : E6 0F               	and	0fh
     448/     2FA : C2 E5 02            	jp	nz,$$asc
     449/     2FD : 0E 0D               	ld	c,'\r'
     450/     2FF : CD 6D 03            	call	conout
     451/     302 : 0E 0A               	ld	c,'\n'
     452/     304 : CD 6D 03            	call	conout
     453/     307 : C9                  	ret
     454/     308 :                     
     455/     308 :                     
     456/     308 :                     ;Serial INPUT RET=C (ZF=0 non input)
     457/     308 :                     ;1/9600 = 104.2us = 260.5Clock(2.5MHz-Z80)
     458/     308 :                     ;Broken reg:A,B,D
     459/     308 :                     	shared	conin	;RET:C USE:A,B,D
     460/     308 :                     conin:
     461/     308 : DB FE               	in	a,(portc)
     462/     30A : E6 08               	and	1<<port_rxd
     463/     30C : C0                  	ret	nz
     464/     30D : 06 09               	ld	b,9		;delay half
     465/     30F : 10 FE               	djnz	$
     466/     311 : 16 08               	ld	d,8
     467/     313 : 06 0F               $$loop	ld	b,15
     468/     315 : 10 FE               	djnz	$
     469/     317 : DB FE               	in	a,(portc)	;(11)
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 9 - 6/3/2005 1:23:29


     470/     319 : E6 08               	and	1<<port_rxd	;(4)
     471/     31B : C2 22 03            	jp	nz,$$bit1	;(10)
     472/     31E : A7                  $$bit0	and	a		;(4)
     473/     31F : C3 26 03            	jp	$$skip		;(10)
     474/     322 : 37                  $$bit1	scf			;(4)
     475/     323 : C3 26 03            	jp	$$skip		;(10)
     476/     326 : CB 19               $$skip	rr	c		;(8)
     477/     328 : 15                  	dec	d		;(4)
     478/     329 : C2 13 03            	jp	nz,$$loop	;(10)
     479/     32C : C9                  	ret
     480/     32D :                     
     481/     32D :                     ;String output via instruction pointer at stack
     482/     32D :                     	shared	putsip	;USE:A,B,C,D,H,L
     483/     32D :                     putsip:
     484/     32D : E1                  	pop	hl
     485/     32E : CD 34 03            	call	puts
     486/     331 : 23                  	inc	hl
     487/     332 : E5                  	push	hl
     488/     333 : C9                  	ret
     489/     334 :                     
     490/     334 :                     ;String output
     491/     334 :                     ;IN (HL)=Msg Pointer terminated by ZERO
     492/     334 :                     ;Broken reg:A,BC,D,HL
     493/     334 :                     	shared	puts	;IN:HL USE:A,B,C,D,H,L
     494/     334 :                     puts:
     495/     334 : 7E                  	ld	a,(hl)
     496/     335 : B7                  	or	a
     497/     336 : C8                  	ret	z
     498/     337 : 4F                  	ld	c,a
     499/     338 : CD 6D 03            	call	conout
     500/     33B : 23                  	inc	hl
     501/     33C : C3 34 03            	jp	puts
     502/     33F :                     
     503/     33F :                     ;Word Hex Output
     504/     33F :                     ;in HL
     505/     33F :                     ;Broken reg: A,B,C,D
     506/     33F :                     	shared	hexword	;IN:HL USE:A,B,C,D
     507/     33F :                     hexword:
     508/     33F : 7C                  	ld	a,h
     509/     340 : CD 48 03            	call	hexout
     510/     343 : 7D                  	ld	a,l
     511/     344 : CD 48 03            	call	hexout
     512/     347 : C9                  	ret
     513/     348 :                     
     514/     348 :                     ;Byte Hex Output
     515/     348 :                     ;IN A
     516/     348 :                     ;Broken reg:A,B,C,D
     517/     348 :                     	shared	hexout	;IN:A USE:A,B,C,D
     518/     348 :                     hexout:
     519/     348 : F5                  	push	af
     520/     349 : 0F                  	rrca
     521/     34A : 0F                  	rrca
     522/     34B : 0F                  	rrca
     523/     34C : 0F                  	rrca
     524/     34D : E6 0F               	and	0fh
     525/     34F : FE 0A               	cp	10
     526/     351 : DA 56 03            	jp	c,$$skiph
     527/     354 : C6 07               	add	a,'A'-'9'-1
     528/     356 : C6 30               $$skiph	add	a,'0'
     529/     358 : 4F                  	ld	c,a
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 10 - 6/3/2005 1:23:29


     530/     359 : CD 6D 03            	call	conout
     531/     35C : F1                  	pop	af
     532/     35D : E6 0F               	and	0fh
     533/     35F : FE 0A               	cp	10
     534/     361 : DA 66 03            	jp	c,$$skipl
     535/     364 : C6 07               	add	a,'A'-'9'-1
     536/     366 : C6 30               $$skipl	add	a,'0'
     537/     368 : 4F                  	ld	c,a
     538/     369 : CD 6D 03            	call	conout
     539/     36C : C9                  	ret
     540/     36D :                     
     541/     36D :                     ;Serial OUTPUT IN=C
     542/     36D :                     ;1/9600 = 104.2us = 260.5Clock(2.5MHz-Z80)
     543/     36D :                     ;Broken reg:A,B,D
     544/     36D :                     	shared	conout	;IN:C USE:A,B,D
     545/     36D :                     conout:
     546/     36D : (MACRO)             	PORTC	port_txd,0	;start-bit
     546/     36D : 3E 0C                       ld      a,0|(PORT_TXD<<1)
     546/     36F : D3 FF                       out     (portcmd),a
     547/     371 : 06 10               	ld	b,16		;(7);dummy 7clock.
     548/     373 : 06 10               	ld	b,16		;(7)
     549/     375 : 10 FE               	djnz	$		;(13/8)
     550/     377 : 16 08               	ld	d,8		;(7)
     551/     379 : CB 09               $$loop	rrc	c		;(8)
     552/     37B : DA 85 03            	jp	c,$$bit1	;(10)
     553/     37E : (MACRO)             $$bit0	PORTC	port_txd,0	;(18)
     553/     37E : 3E 0C                       ld      a,0|(PORT_TXD<<1)
     553/     380 : D3 FF                       out     (portcmd),a
     554/     382 : C3 8C 03            	jp	$$skip		;(10)
     555/     385 : (MACRO)             $$bit1	PORTC	port_txd,1
     555/     385 : 3E 0D                       ld      a,1|(PORT_TXD<<1)
     555/     387 : D3 FF                       out     (portcmd),a
     556/     389 : C3 8C 03            	jp	$$skip
     557/     38C : 06 0F               $$skip	ld	b,15
     558/     38E : 10 FE               	djnz	$
     559/     390 : 00                  	nop			;dummy 4clock
     560/     391 : 15                  	dec	d		;(4)
     561/     392 : C2 79 03            	jp	nz,$$loop	;(10)
     562/     395 : (MACRO)             	PORTC	port_txd,1	;stop-bit
     562/     395 : 3E 0D                       ld      a,1|(PORT_TXD<<1)
     562/     397 : D3 FF                       out     (portcmd),a
     563/     399 : 06 27               	ld	b,39
     564/     39B : 10 FE               	djnz	$
     565/     39D : C9                  	ret
     566/     39E :                     	
     567/     39E :                     ;629ms delay
     568/     39E :                     	shared	delay	;USE:A,H,L
     569/     39E :                     delay:
     570/     39E : 21 FF FF            	ld	hl,0ffffh	;(10)
     571/     3A1 : 2B                  $$loop	dec	hl		;(6)
     572/     3A2 : 7C                  	ld	a,h		;(4)
     573/     3A3 : B5                  	or	l		;(4)
     574/     3A4 : C2 A1 03            	jp	nz,$$loop	;(10)
     575/     3A7 : C9                  	ret			;(10)
     576/     3A8 :                     
     577/     3A8 :                     ;-------------------------------RxD -> TxD(LED) LoopBack Test
     578/     3A8 :                     port_loopback_test:
     579/     3A8 : DB FE               	in	a,(portc)
     580/     3AA : E6 08               	and	1<<port_rxd
     581/     3AC : 20 0A               	jr	nz,$$nonzero
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 11 - 6/3/2005 1:23:29


     582/     3AE : 3E 0E               	ld	a,0|(port_led<<1)	;LED=OFF
     583/     3B0 : D3 FF               	out	(portcmd),a
     584/     3B2 : 3E 0C               	ld	a,0|(port_txd<<1)	;Txd=0
     585/     3B4 : D3 FF               	out	(portcmd),a
     586/     3B6 : 18 F0               	jr	port_loopback_test
     587/     3B8 :                     $$nonzero
     588/     3B8 : 3E 0F               	ld	a,1|(port_led<<1)	;LED=ON
     589/     3BA : D3 FF               	out	(portcmd),a
     590/     3BC : 3E 0D               	ld	a,1|(port_txd<<1)	;Txd=1
     591/     3BE : D3 FF               	out	(portcmd),a
     592/     3C0 : 18 E6               	jr	port_loopback_test
     593/     3C2 :                     
     594/     3C2 :                     	align	16
     595/     3D0 :                     	shared	copyright
     596/     3D0 :                     copyright:
     597/     3D0 : 24 49 64 3A 20 6D   	db	"$Id: monitor.asm,v 1.21 2005/05/31 12:17:15 runner Exp $"
                    6F 6E 69 74 6F 72 
                    2E 61 73 6D 2C 76 
                    20 31 2E 32 31 20 
                    32 30 30 35 2F 30 
                    35 2F 33 31 20 31 
                    32 3A 31 37 3A 31 
                    35 20 72 75 6E 6E 
                    65 72 20 45 78 70 
                    20 24 
     598/     408 : 0D 0A 00            	db	"\r\n",0
     599/     40B :                     
     600/     40B :                     	end
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 12 - 6/3/2005 1:23:29


  symbol table (* = unused):
  ------------------------

*ARCHITECTURE : i386-unknown-freebsd - |
 ASC46 :                        2E5 C | *BIGENDIAN :                      0 - |
*BIT047 :                       31E C | *BIT052 :                       37E C |
 BIT147 :                       322 C |  BIT152 :                       385 C |
*BRANCHEXT :                      0 - |  BS45 :                         281 C |
*CASESENSITIVE :                  0 - |  CMDTBL :                       166 C |
 COLON45 :                      272 C |  CONIN :                        308 C |
 CONIN_CONOUT_LOOPBACK_TEST :   126 C |  CONOUT :                       36D C |
*CONSTPI :        3.141592653589793 - |  COPYRIGHT :                    3D0 C |
 CRLF :                         163 C |  C_DUMP :                       173 C |
 C_FULL :                       1D9 C |  C_GO :                         18B C |
 C_WRITE :                      19B C | *DATE :                    6/3/2005 - |
 DEBUGGER :                      3B C |  DELAY :                        39E C |
 DOT46 :                        2F3 C |  ERROR31 :                      118 C |
 ERROR39 :                      1D2 C | *FALSE :                          0 - |
 FIND31 :                        F9 C | *FULLPMMU :                       1 - |
 GETS :                         240 C |  GETS_BUF :                    3FB0 C |
 GETS_BUF_SIZE :                 30 - |  GO31 :                         108 C |
*HAS64 :                          1 - | *HASDSP :                         0 - |
*HASFPU :                         0 - | *HASPMMU :                        0 - |
 HEX46 :                        2CF C |  HEXDUMP :                      2C6 C |
 HEXOUT :                       348 C |  HEXWORD :                      33F C |
*INEXTMODE :                      0 - |  INIT :                          CA C |
 INIT45 :                       245 C | *INLWORDMODE :                    0 - |
*INMAXMODE :                      0 - | *INSRCMODE :                      0 - |
*INSUPMODE :                      0 - | *INT :                            3 C |
 ISHEX :                        216 C |  KEYIN45 :                      247 C |
 LF45 :                         261 C | *LISTON :                         1 - |
 LOOP28 :                        AA C |  LOOP37 :                       17E C |
 LOOP39 :                       1A0 C |  LOOP40 :                       1DF C |
 LOOP41 :                       1F0 C |  LOOP47 :                       313 C |
 LOOP52 :                       379 C |  LOOP53 :                       3A1 C |
*MACEXP :                         1 - | *MAIN :                          D5 C |
*MOMCPU :                        80 - | *MOMCPUNAME :                   Z80 - |
 MONITOR :                       EA C |  MONITOR_AREA :                  50 - |
 MONITOR_STACK :               4000 - |  MSG_CLEAR :                    13E C |
 MSG_HELLO :                    146 C | *NESTMAX :                      100 - |
 NEXT43 :                       220 C |  NONZERO54 :                    3B8 C |
 OVER43 :                       22C C | *PACKING :                        0 - |
*PADDING :                        1 - |  PORTA :                         FC - |
 PORTB :                         FD - |  PORTC :                         FE - |
 PORTCMD :                       FF - |  PORT_LED :                       7 - |
 PORT_LOOPBACK_TEST :           3A8 C |  PORT_RXD :                       3 - |
 PORT_TXD :                       6 - |  PROC45 :                       2AB C |
 PUTS :                         334 C |  PUTSIP :                       32D C |
 RAMEND :                      3FFF - |  RAMSIZE :                      400 - |
 RAMTOP :                      3C00 - | *RELAXED :                        0 - |
 RET38 :                        194 C |  ROMTOP :                         0 - |
 SAVEAF :                      3FEA C |  SAVEAF_STACK :                3FEC - |
 SAVEBC :                      3FE8 C |  SAVEDE :                      3FE6 C |
 SAVEHL :                      3FE4 C |  SAVEPC :                      3FE0 C |
 SAVESP :                      3FE2 C |  SHIFT41 :                      1F7 C |
 SKIP39 :                       1D4 C |  SKIP44 :                       23C C |
 SKIP47 :                       326 C |  SKIP52 :                       38C C |
 SKIPH51 :                      356 C |  SKIPL51 :                      366 C |
 SKIPSPACE :                    22E C |  STR2BIN :                      1ED C |
*TIME :                     1:23:28 - |  TOUPPER :                      20A C |
 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 13 - 6/3/2005 1:23:29


*TRUE :                           1 - | *VERSION :                     142F - |

    115 symbols
     32 unused symbols

 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 14 - 6/3/2005 1:23:29


  defined macros:
  ---------------

PORTC                                 |

      1 macro

 AS V1.42 Beta [Bld 32] - source file monitor.asm - page 15 - 6/3/2005 1:23:29


  codepages:
  ----------

STANDARD (0 changed characters)


0.34 seconds assembly time

    601 lines source file
    615 lines incl. macro expansions
      2 passes
      0 errors
      0 warnings
