X-Git-Url: http://cloudbase.mooo.com/gitweb/ddt180.git/blobdiff_plain/201101b35cfea603248f7e89c571b4653b8c663e..efc2486ea0340c32c372f5565a48eea068687cac:/ddt180.z80 diff --git a/ddt180.z80 b/ddt180.z80 index 28b0199..81b68b4 100644 --- a/ddt180.z80 +++ b/ddt180.z80 @@ -6,22 +6,140 @@ ; - Use Digital Research Link-80 to generate a .PRL file (op switch). ; - Cut the .PRL header (first 256 byte) end rename the result to DDTZ.COM. +TPA equ 0100h + + cseg +ldr_start: + LD SP,stack + +; LD DE,signon +; LD C,BDOS_PSTR +; CALL BDOS + + ld hl,(1) ;wboot addr + ld de,?const + ld b,3 +vini_l: + inc hl + inc hl + inc hl + ex de,hl + inc hl + ld (hl),e + inc hl + ld (hl),d + inc hl + ex de,hl + djnz vini_l + +signon: + call pstr_inl + db 'DDTZ/180' + db ' - Version ' + maclib version.inc + defvers + dc CR,LF + +; ld sp,stack +; exx +; ld de,ddtz_base +; call cp_hl_de +; jr c,l0079h +; ex de,hl +;l0079h: +; ld de,TPA +;l007ch: +; dec hl +; ld (hl),000h +; ld a,h +; sub d +; ld b,a +; ld a,l +; sub e +; or b +; jr nz,l007ch + + ld a,i + ld (reg.i),a + ld a,0f3h + jp po,l0093h + ld a,0fbh +l0093h: + ld (reg.iff),a + call di_or_ei + ld hl,ddtz_base + ld l,000h + ld (reg_sp),hl + + jp mainloop + ;------------------------------------------------------------------------------- ; Relocation loader ; -TPA equ 0100h - cseg - .phase TPA + LD HL,ddtz_end ;start of reloc bitmap + ld bc,0108h ;init bit counter - jp start - ds 3 + EXX + LD HL,(BDOS+1) + LD (ddtz_base+1),HL + LD BC,ddtz_size-1 + LD D,B + LD E,0FFH + INC DE ;size rounded up to next page boundary + INC BC ;ddtz_size + OR A + SBC HL,DE ;BDOS - size + LD (BDOS+1),HL ;-> new BDOS entry -ldr_end: -ldr_size equ $ - TPA -current_phase defl $ + push hl + PUSH BC + ld de,ldr_end + sbc hl,de + EX DE,HL ;-> DE + LD HL,ldr_size + add hl,bc + ld b,h + ld c,l + LD HL,TPA +reloc_lp: + EXX + djnz reloc_nl + ld b,c ;reload bit counter + LD e,(HL) ;get next 8 relocation bits + INC HL +reloc_nl: + sla e + EXX + JR NC,reloc_next + DEC HL + LD A,(HL) + ADD A,E + LD (HL),A + INC HL + LD A,(HL) + ADC A,D + LD (HL),A +reloc_next: + inc hl + dec bc + ld a,b + or c + jr nz,reloc_lp + dec hl - .dephase -current_cseg defl $ + POP BC + pop de + EX DE,HL + ADD HL,BC + EX DE,HL + DEC DE + LDDR + LD HL,conbuf+2-ddtz_base + ADD HL,DE + JP (HL) + +ldr_end: +ldr_size equ $ - ldr_start ;------------------------------------------------------------------------------- ; DDT/Z core @@ -49,38 +167,20 @@ BDOS_PSTR equ 9 ;Print String STACK_SIZE equ 80 ;ddtz internal stack CONBUF_SIZE equ 80 ;Size of console input buffer -EXPR_BUF_SIZE equ 128 ;expressen buffer for conditional breakpoints BP_CNT equ 12 ;Number of breakpoints BP_SIZE equ 4 ;Size of a breakpoint record ;------------------------------------------------------------------------------- ddtz_base: - jp ddtz_bdos + jp 0 l0003h: rst 30h di_or_ei: nop ret -ddtz_bdos: - jp 0 - -current_cseg defl $ - current_cseg - .phase current_phase + current_cseg -signon: - db 'DDTZ/180' - db ' - Version ' - maclib version.inc - defvers - db CR,LF,'$' -msgz80: - db 'Z80 or better required!',cr,lf,'$' - -current_phase defl $ - .dephase -current_cseg defl $ - ds STACK_SIZE - (current_phase - signon) + ds STACK_SIZE stack: reg.l2: db 000h @@ -116,54 +216,6 @@ cmd_rpt:dw mainloop conbuf: db CONBUF_SIZE - ld sp,stack - exx - ld de,ddtz_base - call cp_hl_de - jr c,l0079h - ex de,hl -l0079h: - ld de,TPA -l007ch: - dec hl - ld (hl),000h - ld a,h - sub d - ld b,a - ld a,l - sub e - or b - jr nz,l007ch - ld a,i - ld (reg.i),a - ld a,0f3h - jp po,l0093h - ld a,0fbh -l0093h: - ld (reg.iff),a - call di_or_ei - ld hl,ddtz_base - ld l,000h - ld (reg_sp),hl - - ld hl,(1) ;wboot addr - ld de,?const - ld b,6 -vini_l: - inc hl - inc hl - inc hl - ex de,hl - inc hl - ld (hl),e - inc hl - ld (hl),d - inc hl - ex de,hl - djnz vini_l - - jr mainloop - ds CONBUF_SIZE + 3 - ($ - conbuf) ;------------------------------------------------------------------------------- @@ -171,9 +223,6 @@ vini_l: ?const: jp 0 ; return console input status ?conin: jp 0 ; return console input character ?cono: jp 0 ; send console output character -?list: jp 0 ; send list output character -?auxo: jp 0 ; send auxiliary output character -?auxi: jp 0 ; return auxiliary input character CMDTAB: dw ERROR ;cmd_@ ;examine/substitute the displacement register @ @@ -2493,13 +2542,22 @@ disas_nopfx: disas_pfx.ED: inc iy + ld hl,l228bh + call lookup_op_arg + ld b,3 + ret c + ld hl,b_1c40_start + call lookup_op_arg + ld b,4 + ret c + ld hl,b_1bc9_start ;1 byte opcode, no arguments call lookup_op - ld b,2 - ret c + jr c,da_ed1 + ld hl,b_1bf4_start call lookup_op_arg - jr nc,da_ed1 + ret nc ld a,e cp a_noarg @@ -2515,16 +2573,8 @@ disas_pfx.ED: da_ed0: scf - ld b,2 - ret da_ed1: - ld hl,l228bh - call lookup_op_arg - ld b,3 - ret c - ld hl,b_1c40_start - call lookup_op_arg - ld b,4 + ld b,2 ret ;------------------------------------------------------------------------------- @@ -2621,6 +2671,16 @@ l1a0ah: ;------------------------------------------------------------------------------- +test_DDFD: + ld a,(hl) + and a + ret z + inc hl + cp (iy+000h) + jr nz,test_DDFD + scf + ret + lookup_op: ld a,(hl) inc hl @@ -2635,38 +2695,15 @@ l1a7fh: ld e,a_noarg jr get_mnemonic - -test_DDFD: - ld a,(hl) - and a - ret z - inc hl - cp (iy+000h) - jr nz,test_DDFD - scf - ret - lookup_op_arg: - ld a,(iy+000h) - and (hl) - inc hl - cp (hl) - inc hl - jr z,l1aa8h - inc hl - inc hl - ld a,(hl) - and a - jr nz,lookup_op_arg - ret - -l1aa8h: - ld b,(hl) - inc b + call lookup_branch_op + ret nc + ld a,e + ld e,d + cp a,0ffh ret z ;carry clear - dec b - inc hl - ld e,(hl) + ld b,a + get_mnemonic: ld hl,t_MNEMONICS bit 7,b @@ -2686,18 +2723,17 @@ get_m1: ret lookup_branch_op ;TODO - ld a,(iy+000h) - and (hl) + ld a,(hl) + and a + ret z inc hl + and (iy+000h) cp (hl) inc hl jr z,l1aa8_br inc hl inc hl - ld a,(hl) - and a - jr nz,lookup_branch_op - ret + jr lookup_branch_op l1aa8_br: ld e,(hl) @@ -3008,8 +3044,8 @@ a_rr equ $-t_argf db fi_ry,',' ;ld r[y],r[z] a_r equ $-t_argf db fi_rz,0 ;op r[z] -a_ar equ $-t_argf - db 'A,',fi_rz,0 ;op A,r[z] +;a_ar equ $-t_argf +; db 'A,',fi_rz,0 ;op A,r[z] a_cc equ $-t_argf db fi_ccy,0 ;op cc[y] a_rst equ $-t_argf @@ -3282,25 +3318,13 @@ pstr_inl: opc macro x i_&x equ opc_index -o_&x equ $-opc_tabstart +;o_&x equ $-opc_tabstart dc '&x' opc_index defl opc_index+1 endm -opc1 macro x,y - -i_&x&y equ opc_index -o_&x&y equ $-opc_tabstart - db '&x' -i_&y equ opc_index+1 -o_&y equ $-opc_tabstart - dc '&y' -opc_index defl opc_index+2 - endm - - t_MNEMONICS: -opc_tabstart defl $ +;opc_tabstart defl $ opc_index defl 0 ; 1-byte other opc NOP @@ -3363,8 +3387,7 @@ opc_index defl 0 opc RRD opc RLD -;Block instructions -t_mn_bli: +; Block instructions opc LDI opc CPI opc INI @@ -3382,7 +3405,7 @@ t_mn_bli: opc INDR opc OTDR -;Z180 +; Z180 opc IN0 opc OUT0 opc TST @@ -3488,7 +3511,7 @@ t_op_branch: dw l20ach db 0ffh,0edh ;Prefix ED dw l20b8h -t_op_branch0: + db 0ffh,0cdh ;call mn dw l2080h db 0ffh,0c3h ;jp mn @@ -3671,91 +3694,6 @@ bp_tab: endm endm -expr_buf: -current_cseg defl $ - current_cseg - .phase current_phase + current_cseg - -start: - LD SP,ldr_end+(stack-ddtz_base) - LD DE,signon ;ldr_end+(expr_buf-ddtz_base) - LD C,BDOS_PSTR - CALL BDOS - - xor a - dec a - jp po,reloc - ld de,msgz80 - LD C,BDOS_PSTR - CALL BDOS - jp 0 - -reloc: - LD HL,ldr_end+ddtz_size ;start of reloc bitmap - ld bc,0108h ;init bit counter - - EXX - LD HL,(BDOS+1) - LD (ldr_end+(ddtz_bdos+1-ddtz_base)),HL - LD BC,ddtz_size-1 - LD D,B - LD E,0FFH - INC DE ;size rounded up to next page boundary - INC BC ;ddtz_size - OR A - SBC HL,DE ;BDOS - size - LD (BDOS+1),HL ;-> new BDOS entry - - push hl - PUSH BC - ld de,ldr_end - sbc hl,de - EX DE,HL ;-> DE - LD HL,ldr_size - add hl,bc - ld b,h - ld c,l - LD HL,TPA -reloc_lp: - EXX - djnz reloc_nl - ld b,c ;reload bit counter - LD e,(HL) ;get next 8 relocation bits - INC HL -reloc_nl: - sla e - EXX - JR NC,reloc_next - DEC HL - LD A,(HL) - ADD A,E - LD (HL),A - INC HL - LD A,(HL) - ADC A,D - LD (HL),A -reloc_next: - cpi - jp pe,reloc_lp - dec hl - - POP BC - pop de - EX DE,HL - ADD HL,BC - EX DE,HL - DEC DE - LDDR - LD HL,conbuf+2-ddtz_base - ADD HL,DE - JP (HL) - -current_phase defl $ - .dephase -current_cseg defl $ - - ds EXPR_BUF_SIZE - ($ - expr_buf) -expr_bufe: - ;------------------------------------------------------------------------------- last_S: @@ -3783,7 +3721,7 @@ last_L: dw TPA pbl_loop_adr: - dw 0 + dw 0addeh ddtz_size equ $-ddtz_base ddtz_end: