[Copyright 1999,2002 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 at nemesis.lonestar.org Comments and queries to this address: web_software_2011 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 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 at nemesis.lonestar.org Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]