;TODO: hier kommt die Interruptbehandlung rein
- cpse intstat,_0 ;Fast path if no trace, int, break, ...
+ cpse intstat,_0 ; 2 Fast path if no trace, int, break, ...
rjmp int_test
int_instr:
- mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
- adiw z_pcl,1 ;++z_pc
- ldi zh,high(opcjmp) ;
- icall
- rjmp main ;
-
+ mem_read_ds zl,z_pc ;11 zl = memReadByte(z_pc)
+ adiw z_pcl,1 ; 2 ++z_pc
+ ldi zh,high(opcjmp) ; 1
+ icall ; 3 (+4 ret)
+ rjmp main ; 2
+ ; / 25 cycles minimum (NOP)
int_test:
sbrs intstat,i_trace
rjmp int_notrace
; ret
do_fetch_mbc:
- movw x,z_c
- mem_read_d z_a
+; movw x,z_c
+ mem_read_ds z_a, z_bc
ret
do_fetch_mde:
- movw x,z_e
-; ldd xh,y+oz_d
-; ldd xl,y+oz_e
- mem_read_d z_a
+; movw x,z_e
+ mem_read_ds z_a, z_de
ret
do_fetch_mhl:
- movw x,z_l
- mem_read_d opl
+; movw x,z_l
+ mem_read_ds opl, z_hl
ret
do_fetch_msp:
ret
do_store_mbc:
- movw x,z_c
- mem_write_s z_a
+; movw x,z_c
+ mem_write_ds z_bc, z_a
ret
do_store_mde:
- movw x,z_e
-; ldd xh,y+oz_d
-; ldd xl,y+oz_e
- mem_write_s z_a
+; movw x,z_e
+ mem_write_ds z_de, z_a
ret
do_store_mhl:
- movw x,z_l
- mem_write_s opl
+; movw x,z_l
+ mem_write_ds z_hl, opl
ret
do_store_msp:
mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
adiw z_pcl,1 ;++z_pc
ldi zh,high(EDjmp) ;
-;;; ldi zh,high(0) ;
ijmp
checkspace PC, 4
do_fetch2_mhl:
- movw x,z_l
- mem_read_d opl
+; movw x,z_l
+ mem_read_ds opl, z_hl
ret
opctable CBjmp, PC ;+256
checkspace PC, 13
op_LDxx_common:
- movw x,z_l ;HL
-; mem_read_ds temp, z
- lcall dram_read ; temp = (HL)
- movw x,z_e ;DE
-; mem_write_ds x, temp
- lcall dram_write ; (DE) = temp
+; movw x,z_l ;
+; lcall dram_read ; temp = (HL)
+ mem_read_ds temp, z_hl
+; movw x,z_e ;
+; lcall dram_write ; (DE) = temp
+ mem_write_ds z_de, temp
cbr z_flags,(1<<ZFL_H) | (1<<ZFL_P) | (1<<ZFL_N)
do_op_LDDR:
rcall do_op_LDD
+#if 1
+ sbrc z_flags,ZFL_P
+ rjmp do_op_LDDR
+ ret
+#else
sbrs z_flags,ZFL_P
ret
sbiw z_pcl,2
ret
+#endif
;----------------------------------------------------------------
;|Mnemonic |SZHPNC|Description |Notes |
* (http://www.compuphase.com/svnrev.htm).
* You should not modify it manually, as it may be re-generated.
*
- * $Revision: 213$
- * $Date: 2013-04-19$
+ * $Revision: 214$
+ * $Date: 2013-04-20$
*/
#ifndef SVN_REV_H
#define SVN_REV_H
-#define SVN_REV 213
-#define SVN_REVSTR "213"
-#define SVN_REVDATE "2013-04-19"
-#define SVN_REVSTAMP 20130419L
+#define SVN_REV 214
+#define SVN_REVSTR "214"
+#define SVN_REVDATE "2013-04-20"
+#define SVN_REVSTAMP 20130420L
#define SVN_REVMODIFIED 0
#endif /* SVN_REV_H */
#endif
#define SSER_BIT_TC (F_CPU+BAUD/2) / BAUD
+#define SSER_CHAR_TC (10 * 1000 / BAUD) + 2
#define RXBUFMASK RXBUFSIZE-1
#define TXBUFMASK TXBUFSIZE-1
.byte 1
srx_char_to:
.byte 1
+srx_char_time:
+ .byte 1
srx_dr:
.byte 1
srx_lastedge:
ori temp,(1<<ICIE1) ;Enable input capture int. (UART RX)
outm8 TIMSK1,temp ;
+ ldi temp,SSER_CHAR_TC ;Character TO
+ sts srx_char_time,temp
+
ret
;------------------------------------------------------------------
sts srx_dr,_0
ldi temp,1
sts srx_state,temp
- ldi temp,2
+ lds temp,srx_char_time
sts srx_char_to,temp
sbis P_RXD-2,RXD ;RXD still low?
rjmp srxi_end
srxi_complete1:
ldi temp2,1 ;We are in start bit now.
sts srx_state,temp2
- ldi temp2,2
+ lds temp2,srx_char_time
sts srx_char_to,temp2
rjmp srxi_complete