Rev 1509 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log
Rev 1509 | Rev 1518 | ||
---|---|---|---|
Line 223... | Line 223... | ||
223 | inc hl |
223 | inc hl |
224 | add hl,bc |
224 | add hl,bc |
225 | inc hl ;пропускаем терминатор |
225 | inc hl ;пропускаем терминатор |
226 | jr findline_lines0 |
226 | jr findline_lines0 |
227 | 227 | ||
228 | readnum_ |
228 | readnum_dehl_ |
229 | ;out: hlde=num, hl'=text, CY=error |
229 | ;out: dehl=num, hl'=text, CY=error |
230 | exx |
230 | exx |
231 | ld a,(hl) |
231 | ld a,(hl) |
232 | exx |
232 | exx |
233 | sub '0' |
233 | sub '0' |
234 | cp 10 ;NC = не число |
234 | cp 10 ;NC = не число |
235 | ccf ;CY = не число |
235 | ccf ;CY = не число |
236 | ret c ;error |
236 | ret c ;error |
237 | readnum |
237 | readnum_dehl |
238 | ;out: hlde=num, hl'=text, CY=error |
238 | ;out: dehl=num, hl'=text, CY=error |
239 | ld hl,0 |
239 | ld hl,0 |
240 | ld de,0 ;накопитель |
240 | ld de,0 ;накопитель |
241 | readnum0 |
241 | readnum0 |
242 | exx |
242 | exx |
243 | ld a,(hl) |
243 | ld a,(hl) |
Line 246... | Line 246... | ||
246 | cp 10 ;NC = конец числа |
246 | cp 10 ;NC = конец числа |
247 | jr nc,readnumq |
247 | jr nc,readnumq |
248 | exx |
248 | exx |
249 | inc hl |
249 | inc hl |
250 | exx |
250 | exx |
251 | push hl ;HSW |
251 | push de ;HSW |
252 | push de ;LSW |
252 | push hl ;LSW |
253 | sla e |
253 | add hl,hl |
254 | rl d |
254 | rl e |
255 | adc hl,hl ;*2 |
255 | rl d ;*2 |
256 | sla e |
256 | add hl,hl |
257 | rl d |
257 | rl e |
258 | adc hl,hl ;*4 |
258 | rl d ;*4 |
259 | pop bc ;LSW |
259 | pop bc ;LSW |
260 | ex de,hl |
- | |
261 | add hl,bc |
260 | add hl,bc |
262 | ex de,hl |
- | |
263 | pop bc ;HSW |
261 | pop bc ;HSW |
- | 262 | ex de,hl |
|
264 | adc hl,bc ;*5 |
263 | adc hl,bc ;*5 |
265 | sla e |
264 | ex de,hl |
- | 265 | add hl,hl |
|
266 | rl d |
266 | rl e |
267 | adc hl,hl ;*10 |
267 | rl d ;*10 |
268 | add a,e |
268 | add a,l |
269 | ld e,a |
269 | ld l,a |
270 | ld a,d |
270 | ld a,h |
271 | adc a,0 |
271 | adc a,0 |
272 | ld d,a |
272 | ld h,a |
273 | jr nc,$+3 |
273 | jr nc,$+3 |
274 | inc hl |
274 | inc de |
275 | jr readnum0 |
275 | jr readnum0 |
276 | readnumq |
276 | readnumq |
277 | call eatspaces |
277 | call eatspaces |
278 | or a ;NC=OK |
278 | or a ;NC=OK |
279 | ret |
279 | ret |
Line 296... | Line 296... | ||
296 | add_or_run_line |
296 | add_or_run_line |
297 | ;добавляет в программу строку в cmdbuf |
297 | ;добавляет в программу строку в cmdbuf |
298 | ld hl,cmdbuf |
298 | ld hl,cmdbuf |
299 | exx |
299 | exx |
300 | call eatspaces |
300 | call eatspaces |
301 | call readnum_ ;hlde=linenum, hl'=text, CY=error |
301 | call readnum_dehl_ ;dehl=linenum, hl'=text, CY=error |
- | 302 | ex de,hl ;de номер |
|
302 | jp c,cmd_run0;runline |
303 | jp c,cmd_run0;runline |
303 | exx |
304 | exx |
304 | ld a,(hl) |
305 | ld a,(hl) |
305 | exx |
306 | exx |
306 | or a |
307 | or a |
Line 377... | Line 378... | ||
377 | 378 | ||
378 | ret |
379 | ret |
379 | 380 | ||
380 | delline |
381 | delline |
381 | ;de=linenum |
382 | ;de=linenum |
382 | call findline ;hl=адрес строки или (progend) |
383 | call findline ;de номер ;hl=адрес строки или (progend) |
383 | ld bc,(progend) |
384 | ld bc,(progend) |
384 | or a |
385 | or a |
385 | sbc hl,bc |
386 | sbc hl,bc |
386 | add hl,bc |
387 | add hl,bc |
387 | ret z |
388 | ret z |
Line 754... | Line 755... | ||
754 | ld a,h |
755 | ld a,h |
755 | cpl |
756 | cpl |
756 | ld h,a |
757 | ld h,a |
757 | ret |
758 | ret |
758 | 759 | ||
759 | - | ||
760 | neghlde |
760 | negdebc |
761 | xor a |
761 | xor a |
762 | sub e |
762 | sub c |
- | 763 | ld c,a |
|
- | 764 | ld a,0 |
|
- | 765 | sbc a,b |
|
- | 766 | ld b,a |
|
- | 767 | ld a,0 |
|
- | 768 | sbc a,e |
|
763 | ld e,a |
769 | ld e,a |
764 | ld a,0 |
770 | ld a,0 |
765 | sbc a,d |
771 | sbc a,d |
766 | ld d,a |
772 | ld d,a |
- | 773 | ret |
|
- | 774 | negdehl |
|
767 | ld a,0 |
775 | xor a |
768 | sbc a,l |
776 | sub l |
769 | ld l,a |
777 | ld l,a |
770 | ld a,0 |
778 | ld a,0 |
771 | sbc a,h |
779 | sbc a,h |
772 | ld h,a |
780 | ld h,a |
773 | ret |
- | |
774 | - | ||
775 | negbcde |
- | |
776 | xor a |
781 | ld a,0 |
777 | sub e |
782 | sbc a,e |
778 | ld e,a |
783 | ld e,a |
779 | ld a,0 |
784 | ld a,0 |
780 | sbc a,d |
785 | sbc a,d |
781 | ld d,a |
786 | ld d,a |
782 | ld a,0 |
- | |
783 | sbc a,c |
- | |
784 | ld c,a |
- | |
785 | ld a,0 |
- | |
786 | sbc a,b |
- | |
787 | ld b,a |
- | |
788 | ret |
787 | ret |
789 | 788 | ||
790 | prlinenum_tomem |
789 | prlinenum_tomem |
- | 790 | ;de=num |
|
791 | ld bc,prdword_digit_tomem |
791 | ld bc,prdword_digit_tomem |
792 | ld (prdword_digit_prchar_jp),bc |
792 | ld (prdword_digit_prchar_jp),bc |
793 | ld hl,0 |
793 | ld hl,0 |
- | 794 | ex de,hl |
|
794 | jr prdword_subr |
795 | jr _prdword_subr ;dehl=num |
795 | 796 | ||
796 | prword_de |
797 | prword_de |
797 | ;de=num |
798 | ;de=num |
798 | ld hl,0 |
799 | ld hl,0 |
- | 800 | ex de,hl |
|
799 | prdword_hlde |
801 | prdword_dehl |
800 | ;hlde=num |
802 | ;dehl=num |
801 | ld bc,prdword_digit_toscr |
803 | ld bc,prdword_digit_toscr |
802 | ld (prdword_digit_prchar_jp),bc |
804 | ld (prdword_digit_prchar_jp),bc |
803 | bit 7,h |
805 | bit 7,d |
804 | jr z,prdword_hlde_positive |
806 | jr z,prdword_positive |
805 | ld a,'-' |
807 | ld a,'-' |
806 | call prdword_digit_prchar |
808 | call prdword_digit_prchar |
807 | call neghlde |
809 | call negdehl |
808 | prdword_hlde_positive |
810 | prdword_positive |
809 | prdword_subr |
811 | _prdword_subr |
810 | ld a,' ' |
812 | ld a,' ' |
811 | ld (prnumdwordcmd_zero),a |
813 | ld (prnumdwordcmd_zero),a |
812 | ld lx,0 |
814 | ld lx,0 |
813 | ld bc,1000000000/65536 |
815 | ld bc,1000000000/65536 |
814 | ld a,1000000000/256&#ff |
816 | ld a,1000000000/256&#ff |
815 | call prdword_digit |
817 | call prdword_digit |
816 | ld bc,100000000/65536 |
818 | ld bc,100000000/65536 |
817 | ld a,100000000/256&#ff |
819 | ld a,100000000/256&#ff |
818 | call prdword_digit |
820 | call prdword_digit |
819 | ld a,h |
- | |
820 | ld lx,a |
821 | ld lx,d |
821 | ld h,l |
- | |
822 | ld l,d |
- | |
823 | ld d,e |
822 | ld d,e |
- | 823 | ld e,h |
|
- | 824 | ld h,l |
|
824 | ld bc,10000000/256 |
825 | ld bc,10000000/256 |
825 | ld a,10000000&#ff ;0x989680 |
826 | ld a,10000000&#ff ;0x989680 |
826 | call prdword_digit |
827 | call prdword_digit |
827 | ld bc,1000000/256 |
828 | ld bc,1000000/256 |
828 | ld a,1000000&#ff |
829 | ld a,1000000&#ff |
Line 840... | Line 841... | ||
840 | ld a,100&#ff |
841 | ld a,100&#ff |
841 | call prdword_digit |
842 | call prdword_digit |
842 | ld bc,10/256 |
843 | ld bc,10/256 |
843 | ld a,10&#ff |
844 | ld a,10&#ff |
844 | call prdword_digit |
845 | call prdword_digit |
845 | ld a,d |
846 | ld a,h |
846 | add a,'0' |
847 | add a,'0' |
847 | prdword_digit_prchar |
848 | prdword_digit_prchar |
848 | prdword_digit_prchar_jp=$+1 |
849 | prdword_digit_prchar_jp=$+1 |
849 | jp prdword_digit_tomem |
850 | jp prdword_digit_tomem |
850 | prdword_digit_toscr |
851 | prdword_digit_toscr |
Line 861... | Line 862... | ||
861 | ld (hl),a |
862 | ld (hl),a |
862 | inc hl |
863 | inc hl |
863 | exx |
864 | exx |
864 | ret |
865 | ret |
865 | prdword_digit |
866 | prdword_digit |
866 | ;hlde=num |
867 | ;deh[l]=num |
867 | ;bca0=divisor |
868 | ;bca0=divisor |
868 | push de |
869 | push hl |
- | 870 | ex de,hl |
|
869 | ld e,a |
871 | ld e,a |
870 | ld a,d |
872 | ld a,d |
871 | ld d,'0'-1 |
873 | ld d,'0'-1 |
872 | ;hla0=num |
874 | ;hla0=num |
873 | ;bce0=divisor |
875 | ;bce0=divisor |
Line 882... | Line 884... | ||
882 | add a,e |
884 | add a,e |
883 | adc hl,bc |
885 | adc hl,bc |
884 | jr nc,$+4 |
886 | jr nc,$+4 |
885 | inc lx |
887 | inc lx |
886 | ld c,d ;digit |
888 | ld c,d ;digit |
- | 889 | ex de,hl |
|
887 | pop de |
890 | pop hl |
888 | ld d,a ;hlde=num |
891 | ld h,a ;dehl=num |
889 | ld a,c ;digit |
892 | ld a,c ;digit |
890 | cp '0' |
893 | cp '0' |
891 | jr nz,prnumdwordcmd_nozero |
894 | jr nz,prnumdwordcmd_nozero |
892 | prnumdwordcmd_zero=$+1 |
895 | prnumdwordcmd_zero=$+1 |
893 | ld a,' ' |
896 | ld a,' ' |
Line 921... | Line 924... | ||
921 | ret |
924 | ret |
922 | endif |
925 | endif |
923 | 926 | ||
924 | ;getvar_int |
927 | ;getvar_int |
925 | ;a=name (char) |
928 | ;a=name (char) |
926 | ;out: hlde |
929 | ;out: dehl |
927 | ;call findvar_int ;hl=addr |
930 | ;call findvar_int ;hl=addr |
928 | getint |
931 | getint |
929 | ld e,(hl) |
932 | ld e,(hl) |
930 | inc hl |
933 | inc hl |
931 | ld d,(hl) |
934 | ld d,(hl) |
932 | inc hl |
935 | inc hl |
933 | ld a,(hl) |
936 | ld a,(hl) |
934 | inc hl |
937 | inc hl |
935 | ld h,(hl) |
938 | ld h,(hl) |
936 | ld l,a |
939 | ld l,a |
- | 940 | ex de,hl |
|
937 | ret |
941 | ret |
938 | 942 | ||
939 | ;getvar_str |
943 | ;getvar_str |
940 | ;a=name (char) |
944 | ;a=name (char) |
941 | ;out: hl=straddr (first byte = len (0..255)) |
945 | ;out: hl=straddr (first byte = len (0..255)) |
942 | ;call findvar_str ;hl=addr |
946 | ;call findvar_str ;hl=addr |
943 | ;ret |
947 | ;ret |
944 | 948 | ||
945 | setvar_int |
949 | setvar_int |
946 | ;a=name (char), hlde=value |
950 | ;a=name (char), dehl=value |
- | 951 | ex de,hl |
|
947 | push hl |
952 | push hl |
948 | call findvar_int ;hl=addr |
953 | call findvar_int ;hl=addr |
949 | ld (hl),e |
954 | ld (hl),e |
950 | inc hl |
955 | inc hl |
951 | ld (hl),d |
956 | ld (hl),d |