rcall printstr
.db 13,13,"CPM on an AVR, v"
db_version VMAJOR, VMINOR
+ printstring " r" SVN_REVSTR
.if MEMTEST
printnewline
;re-read RAM
ldiw x,0
- clr temp3
+ clr temp3 ;Error counter
ramtestr:
mem_read
+
+; ori temp,0x04 ;simulate error
+; andi temp,0xF7
+
mov temp2,xh
eor temp2,xl
cp temp,temp2
breq ramtestrok
- push temp
- cpi temp3,0 ;if first error
- brne ramtest2
- inc temp3
- ldi temp,10 ;newline
- rcall uartPutc
-ramtest2:
- ldi temp,13 ;return
- rcall uartPutc
- pop temp
- rcall printhex
- ldi temp,'<'
- rcall uartPutc
+ tst temp3
+ brne ramtestr1
+ printnewline
+ printstring "Addr xx yy "
+ramtestr1:
+ printnewline
+ mov temp4,temp
+ movw temp,x
+ rcall printhexw
+ rcall printspace
mov temp,xh
eor temp,xl
+ mov temp2,temp
rcall printhex
- ldi temp,'@'
- rcall uartPutc
- movw temp,x
- rcall printhexw
+ rcall printspace
+ mov temp,temp4
+ rcall printhex
+ rcall printspace
+ mov temp,temp2
+ eor temp,temp4
+ and temp,temp2
+ rcall printxbits
+ rcall printspace
+ mov temp,temp2
+ eor temp,temp4
+ com temp2
+ and temp,temp2
+ rcall printxbits
+
+ inc temp3
+ cpi temp3,16 ;
+ brsh ramtestrex
ramtestrok:
adiw xl,1
brcc ramtestr
+ramtestrex:
+ tst temp3 ;any errors?
+ breq ramtestend
+
+ printstring " System halted!"
+halted_loop:
+ rjmp halted_loop ;keep AVR in an endless loop
+
+ramtestend:
.endif
printnewline
printstring "Partinit done."
- ldi temp,0
- rcall dsk_img_type ;parameter for boot disk image.
-
lcall dsk_inval_hostbuf ;init (de)blocking buffer
; Read first sector of first CP/M partition (ipl)
ljmp z80_init
+printspace:
+ push temp
+ ldi temp,' '
+ rcall uartputc
+ pop temp
+ ret
+
+printxbits:
+ push temp2
+ push temp3
+ mov temp2,temp
+ ldi temp3,8
+prntxb0:
+ ldi temp,'-'
+ lsl temp2
+ brcc prntxb1
+ ldi temp,'X'
+prntxb1:
+ rcall uartPutc
+ dec temp3
+ brne prntxb0
+ pop temp3
+ pop temp2
+ ret
+
+
+
+