home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / F / RSXMAKER.LZH / RSXTEM.ASM < prev   
Assembly Source File  |  1991-01-15  |  4KB  |  157 lines

  1. ;++
  2. ; RSXTEM - RSXMAKER RSX Template
  3. ;
  4. ; Copyright (c) 1986 by AutoSoft Incorporated
  5. ;
  6. ; See RSXMAKER.DOC for information.
  7. ;
  8. ;--
  9.  
  10. ;+
  11. ; RSX Header RFLAGS Flag bit definitions
  12. ;-
  13. FIRST    EQU    1    ; First RSX installed
  14. LAST    EQU    2    ; Last RSX installed
  15. NOREMOV    EQU    4    ; RSX may be removed
  16. REINIT    EQU    8    ; Re-initialize on subsequent installation requests
  17. MULTI    EQU    16    ; Install another copy on subsequent installs
  18. OVRLAY    EQU    32    ; Overlay CCP if first RSX installed
  19. NOMORE    EQU    64    ; No more RSX's may be installed
  20. NORELO    EQU    128    ; Do not relocate this RSX
  21. RELINI    EQU    256    ; Call INIT routine after relocation
  22.  
  23. ;+
  24. ; RSX Header Section begins here
  25. ;-
  26.     ORG    100H        ; Origin *must* be at 100H
  27.  
  28. ;+
  29. ; Do not modify these 14 fields
  30. ;-
  31. RSX:    JMP    RSTART        ; Jump to real code (jumped to from 0005)
  32. RSXRST:    JMP    RESET        ; Reset handler
  33. RINIT:    JMP    INIT        ; Initialization code
  34. RTERM:    JMP    TERM        ; Termination code
  35. RELST:    JMP    RSXCODE        ; Start of relocatable code
  36. DATAST:    JMP    RSXDATA        ; Start of data section (copied as is)
  37. RELEND:    JMP    RSXEND        ; End of RSX code and data to be relocated
  38. NXTWB:    JMP    $-$        ; WBOOT path (filled in by RSXMAKER)
  39. NEXT:    JMP    $-$        ; BDOS path (filled in by RSXMAKER)
  40. WBADR:    DW    $-$        ; Filled in by RSXMAKER
  41. WBJMP:    DW    $-$        ; Filled in by RSXMAKER
  42. RSIZE:    DW    RSXEND-RSX    ; Size of RSX code and data
  43. RSXID:    DB    'AutoSoft'    ; ID - Must be 'AutoSoft'
  44.  
  45. ;+
  46. ; The next three fields may be modified by the RSX programmer
  47. ;-
  48. RFLAGS:    DW    MULTI+REINIT     ; RSX flags (combine with +)
  49. RNAME:    DB    'RSXTEM  '    ; Name - must be 8 bytes - pad on rt w/spaces
  50. RDESC:    DB    'AutoSoft RSX Template',0 ; Description (null terminated)
  51.  
  52.  
  53. ;+
  54. ; RSX Code Section begins here
  55. ;-
  56. RSXCODE EQU $            ; Executable code *only* between here
  57.                 ; and RSXDATA (no in-line prints allowed)
  58.  
  59. ;+
  60. ; Initialization Routine (end with RET)
  61. ;-
  62. INIT:                ; This *must* be the label
  63.  
  64.     MVI    C,9        ; Just write a message to the console
  65.     LXI    D,INITMSG    ;
  66.     CALL    NEXT        ;
  67.     RET            ; And return
  68.  
  69. ;+
  70. ; Termination Routine (end with RET)
  71. ;-
  72. TERM:                ; This *must* be the label
  73.  
  74.  
  75.     MVI    C,9        ; Just write a message to the console
  76.     LXI    D,TERMMSG    ;
  77.     CALL    NEXT        ;
  78.     RET            ; And return
  79.  
  80. ;+
  81. ; BDOS Intercept Routine (end with JMP NEXT or RET)
  82. ;-
  83. RSTART:                ; This *must* be the label
  84.  
  85.     LXI    H,0        ; Clear HL
  86.     DAD    SP        ; Get current stack pointer
  87.     SHLD    USRSTK        ; Save it
  88.     LXI    SP,LOCSTK    ; Switch to local stack
  89.  
  90.     PUSH    D        ; Save environment
  91.     PUSH    B        ;
  92.     PUSH    PSW        ;
  93.  
  94. ;********************************************************************
  95.                 ; Insert function-specific code here
  96. ;********************************************************************
  97.  
  98.     POP    PSW        ; Restore environment
  99.     POP    B        ;
  100.     POP    D        ;
  101.     LHLD    USRSTK        ; And stack pointer
  102.     SPHL            ;
  103.     JMP    NEXT        ; Pass control to next RSX
  104.  
  105. ;+
  106. ; WBOOT Intercept Routine (end with JMP NXTWB)
  107. ;-
  108. RESET:    LXI    SP,LOCSTK    ; Local stack
  109.  
  110.     MVI    C,9        ; Write a message
  111.     LXI    D,WBMSG        ;
  112.     CALL    NEXT        ;
  113.  
  114.     LHLD    RFLAGS        ; HL = flags word
  115.     MOV    A,L        ; Low byte
  116.     ANI    FIRST        ; First?
  117.     JZ    NOT1ST        ; If Z, no
  118.  
  119.     MVI    C,13        ; Disk system reset
  120.     CALL    NEXT        ; (you might want to comment this and the
  121.                 ; previous line out to speed up warm boots)
  122.  
  123. NOT1ST:    MOV    A,L        ; Get flags
  124.     ANI    LAST        ; Last?
  125.     JZ    NOTLST        ; If Z, no
  126.  
  127.     LXI    H,RSX        ; Else reload BDOS vector
  128.     SHLD    0006        ;
  129.     LHLD    WBJMP        ; HL -> WBOOT vector in BIOS jump table
  130.     SHLD    0001        ; Insert WBOOT vector
  131.     INX    H        ; Point past JMP
  132.     LXI    D,RSXRST    ; Our WB address
  133.     MOV    M,E        ; Copy it into BIOS jump table
  134.     INX    H        ;
  135.     MOV    M,D        ;
  136.  
  137. NOTLST:    JMP    NXTWB        ; And pass control to next RSX (or CCP)
  138.  
  139. ;+
  140. ; RSX Data Section
  141. ;-
  142. RSXDATA EQU $            ; Data *must* start here - no data
  143.                 ; allowed before this point; no executable
  144.                 ; code beyond.
  145.  
  146. WBMSG:    DB    13,10,'Template RSX active.$'
  147. TERMMSG:
  148.     DB    'Template RSX terminated.',13,10,'$'
  149. INITMSG:
  150.     DB    'Template RSX initialized.',13,10,'$'
  151.  
  152.     DS    16        ; 16-byte stack
  153. LOCSTK:                ; Initial SP
  154. USRSTK:    DW    0        ; Caller's SP
  155.  
  156. RSXEND EQU $            ; No code or data allowed beyond this label
  157.