home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / luxorabc80 / kerm4.asm < prev    next >
Assembly Source File  |  2020-01-01  |  14KB  |  582 lines

  1. ; KERM4.ASM
  2. ; Anders Franz`n <5258>
  3. ; Stockholm 1987-09-13
  4.  
  5.  
  6. ;Ny LIB-rutin f|r TED
  7. TEDLIB   LD   HL,TL4
  8.          LD   BC,TL5-TL4
  9.          CALL 0:11
  10. TL1      CALL 0:2
  11.          LD   HL,TL6
  12.          LD   BC,8
  13.          CPIR
  14.          JRZ  TL2       Siffra 0-7
  15.          LD   C,8
  16.          CPIR
  17.          RETNZ          Ej shift+siffra
  18.          XOR  A         Visa filstorlek
  19. TL2      LD   (255:212),A
  20.          LD   HL,TL7
  21.          LD   (WILDSTR),HL
  22.          LD   A,C       \nskad drive
  23.          OR   128       Flagga TED-lib
  24.          CALL DIR
  25.          JRNC TEDLIB
  26.          LD   HL,TL5
  27.          LD   BC,TL6-TL5
  28.          CALL 0:11
  29.          JR   TL1
  30.  
  31. TL4      DB 27,61,32+23,32+0,7
  32.          DM "*  \NSKAD DRIVE ?"
  33. TL5      DB 27,61,32+23,32+0,7
  34.          DM "*  SKIVAN EJ KLAR."
  35. TL6      DM "76543210"
  36.          DM '/&%$#"!='
  37. TL7      DB "*",13
  38.  
  39. ;Huvudrutin f|r LIB
  40. DIRH     RST  32
  41.          CP   ","
  42.          JRNZ DIRH1
  43.          INC  HL
  44.          RST  32
  45.          AND  95
  46.          CP   "S"
  47.          JRNZ DIRH1
  48.          RST  24
  49.          XOR  A         Filstorlek visas
  50. DIRH1    LD   (255:212),A Spara flagga
  51.          CALL DRIVEFIX
  52.          LD   HL,(WILDSTR)
  53.          LD   A,(HL)
  54.          CP   13
  55.          JRNZ DIRH2     Argument finns
  56.          LD   (HL),"*"  Default alla
  57.          INC  HL
  58.          LD   (HL),A
  59. DIRH2    CALL 7:66
  60.          LD   BC,(WILDANT)
  61. DIRH3    LD   A,C
  62.          PUSH BC
  63.          CALL DIR
  64.          POP  BC
  65.          INC  C
  66.          DJNZ DIRH3
  67.          RET
  68.  
  69. DIR      LD   C,A
  70.          AND  127
  71.          PUSH BC
  72.          CALL LIBINIT
  73.          POP  BC
  74.          RETC
  75.          BIT  7,C
  76.          LD   HL,DIR19
  77.          LD   BC,DIR20-DIR19
  78.          CALLNZ 0:11    Skriv om TED-lib
  79.          LD   DE,0:32*7 Sp}r 0 sektor 7
  80.          CALL LIBL[S    L{s sektor
  81.          RETC           Felkod >0
  82.          LD   HL,245:0  Inl{st sektor
  83.          LD   E,L
  84.          LD   D,L       DE <-- noll
  85.          LD   B,160     Antal bytes
  86.          XOR  A
  87. DIR1     CP   (HL)      Unders|k byte
  88.          INC  HL
  89.          JRNZ DIR5      Ej noll
  90.          PUSH HL
  91.          LD   HL,8
  92.          ADD  HL,DE     \ka antalet
  93.          EX   DE,HL     sektorer med 8
  94.          POP  HL
  95. DIR5     DJNZ DIR1      Upprepa
  96.          LD   (255:200),DE Ant sektorer
  97.          LD   DE,0:32*0 Sp}r 0 sektor 0
  98.          CALL LIBL[S    L{s sektor
  99.          RETC           Felkod > 0
  100.          LD   HL,DIR15
  101.          LD   BC,DIR17-DIR15
  102.          CALL 0:11      Skriv "DRx:"
  103.          LD   HL,245:135
  104.          LD   BC,120:0  Max 120 tecken
  105. DIR6     LD   A,(HL)
  106.          INC  HL
  107.          CP   10        Volymnamn slut ?
  108.          JRZ  DIR7      Ja, hoppa
  109.          CP   13
  110.          JRZ  DIR7      Ja, hoppa
  111.          CP   32        Finns volymnamn?
  112.          JRC  DIR8      Nej, hoppa
  113.          CP   128
  114.          JRNC DIR8      Nej, hoppa
  115.          INC  C         \ka r{knare
  116.          DJNZ DIR6      Upprepa om fler
  117. DIR7     LD   A,C
  118.          AND  A         Fanns volymnamn?
  119.          JRZ  DIR8      Nej, hoppa
  120.          LD   B,0       BC=l{ngd p} text
  121.          LD   HL,245:135
  122.          CALL 0:11      Skriv volymnamn
  123. DIR8     CALL 7:66
  124.          CALL FIRSTFIL
  125.          RETC
  126.          JRZ  DIR14
  127.          LD   B,1
  128. DIR9     DJNZ DIR11
  129.          CALL 7:66
  130.          LD   A,(1:216)
  131.          CP   40
  132.          LD   B,2
  133.          JRZ  DIR10
  134.          LD   B,4
  135. DIR10    LD   A,(255:212)
  136.          AND  A
  137.          JRZ  DIR11     Storlek visas
  138.          INC  B
  139. DIR11    PUSH BC
  140.          LD   HL,255:132
  141.          LD   BC,12
  142.          CALL 0:11      Skriv filnamn
  143.          LD   BC,1
  144.          LD   A,(255:212) Ska filstorlek
  145.          AND  A           visas ?
  146.          JRNZ DIR12     Nej
  147.          LD   HL,(255:146)
  148.          LD   A,4
  149.          LD   DE,SPACE
  150.          CALL SKRTAL
  151.          LD   BC,3
  152. DIR12    LD   HL,SPACE
  153.          CALL 0:11      Skriv space
  154.          POP  BC
  155.          CALL PAUS
  156.          RETC           CTRL-C
  157.          PUSH BC
  158.          CALL NEXTFIL
  159.          POP  BC
  160.          RETC
  161.          JRNZ DIR9
  162. DIR14    CALL 7:66
  163.          CALL 7:66
  164.          LD   HL,(255:202) Lediga sekt
  165.          CALL SKRIVTAL
  166.          LD   HL,DIR17
  167.          LD   BC,DIR18-DIR17
  168.          CALL 0:11
  169.          LD   HL,(255:200) Ant sektorer
  170.          CALL SKRIVTAL
  171.          LD   HL,DIR18
  172.          LD   BC,DIR19-DIR18
  173.          CALL 0:11
  174.          RET
  175.  
  176. DIR15    DM 13,10,"DR"
  177. DIR16    DM "x:  "
  178. DIR17    DM " of "
  179. DIR18    DM " sectors free."
  180.          DM 13,10
  181. DIR19    DB 12,27,61,32+3,32+0
  182.          DM "LIB",13,10
  183.          DM "====="
  184.          DB 27,61,32+6,32+0
  185. DIR20
  186.  
  187. LIBINIT  LD   (253:1),A Selektera drive
  188.          ADD  48
  189.          LD   (DIR16),A
  190.          LD   DE,0:32*6 Sp}r 0 sektor 6
  191.          CALL LIBL[S    L{s sektor
  192.          RETC           Felkod > 0
  193.          LD   HL,245:0  Inl{st sektor
  194.          LD   E,L
  195.          LD   D,L       DE <-- noll
  196.          LD   C,160     Antal byte
  197. LIB1     LD   B,8       ]tta bitar
  198. LIB2     RR   (HL)      Testa bit
  199.          JRC  LIB3      Upptagen
  200.          INC  DE        \ka r{knare
  201. LIB3     DJNZ LIB2      Repetera
  202.          INC  HL        N{sta byte
  203.          DEC  C         Slut ?
  204.          JRNZ LIB1      Nej, upprepa
  205.          LD   (255:202),DE Lediga sekt
  206.          LD   HL,245:239 Kopiera vilka
  207.          LD   DE,255:204 sektorer i
  208.          LD   C,8        biblioteket
  209.          LDIR            som {r anv{nda
  210.          AND  A
  211.          RET
  212.  
  213. FIRSTFIL LD   DE,2:0    Sp}r 2 sektor 0
  214.          JR   NX2
  215.  
  216. NEXTFIL  LD   HL,(DRFIL)
  217.          LD   DE,(DRSEKT)
  218.          LD   A,L
  219.          ADD  16        N{sta fil i
  220.          LD   L,A       biblioteket
  221.          LD   (DRFIL),HL
  222.          AND  A         Sektor slut ?
  223.          JRNZ NX3       Nej, kolla fil
  224. NX1      LD   A,E
  225.          ADD  32        N{sta sektor
  226.          LD   E,A       p} sp}r tv}
  227.          AND  A         Sektorer slut ?
  228.          RETZ           Ja, retur!
  229. NX2      LD   (DRSEKT),DE
  230.          PUSH DE        Spara sektor-nr
  231.          LD   HL,255:204
  232.          SRL  E         Dela E med 32
  233.          SRL  E
  234.          SRL  E
  235.          SRL  E
  236.          SRL  E
  237.          LD   D,0
  238.          ADD  HL,DE     Sl} i tabell
  239.          LD   A,(HL)    [r sektorn
  240.          CP   2         anv{nd ?
  241.          POP  DE
  242.          JRC  NX1       Nej, tag n{sta
  243.          CALL LIBL[S    L{s sektor
  244.          RETC           Felkod > 0
  245.          LD   HL,245:16 Biblioteket
  246.          LD   DE,252:16 Kassettbuffer 2
  247.          LD   BC,240
  248.          PUSH DE
  249.          LDIR
  250.          POP  HL        Filbeskrivning
  251.          LD   (DRFIL),HL
  252. NX3      LD   A,(HL)
  253.          AND  A         Finns fil ?
  254.          JRZ  NEXTFIL   Nej, hoppa
  255.          INC  A
  256.          JRZ  NEXTFIL
  257.          PUSH HL
  258.          LD   DE,4
  259.          ADD  HL,DE     Peka p} filnamn
  260.          EX   DE,HL
  261.          LD   HL,255:128
  262.          LD   (HL),"D"
  263.          INC  HL
  264.          LD   (HL),"R"
  265.          INC  HL
  266.          LD   A,(DIR16)
  267.          LD   (HL),A
  268.          INC  HL
  269.          LD   (HL),":"
  270.          INC  HL
  271.          EX   DE,HL
  272.          PUSH DE
  273.          LD   BC,8
  274.          LDIR           Spara filnamn
  275.          LD   A,"."
  276.          LD   (DE),A
  277.          INC  DE
  278.          LD   BC,3
  279.          LDIR           Spara extension
  280.          LD   A,13
  281.          LD   (DE),A
  282.          POP  DE
  283.          CALL WILDCARD  Kolla filnamn
  284.          POP  HL
  285.          JPNC NEXTFIL   Passar ej
  286.          LD   A,(255:212) Ska filstorlek
  287.          AND  A           visas ?
  288.          RETNZ          Nej, retur
  289.          LD   D,(HL)    Sp}r segmrecord
  290.          INC  HL
  291.          LD   A,(HL)
  292.          AND  224       Ta bort status
  293.          LD   E,A       Sektor*32
  294.          CALL LIBL[S    L{s segmrecord
  295.          RETC           Felkod > 0
  296.          LD   DE,245:4  Segmbeskrivning
  297.          LD   HL,0      R{knare f|r
  298.          LD   B,L       filstorleken
  299. NX4      LD   A,(DE)
  300.          INC  A         Fler segment ?
  301.          JRZ  NX5       Nej, hoppa
  302.          INC  DE        Skippa sp}radr
  303.          LD   A,(DE)
  304.          INC  DE
  305.          AND  31        Maska fram antal
  306.          INC  A         sektorer i segm
  307.          LD   C,A
  308.          ADD  HL,BC     \ka r{knare
  309.          JR   NX4       N{sta segment
  310.  
  311. NX5      LD   (255:146),HL
  312.          OR   1
  313.          RET
  314.  
  315. DRSEKT   DW 0
  316. DRFIL    DW 0
  317.  
  318. ; LIBL[S l{ser en sektor p} skivan.
  319. LIBL[S   PUSH DE
  320.          PUSH BC
  321.          PUSH HL
  322.          CALL 96:102    L{s sektor
  323.          POP  HL
  324.          POP  BC
  325.          POP  DE
  326.          LD   A,(253:21)
  327.          AND  A         Felkod > 0 ?
  328.          RETZ
  329.          SCF
  330.          RET
  331.  
  332. TYPE     PUSH HL
  333.          CALL CLOSE
  334.          POP  HL
  335.          CALL OPEN
  336.          JPC  ERROR
  337.          CALL 7:66
  338. TYP1     LD   HL,BUFF6
  339.          LD   BC,255
  340.          LD   DE,8:147
  341.          PUSH HL
  342.          CALL FILCONTR  L{s in en rad
  343.          POP  HL
  344.          JRC  TYP3      EOF, BAC el ERR
  345.          EX   DE,HL
  346.          LD   (HL),10
  347.          INC  HL
  348.          SBC  HL,DE
  349.          LD   C,L
  350.          LD   B,H
  351.          EX   DE,HL
  352.          CALL 0:11
  353.          CALL PAUS
  354.          JRNC TYP1      Ej CTRL-C
  355. TYP3     CP   186
  356.          JRZ  TYP4      Kanske BAC-fil
  357.          AND  A
  358.          JPNZ ERROR     Ej EOF
  359.          LD   DE,8:144
  360.          CALL FILCONTR  Close
  361.          JPC  ERROR
  362.          CALL 7:66
  363.          RET
  364.  
  365. TYP4     LD   L,(IX+8)
  366.          LD   H,(IX+9)
  367.          LD   A,(HL)
  368.          INC  HL
  369.          CP   130
  370.          JRZ  TYP5
  371.          CP   131
  372.          JRNZ TYP3      Ej BAC-fil
  373. TYP5     LD   A,(HL)
  374.          AND  A
  375.          JRZ  TYP6      Forts n{sta blk
  376.          DEC  A
  377.          JRZ  TYP3      Slut p} pgm
  378.          LD   DE,BUFF6
  379.          PUSH DE
  380.          PUSH IX
  381.          CALL 17:149    \vers{tt BAC-rad
  382.          POP  IX
  383.          EX   (SP),HL
  384.          EX   DE,HL
  385.          LD   (HL),10   LF sist i rad
  386.          INC  HL
  387.          AND  A
  388.          SBC  HL,DE
  389.          LD   C,L
  390.          LD   B,H
  391.          EX   DE,HL
  392.          CALL 0:11
  393.          CALL PAUS
  394.          POP  HL        N{sta rad
  395.          JRNC TYP5
  396.          JR   TYP3
  397.  
  398. TYP6     LD   DE,8:153
  399.          CALL FILCONTR  L{s n{sta block
  400.          JRNC TYP5
  401.          JR   TYP3
  402.  
  403. DELETE   PUSH HL
  404.          CALL CLOSE
  405.          POP  HL
  406.          CALL DRIVEFIX
  407.          LD   A,21
  408.          JPC  ERROR
  409. DEL1     LD   A,(WILDFLG)
  410.          AND  A
  411.          JRZ  DEL4      Ej wildcard
  412.          BIT  7,A
  413.          JRNZ DEL3      Drive initierad
  414.          SET  7,A
  415.          LD   (WILDFLG),A
  416. DEL2     LD   BC,(WILDANT)
  417.          DEC  B
  418.          RETM           Slut p} drivear
  419.          LD   A,C       Drivenummer
  420.          INC  C
  421.          LD   (WILDANT),BC
  422.          CALL LIBINIT
  423.          JRC  DEL2
  424.          CALL FIRSTFIL
  425.          JRC  DEL2
  426.          JRZ  DEL2      Drive tom
  427.          JR   DEL4
  428.  
  429. DEL3     CALL NEXTFIL
  430.          JRC  DEL2
  431.          JRZ  DEL2      N{sta drive
  432. DEL4     LD   HL,DEL6
  433.          LD   BC,DEL7-DEL6
  434.          CALL 0:11
  435.          LD   HL,255:128 Filnamn
  436.          LD   BC,16
  437.          PUSH HL
  438.          CALL 0:11
  439.          POP  HL
  440.          RST  32
  441.          CALL OPEN
  442.          JRC  DEL5
  443.          LD   DE,8:159
  444.          CALL FILCONTR  Delete fil
  445. DEL5     CALLC ERROR
  446.          CALL PAUS
  447.          RETC           CTRL-C
  448.          LD   A,(WILDFLG)
  449.          AND  A
  450.          JRNZ DEL1
  451.          RET
  452.  
  453. DEL6     DM   13,10,"delete "
  454. DEL7
  455.  
  456. CLOSE    LD   A,(LOG)
  457.          AND  A
  458.          JRNZ CL1
  459.          LD   A,(DMP)
  460.          AND  A
  461.          RETZ
  462. CL1      LD   HL,CL2
  463.          LD   BC,CL3-CL2
  464.          CALL 0:11
  465.          XOR  A
  466.          LD   (LOG),A
  467.          LD   (DMP),A
  468.          LD   IX,FIL
  469.          LD   DE,8:127
  470.          CALL FILCONTR  Close
  471.          JPC  ERROR
  472.          CALL 7:66
  473.          RET
  474.  
  475. CL2      DB 13,10
  476.          DM "Closing DUMP/LOG file"
  477. CL3
  478.  
  479. LOGG     PUSH HL
  480.          CALL CLOSE
  481.          POP  HL
  482.          CALL PREPARE
  483.          JPC  ERROR
  484.          LD   HL,BUFF3
  485.          LD   (LOGBUFF),HL
  486.          LD   IX,KERMAREA
  487.          LD   (IX+29),1 Textfil
  488.          LD   A,255
  489.          LD   (LOG),A
  490.          RET
  491.  
  492. DUMP     PUSH HL
  493.          CALL CLOSE
  494.          POP  HL
  495.          CALL OPEN
  496.          JPC  ERROR
  497.          LD   IX,KERMAREA
  498.          XOR  A
  499.          LD   (IX+20),A Kommando DUMP
  500.          LD   (IX+27),A Inget data l{st
  501.          LD   (IX+29),1 Textfil
  502.          DEC  A
  503.          LD   (DMP),A
  504.          RET
  505.  
  506. SAVE     PUSH HL
  507.          CALL CLOSE
  508.          POP  HL
  509.          CALL PREPBAC
  510.          JPC  ERROR
  511.          LD   E,(IX+8)
  512.          LD   D,(IX+9)
  513.          LD   A,D
  514.          AND  A
  515.          LD   A,52
  516.          JPZ  ERROR     Buffer saknas
  517.          LD   HL,SAV2
  518.          LD   BC,SAV3-SAV2
  519.          LDIR
  520.          EX   DE,HL
  521.          LD   DE,PARMAREA
  522.          LD   B,PARMLEN
  523. SAV1     LD   (HL),","
  524.          INC  HL
  525.          LD   (HL),199
  526.          INC  HL
  527.          LD   A,(DE)
  528.          INC  DE
  529.          LD   (HL),A
  530.          INC  HL
  531.          LD   (HL),0
  532.          INC  HL
  533.          LD   (HL),186
  534.          INC  HL
  535.          DJNZ SAV1
  536.          EX   DE,HL
  537.          LD   HL,SAV3
  538.          LD   BC,SAV8-SAV3
  539.          LDIR
  540.          CALL 8:156     Skriv block
  541.          CALL 8:127     St{ng filen
  542.          RET
  543.  
  544. SAV2     DB 130         BASIC-pgm
  545.  
  546.          DB 5*1+10
  547.          DB 10,0,134,129
  548.          DB 199,64,254,186
  549.          DB ",",199,0,0,186
  550.          DB 13
  551.  
  552.          DB 5*PARMLEN+10
  553.          DB 20,0,134,129
  554.          DB 199,128,255,186
  555.  
  556. SAV3     DB 13
  557.  
  558. SAV4     DB SAV7-SAV4
  559.          DB 30,0,134,145        CHAIN
  560.          DB 203,34,SAV6-SAV5    str{ng
  561. SAV5     DB "KERM.BAC"
  562. SAV6     DB 187,13
  563. SAV7     DB 1           Slut p} pgm
  564. SAV8
  565.  
  566. PAUS     CALL 3:62
  567.          SCF
  568.          RETNZ          CTRL-C
  569.          PUSH IX
  570.          INP  56
  571.          AND  127
  572.          CP   32
  573.          JRZ  PAUS1     Tangentbroms
  574.          LD   A,(253:245)
  575.          AND  128
  576.          JRZ  PAUS2     Tangent ej nere
  577.          CALL 0:2
  578. PAUS1    CALL 0:2
  579. PAUS2    POP  IX
  580.          AND  A
  581.          RET
  582.