Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. ;#INCLUDE "ALLVARS.ASH"
  2. ;#INCLUDE "DDEF.ASM"
  3.  
  4. ; BOOT SECTOR FORMAT:
  5. ;  0:  JP BOOT         < NEED FOR BOOT
  6. ;  3:  55,AAH          < NEED FOR CONFIG
  7. ;  5...  CONFIG
  8. ; 7F:  5AH             < NEED FOR BOOT&CONFIG
  9. ; CYCLIC CHECKSUM = 1  < NEED FOR BOOT&CONFIG
  10.  
  11. ; CONFIG RECORD FORMAT:
  12. ; DB TYPE
  13. ; DB SIZE
  14. ; ...
  15. ; DATUM
  16. ; ....
  17.  
  18. ; INITIAL CHANNEL ASSIGMENT:
  19. ;   CH0  - FLOPPY
  20. ;   CH1  - EDISK
  21. ;   CH2  - HDD
  22.  
  23. TRY_LOD:LD      (IX-_RQCOM),_RESET
  24.         CALL    DMON_E
  25.         RET     NZ
  26.         LD      (IX-_RQCOM),_RECAL
  27.         CALL    DMON_E
  28.         RET     NZ
  29.         LD      (IX-_RQCOM),_READ
  30.         LD      HL,FLP_LOAD
  31.         LD      DE,RQCOM+1
  32.         LD      BC,7
  33.         LDIR
  34.         JP      DMON_E
  35. FLP_LOAD:
  36.         DB      1               ; 1 BLOCK
  37.         DW      0               ; 0 TRACK
  38.         DW      1               ; 1ST BLOCK (1-BASED)
  39.         DW      8000H
  40.  
  41. CFG_LOAD:LD    (IX-_RQCHAN),0        ; TRY TO LOAD FROM FLOPPY (CH0)
  42.         CALL    TRY_LOD
  43.         JR      Z,CL_CHK
  44.         LD      (IX-_RQCHAN),2        ; TRY TO LOAD FROM HARD (CH2)
  45.         CALL    TRY_LOD
  46.         RET     NZ                    ; CAN'T LOAD CONFIG
  47. CL_CHK: LD      HL,8000H
  48.         LD      B,80H
  49.         XOR     A
  50. CLC_LP: ADD     A,(HL)
  51.         ADC     A,0
  52.         INC     HL
  53.         DJNZ    CLC_LP
  54.         DEC     A
  55.         RET     NZ
  56.         LD      A,(8003H)
  57.         CP      55H
  58.         RET     NZ
  59.         LD      A,(8004H)
  60.         CP      0AAH
  61.         RET     NZ
  62. ;        LD      A,(807FH)
  63. ;        CP      5AH
  64. ;        RET     NZ
  65.  
  66. CONF:  LD      A,0C9H          ; RET
  67.         LD      (SYS_ON),A
  68.         LD      (SYS_OFF),A
  69.         LD      IY,8005H
  70. CFG_I:  LD      A,(IY)
  71. ;        VCALL   <_DONE,TERM,SKIP,LOAD,ASS,CINIT,EXEC_,GO_,FORMAT>
  72.                 CALL CONF2
  73.                 JR CONF1
  74. CONF2           CALL _VJMP
  75.                 DB 9
  76.                 DW _DONE
  77.                 DW TERM
  78.                 DW SKIP
  79.                 DW LOAD
  80.                 DW ASS
  81.                 DW CINIT
  82.                 DW EXEC_
  83.                 DW GO_
  84.                 DW FORMAT
  85.  
  86. CONF1        OR      A
  87.         JR      Z,DONE
  88. ERR:    CALL    PRN
  89.         DB      0DH,0AH,"Config error ",0
  90.         CALL    PHEX
  91.         CALL    PRN
  92.         DB      "startup aborted!",0DH,0AH,0
  93.         SCF
  94.         JR      ST_RET
  95.  
  96. _DONE:  POP     AF
  97. DONE:   LD      B,0
  98. DONE1:  LD      C,(IY+1)
  99.         ADD     IY,BC
  100.         JR      CFG_I
  101. TERM:   POP     AF
  102.         OR      A
  103. ST_RET: LD      A,0F3H          ; DI
  104.         LD      (SYS_ON),A
  105.         LD      (SYS_OFF),A
  106.         RET
  107.  
  108. SKIP:   POP     AF
  109.         LD      B,(IY+2)        ; DB HI(SIZE)
  110.         JR      DONE1
  111.  
  112. G_DAT:  EX      (SP),HL
  113.         LD      E,(HL)
  114.         INC     HL
  115.         EX      (SP),HL
  116.         LD      D,0
  117.         PUSH    IY
  118.         EX      (SP),HL
  119.         ADD     HL,DE
  120.         EX      (SP),HL
  121.         POP     DE
  122.         RET
  123.  
  124. LOAD:   CALL    G_DAT           ; DB NUM OF 128-BYTES BLOCKS
  125.         DB      3               ; DS ... CHANAL FOR LOAD
  126.         LD      A,_SETCH
  127.         LD      C,9
  128.         CALL    PSCHK
  129.         OR      A
  130.         RET     NZ
  131.         LD      DE,RQCHAN
  132.         LD      HL,RQIMG
  133.         LD      BC,9
  134.         LDIR
  135.         LD      A,(IY+2)
  136.         LD      (RQBLN),A
  137. DMON_E: PUSH    IY
  138.         CALL    DISK
  139.         POP     IY
  140.         OR      A
  141.         RET
  142.  
  143. RQIMG:  DB      9                    ;RQCHAN  - КАНАЛ
  144.         DB      _READ                ;RQCOM   - КОМАНДА
  145.         DB      1                    ;RQBLN   - ЧИСЛО БЛОКОВ
  146.         DW      0                    ;RQTRACK - ДОРОЖКА
  147.         DW      2                    ;RQBLOCK - БЛОК
  148.         DW      8080H                ;RQBADR  - АДРЕС БУФЕРА
  149.  
  150. ASS:    CALL    G_DAT           ; DB DRIVE (OR -1 FOR CHANAL ONLY)
  151.         DB      4               ; DB CHAN_NUM (+HI BIT - NOT SET CH)
  152.         LD      C,(IY+3)        ; DS ... < CHANAL ITSELF
  153.         BIT     7,C
  154.         JR      NZ,NOT_ASS_CH
  155.         PUSH    DE
  156.         LD      A,_SETCH
  157.         CALL    PSCHK
  158.         POP     DE
  159.         OR      A
  160.         RET     NZ
  161.         JR      ASS_IT
  162. NOT_ASS_CH:
  163.         LD      DE,0
  164. ASS_IT: LD      B,(IY+2)
  165.         BIT     7,B
  166.         RET     NZ
  167.         LD      C,(IY+3)
  168.         SET     7,B
  169.         RES     7,C
  170.         JP      BIOS+33H
  171.  
  172. CINIT:  CALL    G_DAT           ; DB 'STR',0
  173.         DB      2
  174. CINI_L: LD      A,(DE)
  175.         INC     DE
  176.         OR      A
  177.         RET     Z
  178.         RST     20H
  179.         JR      CINI_L
  180.  
  181. EXEC_   LD      L,(IY+2)        ; DW PROC, CALL IT (IF 0 - CALL IY+4)
  182.         LD      H,(IY+3)
  183.         LD      A,H
  184.         OR      L
  185.         JR      NZ,EXE_OK
  186.         CALL    G_DAT
  187.         DB      4
  188.         EX      DE,HL
  189. EXE_OK: JP      (HL)
  190.  
  191. GO_     CALL    G_DAT
  192.         DB      2
  193.         LD      A,(IY+1)        ; DB 'RUN STR'
  194.         SUB     2
  195.         LD      (CCP+7),A
  196.         LD      C,A
  197.         LD      B,0
  198.         EX      DE,HL
  199.         LD      DE,CCP+8
  200.         LDIR
  201.         XOR     A
  202.         RET
  203.  
  204. FORMAT: LD      A,(IY+2)        ; DB CHAN NUM
  205.         LD      (RQCHAN),A      ; DB TRACK NUM
  206.         LD      A,(IY+3)        ; DB FILLER
  207.         LD      (RQTRACK),A
  208.         LD      A,(IY+4)
  209.         LD      (RQBLN),A
  210.         LD      (IX-_RQTRACK+1),0
  211.         LD      (IX-_RQBADR),2
  212.         LD      (IX-_RQCOM),_FORMAT
  213.         JP      DMON_E
  214.