summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo C2016-08-05 14:50:38 +0200
committerLeo C2016-08-05 14:50:38 +0200
commit899547a8dd41867828a3fc088e179c0fa49c94c4 (patch)
tree0115cf84ccf74c47772efc85ead278e7be57989b
parent288de889d6e4d565f670deccd8777f13d69220b5 (diff)
downloadddt180-899547a8dd41867828a3fc088e179c0fa49c94c4.zip
CPU test. Move relocator to expr buffer.
-rw-r--r--ddt180.z80171
1 files 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: