cseg\r
.phase TPA\r
\r
- LD SP,ldr_end+(stack-ddtz_base)\r
- LD DE,ldr_end+(expr_buf-ddtz_base)\r
- LD C,BDOS_PSTR\r
- CALL BDOS\r
-\r
- LD HL,ldr_end+ddtz_size ;start of reloc bitmap\r
- ld bc,0108h ;init bit counter\r
-\r
- EXX\r
- LD HL,(BDOS+1)\r
- LD (ldr_end+1),HL\r
- LD BC,ddtz_size-1\r
- LD D,B\r
- LD E,0FFH\r
- INC DE ;size rounded up to next page boundary\r
- INC BC ;ddtz_size\r
- OR A\r
- SBC HL,DE ;BDOS - size\r
- LD (BDOS+1),HL ;-> new BDOS entry\r
-\r
- push hl\r
- PUSH BC\r
- ld de,ldr_end\r
- sbc hl,de\r
- EX DE,HL ;-> DE\r
- LD HL,ldr_size\r
- add hl,bc\r
- ld b,h\r
- ld c,l\r
- LD HL,TPA\r
-reloc_lp:\r
- EXX\r
- djnz reloc_nl\r
- ld b,c ;reload bit counter\r
- LD e,(HL) ;get next 8 relocation bits\r
- INC HL\r
-reloc_nl:\r
- sla e\r
- EXX\r
- JR NC,reloc_next\r
- DEC HL\r
- LD A,(HL)\r
- ADD A,E\r
- LD (HL),A\r
- INC HL\r
- LD A,(HL)\r
- ADC A,D\r
- LD (HL),A\r
-reloc_next:\r
- cpi\r
- jp pe,reloc_lp\r
- dec hl\r
-\r
- POP BC\r
- pop de\r
- EX DE,HL\r
- ADD HL,BC\r
- EX DE,HL\r
- DEC DE\r
- LDDR\r
- LD HL,conbuf+2-ddtz_base\r
- ADD HL,DE\r
- JP (HL)\r
+ jp start\r
\r
ldr_end:\r
ldr_size equ $ - TPA\r
+current_phase defl $\r
\r
.dephase\r
+current_cseg defl $\r
+\r
;-------------------------------------------------------------------------------\r
; DDT/Z core\r
;\r
nop ;0004 00 .\r
ret ;0005 c9 .\r
\r
- ds STACK_SIZE\r
+current_cseg defl $ - current_cseg\r
+ .phase current_phase + current_cseg\r
+signon:\r
+ db 'DDT/180',TAB\r
+ db '[8101] 002',CR,LF,'$'\r
+msgz80:\r
+ db 'Z80 or better required!',cr,lf,'$'\r
+\r
+current_phase defl $\r
+ .dephase\r
+current_cseg defl $\r
+ ds STACK_SIZE - (current_phase - signon)\r
+\r
\r
stack:\r
reg.l2: db 000h ;0046 00 .\r
DC 'HL '\r
DC 'SP'\r
DC 'PC'\r
- DC 'A'''\r
- DC 'BC'''\r
- DC 'DE'''\r
- DC 'HL'''\r
+ DC 'a'''\r
+ DC 'bc'''\r
+ DC 'de'''\r
+ DC 'hl'''\r
DC 'IX'\r
DC 'IY'\r
DC 'I'\r
defw expr_buf ;0b1a 1c 0b . .\r
\r
expr_buf:\r
- db 'DDT/180',TAB\r
- db '[8101] 001',CR,LF,'$'\r
+current_cseg defl $ - current_cseg\r
+ .phase current_phase + current_cseg\r
+\r
+start:\r
+ LD SP,ldr_end+(stack-ddtz_base)\r
+ LD DE,signon ;ldr_end+(expr_buf-ddtz_base)\r
+ LD C,BDOS_PSTR\r
+ CALL BDOS\r
+\r
+ xor a\r
+ dec a\r
+ jp po,reloc\r
+ ld de,msgz80\r
+ LD C,BDOS_PSTR\r
+ CALL BDOS\r
+ jp 0\r
+\r
+reloc:\r
+ LD HL,ldr_end+ddtz_size ;start of reloc bitmap\r
+ ld bc,0108h ;init bit counter\r
+\r
+ EXX\r
+ LD HL,(BDOS+1)\r
+ LD (ldr_end+1),HL\r
+ LD BC,ddtz_size-1\r
+ LD D,B\r
+ LD E,0FFH\r
+ INC DE ;size rounded up to next page boundary\r
+ INC BC ;ddtz_size\r
+ OR A\r
+ SBC HL,DE ;BDOS - size\r
+ LD (BDOS+1),HL ;-> new BDOS entry\r
+\r
+ push hl\r
+ PUSH BC\r
+ ld de,ldr_end\r
+ sbc hl,de\r
+ EX DE,HL ;-> DE\r
+ LD HL,ldr_size\r
+ add hl,bc\r
+ ld b,h\r
+ ld c,l\r
+ LD HL,TPA\r
+reloc_lp:\r
+ EXX\r
+ djnz reloc_nl\r
+ ld b,c ;reload bit counter\r
+ LD e,(HL) ;get next 8 relocation bits\r
+ INC HL\r
+reloc_nl:\r
+ sla e\r
+ EXX\r
+ JR NC,reloc_next\r
+ DEC HL\r
+ LD A,(HL)\r
+ ADD A,E\r
+ LD (HL),A\r
+ INC HL\r
+ LD A,(HL)\r
+ ADC A,D\r
+ LD (HL),A\r
+reloc_next:\r
+ cpi\r
+ jp pe,reloc_lp\r
+ dec hl\r
+\r
+ POP BC\r
+ pop de\r
+ EX DE,HL\r
+ ADD HL,BC\r
+ EX DE,HL\r
+ DEC DE\r
+ LDDR\r
+ LD HL,conbuf+2-ddtz_base\r
+ ADD HL,DE\r
+ JP (HL)\r
+\r
+current_phase defl $\r
+ .dephase\r
+current_cseg defl $\r
\r
ds EXPR_BUF_SIZE - ($ - expr_buf)\r
expr_bufe:\r