From 899547a8dd41867828a3fc088e179c0fa49c94c4 Mon Sep 17 00:00:00 2001 From: Leo C Date: Fri, 5 Aug 2016 14:50:38 +0200 Subject: [PATCH] CPU test. Move relocator to expr buffer. --- ddt180.z80 | 171 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 101 insertions(+), 70 deletions(-) diff --git a/ddt180.z80 b/ddt180.z80 index 56204fb..623c553 100644 --- a/ddt180.z80 +++ b/ddt180.z80 @@ -14,74 +14,15 @@ TPA equ 0100h cseg .phase TPA - LD SP,ldr_end+(stack-ddtz_base) - LD DE,ldr_end+(expr_buf-ddtz_base) - LD C,BDOS_PSTR - CALL BDOS - - LD HL,ldr_end+ddtz_size ;start of reloc bitmap - ld bc,0108h ;init bit counter - - EXX - LD HL,(BDOS+1) - LD (ldr_end+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 - - 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) + jp start ldr_end: ldr_size equ $ - TPA +current_phase defl $ .dephase +current_cseg defl $ + ;------------------------------------------------------------------------------- ; DDT/Z core ; @@ -134,7 +75,19 @@ sub_0004h: nop ;0004 00 . ret ;0005 c9 . - ds STACK_SIZE +current_cseg defl $ - current_cseg + .phase current_phase + current_cseg +signon: + db 'DDT/180',TAB + db '[8101] 002',CR,LF,'$' +msgz80: + db 'Z80 or better required!',cr,lf,'$' + +current_phase defl $ + .dephase +current_cseg defl $ + ds STACK_SIZE - (current_phase - signon) + stack: reg.l2: db 000h ;0046 00 . @@ -1388,10 +1341,10 @@ b_06e9_start: DC 'HL ' DC 'SP' DC 'PC' - DC 'A''' - DC 'BC''' - DC 'DE''' - DC 'HL''' + DC 'a''' + DC 'bc''' + DC 'de''' + DC 'hl''' DC 'IX' DC 'IY' DC 'I' @@ -1932,8 +1885,86 @@ expr_p2: defw expr_buf ;0b1a 1c 0b . . expr_buf: - db 'DDT/180',TAB - db '[8101] 001',CR,LF,'$' +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+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 + + 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: -- 2.39.2