LS-DOS 6.3.1 - LBAUTO Assembly Listing (HTML format version)

[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]
              00001 ;LBAUTO/ASM - AUTO Command
              00003 ;
              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 ;
0002          00454 SECTOR  EQU     0<8+2
0020          00455 OFFSET  EQU     20H             ;Offset to Auto Buffer
0028          00456 RST28   EQU     28H             ;SVC restart
0019          00457 @CMNDR  EQU     25              ;Execute & return
0031          00458 @RDSEC  EQU     49              ;Read a sector SVC #
0035          00459 @WRSEC  EQU     53              ;Write a sector SVC #
              00460 ;
2400          00461         ORG     2400H
              00462 ;
              00463 AUTO
2400 ED730B24 00464         LD      (SAVESP+1),SP   ;Save SP address
2404 CD0E24   00465         CALL    PARSE           ;Do AUTO command
2407 210000   00466         LD      HL,0            ;Set no error
              00467 ;
              00468 ;       Reinstall SP & RETurn
              00469 ;
240A 310000   00470 SAVESP  LD      SP,$-$          ;P/u old SP
240D C9       00471         RET
              00472 ;
              00473 ;       Skip any leading spaces
              00474 ;
240E 2B       00475 PARSE   DEC     HL              ;Back one
240F 23       00476 PARSE2  INC     HL              ;Bump buff ptr
2410 7E       00477         LD      A,(HL)          ;P/u character
2411 FE20     00478         CP      ' '             ;Space ?
2413 28FA     00479         JR      Z,PARSE2        ;Go til non-space
              00480 ;
              00481 ;       Display auto Buffer on drive :d ?
              00482 ;
2415 FE3F     00483         CP      '?'             ;Display auto buffer ?
2417 2809     00484         JR      Z,DISAUTO
              00485 ;
              00486 ;       Execute Auto Buffer on drive :d ?
              00487 ;
2419 FE3D     00488         CP      '='             ;Execute auto buffer ?
241B 280F     00489         JR      Z,EXAUTO
              00490 ;
              00491 ;       Install the command in the auto buffer
              00492 ;
241D CD5124   00493         CALL    GETDRV          ;P/u drive #
2420 184B     00494         JR      WRBUFF          ;Write new auto & RETurn
              00495 ;
              00496 ;       Display command in auto buffer
              00497 ;
2422 CD4724   00498 DISAUTO CALL    GETAUTO         ;P/u drive #
2425          00499         @@LOGOT                 ;Display it
              00500         IFEQ    00H,1
              00501         LD      HL,
              00502         ENDIF
2425+3E0C     00503         LD      A,12
2427+EF       00504         RST     40
2428 C29E24   00505         JP      NZ,IOERR        ;NZ - I/O Error
242B C9       00506         RET                     ;Z - done
              00507 ;
              00508 ;       Execute command in auto buffer
              00509 ;
242C CD4724   00510 EXAUTO  CALL    GETAUTO         ;P/u drive #
242F          00511         @@FLAGS
242F+3E65     00512         LD      A,101
2431+EF       00513         RST     40
2432 7E       00514         LD      A,(HL)          ;P/u first character
2433 FE2A     00515         CP      '*'             ;Non-able auto ?
2435 2005     00516         JR      NZ,DOAUTO       ;No - do it
              00517 ;
              00518 ;       Non able auto command - skip "*"
              00519 ;
2437 23       00520         INC     HL              ;Bump to next char
2438 FDCB12E6 00521         SET     4,(IY+SFLAG$)   ;Disable 
              00522 ;
              00523 ;       Exit via @CMNDI or @CMNDR if requested
              00524 ;
243C FDCB024E 00525 DOAUTO  BIT     1,(IY+CFLAG$)   ;If CMNDR executing, then
2440 3E19     00526         LD      A,@CMNDR        ;  exit via CMNDR
2442 C22800   00527         JP      NZ,RST28
2445 3D       00528         DEC     A               ;  else readjust to
2446 EF       00529         RST     40              ;  CMNDI & exit
              00530 ;
              00531 ;       GETAUTO - Get Auto Command from BOOT sector
              00532 ;
              00533 ;       Advance to next byte in line
              00534 ;
2447 23       00535 GETAUTO INC     HL              ;Bump to next char
2448 7E       00536         LD      A,(HL)          ;  & p/u 1st char of drvspc
2449 CD5124   00537         CALL    GETDRV          ;Get drive #
244C CD8224   00538         CALL    RDBOOT          ;Read BOOT sector
244F EB       00539         EX      DE,HL           ;Pt HL to auto buffer
2450 C9       00540         RET                     ;RETurn
              00541 ;
              00542 ;       GETDRV - Check if (HL) contains a legal drive #
              00543 ;
2451 FE0E     00544 GETDRV  CP      CR+1            ;No drivespec ?
2453 D8       00545         RET     C               ;Use drive 0 as default
              00546 ;
              00547 ;       Drivespec indicator entered ?
              00548 ;
2454 FE3A     00549         CP      ':'             ;Drivespec indicator ?
2456 C0       00550         RET     NZ              ;No - use drive 0
              00551 ;
              00552 ;       Drivespec ":" entered - p/u drive #
              00553 ;
2457 23       00554         INC     HL              ;Position to drive #
2458 46       00555         LD      B,(HL)          ;P/u drive #
              00556 ;
              00557 ;       Position to command following drivspec
              00558 ;
2459 23       00559         INC     HL              ;Position to command
245A 7E       00560         LD      A,(HL)          ;C/R following spec ?
245B FE0E     00561         CP      CR+1
245D 3801     00562         JR      C,SKIPINC       ;Yes - don't INC
245F 23       00563         INC     HL              ;Position to command
              00564 ;
              00565 ;       Is the drive number in legal range ?
              00566 ;
2460 78       00567 SKIPINC LD      A,B             ;P/u Drive #
2461 D630     00568         SUB     '0'             ;Less than "0" ?
2463 329424   00569         LD      (DRIVE+1),A     ;Stuff away drive #
              00570         IF      @BLD631
              00571         ELSE
              00572         JR      C,ILDRIVE       ;C - Illegal drive #
              00573         ENDIF
2466 FE08     00574         CP      7+1             ;Greater than 7 ?
2468 D8       00575         RET     C               ;RETurn if legal
              00576 ;
              00577 ;       Illegal Drive Number - Display & abort
              00578 ;
2469 3E20     00579 ILDRIVE LD      A,32            ;Init "Illegal drive #
246B 1831     00580         JR      IOERR           ;Abort
              00581 ;
              00582 ;       WRBUFF - Write Auto Command to Boot
              00583 ;
246D CD8224   00584 WRBUFF  CALL    RDBOOT          ;Read in BOOT
              00585 ;
              00586 ;       Skip Leading spaces
              00587 ;
2470 2B       00588         DEC     HL              ;Skip leading spaces
2471 23       00589 SKPSPCS INC     HL
2472 7E       00590         LD      A,(HL)          ;P/u char
2473 FE20     00591         CP      ' '             ;Space ?
2475 28FA     00592         JR      Z,SKPSPCS       ;Yes - skip it
              00593 ;
              00594 ;       Transfer command into buffer
              00595 ;
2477 7E       00596 XFLP    LD      A,(HL)          ;P/u byte
2478 EDA0     00597         LDI                     ;(HL) => (DE) INC HL & DE
247A FE0E     00598         CP      CR+1            ;Eol ?
247C 30F9     00599         JR      NC,XFLP
              00600 ;
              00601 ;       RDBOOT/WRBOOT - Read/Write BOOT sector
              00602 ;
              00603 ;       Set A = @WRSEC Supervisory CALL #
              00604 ;
247E 3E35     00605 WRBOOT  LD      A,@WRSEC        ;Write Sector SVC #
2480 180D     00606         JR      BOOTIO          ;Go to I/O routine
              00607 ;
              00608 ;       RDBOOT - Check if the Drive is there
              00609 ;
2482 3A9424   00610 RDBOOT  LD      A,(DRIVE+1)     ;P/u drive #
2485 4F       00611         LD      C,A             ;Xfer to C for @CKDRV
2486          00612         @@CKDRV                 ;Drive alive
2486+3E21     00613         LD      A,33
2488+EF       00614         RST     40
2489 3E20     00615         LD      A,32            ;Init "Illegal drive #
248B 2011     00616         JR      NZ,IOERR        ;Abort if bad drive
              00617 ;
              00618 ;       Read GAT from directory if Model II
              00619 ;
              00620         IF      @MOD2
              00621         PUSH    IY              ;Save
              00622         @@GTDCT                 ;Locate DCT
              00623         LD      D,(IY+9)        ;Dir cyl
              00624         LD      A,(IY+3)        ;Get DCT data
              00625         LD      E,(IY+4)        ;Get dct data
              00626         POP     IY              ;Restore
              00627         AND     28H             ;8" floppy?
              00628         CP      20H             ;Yes?
              00629         JR      NZ,SETSYSI      ;Nope, sysinfo on 0
              00630         LD      A,E             ;Get +4
              00631         AND     50H             ;Bit 6/4
              00632         CP      40H             ;DD not alien?
              00633         JR      NZ,SETSYSI      ;Go if alien
              00634 ;
              00635         PUSH    HL              ;Save
              00636         LD      HL,BUFF         ;Start buffer
              00637         LD      E,0             ;GAT table
              00638         @@RDSSC                 ;Read directory
              00639         LD      DE,(BUFF+0CDH)  ;Get GAT info byte
              00640         POP     HL              ;Restore buffer
              00641         JR      NZ,IOERR        ;Go on disk error
              00642         BIT     7,E             ;System disk?
              00643 SETSYSI LD      DE,SECTOR       ;Sysinfo sector
              00644         JR      NZ,$+3          ;Go if data disk
              00645         INC     D               ;Sysinfo on cyl 1
              00646         LD      (SYSINFO),DE    ;Save sysinfo sector
              00647         ENDIF
248D 3E31     00648         LD      A,@RDSEC        ;A = @RDSEC SVC #
              00649 ;
              00650 ;       Pt HL => Buffer, DE = T/S, C = :d, A = SVC #
              00651 ;
248F E5       00652 BOOTIO  PUSH    HL              ;Save command ptr
2490 210025   00653         LD      HL,BUFF         ;HL => I/O buffer
2493 0E00     00654 DRIVE   LD      C,$-$           ;P/u drive # in C
              00655 ;
2495 110200   00656         LD      DE,SECTOR       ;DE = Track 0, Sector 2
2496          00657 SYSINFO EQU     $-2
              00658 ;
              00659 ;       Issue SVC & point DE => Auto comm buffer
              00660 ;
2498 EF       00661         RST     40              ;Read or Write Sector
2499 E1       00662         POP     HL              ;Recover command ptr
249A 112025   00663         LD      DE,BUFF+OFFSET  ;DE => Auto command buff
249D C8       00664         RET     Z               ;RETurn if successful
              00665 ;
              00666 ;       I/O Error Handler - Clean up stack & Abort
              00667 ;
249E 6F       00668 IOERR   LD      L,A             ;Set HL = Error #
249F 2600     00669         LD      H,0
24A1 F6C0     00670         OR      0C0H            ;Short error message
24A3 4F       00671         LD      C,A             ;Xfer to C for @ERROR
24A4          00672         @@ERROR                 ;Display error
24A4+3E1A     00673         LD      A,26
24A6+EF       00674         RST     40
24A7 C30A24   00675         JP      SAVESP          ;Exit
              00676 ;
2500          00677 BUFF    EQU     $<-8+1<+8       ;Next page boundary
              00678 ;
2400          00679         END     AUTO
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]

Valid HTML 4.01!