49 lines
		
	
	
	
		
			646 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			646 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.define putchar,getchar
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
! output routine in monitor for the nascom
 | 
						|
CRT	= 0x013B
 | 
						|
! output a charcter
 | 
						|
! entry: ascii character in a
 | 
						|
.sect .text
 | 
						|
putchar:
 | 
						|
	push	hl
 | 
						|
	push	bc
 | 
						|
	ld	hl,tab
 | 
						|
	ld	b,5
 | 
						|
1:	cp	(hl)
 | 
						|
	jr	z,fetch
 | 
						|
	inc	hl
 | 
						|
	inc	hl
 | 
						|
	djnz	1b
 | 
						|
2:	call	CRT
 | 
						|
	pop	bc
 | 
						|
	pop	hl
 | 
						|
	ret
 | 
						|
fetch:	inc	hl
 | 
						|
	ld	a,(hl)
 | 
						|
	jr	2b
 | 
						|
! conversion table for nascom characters
 | 
						|
tab:	.data1	0x0D,0x00
 | 
						|
	.data1	0x1B,0x1E
 | 
						|
	.data1	0x08,0x1D
 | 
						|
	.data1	0x0A,0x1F
 | 
						|
	.data1	0x7F,0x00
 | 
						|
 | 
						|
KBD	= 0x69
 | 
						|
 get character from keyboard
 | 
						|
getchar:
 | 
						|
	call	KBD
 | 
						|
	jr	nc,getchar
 | 
						|
	cp	0x1F
 | 
						|
	jr	z,CR
 | 
						|
	cp	0x1D
 | 
						|
	jr	z,BS
 | 
						|
	ret
 | 
						|
CR:	ld	a,0xA
 | 
						|
	ret
 | 
						|
BS:	ld	a,0x8
 | 
						|
	ret
 |