X-Git-Url: http://cloudbase.mooo.com/gitweb/avrcpm.git/blobdiff_plain/a03be84ac1bfb078accc066b41192a3058c10683..HEAD:/avr/Z80int-jmp.asm diff --git a/avr/Z80int-jmp.asm b/avr/Z80int-jmp.asm index 442650b..40d5e3d 100644 --- a/avr/Z80int-jmp.asm +++ b/avr/Z80int-jmp.asm @@ -1,9 +1,9 @@ ; 8080/Z80 Interpreter. ; This is part of the Z80-CP/M emulator written by Sprite_tm. -; +; ; Copyright (C) 2010 Sprite_tm -; Copyright (C) 2010 Leo C. +; Copyright (C) 2010-2013 Leo C. ; Copyright (C) 2010 Horst S. ; This file is part of avrcpm. @@ -21,13 +21,13 @@ ; You should have received a copy of the GNU General Public License ; along with avrcpm. If not, see . ; -; $Id$ +; $Id: Z80int-jmp.asm 93 2014-01-03 16:32:32Z rapid $ ; #if EM_Z80 .dseg -z_regs: +z_regs: z_c2: .equ oz_c2 = z_c2 - z_regs .byte 1 @@ -86,7 +86,7 @@ z_istat: #endif .cseg - + ;Init z80 z80_init: ldiw z_pc,IPLADDR @@ -121,16 +121,16 @@ noprintpc: ;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 @@ -155,7 +155,7 @@ int_nobreak: ;-------------------------------------------------- -; init opcode table +; init opcode table ; ; opctable opc_name, pos ; @@ -191,7 +191,7 @@ int_nobreak: .set opc_tablen_1 = 256 ;.message "add tab_1" .endif - .else + .else .if (opc_tablow_1 + opc_tablen_1) == opcjmp_table_pos_ .set opc_tablen_1 = opc_tablen_1 + 256 ;.message "tab_1++" @@ -206,7 +206,7 @@ int_nobreak: .endm ;-------------------------------------------------- -; +; ; checkspace frompos, size ; .macro checkspace @@ -236,7 +236,7 @@ int_nobreak: ; ; instr fetch, op, store ; -.macro instr +.macro instr .set fetch_ = (do_@0 != do_fetch_nop) ; must call or jump to fetch action .set op_ = (do_@1 != do_op_nop) ; must call or jump to op action @@ -297,7 +297,7 @@ int_nobreak: .org l_@0_@1_@2 .if fetch_ ; must fetch - .if op_ || store_ + .if op_ || store_ .if do_@0 == 0 m_do_@0 .else @@ -335,7 +335,7 @@ int_nobreak: .else ljmp do_@2 ; store is allways last .endif - .endif + .endif .endif .endif @@ -420,9 +420,13 @@ do_fetch_rst: ; mov opl,z_l ; ret -do_fetch_af: +.macro m_do_fetch_af movw opl,z_flags - ret +.endm + +.equ do_fetch_af = 0 +; movw opl,z_flags +; ret .macro m_do_fetch_bc movw opl,z_c @@ -437,9 +441,8 @@ do_fetch_af: .endm .equ do_fetch_de = 0 -; ldd opl,y+oz_e -; ldd oph,y+oz_d - ret +; movw opl,z_e +; ret .macro m_do_fetch_hl movw opl,z_l @@ -458,20 +461,18 @@ do_fetch_af: ; 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: @@ -498,12 +499,12 @@ do_fetch_dir16: store_ops: .equ do_store_nop = do_x_nop - + do_store_a: mov z_a,opl ret -;.macro m_do_store_b +;.macro m_do_store_b ; std y+oz_b,opl ;.endm ;.equ do_store_b = 0 @@ -550,20 +551,18 @@ do_store_hl: 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: @@ -583,11 +582,9 @@ do_store_pc: do_store_pcrel: ;add displacement to PC #if EM_Z80 - clr oph - tst opl ;sign extend - brpl stpcr1 - com oph -stpcr1: + mov oph,opl ;sign extend + lsl oph + sbc oph,oph add z_pcl,opl adc z_pch,oph ret @@ -851,8 +848,8 @@ do_store_am: .macro ldpmx ldi zh,high(@1*2) ; table must be page aligned - mov zl,@2 - lpm @0,z + mov zl,@2 + lpm @0,z .endm .macro do_z80_flags_V @@ -891,7 +888,7 @@ do_store_am: #endif .endm - + .macro do_z80_flags_copy_HC #if EM_Z80 bmov z_flags, ZFL_H, z_flags, ZFL_C @@ -979,7 +976,7 @@ do_op_outa: ; out (opl),a ; do_op_ina: ; in a,(opl) .if PORT_DEBUG - push opl + push opl cp opl,_0 ; don't debug port 0 (con stat) breq dbg_op_ina_1 printnewline @@ -1051,7 +1048,7 @@ do_op_inc: bst z_flags,ZFL_C ; save C flag subi opl,-1 in temp,sreg - ldpmx z_flags,flagmap_tab,temp + ldpmx z_flags,flagmap_tab,temp bld z_flags,ZFL_C ret #endif @@ -1126,7 +1123,7 @@ do_op_deca: ;|INC xx |------|Increment |xx=xx+1 | ;|INC ss |------|Increment |ss=ss+1 | ; -; +; do_op_inc16: subi opl,low(-1) sbci oph,high(-1) @@ -1153,7 +1150,7 @@ do_op_incBC: ;|DEC xx |------|Decrement |xx=xx-1 | ;|DEC ss |------|Decrement |ss=ss-1 | ; -; +; do_op_dec16: subi opl, 1 sbci oph, 0 @@ -1183,7 +1180,7 @@ do_op_decBC: ; ; do_op_rlca: - ;Rotate Left Cyclical. All bits move 1 to the + ;Rotate Left Cyclical. All bits move 1 to the ;left, the msb becomes c and lsb. do_z80_flags_op_rotate lsl z_a @@ -1202,8 +1199,8 @@ do_op_rlc_noc: ;|RRCA |---- *|Rotate Right Circular|A=->A | ; ; -do_op_rrca: - ;Rotate Right Cyclical. All bits move 1 to the +do_op_rrca: + ;Rotate Right Cyclical. All bits move 1 to the ;right, the lsb becomes c and msb. do_z80_flags_op_rotate lsr z_a @@ -1221,9 +1218,9 @@ do_op_rrc_noc: ;|----------|SZHP C|---------- 8080 ----------------------------| ;|RRA |---- *|Rotate Right Acc. |A=->{CY,A} | ; -; -do_op_rra: - ;Rotate Right. All bits move 1 to the right, the lsb +; +do_op_rra: + ;Rotate Right. All bits move 1 to the right, the lsb ;becomes c, c becomes msb. clc ; get z80 carry to avr carry sbrc z_flags,ZFL_C @@ -1240,9 +1237,9 @@ do_op_rra: ;|----------|SZHP C|---------- 8080 ----------------------------| ;|RLA |---- *|Rotate Left Acc. |A={CY,A}<- | ; -; +; do_op_rla: - ;Rotate Left. All bits move 1 to the left, the msb + ;Rotate Left. All bits move 1 to the left, the msb ;becomes c, c becomes lsb. clc sbrc z_flags,ZFL_C @@ -1425,7 +1422,7 @@ do_op_sthl: ;store hl to mem loc in opl:h ;---------------------------------------------------------------- ;|LD dst,src|------|Load |dst=src | ; -; +; do_op_rmem16: movw xl,opl mem_read_d opl @@ -1480,13 +1477,13 @@ do_op_rmem8: ; ; --------------------- ; | N | H | low |H' | -; | | |nibble | | +; | | |nibble | | ; |---+---+-------+---| -; | 0 | * | 0-9 | 0 | -; | 0 | * | a-f | 1 | -; | 1 | 0 | * | 0 | -; | 1 | 1 | 6-f | 0 | -; | 1 | 1 | 0-5 | 1 | +; | 0 | * | 0-9 | 0 | +; | 0 | * | a-f | 1 | +; | 1 | 0 | * | 0 | +; | 1 | 1 | 6-f | 0 | +; | 1 | 1 | 0-5 | 1 | ; --------------------- ; ; Ohter flags: @@ -1500,7 +1497,7 @@ do_op_rmem8: #if 0 #if EM_Z80 - sbrc z_flags,ZFL_N ;if add-op + sbrc z_flags,ZFL_N ;if add-op rjmp op_da_sub ;then #endif @@ -1515,8 +1512,8 @@ op_da_add: brlo op_da_a10 ; | op_da_a01: ; then ldi oph,0x06 ; add 6 to lower nibble - add opl,oph ; - brhc op_da_02 ; if + add opl,oph ; + brhc op_da_02 ; if ori temp2,(1<= 0xA0) - brlo op_da_a13 ; + brlo op_da_a13 ; op_da_a12: ; ldi oph,0x60 ; add 6 to lower nibble add opl,oph ; @@ -1547,8 +1544,8 @@ op_da_sub: ;Else (sub-op) brlo op_da_s10 ; | op_da_s01: ; then ldi oph,0x06 ; add 6 to lower nibble - sub opl,oph ; - brhc PC+2 ; if + sub opl,oph ; + brhc PC+2 ; if ori temp2,(1<= 0xA0) - brlo op_da_s13 ; + brlo op_da_s13 ; op_da_s12: ; ldi oph,0x60 ; add 6 to lower nibble sub opl,oph ; @@ -1574,7 +1571,7 @@ do_op_DAA: ldi oph,0 ;oph: what to add #if EM_Z80 - sbrc z_flags,ZFL_N ;if add-op + sbrc z_flags,ZFL_N ;if add-op rjmp op_da_sub ;then #endif @@ -1591,7 +1588,7 @@ op_da_add: rjmp op_da_a02 ; if (C flag ... cpi opl,0x90 ; |... or upper nibble >= 0x90) brlo op_da_a03 ; | -op_da_a02: +op_da_a02: ori oph,0x60 ; add 0x60 ori temp2,(1<= 0xA0) - brlo op_da_a13 ; -op_da_a12: + brlo op_da_a13 ; +op_da_a12: ori oph,0x60 ; add 0x60 ori temp2,(1<= 0x90) brlo op_da_s03 ; | -op_da_s02: +op_da_s02: ori oph,0x60 ; sub 0x60 ori temp2,(1<= 0xA0) - brlo op_da_s13 ; -op_da_s12: + brlo op_da_s13 ; +op_da_s12: ori oph,0x60 ; sub 0x60 ori temp2,(1<HL | ;|EX DE,HL |------|Exchange |DE<->HL | ;-----------------------------Z80-------------------------------- -; +; do_op_exhl: movw temp,z_l movw z_l,opl @@ -1812,7 +1809,7 @@ do_op_ifnz: sbrs z_flags, ZFL_Z ret pop temp ; nix tun - pop temp ; direkt zurueck zu main + pop temp ; direkt zurueck zu main ret ;---------------------------------------------------------------- @@ -1827,7 +1824,7 @@ do_op_ifz: sbrc z_flags, ZFL_Z ret pop temp ; nix tun - pop temp ; direkt zurueck zu main + pop temp ; direkt zurueck zu main ret ;---------------------------------------------------------------- @@ -1842,7 +1839,7 @@ do_op_ifnc: sbrs z_flags, ZFL_C ret pop temp ; nix tun - pop temp ; direkt zuruech zu main + pop temp ; direkt zuruech zu main ret ;---------------------------------------------------------------- @@ -1857,7 +1854,7 @@ do_op_ifc: sbrc z_flags, ZFL_C ret pop temp ; nix tun - pop temp ; direkt zuruech zu main + pop temp ; direkt zuruech zu main ret ;---------------------------------------------------------------- @@ -1872,7 +1869,7 @@ do_op_ifpo: sbrs z_flags, ZFL_P ret pop temp ; nix tun - pop temp ; direkt zuruech zu main + pop temp ; direkt zuruech zu main ret ;---------------------------------------------------------------- @@ -1887,7 +1884,7 @@ do_op_ifpe: sbrc z_flags, ZFL_P ret pop temp ; nix tun - pop temp ; direkt zuruech zu main + pop temp ; direkt zuruech zu main ret ;---------------------------------------------------------------- @@ -1902,7 +1899,7 @@ do_op_ifp: ;sign positive, aka s=0 sbrs z_flags, ZFL_S ret pop temp ; nix tun - pop temp ; direkt zuruech zu main + pop temp ; direkt zuruech zu main ret ;---------------------------------------------------------------- @@ -1917,7 +1914,7 @@ do_op_ifm: ;sign negative, aka s=1 sbrc z_flags, ZFL_S ret pop temp ; nix tun - pop temp ; direkt zuruech zu main + pop temp ; direkt zuruech zu main ret ;---------------------------------------------------------------- @@ -1953,7 +1950,7 @@ do_op_djnz: dec z_b brne opdjnze pop temp ; nix tun - pop temp ; direkt zurueck zu main + pop temp ; direkt zurueck zu main opdjnze: ret @@ -2031,7 +2028,6 @@ do_op_prefixED: 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 @@ -2069,10 +2065,9 @@ opprxcb_fd: opprxcb_1: mem_read_s z_pc ;get displacement adiw z_pcl,1 ;++z_pc - clr temp2 ;sign extend - tst temp - brpl PC+2 - com temp2 + mov temp2,temp ;sign extend + lsl temp2 + sbc temp2,temp2 add xl,temp ;add displacement adc xh,temp2 mem_read_d opl @@ -2101,10 +2096,10 @@ do_op_prefixCB: ; Lookup table for Z80 opcodes. Translates the first byte of the instruction word into three ; operations: fetch, do something, store. -; The table is made of 256 words. +; The table is made of 256 words. opctable opcjmp, PC ;+3*256 - + instr fetch_nop, op_nop, store_nop ;00 ;NOP instr fetch_DIR16, op_nop, store_BC ;01 nn nn ;LD BC,nn instr fetch_nop, op_nop, store_MBC ;02 ;LD (BC),A @@ -2420,11 +2415,9 @@ fetchmxx_fd: fetchmxx1: mem_read_ds opl, z_pc ;get displacement adiw z_pcl,1 - clr oph ;sign extend - tst opl - brpl fetchmxx2 - com oph -fetchmxx2: + mov oph,opl ;sign extend + lsl oph + sbc oph,oph add xl,opl ;add displacement adc xh,oph mem_read_d opl ;get operand @@ -2476,11 +2469,9 @@ storemxx_fd: storemxx1: mem_read_s z_pc ;get displacement adiw z_pcl,1 - clr temp2 ;sign extend - tst temp - brpl storemxx2 - com temp2 -storemxx2: + mov temp2,temp ;sign extend + lsl temp2 + sbc temp2,temp2 add xl,temp ;add displacement adc xh,temp2 mem_write_s opl ;store operand @@ -2507,11 +2498,9 @@ storemxx21: mem_read_s z_pc ;get displacement adiw z_pcl,1 adiw z_pcl,1 - clr temp2 ;sign extend - tst temp - brpl storemxx22 - com temp2 -storemxx22: + mov temp2,temp ;sign extend + lsl temp2 + sbc temp2,temp2 add xl,temp ;add displacement adc xh,temp2 mem_write_s opl ;store operand @@ -2560,7 +2549,7 @@ do_op_stxx: ;store xx to mem loc in opl:h ;---------------------------------------------------------------- ;|EX [SP],IX|------|Exchange |[SP]<->IX | ;|EX [SP],IY|------|Exchange |[SP]<->IY | -; +; checkspace PC, 13 do_op_EXxx: @@ -2891,25 +2880,25 @@ instr fetch_nop, op_noni, store_nop ;FF ; checkspace PC, 9 do_op_rlc: - ;Rotate Left Cyclical. All bits move 1 to the + ;Rotate Left Cyclical. All bits move 1 to the ;left, the msb becomes c and lsb. clr temp lsl opl adc temp,_0 or opl,temp - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N or z_flags,temp ret checkspace PC, 9 -do_op_rrc: - ;Rotate Right Cyclical. All bits move 1 to the +do_op_rrc: + ;Rotate Right Cyclical. All bits move 1 to the ;right, the lsb becomes c and msb. lsr opl brcc PC+2 ori opl,0x80 - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N bmov z_flags,ZFL_C, opl,7 ret @@ -2917,14 +2906,14 @@ do_op_rrc: checkspace PC, 11 do_op_rl: - ;Rotate Left. All bits move 1 to the left, the msb + ;Rotate Left. All bits move 1 to the left, the msb ;becomes c, c becomes lsb. clc sbrc z_flags,ZFL_C sec rol opl in temp,sreg - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N bmov z_flags,ZFL_C, temp,AVR_C ret @@ -2932,13 +2921,13 @@ do_op_rl: checkspace PC, 10 do_op_rr: - ;Rotate Right. All bits move 1 to the right, the lsb + ;Rotate Right. All bits move 1 to the right, the lsb ;becomes c, c becomes msb. ror opl in temp,sreg ;CY bmov opl,7, z_flags,ZFL_C ;old CY --> Bit 7 - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N bmov z_flags,ZFL_C, temp,AVR_C ; ret @@ -2947,7 +2936,7 @@ do_op_rr: do_op_sla: lsl opl in temp,sreg - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N bmov z_flags,ZFL_C, temp,AVR_C ; ret @@ -2957,7 +2946,7 @@ do_op_sra: lsr opl in temp,sreg bmov opl,7, opl,6 ;old CY --> Bit 7 - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N bmov z_flags,ZFL_C, temp,AVR_C ; ret @@ -2967,7 +2956,7 @@ do_op_sll: sec rol opl in temp,sreg - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N bmov z_flags,ZFL_C, temp,AVR_C ; ret @@ -2976,7 +2965,7 @@ do_op_sll: do_op_srl: lsr opl in temp,sreg - ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N bmov z_flags,ZFL_C, temp,AVR_C ; ret @@ -3143,7 +3132,7 @@ opbite: ; ret -;.macro m_do_store_b +;.macro m_do_store_b ; std y+oz_b,opl ;.endm ;.equ do_store_b = 0 @@ -3184,8 +3173,8 @@ do_store2_a: 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 @@ -3261,7 +3250,7 @@ instr fetch_E, op_BIT0, store_nop ;43 ;BIT 0,E instr fetch_H, op_BIT0, store_nop ;44 ;BIT 0,H instr fetch_L, op_BIT0, store_nop ;45 ;BIT 0,L instr fetch2_mhl, op_BIT0, store_nop ;46 ;BIT 0,(HL) -instr fetch_A, op_BIT0, store_nop ;47 ;BIT 0,A +instr fetch_A, op_BIT0, store_nop ;47 ;BIT 0,A instr fetch_B, op_BIT1, store_nop ;48 ;BIT 1,B instr fetch_C, op_BIT1, store_nop ;49 ;BIT 1,C instr fetch_D, op_BIT1, store_nop ;4A ;BIT 1,D @@ -3456,7 +3445,7 @@ instr fetch_nop, op_RLC, store2_D ;02 ;RLC (Ix+d),D instr fetch_nop, op_RLC, store2_E ;03 ;RLC (Ix+d),E instr fetch_nop, op_RLC, store2_H ;04 ;RLC (Ix+d),H instr fetch_nop, op_RLC, store2_L ;05 ;RLC (Ix+d),L -instr fetch_nop, op_RLC, store_nop ;06 ;RLC (Ix+d) +instr fetch_nop, op_RLC, store_nop ;06 ;RLC (Ix+d) instr fetch_nop, op_RLC, store2_A ;07 ;RLC (Ix+d),A instr fetch_nop, op_RRC, store2_B ;08 ;RRC (Ix+d),B instr fetch_nop, op_RRC, store2_C ;09 ;RRC (Ix+d),C @@ -3464,7 +3453,7 @@ instr fetch_nop, op_RRC, store2_D ;0A ;RRC (Ix+d),D instr fetch_nop, op_RRC, store2_E ;0B ;RRC (Ix+d),E instr fetch_nop, op_RRC, store2_H ;0C ;RRC (Ix+d),H instr fetch_nop, op_RRC, store2_L ;0D ;RRC (Ix+d),L -instr fetch_nop, op_RRC, store_nop ;0E ;RRC (Ix+d) +instr fetch_nop, op_RRC, store_nop ;0E ;RRC (Ix+d) instr fetch_nop, op_RRC, store2_A ;0F ;RRC (Ix+d),A instr fetch_nop, op_RL, store2_B ;10 ;RL (Ix+d),B instr fetch_nop, op_RL, store2_C ;11 ;RL (Ix+d),C @@ -3472,7 +3461,7 @@ instr fetch_nop, op_RL, store2_D ;12 ;RL (Ix+d),D instr fetch_nop, op_RL, store2_E ;13 ;RL (Ix+d),E instr fetch_nop, op_RL, store2_H ;14 ;RL (Ix+d),H instr fetch_nop, op_RL, store2_L ;15 ;RL (Ix+d),L -instr fetch_nop, op_RL, store_nop ;16 ;RL (Ix+d) +instr fetch_nop, op_RL, store_nop ;16 ;RL (Ix+d) instr fetch_nop, op_RL, store2_A ;17 ;RL (Ix+d),A instr fetch_nop, op_RR, store2_B ;18 ;RR (Ix+d),B instr fetch_nop, op_RR, store2_C ;19 ;RR (Ix+d),C @@ -3480,7 +3469,7 @@ instr fetch_nop, op_RR, store2_D ;1A ;RR (Ix+d),D instr fetch_nop, op_RR, store2_E ;1B ;RR (Ix+d),E instr fetch_nop, op_RR, store2_H ;1C ;RR (Ix+d),H instr fetch_nop, op_RR, store2_L ;1D ;RR (Ix+d),L -instr fetch_nop, op_RR, store_nop ;1E ;RR (Ix+d) +instr fetch_nop, op_RR, store_nop ;1E ;RR (Ix+d) instr fetch_nop, op_RR, store2_A ;1F ;RR (Ix+d),A instr fetch_nop, op_SLA, store2_B ;20 ;SLA (Ix+d),B instr fetch_nop, op_SLA, store2_C ;21 ;SLA (Ix+d),C @@ -3488,7 +3477,7 @@ instr fetch_nop, op_SLA, store2_D ;22 ;SLA (Ix+d),D instr fetch_nop, op_SLA, store2_E ;23 ;SLA (Ix+d),E instr fetch_nop, op_SLA, store2_H ;24 ;SLA (Ix+d),H instr fetch_nop, op_SLA, store2_L ;25 ;SLA (Ix+d),L -instr fetch_nop, op_SLA, store_nop ;26 ;SLA (Ix+d) +instr fetch_nop, op_SLA, store_nop ;26 ;SLA (Ix+d) instr fetch_nop, op_SLA, store2_A ;27 ;SLA (Ix+d),A instr fetch_nop, op_SRA, store2_B ;28 ;SRA (Ix+d),B instr fetch_nop, op_SRA, store2_C ;29 ;SRA (Ix+d),C @@ -3496,7 +3485,7 @@ instr fetch_nop, op_SRA, store2_D ;2A ;SRA (Ix+d),D instr fetch_nop, op_SRA, store2_E ;2B ;SRA (Ix+d),E instr fetch_nop, op_SRA, store2_H ;2C ;SRA (Ix+d),H instr fetch_nop, op_SRA, store2_L ;2D ;SRA (Ix+d),L -instr fetch_nop, op_SRA, store_nop ;2E ;SRA (Ix+d) +instr fetch_nop, op_SRA, store_nop ;2E ;SRA (Ix+d) instr fetch_nop, op_SRA, store2_A ;2F ;SRA (Ix+d),A instr fetch_nop, op_SLL, store2_B ;30 ;SLL (Ix+d),B instr fetch_nop, op_SLL, store2_C ;31 ;SLL (Ix+d),C @@ -3504,7 +3493,7 @@ instr fetch_nop, op_SLL, store2_D ;32 ;SLL (Ix+d),D instr fetch_nop, op_SLL, store2_E ;33 ;SLL (Ix+d),E instr fetch_nop, op_SLL, store2_H ;34 ;SLL (Ix+d),H instr fetch_nop, op_SLL, store2_L ;35 ;SLL (Ix+d),L -instr fetch_nop, op_SLL, store_nop ;36 ;SLL (Ix+d) +instr fetch_nop, op_SLL, store_nop ;36 ;SLL (Ix+d) instr fetch_nop, op_SLL, store2_A ;37 ;SLL (Ix+d),A instr fetch_nop, op_SRL, store2_B ;38 ;SRL (Ix+d),B instr fetch_nop, op_SRL, store2_C ;39 ;SRL (Ix+d),C @@ -3512,7 +3501,7 @@ instr fetch_nop, op_SRL, store2_D ;3A ;SRL (Ix+d),D instr fetch_nop, op_SRL, store2_E ;3B ;SRL (Ix+d),E instr fetch_nop, op_SRL, store2_H ;3C ;SRL (Ix+d),H instr fetch_nop, op_SRL, store2_L ;3D ;SRL (Ix+d),L -instr fetch_nop, op_SRL, store_nop ;3E ;SRL (Ix+d) +instr fetch_nop, op_SRL, store_nop ;3E ;SRL (Ix+d) instr fetch_nop, op_SRL, store2_A ;3F ;SRL (Ix+d),A instr fetch_nop, op_BIT0, store_nop ;40 ;BIT 0,(Ix+d),B instr fetch_nop, op_BIT0, store_nop ;41 ;BIT 0,(Ix+d),C @@ -3521,7 +3510,7 @@ instr fetch_nop, op_BIT0, store_nop ;43 ;BIT 0,(Ix+d),E instr fetch_nop, op_BIT0, store_nop ;44 ;BIT 0,(Ix+d),H instr fetch_nop, op_BIT0, store_nop ;45 ;BIT 0,(Ix+d),L instr fetch_nop, op_BIT0, store_nop ;46 ;BIT 0,(Ix+d) -instr fetch_nop, op_BIT0, store_nop ;47 ;BIT 0,(Ix+d),A +instr fetch_nop, op_BIT0, store_nop ;47 ;BIT 0,(Ix+d),A instr fetch_nop, op_BIT1, store_nop ;48 ;BIT 1,(Ix+d),B instr fetch_nop, op_BIT1, store_nop ;49 ;BIT 1,(Ix+d),C instr fetch_nop, op_BIT1, store_nop ;4A ;BIT 1,(Ix+d),D @@ -3707,9 +3696,12 @@ instr fetch_nop, op_SET7, store2_L ;FD ;SET 7,(Ix+d),L instr fetch_nop, op_SET7, store_nop ;FE ;SET 7,(Ix+d) instr fetch_nop, op_SET7, store2_A ;FF ;SET 7,(Ix+d),A -do_fetch_0: +.macro m_do_fetch_0 ldi opl,0 - ret +.endm +.equ do_fetch_0 = 0 +; ldi opl,0 +; ret ;---------------------------------------------------------------- ;|Mnemonic |SZHPNC|Description |Notes | @@ -3719,7 +3711,7 @@ do_fetch_0: do_op_in: ; in opl,(opl) .if PORT_DEBUG - push opl + push opl cp opl,_0 ; don't debug port 0 (con stat) breq dbg_op_in_1 printnewline @@ -3818,7 +3810,7 @@ do_op_ADCHL: lsr z_flags ; ZFL_C --> Carry ldi z_flags,0 ; clear N adc z_l,opl - in temp,sreg ; save lower Z + in temp,sreg ; save lower Z adc z_h,oph in temp2,sreg @@ -3924,7 +3916,7 @@ do_op_ldar: ldd z_a,y+oz_r op_ldar1: bst z_flags,ZFL_C ;save C - ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N bld z_flags,ZFL_C ; ldd temp,y+oz_istat bmov z_flags,ZFL_P, temp,IFF2 @@ -3957,7 +3949,7 @@ do_op_rld: or temp,oph mov z_a,temp bst z_flags,ZFL_C ;save C - ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N bld z_flags,ZFL_C ; ret @@ -3974,7 +3966,7 @@ do_op_rrd: or temp,oph mov z_a,temp bst z_flags,ZFL_C ;save C - ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N + ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N bld z_flags,ZFL_C ; ret @@ -3991,12 +3983,12 @@ do_op_rrd: 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<