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 |