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
 |