page 255\r
.z80\r
\r
- external $ci, $co, $cists\r
+ extrn ?const,?conin,?cono\r
\r
global ddtz,bpent\r
global $stack\r
\r
\r
;--------------------------------------------------\r
-; \r
+;\r
\r
; copy code to common memory and execute it there\r
comst macro\r
ld hl,sysramc\r
ld de,topcodbeg\r
ld bc,topcodend-topcodbeg\r
- ldir \r
- \r
+ ldir\r
+\r
ld hl,vartab\r
ld de,ddtram\r
ld bc,vartabe-vartab\r
- ldir \r
+ ldir\r
exx\r
\r
ld a,e\r
ld (ubbr),a\r
- \r
+\r
ddtz_w:\r
ld hl,MSG ;073c\r
call PSTR ;073f\r
call PSTR\r
ret\r
\r
+$ci:\r
+ push hl\r
+ push de\r
+ push bc\r
+ call ?conin\r
+ pop bc\r
+ pop de\r
+ pop hl\r
+ ret\r
+\r
+$co:\r
+ push hl\r
+ push de\r
+ push bc\r
+ ld c,a\r
+ call ?cono\r
+ pop bc\r
+ pop de\r
+ pop hl\r
+ ret\r
+\r
DELC:\r
- ld a,b ;07f2\r
- or a ;07f3\r
- ret z ;07f4\r
- ld a,BS ;07f5\r
- call $co ;07f7\r
- ld a,' ' ;07fa\r
- call $co ;07fc\r
- ld a,BS ;07ff\r
- call $co ;0801\r
- dec hl ;0804\r
- dec b ;0805\r
- inc c ;0806\r
- ld a,(hl) ;0807\r
- cp ' ' ;0808\r
- ret nc ;080a\r
- ld a,BS ;080b\r
- call $co ;080d\r
- ld a,' ' ;0810\r
- call $co ;0812\r
- ld a,BS ;0815\r
- call $co ;0817\r
- ret ;081a\r
+ ld a,b\r
+ or a\r
+ ret z\r
+ call DELC1\r
+ dec hl\r
+ dec b\r
+ inc c\r
+ ld a,(hl)\r
+ cp ' '\r
+ ret nc\r
+DELC1:\r
+ push de\r
+ push hl\r
+ push bc\r
+ ld c,BS\r
+ call ?cono\r
+ ld c,' '\r
+ call ?cono\r
+ ld c,BS\r
+ call ?cono\r
+ pop bc\r
+ pop hl\r
+ pop de\r
+ ret\r
+\r
DELL:\r
- ld a,b ;081b\r
- or a ;081c\r
- ret z ;081d\r
- call DELC ;081e\r
- jr DELL ;0821\r
+ ld a,b ;\r
+ or a ;\r
+ ret z ;\r
+ call DELC ;\r
+ jr DELL ;\r
\r
INLINE:\r
- push hl ;0823\r
- ld hl,CI.BUF ;0824\r
- ld c,(hl) ;0827\r
- inc hl ;0828\r
- ld b,000h ;0829\r
- inc hl ;082b\r
+ push hl ;\r
+ ld hl,CI.BUF ;\r
+ ld c,(hl) ;\r
+ inc hl ;\r
+ ld b,000h ;\r
+ inc hl ;\r
inlnxtch:\r
- ld a,c ;082c\r
- or a ;082d\r
- jr z,inl_e ;082e\r
- call $ci ;0830\r
- cp CR ;0833\r
- jr z,inl_e ;0835\r
- cp LF ;0837\r
- jr z,inl_e ;0839\r
- cp BS ;083b\r
- jr nz,l0844h ;083d\r
- call DELC ;083f\r
- jr inlnxtch ;0842\r
+ ld a,c ;\r
+ or a ;\r
+ jr z,inl_e ;\r
+ call $ci ;\r
+ cp CR ;\r
+ jr z,inl_e ;Accept line\r
+ cp LF ;\r
+ jr z,inl_e ;Accept line\r
+ cp BS ;\r
+ jr nz,l0844h ;\r
+ call DELC ;Delete Char\r
+ jr inlnxtch ;\r
l0844h:\r
- cp DEL ;0844\r
- jr nz,l084dh ;0846\r
- call DELC ;0848\r
- jr inlnxtch ;084b\r
+ cp DEL ;\r
+ jr nz,l084dh ;\r
+ call DELC ;Delete Char\r
+ jr inlnxtch ;\r
l084dh:\r
- cp CNTRX ;084d\r
- jr nz,l0856h ;084f\r
- call DELL ;0851\r
- jr inlnxtch ;0854\r
+ cp CNTRX ;\r
+ jr nz,l0856h ;\r
+ call DELL ;Delete Line\r
+ jr inlnxtch ;\r
l0856h:\r
- cp TAB ;0856\r
- jr nz,l085ch ;0858\r
- ld a,' ' ;085a\r
+ cp TAB ;\r
+ jr nz,l085ch ;\r
+ ld a,' ' ;\r
l085ch:\r
- ld (hl),a ;085c\r
- cp ' ' ;085d\r
- jr nc,l0869h ;085f\r
- ld a,'^' ;0861\r
- call $co ;0863\r
- ld a,(hl) ;0866\r
- add a,'@' ;0867\r
+ ld (hl),a ;\r
+ cp ' ' ;\r
+ jr nc,l0869h ;\r
+ ld a,'^' ;Controle characters\r
+ call $co ;\r
+ ld a,(hl) ;\r
+ add a,'@' ;\r
l0869h:\r
- call $co ;0869\r
- inc hl ;086c\r
- inc b ;086d\r
- dec c ;086e\r
- jr inlnxtch ;086f\r
+ call $co ;\r
+ inc hl ;\r
+ inc b ;\r
+ dec c ;\r
+ jr inlnxtch ;\r
\r
inl_e:\r
- ld hl,ci.buf+1 ;0871\r
- ld (hl),b ;0874\r
- call CRLF ;0875\r
- ld de,ci.buf+1 ;0878\r
- ld a,(de) ;087b\r
- ld b,a ;087c\r
- ld c,000h ;087d\r
- inc b ;087f\r
+ ld hl,ci.buf+1 ;\r
+ ld (hl),b ;\r
+ call CRLF ;\r
+ ld de,ci.buf+1 ;\r
+ ld a,(de) ;\r
+ ld b,a ;\r
+ ld c,000h ;\r
+ inc b ;\r
l0880h:\r
- inc de ;0880\r
- dec b ;0881\r
- jr z,l08b2h ;0882\r
- ld a,(de) ;0884\r
- bit 0,c ;0885\r
- call z,UPCASE ;0887\r
- ld (de),a ;088a\r
- cp '''' ;088b\r
- jr nz,l0880h ;088d\r
- push de ;088f\r
- dec de ;0890\r
- ld a,(de) ;0891\r
- cp '''' ;0892\r
- jr z,l08aeh ;0894\r
- dec de ;0896\r
- ld a,(de) ;0897\r
- cp '^' ;0898\r
- jr z,l08a2h ;089a\r
- dec de ;089c\r
- ld a,(de) ;089d\r
- cp '^' ;089e\r
- jr nz,l08aeh ;08a0\r
+ inc de ;\r
+ dec b ;\r
+ jr z,l08b2h ;\r
+ ld a,(de) ;\r
+ bit 0,c ;\r
+ call z,UPCASE ;\r
+ ld (de),a ;\r
+ cp '''' ;\r
+ jr nz,l0880h ;\r
+ push de ;\r
+ dec de ;\r
+ ld a,(de) ;\r
+ cp '''' ;\r
+ jr z,l08aeh ;\r
+ dec de ;\r
+ ld a,(de) ;\r
+ cp '^' ;\r
+ jr z,l08a2h ;\r
+ dec de ;\r
+ ld a,(de) ;\r
+ cp '^' ;\r
+ jr nz,l08aeh ;\r
l08a2h:\r
- inc de ;08a2\r
- push bc ;08a3\r
- call sub_0a0eh ;08a4\r
- pop bc ;08a7\r
- dec de ;08a8\r
- ld a,(de) ;08a9\r
- cp '''' ;08aa\r
- jr z,l08afh ;08ac\r
+ inc de ;\r
+ push bc ;\r
+ call sub_0a0eh ;\r
+ pop bc ;\r
+ dec de ;\r
+ ld a,(de) ;\r
+ cp '''' ;\r
+ jr z,l08afh ;\r
l08aeh:\r
- inc c ;08ae\r
+ inc c ;\r
l08afh:\r
- pop de ;08af\r
- jr l0880h ;08b0\r
+ pop de ;\r
+ jr l0880h ;\r
l08b2h:\r
- xor a ;08b2\r
- ld (de),a ;08b3\r
- ld de,ci.buf+2 ;08b4\r
- pop hl ;08b7\r
- ret ;08b8\r
+ xor a ;\r
+ ld (de),a ;\r
+ ld de,ci.buf+2 ;\r
+ pop hl ;\r
+ ret ;\r
\r
UPCASE:\r
- cp 'a' ;08b9\r
- ret c ;08bb\r
- cp 'z'+1 ;08bc\r
- ret nc ;08be\r
- and 05fh ;08bf\r
- ret ;08c1\r
+ cp 'a' ;\r
+ ret c ;\r
+ cp 'z'+1 ;\r
+ ret nc ;\r
+ and 05fh ;\r
+ ret ;\r
\r
out.hl.@:\r
- call out.hl ;08c2\r
- push de ;08c5\r
- push hl ;08c6\r
- ld de,(offs.@) ;08c7\r
- ld a,d ;08cb\r
- or e ;08cc\r
- jr z,l08ddh ;08cd\r
- call OUTBL ;08cf\r
- ld a,'@' ;08d2\r
- call OUTCHAR ;08d4\r
- and a ;08d7\r
- sbc hl,de ;08d8\r
- call out.hl ;08da\r
+ call out.hl ;\r
+ push de ;\r
+ push hl ;\r
+ ld de,(offs.@) ;\r
+ ld a,d ;\r
+ or e ;\r
+ jr z,l08ddh ;\r
+ call OUTBL ;\r
+ ld a,'@' ;\r
+ call OUTCHAR ;\r
+ and a ;\r
+ sbc hl,de ;\r
+ call out.hl ;\r
l08ddh:\r
- pop hl ;08dd\r
- pop de ;08de\r
- ret ;08df\r
+ pop hl ;\r
+ pop de ;\r
+ ret ;\r
\r
out.bin.w:\r
- ld a,h ;08e0\r
- call out.bin.b ;08e1\r
- ld a,l ;08e4\r
+ ld a,h ;\r
+ call out.bin.b ;\r
+ ld a,l ;\r
out.bin.b:\r
- ld b,008h ;08e5\r
+ ld b,008h ;\r
l08e7h:\r
- add a,a ;08e7\r
- push af ;08e8\r
- ld a,0 ;08e9\r
- adc a,a ;08eb\r
- call out.digit ;08ec\r
- pop af ;08ef\r
- djnz l08e7h ;08f0\r
- ld a,'"' ;08f2\r
- jp OUTCHAR ;08f4\r
+ add a,a ;\r
+ push af ;\r
+ ld a,0 ;\r
+ adc a,a ;\r
+ call out.digit ;\r
+ pop af ;\r
+ djnz l08e7h ;\r
+ ld a,'"' ;\r
+ jp OUTCHAR ;\r
\r
sub_08f7h:\r
- ld a,'-' ;08f7\r
- call OUTCHAR ;08f9\r
- dec hl ;08fc\r
- jp cpl.hl ;08fd\r
+ ld a,'-' ;\r
+ call OUTCHAR ;\r
+ dec hl ;\r
+ jp cpl.hl ;\r
\r
out.hl.decm:\r
- push hl ;0900\r
- call sub_08f7h ;0901\r
- db 3eh ;0904 ld a,0E5h\r
+ push hl ;\r
+ call sub_08f7h ;\r
+ db 3eh ; ld a,0E5h\r
out.hl.dec:\r
push hl\r
- ld b,6 ;0906\r
- call sub_0917h ;0908\r
- pop hl ;090b\r
- ld a,'.' ;090c\r
- call OUTCHAR ;090e\r
+ ld b,6 ;\r
+ call sub_0917h ;\r
+ pop hl ;\r
+ ld a,'.' ;\r
+ call OUTCHAR ;\r
l0911h:\r
- call OUTBL ;0911\r
- djnz l0911h ;0914\r
- ret ;0916\r
+ call OUTBL ;\r
+ djnz l0911h ;\r
+ ret ;\r
\r
\r
sub_0917h:\r
outquote:\r
ld a,'''' ;0979\r
OUTCHAR:\r
- push hl ;097b\r
- push af ;097c\r
- and 07fh ;097d\r
- call $co ;097f\r
- ld hl,CON.COL ;0982\r
- inc (hl) ;0985\r
- pop af ;0986\r
- pop hl ;0987\r
+ push hl\r
+ push de\r
+ push bc\r
+ push af\r
+ and 07fh\r
+ ld c,a\r
+ call ?cono\r
+ ld hl,CON.COL\r
+ inc (hl)\r
+ pop af\r
+ pop bc\r
+ pop de\r
+ pop hl\r
ret ;0988\r
\r
inchar:\r
- call $cists ;0989\r
- and a ;098c\r
- ret z ;098d\r
- call $ci ;098e\r
+ push hl\r
+ push de\r
+ push bc\r
+ call ?const\r
+ and a\r
+ jr z,inch1\r
+ call ?conin\r
scf ;0991\r
+inch1:\r
+ pop bc\r
+ pop de\r
+ pop hl\r
ret ;0992\r
\r
PSTR:\r
inc hl ;1176\r
ld a,d ;1177\r
comrep ;1178\r
- \r
+\r
else\r
\r
ld a,(ddtrst) ;115c\r
ret ;169a\r
\r
; Read Intel Hex File from console.\r
-\r
CMD.R:\r
ld hl,0 ;169b\r
- call get_lastarg_def ;169e\r
+ call get_lastarg_def ;169e get offset from command line\r
push hl ;16a1\r
ld hl,0 ;16a2\r
ld (HILOD),hl ;16a5\r
jr z,l16deh ;16c4\r
l16c6h:\r
call i.gethexbyte ;16c6\r
- pop de ;16c9\r
+ pop de ;16c9 offset\r
push de ;16ca\r
push hl ;16cb\r
add hl,de ;16cc\r
call i.storebyte ;16cd\r
pop hl ;16d0\r
inc hl ;16d1\r
- djnz l16c6h ;16d2\r
- call i.gethexbyte ;16d4\r
+ djnz l16c6h ;16d2 repeat for record len\r
+ call i.gethexbyte ;16d4 checksum\r
ld a,c ;16d7\r
and a ;16d8\r
jp nz,ERROR ;16d9 exit if checksum error\r
i.storebyte:\r
push af ;1708\r
push de ;1709\r
- ld de,TPA ;170a\r
+ ld de,TPA ;170a lowest allowed load address\r
call CP.HL.DE ;170d\r
jp c,ERROR ;1710\r
- ld de,$stcka ;1713\r
+ ld de,$stcka ;1713 highest allowed load address\r
call CP.HL.DE ;1716\r
jp nc,ERROR ;1719\r
ld de,(HILOD) ;171c\r
pop de ;1734\r
pop af ;1735\r
comst ;1736\r
- ld (hl),a ;173a\r
+ ld (hl),a ;173a store byte\r
comend\r
ret ;173b\r
\r
defb 08bh ;2137\r
defw l2561h ;2138\r
\r
- defb 0c7h ;213a rst \r
+ defb 0c7h ;213a rst\r
defb 0c7h ;213b\r
defb 0b4h ;213c\r
defw l231eh ;213d\r