]> cloudbase.mooo.com Git - avrcpm.git/commitdiff
* avr/Z80int-jmp.asm
authorLeo <erbl259-lmu@yahoo.de>
Wed, 21 Mar 2012 19:23:51 +0000 (19:23 +0000)
committerLeo <erbl259-lmu@yahoo.de>
Wed, 21 Mar 2012 19:23:51 +0000 (19:23 +0000)
  - INI, INIR, IND, INDR, OUTI, OTIR, OUTD, OUTDR added.

git-svn-id: svn://cu.loc/avr-cpm/avrcpm/trunk@185 57430480-672e-4586-8877-bcf8adbbf3b7

avr/Z80int-jmp.asm

index b73de8f06b7c7efd9ec57c886ad98e8a5ec4c6dc..6641a924dd2669f98748e0eef78b9e64ad0127e5 100644 (file)
@@ -1451,7 +1451,7 @@ do_op_rmem8:
 
 #if 1
 
-do_op_da:
+do_op_daa:
 
 #if EM_Z80
        sbrc    z_flags,ZFL_N                   ;if add-op      
@@ -1491,7 +1491,7 @@ op_da_a13:                                        ;
 #if EM_Z80
 
 op_da_sub:                                     ;else (sub-op)
-       rcall do_op_inv                         ;  TODO: ! Z80 DAA whith N flag set.
+       rjmp    op_da_add                       ;  TODO: ! Z80 DAA whith N flag set.
        ret                                     ;endif
 #endif
 
@@ -1981,7 +1981,7 @@ instr     fetch_HL,       op_INC16,       store_HL        ;23             ;INC HL
 instr  fetch_H,        op_INC,         store_H         ;24             ;INC H
 instr  fetch_H,        op_DEC,         store_H         ;25             ;DEC H
 instr  fetch_DIR8,     op_nop,         store_H         ;26 nn          ;LD H,n
-instr  fetch_A,        op_DA         store_A         ;27             ;DAA
+instr  fetch_A,        op_DAA,         store_A         ;27             ;DAA
 instr  fetch_DIR8,     op_IFZ,         store_pcrel     ;28 oo          ;JR Z,o
 instr  fetch_HL,       op_ADDHL,       store_nop       ;29             ;ADD HL,HL
 instr  fetch_DIR16,    op_RMEM16,      store_HL        ;2A nn nn       ;LD HL,(nn)
@@ -2795,6 +2795,112 @@ do_op_CPDR:
        sbiw    z_pcl,2
        ret
 
+;----------------------------------------------------------------
+;|Mnemonic  |SZHPNC|Description          |Notes                 |
+;----------------------------------------------------------------
+;|INI       |?*??1-|Input and Increment  |[HL]=[C],HL=HL+1,B=B-1|
+;|IND       |?*??1-|Input and Decrement  |[HL]=[C],HL=HL-1,B=B-1|
+;|INIR      |?1??1-|Input, Inc., Repeat  |INI till B=0          |
+;|INDR      |?1??1-|Input, Dec., Repeat  |IND till B=0          |
+
+op_INxx_common:
+       cbr     z_flags,(1<<ZFL_Z)
+       sbr     z_flags,(1<<ZFL_N)
+       ldd     temp2,y+oz_c            ;C
+       lcall   portRead
+       ldd     xh,y+oz_h               ;H
+       ldd     xl,y+oz_l               ;L
+       lcall   dram_write
+       ldd     temp,y+oz_b             ;B
+       dec     temp
+       std     y+oz_b,oph              ;B
+       brne    PC+2
+        sbr    z_flags,(1<<ZFL_Z)
+       ret
+
+do_op_INI:
+       rcall   op_INxx_common
+       adiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       ret
+
+do_op_IND:
+       rcall   op_INxx_common
+       sbiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       ret
+
+do_op_INIR:
+       rcall   do_op_INI
+       sbrc    z_flags,ZFL_Z
+        ret
+       sbiw    z_pcl,2
+       ret
+
+do_op_INDR:
+       rcall   do_op_IND
+       sbrs    z_flags,ZFL_P
+        ret
+       sbiw    z_pcl,2
+       ret
+
+;----------------------------------------------------------------
+;|Mnemonic  |SZHPNC|Description          |Notes                 |
+;----------------------------------------------------------------
+;|OUTI      |?*??1-|Output and Increment |[C]=[HL],HL=HL+1,B=B-1|
+;|OUTD      |?*??1-|Output and Decrement |[C]=[HL],HL=HL-1,B=B-1|
+;|OTIR      |?1??1-|Output, Inc., Repeat |OUTI till B=0         |
+;|OTDR      |?1??1-|Output, Dec., Repeat |OUTD till B=0         |
+
+op_OUTxx_common:
+       cbr     z_flags,(1<<ZFL_Z)
+       sbr     z_flags,(1<<ZFL_N)
+       lcall   dram_read               ;temp = (z)
+       ldd     temp2,y+oz_c            ;C
+       lcall   portWrite
+       ldd     temp,y+oz_b             ;B
+       dec     temp
+       std     y+oz_b,temp             ;B
+       brne    PC+2
+        sbr    z_flags,(1<<ZFL_Z)
+       ret
+
+do_op_OUTI:
+       ldd     xh,y+oz_h               ;H
+       ldd     xl,y+oz_l               ;L
+       adiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       sbiw    x,1
+       rcall   op_OUTxx_common
+       ret
+
+do_op_OUTD:
+       ldd     xh,y+oz_h               ;H
+       ldd     xl,y+oz_l               ;L
+       sbiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       adiw    x,1
+       rcall   op_OUTxx_common
+       ret
+
+do_op_OTIR:
+       rcall   do_op_OUTI
+       sbrc    z_flags,ZFL_Z
+        ret
+       sbiw    z_pcl,2
+       ret
+
+do_op_OTDR:
+       rcall   do_op_OUTD
+       sbrs    z_flags,ZFL_P
+        ret
+       sbiw    z_pcl,2
+       ret
+
 
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
@@ -3202,32 +3308,32 @@ instr   fetch_nop,      op_nop,         store_nop       ;9E             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;9F             ;NOP
 instr  fetch_nop,      op_LDI,         store_nop       ;A0             ;LDI
 instr  fetch_nop,      op_CPI,         store_nop       ;A1             ;CPI
-instr  fetch_nop,      op_nop,         store_nop       ;A2             ;   TODO:
-instr  fetch_nop,      op_nop,         store_nop       ;A3             ;
+instr  fetch_nop,      op_INI,         store_nop       ;A2             ;INI
+instr  fetch_nop,      op_OUTI,        store_nop       ;A3             ;OUTI
 instr  fetch_nop,      op_nop,         store_nop       ;A4             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;A5             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;A6             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;A7             ;NOP
 instr  fetch_nop,      op_LDD,         store_nop       ;A8             ;LDD
 instr  fetch_nop,      op_CPD,         store_nop       ;A9             ;CPD
-instr  fetch_nop,      op_nop,         store_nop       ;AA             ;    TODO:
-instr  fetch_nop,      op_nop,         store_nop       ;AB             ;
+instr  fetch_nop,      op_IND,         store_nop       ;AA             ;IND
+instr  fetch_nop,      op_OUTD,        store_nop       ;AB             ;OUTD
 instr  fetch_nop,      op_nop,         store_nop       ;AC             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;AD             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;AE             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;AF             ;NOP
 instr  fetch_nop,      op_LDIR,        store_nop       ;B0             ;LDIR
 instr  fetch_nop,      op_CPIR,        store_nop       ;B1             ;CPIR
-instr  fetch_nop,      op_nop,         store_nop       ;B2             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B3             ;   TODO:
+instr  fetch_nop,      op_INIR,        store_nop       ;B2             ;INIR
+instr  fetch_nop,      op_OTIR,        store_nop       ;B3             ;OTIR
 instr  fetch_nop,      op_nop,         store_nop       ;B4             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;B5             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;B6             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;B7             ;NOP
 instr  fetch_nop,      op_LDDR,        store_nop       ;B8             ;LDDR
 instr  fetch_nop,      op_CPDR,        store_nop       ;B9             ;CPDR
-instr  fetch_nop,      op_nop,         store_nop       ;BA             ;
-instr  fetch_nop,      op_nop,         store_nop       ;BB             ;   TODO:
+instr  fetch_nop,      op_INDR,        store_nop       ;BA             ;INDR
+instr  fetch_nop,      op_OTDR,        store_nop       ;BB             ;OTDR
 instr  fetch_nop,      op_nop,         store_nop       ;BC             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;BD             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;BE             ;NOP