[Copyright 1999,2002,2014 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance_2014 at nemesis.lonestar.org Comments and queries to this address: web_software_2014 at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/11/99 01:42:48 MEMORY - LS-DOS 6.2 Page 00001 00001 ;LBMEMORY/ASM - MEMORY Command 0011 00003 @PARAM: EQU 17 00004 ; 0000 00005 *GET BUILDVER/ASM:3 00006 ; 00007 ; Buildver/asm is a bit of a kludge since not all utilities can load 00008 ; equates from LDOS60 and still compile. LOWCORE and everybody else 00009 ; relies on this setting, and it eventually ends up in LDOS60/EQU 00010 ; for programs that can use that. 00011 ; FFFF 00012 @BLD631 EQU -1 ;<631>Build 631 distribution (LEVEL 1B) 00013 ; These switches activate patches made since the 1B release. 00014 ; It is important that all earlier patches be enabled when a higher 00015 ; patch is enabled. 00016 ; Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the 00017 ; patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.) FFFF 00018 @BLD631C EQU -1 ;<631>Apply 1C patches (SETKI) FFFF 00019 @BLD631D EQU -1 ;<631>Apply 1D patches (DIR) FFFF 00020 @BLD631E EQU -1 ;<631>Apply 1E patches (DIR & MEMDISK/DCT) FFFF 00021 @BLD631F EQU -1 ;<631>Apply 1F patches (SPOOL) 00022 ; Patches G and H were published in TMQ V.i, pages 10 and 18/19. FFFF 00023 @BLD631G EQU -1 ;<631>Apply 1G patches (//KEYIN,DIR,DO *) FFFF 00024 @BLD631H EQU -1 ;<631>Apply 1H patches (MEMORY) 00025 ; 00026 ;End of BUILDVER/ASM 0000 00027 *GET SVCMAC:3 ;SVC Macro equivalents 00028 ;SVCMAC/ASM - LS-DOS Version VI 00029 *LIST OFF 00421 *LIST ON 0000 00423 *GET VALUES:3 ;Misc. equates 00424 ;VALUES/ASM - Version 6 00425 *LIST OFF 00452 *LIST ON 00453 ; 002C 00454 PAR_ERR EQU 44 ;Parameter Error 2600 00455 LOWEST EQU 2600H 00456 ; 2400 00457 ORG 2400H 00458 ; 2400 00459 MEMORY @@CKBRKC ;Break key down? 2400+3E6A 00460 LD A,106 2402+EF 00461 RST 40 2403 2804 00462 JR Z,BEGINA ;Ok if not 2405 21FFFF 00463 LD HL,-1 ; else abort 2408 C9 00464 RET 00465 ; 2409 ED730928 00466 BEGINA LD (EXIT+1),SP ;Save SP Address 00467 ; 00468 ; Process any Parameters entered 00469 ; 240D 11AA28 00470 LD DE,PRMTBL$ ;DE => Parameter Table 2410 D5 00471 PUSH DE ;Save Parm table start 2412 00472 L2412: EQU $+1 2411 3E11 00473 LD A,@PARAM 2413 EF 00474 RST 28H ;Process parameters 2414 E1 00475 POP HL ;HL => Parm table start 2415 C2EE27 00476 PERR JP NZ,PRMERR ;NZ - Parameter Error 00477 ; 00478 ; Legal input - were the entries acceptable ? 00479 ; 2418 CDB827 00480 GDPARMS CALL CKPARM ;Valid entries ? 241B 20F8 00481 JR NZ,PERR ;No - Parameter error 00482 ; 241D 00483 @@FLAGS ;IY => System Flags 241D+3E65 00484 LD A,101 241F+EF 00485 RST 40 00486 ; 00487 ; Was the CLEAR (C) parameter entered ? 00488 ; 2421 00489 SM001: EQU $+1 2420 0100FF 00490 CPARM LD BC,0FF00H ;C = Clear byte 2424 00491 SM002: EQU $+1 2423 3ADD28 00492 LD A,(CRESP) ;P/u response 2426 B7 00493 OR A ;Any response ? 2427 283C 00494 JR Z,NEXTPRM ;No - get next parm 242C 00495 L242C: EQU $+3 2429 FDCB0246 00496 BIT 0,(IY+CFLAG$) ;If memory frozen, 242D C2FB27 00497 JP NZ,NOMEM ; can't do it 00498 ; 00499 ; CLEAR (C) parm entered - is this a flag ? 00500 ; 2430 CB77 00501 BIT 6,A ;Is this a flag ? 2433 00502 L2433: EQU $+1 2432 2805 00503 JR Z,ISNUMER ;No - check if numeric 00504 ; 00505 ; Response is a FLAG - Is it NO, OFF, or N ? 00506 ; 2434 04 00507 L2434: INC B ;Yes or No ? 2435 202E 00508 JR NZ,NEXTPRM ;No - get next parm 2437 180F 00509 JR FILLMEM ;Yes - Fill mem with 0's 00510 ; 00511 ; Response is not a FLAG, check if numeric 00512 ; 2439 215E24 00513 ISNUMER LD HL,FILLBYT+1 ;HL => Byte to Fill 243C CB7F 00514 BIT 7,A ;Numeric response ? 243E 71 00515 LD (HL),C ;Stuff byte in LD (HL),nn 243F 2007 00516 JR NZ,FILLMEM ;Fill mem with char 00517 ; 00518 ; Response must be a string - Is length = 1 ? 00519 ; 2441 E60F 00520 AND 00001111B ;P/u length 2443 3D 00521 DEC A ;Better be one 2444 20CF 00522 JR NZ,PERR ;Not - parameter error 00523 ; 00524 ; Pick up character at address & stuff away 00525 ; 2446 0A 00526 LD A,(BC) ;P/u character to fill 2447 77 00527 LD (HL),A ;Stuff in LD (HL),nn 00528 ; 00529 ; Set HL => HIGH$ (if DOS) or LOW$ (@CMNDR) 00530 ; 2448 CDDE27 00531 FILLMEM CALL GETHILO ;HIGH$ (HL), LOW$ (DE) 244B FDCB024E 00532 BIT 1,(IY+CFLAG$) ;Executing @CMNDR ? 244F 2801 00533 JR Z,USEHIGH ;No - use HIGH$ 2451 EB 00534 EX DE,HL ;@CMNDR - use LOW$ 00535 IF @BLD631 2452 116524 00536 USEHIGH LD DE,NEXTPRM ;<631>Start clearing here 00537 ELSE 00538 USEHIGH LD DE,MEMORY+200H ;Start clearing here 00539 ENDIF 00540 ; 00541 ; Calculate amount of memory to fill 00542 ; 2455 AF 00543 XOR A ;Clear carry 2456 ED52 00544 SBC HL,DE ;Get # to fill 2458 44 00545 LD B,H ;Xfer to BC 2459 4D 00546 LD C,L 00547 ; 00548 ; Fill user area - HIGH$/LOW$ with spec'd byte 00549 ; 245A 62 00550 LD H,D ;HL => LOW$ 245B 6B 00551 LD L,E 245C 13 00552 INC DE ;DE => LOW$ + 1 245D 3600 00553 FILLBYT LD (HL),$-$ ;Stuff in fill byte 245F EDB0 00554 LDIR ;Fill memory 2461 210000 00555 GOODEX LD HL,0 ;Good Exit 2464 C9 00556 RET 00557 ; 00558 ; Was the ADDR (A) parameter specified ? 00559 ; 2465 3ABE28 00560 NEXTPRM LD A,(ARESP) ;P/u Address response 2468 B7 00561 OR A ;Specified ? 2469 CA0C25 00562 JP Z,HICHECK ;No - get next parm 00563 ; 00564 ; Check for NUMERIC entry 00565 ; 246C CB7F 00566 BIT 7,A ;Check NUM bit 246E 201C 00567 JR NZ,APARM ; go if set 00568 ; 00569 ; Response must be a string - Is length = 1 ? 00570 ; 2470 E60F 00571 AND 00001111B ;P/u length 2472 3D 00572 DEC A ;Better be one 2473 20A0 00573 JR NZ,PERR ;Not - parameter error 00574 ; 00575 ; P/u character representation of 'FLAG' 00576 ; 2475 2A8D24 00577 LD HL,(APARM+1) ;P/u pointer to char 2478 7E 00578 LD A,(HL) ;P/u char 2479 CBAF 00579 RES 5,A ; and make UC 247B D641 00580 SUB 41H ;Normalize for flag# 247D FE1A 00581 CP 26 ;Check on range 247F D2FF27 00582 JP NC,RANGER ;Error if too high 2482 FDE5 00583 PUSH IY 2484 E1 00584 POP HL ;P/u base of flags 2485 1600 00585 LD D,0 2487 5F 00586 LD E,A ;Put offset in DE 2488 19 00587 ADD HL,DE ;Add them together 2489 228D24 00588 LD (APARM+1),HL ;Set value in response word 00589 ; 00590 ; P/u addr, cvrt to Hex ASCII & put in string 00591 ; 248C 110000 00592 APARM LD DE,$-$ ;P/u the address 248F 210A29 00593 LD HL,HEXADD ;HL => Destination 2492 00594 @@HEX16 ;Cvrt DE to ASCII @ HL 2492+3E63 00595 LD A,99 2494+EF 00596 RST 40 00597 ; 00598 ; Convert DE to Decimal ASCII & put in string 00599 ; 2495 EB 00600 EX DE,HL ;Set HL = Address 2496 E5 00601 PUSH HL ;Save addr ptr 2497 111229 00602 LD DE,DECADD ;DE => Destination 249A 00603 @@HEXDEC ;Cvrt HL to ASCII @ DE 249A+3E61 00604 LD A,97 249C+EF 00605 RST 40 249D E1 00606 POP HL ;HL = Address 00607 ; 00608 ; P/u word & byte at that address 00609 ; 249E E5 00610 PUSH HL ;Save address ptr 249F 4E 00611 LD C,(HL) ;P/u byte 24A0 51 00612 LD D,C ;P/u the word value 24A1 23 00613 INC HL ; & stuff into the 24A2 5E 00614 LD E,(HL) ; message in hex 00615 ; 00616 ; Convert Byte to Hex ASCII & stuff in string 00617 ; 24A3 213029 00618 LD HL,OLDBYTE ;HL => Destination 24A6 00619 @@HEX8 ;Convert C to ASCII @ HL 24A6+3E62 00620 LD A,98 24A8+EF 00621 RST 40 00622 ; 00623 ; Convert Word to Hex ASCII & stuff in string 00624 ; 24A9 211C29 00625 LD HL,OLDWORD ;HL => Destination 24AC 00626 @@HEX16 ;Cvt DE to ASCII @ HL 24AC+3E63 00627 LD A,99 24AE+EF 00628 RST 40 24AF DDE1 00629 POP IX ;Recover Address ptr 00630 ; 00631 ; Was WORD or BYTE parameter entered ? 00632 ; 24B1 21CE28 00633 LD HL,BRESP ;HL => Byte Response 24B4 11C628 00634 LD DE,WRESP ;DE => Word Response 24B7 1A 00635 LD A,(DE) ;Anything entered ? 24B8 B6 00636 OR (HL) 24B9 2010 00637 JR NZ,WHICH ;Yes - which one 00638 ; 00639 ; Neither Entered - Modify string 00640 ; 24BB 212129 00641 LD HL,OLDWORD+5 ;End string 24BE 3629 00642 LD (HL),')' ;Don't display new word 24C0 23 00643 INC HL 24C1 3620 00644 LD (HL),' ' 24C3 23 00645 INC HL 24C4 3620 00646 LD (HL),' ' 24C6 23 00647 INC HL 24C7 3603 00648 LD (HL),ETX 24C9 182C 00649 JR DSPSTR ;Display string 00650 ; 00651 ; One or Both was entered - ensure both not 00652 ; 24CB 1A 00653 WHICH LD A,(DE) ;Word entered ? 24CC B7 00654 OR A 24CD 2816 00655 JR Z,BPARM ;No - get byte 00656 ; 00657 ; Word Entered - Make sure byte wasn't entered 00658 ; 24CF 7E 00659 LD A,(HL) ;Entered ? 24D0 B7 00660 OR A 24D1 C2EE27 00661 JP NZ,PRMERR ;Yes - parameter error 00662 ; 00663 ; Pick up Word Value & Stuff into Memory 00664 ; 24D4 110000 00665 WPARM LD DE,$-$ ;P/u word 24D7 DD7200 00666 LD (IX),D ;Stuff lsb 24DA DD7301 00667 LD (IX+1),E ;Stuff msb 00668 ; 00669 ; Cvt Word/Byte to Hex ASCII & put in string 00670 ; 24DD 212729 00671 STUFVAL LD HL,NEWWORD ;HL => Destination 24E0 00672 @@HEX16 ;Cvrt DE to hex in (HL) 24E0+3E63 00673 LD A,99 24E2+EF 00674 RST 40 24E3 1812 00675 JR DSPSTR ;Display String 00676 ; 00677 ; Stuff byte into mem if between 0-255 00678 ; 24E5 11FF00 00679 BPARM LD DE,00FFH ;P/u byte 24E8 7A 00680 LD A,D ;Hi-order must = 0 24E9 B7 00681 OR A 24EA C2EE27 00682 JP NZ,PRMERR ;No - Parm error 24ED DD7300 00683 LD (IX),E ;Stuff LSB into string 00684 ; 00685 ; Convert byte to Hex ASCII & stuff in string 00686 ; 24F0 4B 00687 LD C,E ;Set C = new byte 24F1 213929 00688 LD HL,NEWBYTE ;HL => New byte 24F4 00689 @@HEX8 ;Cvt C to ASCII @ HL 24F4+3E62 00690 LD A,98 24F6+EF 00691 RST 40 00692 ; 00693 ; Display address string 00694 ; 24F7 210829 00695 DSPSTR LD HL,ADDMSG ;HL => Message 24FA CD9027 00696 CALL DSPLY ;Display it 00697 ; 00698 ; Display Word/Byte string 00699 ; 24FD 211C29 00700 LD HL,OLDWORD ;HL => "Word string" 2500 3ACE28 00701 LD A,(BRESP) ;Byte response 2503 B7 00702 OR A ;Specified 2504 2803 00703 JR Z,DSPSTR2 ;No - display Word string 2506 213029 00704 LD HL,OLDBYTE ;Yes - use Byte string 2509 CD9027 00705 DSPSTR2 CALL DSPLY ;Display string 00706 ; 00707 ; HIGH$ & LOW$ check - Was HIGH$ entered ? 00708 ; 250C CDDE27 00709 HICHECK CALL GETHILO ;HIGH$ (HL), LOW$ (DE) 250F 22D627 00710 LD (OLDHI),HL ;Put old HIGH$ in header 2512 3AB028 00711 LD A,(HRESP) ;HIGH$ = value ? 2515 B7 00712 OR A 2516 281E 00713 JR Z,LOCHECK ;No - check LOW$ 2518 FDCB0246 00714 BIT 0,(IY+CFLAG$) ;If memory frozen, 251C C2FB27 00715 JP NZ,NOMEM ; can't do it 00716 ; 00717 ; HIGH$ entered, p/u value & check range 00718 ; 251F 010000 00719 HPARM LD BC,$-$ ;P/u requested new HIGH$ 2522 ED42 00720 SBC HL,BC ;New HIGH$ > old HIGH$ ? 2524 DAFF27 00721 JP C,RANGER ;Yes - Range error 00722 ; 00723 ; Create Header String & establish true HIGH$ 00724 ; 2527 D5 00725 PUSH DE ;Save DE 2528 50 00726 LD D,B ;Set DE = HIGH$ + 1 2529 59 00727 LD E,C 252A 13 00728 INC DE 252B 21DA27 00729 LD HL,HD_ADD ;Convert DE to Hex ASCII 252E 00730 @@HEX16 ; at HL (BC is preserved) 252E+3E63 00731 LD A,99 2530+EF 00732 RST 40 2531 21F6FF 00733 LD HL,-HLEN ;Set HL = actual HIGH$ 2534 09 00734 ADD HL,BC ; including header size 2535 D1 00735 POP DE ;Restore LOW$ 00736 ; 00737 ; Was LOW$ entered ? 00738 ; 2536 3AB728 00739 LOCHECK LD A,(LRESP) ;P/u response 2539 B7 00740 OR A ;Entered ? 253A 2816 00741 JR Z,CHKBOTH ;No - check range 253C FDCB0246 00742 BIT 0,(IY+CFLAG$) ;If memory frozen, 2540 C2FB27 00743 JP NZ,NOMEM ; can't do it 00744 ; 00745 ; LOW$ entered - cannot be below LOWEST 00746 ; 2543 110000 00747 LPARM LD DE,$-$ ;P/u value entered 2546 010026 00748 LD BC,LOWEST ;BC = lowest possible 2549 EB 00749 EX DE,HL ; memory location 254A E5 00750 PUSH HL 254B ED42 00751 SBC HL,BC ;In range ? 254D E1 00752 POP HL 254E EB 00753 EX DE,HL 254F DAFF27 00754 JP C,RANGER ;No - display range error 00755 ; 00756 ; HL = HIGH$, DE = LOW$ - do they overlap ? 00757 ; 2552 E5 00758 CHKBOTH PUSH HL ;HIGH$ must be 2553 B7 00759 OR A ; greater than or equal 2554 ED52 00760 SBC HL,DE ; to LOW$. 2556 E1 00761 POP HL 2557 DAFF27 00762 JP C,RANGER ;Less - range error 00763 ; 00764 ; LOW$ and HIGH$ are both valid - set LOW$ 00765 ; 255A EB 00766 EX DE,HL ;Pt DE => HI$, HL => LOW$ 255B 0601 00767 LD B,1 255D 00768 @@HIGH$ ;Set LOW$ 255D+3E64 00769 LD A,100 255F+EF 00770 RST 40 00771 ; 00772 ; Was the HIGH parameter specified ? 00773 ; 2560 3AB028 00774 LD A,(HRESP) ;Was HIGH specified ? 2563 B7 00775 OR A 2564 2813 00776 JR Z,DSPHI ;No - don't alter it 00777 ; 00778 ; Yes - Change Exit message to include header 00779 ; 2566 3E0A 00780 LD A,LF ;Change C/R to a L/F 2568 324029 00781 LD (HEADMES),A 00782 ; 00783 ; Xfer header into high memory 00784 ; 256B D5 00785 PUSH DE ;Save HIGH$ ptr 256C 13 00786 INC DE ;Pt to header destination 256D 21D427 00787 LD HL,HEADER ;HL => Header 2570 010A00 00788 LD BC,HLEN ;BC = header length 2573 EDB0 00789 LDIR ;Xfer to mem 2575 E1 00790 POP HL ;HL => HIGH$ (BC = 0) 2576 00791 @@HIGH$ ;Set HIGH$ (func. 0) 2576+3E64 00792 LD A,100 2578+EF 00793 RST 40 00794 ; 00795 ; P/u HIGH$/LOW$, cvt to Hex, & put in string 00796 ; 2579 CDDE27 00797 DSPHI CALL GETHILO ;HIGH$ (HL), LOW$ (DE) 257C E5 00798 PUSH HL ;Save HIGH$ ptr 257D 210229 00799 LD HL,LOWIS1 ;HL => Destination 2580 00800 @@HEX16 ;Cvt DE to ASCII @ HL 2580+3E63 00801 LD A,99 2582+EF 00802 RST 40 2583 D1 00803 POP DE ;DE = HIGH$ 2584 21F328 00804 LD HL,HIGHIS1 ;HL => Destination 2587 00805 @@HEX16 ;Cvt DE to ASCII @ HL 2587+3E63 00806 LD A,99 2589+EF 00807 RST 40 00808 ; 00809 ; Start of new code for LS-DOS 6.3.1 00810 ; 00811 IF @BLD631 258A 21EA28 00812 LD HL,HIGHIS 258D CD9027 00813 CALL DSPLY ;<631> 2590 214029 00814 LD HL,HEADMES 2593 CD9027 00815 CALL DSPLY 2596 CD7127 00816 CALL 2771H 259A 00817 L259A: EQU $+1 2599 010000 00818 L2599: LD BC,0000H 259C 0C 00819 L259C: INC C 259D C5 00820 PUSH BC 259E 00821 @@BANK 259E+3E66 00822 LD A,102 25A0+EF 00823 RST 40 25A1 C1 00824 POP BC 25A2 28F8 00825 JR Z,L259C 25A4 C5 00826 PUSH BC 25A5 48 00827 LD C,B 25A6 00828 @@BANK 25A6+3E66 00829 LD A,102 25A8+EF 00830 RST 40 25A9 C1 00831 POP BC 25AA 59 00832 LD E,C 25AB 79 00833 LD A,C 25AC CDA227 00834 L25AC: CALL L27A2 25AF ED437529 00835 LD (L2975),BC 25B3 218229 00836 LD HL,L2982 25B6 01FF00 00837 LD BC,00FFH 25B9 23 00838 L25B9: INC HL 25BA 0C 00839 L25BA: INC C 25BB 79 00840 LD A,C 25BC BB 00841 CP E 25BD 2810 00842 JR Z,L25CF 25BF C5 00843 PUSH BC 25C0 0602 00844 LD B,2 25C2 00845 @@BANK 25C2+3E66 00846 LD A,102 25C4+EF 00847 RST 40 25C5 C1 00848 POP BC 25C6 362B 00849 LD (HL),2BH 25C8 20EF 00850 JR NZ,L25B9 25CA 04 00851 L25CA: INC B 25CB 362D 00852 LD (HL),2DH 25CD 18EA 00853 JR L25B9 25CF 363E 00854 L25CF: LD (HL),3EH 25D1 23 00855 INC HL 25D2 360D 00856 LD (HL),0DH 25D4 78 00857 LD A,B 25D5 CDA227 00858 CALL L27A2 25D8 ED437229 00859 LD (L2972),BC 25DC 215F29 00860 LD HL,UNK1 25DF CD9027 00861 CALL DSPLY 25E2 113528 00862 LD DE,L2835 25E5 00863 @@GTMOD 25E5+3E53 00864 LD A,83 25E7+EF 00865 RST 40 25E8 2010 00866 L25E8: JR NZ,L25FA 25EA 227B26 00867 LD (L267B),HL 25ED E5 00868 PUSH HL 25EE CD5F27 00869 CALL L275F 25F1 CD7126 00870 CALL L2671 25F4 CD6427 00871 CALL L2764 25F7 E1 00872 POP HL 25F8 181E 00873 JR L2618 25FA CDDE27 00874 L25FA: CALL MEMSTRT 25FD 11FFFF 00875 LD DE,0FFFFH 2600 229C26 00876 LD (L269C),HL 2603 22A526 00877 LD (L26A5),HL 2606 EB 00878 EX DE,HL 2607 ED52 00879 SBC HL,DE 2609 CAAD27 00880 JP Z,L27AD 260C D5 00881 L260C: PUSH DE 260D CD5F27 00882 CALL L275F 2610 CD9226 00883 CALL L2692 2613 CD6427 00884 CALL L2764 2616 E1 00885 POP HL 2617 23 00886 INC HL 2618 224C26 00887 L2618: LD (L264C),HL 261B 7E 00888 L261B: LD A,(HL) 261C FE18 00889 CP 18H 261E C2C226 00890 JP NZ,L26C2 2621 23 00891 INC HL 2622 23 00892 INC HL 2623 5E 00893 L2623: LD E,(HL) 2624 23 00894 INC HL 2625 56 00895 LD D,(HL) 2626 ED534026 00896 LD (SM003),DE 262A 23 00897 INC HL 262B 46 00898 LD B,(HL) 262C 23 00899 INC HL 262D 110024 00900 L262D: LD DE,MEMORY 2630 7E 00901 L2630: LD A,(HL) 2631 12 00902 LD (DE),A 2632 23 00903 INC HL 2633 13 00904 INC DE 2634 10FA 00905 L2634: DJNZ L2630 2636 2A4C26 00906 LD HL,(L264C) 2639 111224 00907 LD DE,L2412 263C CD4D27 00908 CALL L274D 2640 00909 SM003: EQU $+1 263F 210000 00910 L263F: LD HL,0 2642 112424 00911 LD DE,SM002 2645 CD4D27 00912 CALL L274D 2648 2A4026 00913 L2648: LD HL,(SM003) 264C 00914 L264C: EQU $+1 264B 110000 00915 L264B: LD DE,0000H 264E B7 00916 OR A 264F ED52 00917 SBC HL,DE 2651 23 00918 INC HL 2652 113324 00919 LD DE,L2433 2655 00920 @@HEXDEC 2655+3E61 00921 LD A,97 2657+EF 00922 RST 40 2658 CD6427 00923 CALL L2764 265B 2A4026 00924 LD HL,(SM003) 265E 23 00925 INC HL 265F 7C 00926 LD A,H 2660 B5 00927 OR L 2661 CAAD27 00928 JP Z,L27AD 2664 EB 00929 EX DE,HL 2666 00930 L2666: EQU $+1 2665 210000 00931 L2665: LD HL,0 2668 ED52 00932 SBC HL,DE 266A EB 00933 EX DE,HL 266B CAFA25 00934 JP Z,L25FA 266E C31826 00935 L266E: JP L2618 2671 21F928 00936 L2671: LD HL,LOWIS 2674 115128 00937 LD DE,L2851 2677 CD2227 00938 CALL L2722 267B 00939 L267B: EQU $+1 267A 210000 00940 LD HL,0000H 267D E5 00941 PUSH HL 267E CD3B27 00942 CALL L273B 2681 114B49 00943 LD DE,494BH 2684 00944 @@GTDCB 2684+3E52 00945 LD A,82 2686+EF 00946 RST 40 2687 2D 00947 DEC L 2688 7E 00948 LD A,(HL) 2689 2D 00949 DEC L 268A 6E 00950 LD L,(HL) 268B 67 00951 LD H,A 268C 226626 00952 LD (L2666),HL 268F D1 00953 POP DE 2690 1815 00954 JR L26A7 2692 21EA28 00955 L2692: LD HL,HIGHIS 2695 114A28 00956 LD DE,L284A 2698 CD2227 00957 CALL L2722 269C 00958 L269C: EQU $+1 269B 210000 00959 LD HL,0000H 269E CD3B27 00960 CALL L273B 26A1 21FFFF 00961 LD HL,0FFFFH 26A5 00962 L26A5: EQU $+1 26A4 110000 00963 LD DE,0000H 26A7 B7 00964 L26A7: OR A 26A8 ED52 00965 SBC HL,DE 26AA 113424 00966 LD DE,L2434 26AD 00967 @@HEXDEC 26AD+3E61 00968 LD A,97 26AF+EF 00969 RST 40 26B0 3E0D 00970 LD A,0DH 26B2 12 00971 LD (DE),A 26B3 CD6427 00972 CALL L2764 26B6 216028 00973 L26B6: LD HL,L2860 26B9 110024 00974 LD DE,MEMORY 26BC 013900 00975 LD BC,39H 26BF EDB0 00976 LDIR 26C1 C9 00977 RET 26C2 7C 00978 L26C2: LD A,H 26C3 FE13 00979 CP 13H 26C5 DAFA25 00980 JP C,L25FA 26C8 E5 00981 PUSH HL 26C9 2B 00982 DEC HL 26CA 11FFFF 00983 LD DE,0FFFFH 26CD EB 00984 EX DE,HL 26CE B7 00985 OR A 26CF ED52 00986 SBC HL,DE 26D1 44 00987 LD B,H 26D2 4D 00988 LD C,L 26D3 E1 00989 POP HL 26D4 CAAD27 00990 L26D4: JP Z,L27AD 26D7 3E18 00991 LD A,18H 26D9 EDB1 00992 CPIR 26DB 203D 00993 JR NZ,L271A 26DD 2B 00994 DEC HL 26DE 2B 00995 DEC HL 26DF 224026 00996 LD (SM003),HL 26E2 23 00997 INC HL 26E3 23 00998 INC HL 26E4 23 00999 INC HL 26E5 5E 01000 LD E,(HL) 26E6 23 01001 INC HL 26E7 56 01002 LD D,(HL) 26E8 2A4026 01003 LD HL,(SM003) 26EB EB 01004 EX DE,HL 26EC B7 01005 OR A 26ED ED52 01006 SBC HL,DE 26EF 3822 01007 L26EF: JR C,L2713 26F1 2A4026 01008 L26F1: LD HL,(SM003) 26F4 23 01009 INC HL 26F5 23 01010 INC HL 26F6 23 01011 INC HL 26F7 23 01012 INC HL 26F8 23 01013 INC HL 26F9 7E 01014 LD A,(HL) 26FA FE10 01015 CP 10H 26FC 3015 01016 JR NC,L2713 26FE 47 01017 LD B,A 26FF 23 01018 L26FF: INC HL 2700 7E 01019 LD A,(HL) 2701 FE30 01020 CP '0' 2703 380E 01021 JR C,L2713 2705 FE7B 01022 CP 7BH 2707 300A 01023 JR NC,L2713 2709 10F4 01024 DJNZ L26FF 270B 219A28 01025 L270B: LD HL,L289A 270E 0609 01026 LD B,9 2710 C32D26 01027 JP L262D 2713 2A4026 01028 L2713: LD HL,(SM003) 2716 23 01029 INC HL 2717 23 01030 INC HL 2718 18A8 01031 JR L26C2 271A 21FFFF 01032 L271A: LD HL,0FFFFH 271D 224026 01033 LD (SM003),HL 2720 18E9 01034 JR L270B 2722 D5 01035 L2722: PUSH DE 2723 110024 01036 LD DE,MEMORY 2726 010400 01037 LD BC,4 2729 EDB0 01038 LDIR 272B 213928 01039 LD HL,L2839 272E 0E11 01040 LD C,11H 2730 EDB0 01041 LDIR 2732 E1 01042 POP HL 2733 111924 01043 LD DE,GDPARMS+1 2736 0E07 01044 LD C,7 2738 EDB0 01045 LDIR 273A C9 01046 RET 273B 112124 01047 L273B: LD DE,SM001 273E CD4D27 01048 CALL L274D 2741 215828 01049 LD HL,L2858 2744 112C24 01050 LD DE,L242C 2747 010800 01051 LD BC,8 274A EDB0 01052 LDIR 274C C9 01053 RET 274D D5 01054 L274D: PUSH DE 274E EB 01055 EX DE,HL 274F 21A528 01056 LD HL,L28A5 2752 01057 @@HEX16 2752+3E63 01058 LD A,99 2754+EF 01059 RST 40 2755 D1 01060 POP DE 2756 21A328 01061 LD HL,L28A3 2759 010700 01062 LD BC,7 275C EDB0 01063 LDIR 275E C9 01064 RET 275F 3E0D 01065 L275F: LD A,0DH 2761 320024 01066 LD (MEMORY),A 2764 210024 01067 L2764: LD HL,MEMORY 2767 CD9027 01068 CALL DSPLY 01069 IF @BLD631H 01070 P631H2: ;<631H> 01071 ENDIF 276A 0639 01072 LD B,39H 276C 3620 01073 L276C: LD (HL),' ' 276E 23 01074 INC HL 276F 10FB 01075 DJNZ L276C 2772 01076 L2772: EQU $+1 2771 3E15 01077 LD A,15H 2773 3D 01078 DEC A 2774 327227 01079 LD (L2772),A 2777 C0 01080 RET NZ 2778 01081 @@KEY 2778+3E01 01082 LD A,1 277A+EF 01083 RST 40 277B FE80 01084 CP 80H 277D CA0528 01085 JP Z,ABORT 2780 3E69 01086 LD A,69H 2782 EF 01087 RST 28H 01088 IF @BLD631H 2783 3E18 01089 LD A,18H ;<631H> 01090 ELSE 01091 LD A,17H 01092 ENDIF 2785 327227 01093 LD (L2772),A 2788 CDB626 01094 CALL L26B6 278B 210024 01095 LD HL,MEMORY 01096 IF @BLD631H 278E 187F 01097 JR P631H1 ;<631H> 01098 ELSE 01099 JR L279C 01100 ENDIF 2790 110000 01101 DSPLY: LD DE,0 2793 1C 01102 INC E 2794 1D 01103 DEC E 2795 2805 01104 JR Z,L279C 2797 01105 @@PRINT 01106 IFEQ 00H,1 01107 LD HL, 01108 ENDIF 2797+3E0E 01109 LD A,14 2799+EF 01110 RST 40 279A 2054 01111 JR NZ,IOERR 279C 01112 L279C: @@LOGOT 01113 IFEQ 00H,1 01114 LD HL, 01115 ENDIF 279C+3E0C 01116 LD A,12 279E+EF 01117 RST 40 279F C8 01118 RET Z 27A0 184E 01119 JR IOERR 27A2 0E2F 01120 L27A2: LD C,2FH 27A4 0C 01121 INC C 27A5 D60A 01122 SUB 0AH 27A7 30FB 01123 JR NC,27A4H 27A9 C63A 01124 ADD A,3AH 27AB 47 01125 LD B,A 27AC C9 01126 RET 27AD 3AD428 01127 L27AD: LD A,(GRESP) 27B0 B7 01128 OR A 27B1 CA6124 01129 JP Z,GOODEX 27B5 01130 L27B5: EQU $+1 27B4 C30000 01131 GPARM JP $-$ ;Yes - Jump to address 01132 ; 01133 ; CKPARM - Check if Parameter types are legal 01134 ; HL => Beginning of Parameter Table 01135 ; Z <= Set if Parameters entered were legal 01136 ; 27B7 D1 01137 GOODPRM POP DE ;Clear stack 27B8 23 01138 CKPARM INC HL ;Bump past 80H 27B9 7E 01139 LD A,(HL) ;P/u type byte 27BA 47 01140 LD B,A ;Save in B 27BB E60F 01141 AND 0FH ;Get length 27BD C8 01142 RET Z ;Zero - finished 01143 ; 01144 ; Position HL to response byte 01145 ; 27BE 23 01146 INC HL ;HL => Parameter Name 27BF E5 01147 PUSH HL ;Save start of name 27C0 5F 01148 LD E,A ;Set DE = name 27C1 1600 01149 LD D,0 ; length. 27C3 19 01150 ADD HL,DE 01151 ; 01152 ; Pick up response, mask off junk, & xfer in D 01153 ; 27C4 7E 01154 LD A,(HL) ;P/u response 27C5 E6E0 01155 AND 0E0H ;Bits 7-5 = response 27C7 57 01156 LD D,A ;Save in D 01157 ; 01158 ; Was the response bit acceptable by type ? 01159 ; 27C8 78 01160 LD A,B ;P/u type byte 27C9 A2 01161 AND D ;Mask off bits 4-0 27CA AA 01162 XOR D ;Result = Z if both set 01163 ; 01164 ; Position HL to next parameter entry 01165 ; 27CB 23 01166 INC HL ;Go past word 27CC 23 01167 INC HL 27CD 28E8 01168 JR Z,GOODPRM ;Z - good entry 01169 ; 01170 ; Illegal Entry - Recover Name start & RETurn 01171 ; 27CF 4B 01172 LD C,E ;Set BC = length 27D0 0600 01173 LD B,0 27D2 E1 01174 POP HL ;HL => Parameter Name 27D3 C9 01175 RET ;RETurn NZ 01176 ; 01177 ; 6.2 Memory Header 01178 ; 27D4 1808 01179 HEADER JR MEMSTRT ;JR to start of module 27D6 0000 01180 OLDHI DW 0 ;HIGH$ before this module 27D8 05 01181 DB 5,'&' ;Use "&" to denote addr. 26 27DA 6E 01182 HD_ADD DB 'nnnn' ;Hex ASCII address 6E 6E 6E 27DE 01183 MEMSTRT EQU $ ;Length byte 000A 01184 HLEN EQU $-HEADER ;Length of Header 01185 ELSE ;The way it was in 6.3.0 01186 ; 01187 ; Display HIGH$ = nnnn & LOW$ = nnnn string 01188 ; 01189 LD HL,HIGHIS ;HL => HIGH$/LOW$ string 01190 @@LOGOT ;Log & display 01191 LD HL,HEADMES ;Display Header message 01192 @@LOGOT ; if one was inserted 01193 ; 01194 ; Was a Go Parameter Entered ? 01195 ; 01196 GO LD A,(GRESP) ;GO entered ? 01197 OR A 01198 JP Z,GOODEX ;No - RETurn HL = 0 01199 ENDIF 01200 ; 01201 ; GETHILO - Get HIGH$ in HL, & LOW$ in DE 01202 ; 27DE 210000 01203 GETHILO LD HL,0 ;P/u LOW$ 27E1 54 01204 LD D,H ;Set DE = 0 27E2 5D 01205 LD E,L 27E3 0601 01206 LD B,1 27E5 01207 @@HIGH$ 27E5+3E64 01208 LD A,100 27E7+EF 01209 RST 40 27E8 EB 01210 EX DE,HL ;Save in DE 27E9 45 01211 LD B,L ;Set B = 0 27EA 01212 @@HIGH$ ;Get HIGH$ & RETurn 27EA+3E64 01213 LD A,100 27EC+EF 01214 RST 40 27ED C9 01215 RET ;RETurn 01216 IF @BLD631 01217 ELSE 01218 ; 01219 ; DSPLY - Display a line to the video 01220 ; 01221 DSPLY @@DSPLY ;Display line 01222 RET Z ;Z - RETurn 01223 DB 21H ;Skip LD A,## instruction 01224 ENDIF 01225 ; 01226 ; IOERR - Fatal Error Handler 01227 ; 27EE 3E2C 01228 PRMERR LD A,PAR_ERR ;Parameter Error 27F0 6F 01229 IOERR LD L,A ;Error # to HL 27F1 2600 01230 LD H,0 27F3 F6C0 01231 OR 0C0H ;Short error message 27F5 4F 01232 LD C,A ;Save in C 27F6 01233 @@ERROR ;Display error 27F6+3E1A 01234 LD A,26 27F8+EF 01235 RST 40 27F9 180D 01236 JR EXIT ;Go to exit routine 01237 IF @BLD631 01238 ELSE 01239 ; 01240 ; CKPARM - Check if Parameter types are legal 01241 ; HL => Beginning of Parameter Table 01242 ; Z <= Set if Parameters entered were legal 01243 ; 01244 GOODPRM POP DE ;Clear stack 01245 CKPARM INC HL ;Bump past 80H 01246 LD A,(HL) ;P/u type byte 01247 LD B,A ;Save in B 01248 AND 0FH ;Get length 01249 RET Z ;Zero - finished 01250 ; 01251 ; Position HL to response byte 01252 ; 01253 INC HL ;HL => Parameter Name 01254 PUSH HL ;Save start of name 01255 LD E,A ;Set DE = name 01256 LD D,0 ; length. 01257 ADD HL,DE 01258 ; 01259 ; Pick up response, mask off junk, & xfer in D 01260 ; 01261 LD A,(HL) ;P/u response 01262 AND 0E0H ;Bits 7-5 = response 01263 LD D,A ;Save in D 01264 ; 01265 ; Was the response bit acceptable by type ? 01266 ; 01267 LD A,B ;P/u type byte 01268 AND D ;Mask off bits 4-0 01269 XOR D ;Result = Z if both set 01270 ; 01271 ; Position HL to next parameter entry 01272 ; 01273 INC HL ;Go past word 01274 INC HL 01275 JR Z,GOODPRM ;Z - good entry 01276 ; 01277 ; Illegal Entry - Recover Name start & RETurn 01278 ; 01279 LD C,E ;Set BC = length 01280 LD B,0 01281 POP HL ;HL => Parameter Name 01282 RET ;RETurn NZ 01283 ; 01284 ; 6.2 Memory Header 01285 ; 01286 HEADER JR MEMSTRT ;JR to start of module 01287 OLDHI DW 0 ;HIGH$ before this module 01288 DB 5,'&' ;Use "&" to denote addr. 01289 HD_ADD DB 'nnnn' ;Hex ASCII address 01290 MEMSTRT EQU $ ;Length byte 01291 HLEN EQU $-HEADER ;Length of Header 01292 ENDIF 01293 ; 01294 ; 01295 ; Messages 01296 ; 01297 ; 27FB 211528 01298 NOMEM LD HL,NOMEM$ 27FE DD 01299 DB 0DDH 27FF 212928 01300 RANGER LD HL,RANGER$ 01301 ; 01302 ; Display & Log message, & RETurn 01303 ; 2802 01304 @@LOGOT ;Display/Log message 01305 IFEQ 00H,1 01306 LD HL, 01307 ENDIF 2802+3E0C 01308 LD A,12 2804+EF 01309 RST 40 2805 21FFFF 01310 ABORT LD HL,-1 ;Internal Error 2808 310000 01311 EXIT LD SP,$-$ ;P/u old SP address 280B 01312 @@CKBRKC ;Clear any Break 280B+3E6A 01313 LD A,106 280D+EF 01314 RST 40 280E C9 01315 RET ;RETurn 01316 ; 01317 IF @BLD631H 280F CD9C27 01318 P631H1: CALL L279C ;<631H>279C 2812 C36A27 01319 JP P631H2 ;<631H>276A 2815 4E 01320 NOMEM$ DB 'No memory available',CR ;<631H> 6F 20 6D 65 6D 6F 72 79 20 61 76 61 69 6C 61 62 6C 65 0D 01321 ELSE 01322 NOMEM$ DB 'No memory space available',CR 01323 ENDIF 2829 52 01324 RANGER$ DB 'Range error',CR 61 6E 67 65 20 65 72 72 6F 72 0D 01325 IF @BLD631 2835 24 01326 L2835: DB '$KI',03H 4B 49 03 2839 20 01327 L2839: DB ' Memory Directory' 4D 65 6D 6F 72 79 20 44 69 72 65 63 74 6F 72 79 284A 48 01328 L284A: DB 'HIGH$ ' 49 47 48 24 20 2850 3D 01329 DB '=' 2851 53 01330 L2851: DB 'Start ' 74 61 72 74 20 2857 3D 01331 DB '=' 2858 4C 01332 L2858: DB 'Length ' 65 6E 67 74 68 20 285F 3D 01333 DB '=' 2860 4D 01334 L2860: DB 'Module' 6F 64 75 6C 65 2866 20 01335 DB ' Start Address' 20 20 20 20 20 20 20 20 53 74 61 72 74 20 41 64 64 72 65 73 73 287C 20 01336 DB ' End Address' 20 20 20 20 20 45 6E 64 20 41 64 64 72 65 73 73 288D 20 01337 DB ' Length',CR 20 20 20 20 20 4C 65 6E 67 74 68 0D 289A 3C 01338 L289A: DB '' 75 6E 6B 6E 6F 77 6E 3E 28A3 58 01339 L28A3: DB 'X',27H 27 28A5 20 01340 L28A5: DB ' ' 20 20 20 28A9 27 01341 DB 27H 01342 ENDIF 01343 ; 01344 ; PARAMETER TABLE 01345 ; 28AA 80 01346 PRMTBL$ DB 80H ;6.x type @PARAM 01347 ; 01348 ; HIGH (H) - Accept Numeric input only 01349 ; 28AB 94 01350 DB NUM!ABB!4 28AC 48 01351 DB 'HIGH' 49 47 48 28B0 00 01352 HRESP DB 0 28B1 2025 01353 DW HPARM+1 01354 ; 01355 ; LOW (L) - Accept numeric input only 01356 ; 28B3 93 01357 DB NUM!ABB!3 28B4 4C 01358 DB 'LOW' 4F 57 28B7 00 01359 LRESP DB 0 28B8 4425 01360 DW LPARM+1 01361 ; 01362 ; ADD (A) - Accept numeric, string input 01363 ; 28BA B3 01364 DB NUM!STR!ABB!3 28BB 41 01365 DB 'ADD' 44 44 28BE 00 01366 ARESP DB 0 28BF 8D24 01367 DW APARM+1 01368 ; 01369 ; WORD (W) - Accept Numeric input only 01370 ; 28C1 94 01371 DB NUM!ABB!4 28C2 57 01372 DB 'WORD' 4F 52 44 28C6 00 01373 WRESP DB 0 28C7 D524 01374 DW WPARM+1 01375 ; 01376 ; BYTE (B) - Accept Numeric input only 01377 ; 28C9 94 01378 DB NUM!ABB!4 28CA 42 01379 DB 'BYTE' 59 54 45 28CE 00 01380 BRESP DB 0 28CF E624 01381 DW BPARM+1 01382 ; 01383 ; GO (G) - Accept Numeric input only 01384 ; 28D1 92 01385 DB NUM!ABB!2 28D2 47 01386 DB 'GO' 4F 28D4 00 01387 GRESP DB 0 28D5 B527 01388 DW GPARM+1 01389 ; 01390 ; CLEAR (C) - Accept Flag, Numeric or string input 01391 ; 28D7 F5 01392 DB FLAG!NUM!STR!ABB!5 28D8 43 01393 DB 'CLEAR' 4C 45 41 52 28DD 00 01394 CRESP DB 0 28DE 2124 01395 DW CPARM+1 01396 IF @BLD631 01397 ; 01398 ; PRINT (P) 01399 ; 28E0 55 01400 DB FLAG!ABB!5 28E1 50 01401 DB 'PRINT' 52 49 4E 54 28E6 00 01402 PRESP DB 0 28E7 9127 01403 DW DSPLY+1 01404 ENDIF 01405 ; 28E9 00 01406 NOP 01407 ; 28EA 48 01408 HIGHIS DB 'High = X',AP 69 67 68 20 3D 20 58 27 28F3 78 01409 HIGHIS1 DB 'xxxx',AP,' ' 78 78 78 27 20 28F9 20 01410 LOWIS DB ' Low = X',AP 4C 6F 77 20 3D 20 58 27 2902 78 01411 LOWIS1 DB 'xxxx',AP,ETX 78 78 78 27 03 01412 ; 2908 58 01413 ADDMSG DB 'X',AP 27 290A 6E 01414 HEXADD DB 'nnnn',AP,' = ' 6E 6E 6E 27 20 3D 20 2912 64 01415 DECADD DB 'ddddd (X',AP,ETX 64 64 64 64 20 28 58 27 03 01416 ; 291C 6E 01417 OLDWORD DB 'nnnn',AP,' => X',AP 6E 6E 6E 27 20 3D 3E 20 58 27 2927 6E 01418 NEWWORD DB 'nnnn',AP,') ',ETX 6E 6E 6E 27 29 20 20 03 01419 ; 2930 6E 01420 OLDBYTE DB 'nn',AP,' => X',AP 6E 27 20 3D 3E 20 58 27 2939 6E 01421 NEWBYTE DB 'nn',AP,') ',ETX 6E 27 29 20 20 03 01422 ; 2940 0D 01423 HEADMES DB CR,'Note : Memory Header Inserted',CR 4E 6F 74 65 20 3A 20 4D 65 6D 6F 72 79 20 48 65 61 64 65 72 20 49 6E 73 65 72 74 65 64 0D 01424 ; 01425 IF @BLD631 295F 0A 01426 UNK1 DB 0AH,'32K Banks avail = ' 33 32 4B 20 42 61 6E 6B 73 20 61 76 61 69 6C 20 3D 20 2972 64 01427 L2972: DB 'dd' 64 2974 2F 01428 DB '/' 2975 64 01429 L2975: DB 'dd' 64 2977 2C 01430 DB ', In use = ' 20 49 6E 20 75 73 65 20 3D 20 2982 3C 01431 L2982: DB '<+' 2B 01432 ENDIF 2400 01433 END MEMORY 2400 is the transfer address 00000 Total errors
[Copyright 1999,2002,2014 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance_2014 at nemesis.lonestar.org Comments and queries to this address: web_software_2014 at nemesis.lonestar.org]