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

  1. ; KERM1.ASM
  2. ; Anders Franz`n <5258>
  3. ; Stockholm 1987-09-20
  4.  
  5.          ORG  251:0
  6.  
  7. START    LD   A,(254:64)
  8.          AND  A
  9.          JRNZ ST1       Inga parametrar
  10.          LD   HL,255:128
  11.          LD   DE,PARMAREA
  12.          LD   BC,PARMLEN
  13.          LDIR
  14. ST1      LD   SP,STACK
  15.          LD   HL,KERMIT
  16.          PUSH HL
  17.          LD   (KERMSP),SP
  18.          LD   SP,PGM
  19.          LD   (254:39),SP S{nk stack
  20.          CALL INIT      Init av terminal
  21.          XOR  A
  22.          LD   (FIL+5),A Fil ej |ppen!!
  23.          LD   HL,TERMBILD
  24.          LD   E,L
  25.          LD   D,H
  26.          LD   (HL),32
  27.          INC  DE
  28.          LD   BC,24*80-1
  29.          LDIR
  30.          LD   HL,KERMBILD
  31.          LD   E,L
  32.          LD   D,H
  33.          LD   (HL),32
  34.          INC  DE
  35.          LD   BC,24*80-1
  36.          LDIR
  37.          LD   HL,TXT1
  38.          LD   DE,TERMBILD
  39.          LD   BC,TXT2-TXT1
  40.          LDIR
  41.          LD   DE,KERMBILD
  42.          LD   BC,TXT3-TXT2
  43.          LDIR
  44.          LD   HL,(254:32) HEAP
  45.          LD   DE,PGM
  46.          SBC  HL,DE
  47.          JRNC ST4       Program f|rst|rt
  48.          LD   IX,(254:28) BOFA
  49.          LD   HL,(254:28)
  50. ST2      LD   A,(HL)
  51.          CP   1
  52.          JRZ  ST4       Slut p} program
  53.          LD   C,A
  54.          LD   A,(IX+3)
  55.          CP   134
  56.          JRNZ ST3
  57.          LD   A,(IX+4)
  58.          CP   145
  59.          JRZ  ST5       CHAIN 'program'
  60. ST3      ADD  IX,BC
  61.          ADD  HL,BC
  62.          JR   ST2
  63.  
  64. ST4      CALL 10:112    NEW
  65.          LD   SP,STACK
  66.          JP   KERMIT
  67.  
  68. ST5      LD   C,5
  69.          ADD  HL,BC
  70.          EX   DE,HL     DE --> uttryck
  71.          LD   A,(13:63)
  72.          CP   255
  73.          JPZ  13:63     CHAIN
  74.          JP   13:61
  75.  
  76. TXT1     DM "Terminal"
  77. TXT2     DM "K E R M I T"
  78.          DM "   for ABC80"
  79.          DM "   Stockholm 1987"
  80. TXT3
  81.  
  82.          ORG  PGM
  83.  
  84.          DEFM "5  KERMIT    "
  85.          JP   TEDFIX    Retur fr}n TED
  86.          JP   TEDFIX1   Retur fr}n BASIC
  87. R[KNA    JP   192:0
  88. TILLBUFF JP   192:3
  89. SPARRAD  JP   192:6
  90.  
  91. TEDFIX   LD   A,(TEDFLG)
  92.          AND  A
  93.          JRNZ TEDFIX1   Retur till KERM
  94.          POP  AF
  95.          PUSH AF
  96.          SUB  4
  97.          LD   (R[KNA+2),A
  98.          LD   (TILLBUFF+2),A
  99.          LD   (SPARRAD+2),A
  100.          LD   (TEDFLG),A TED i minnet!
  101.          LD   IX,248:0  TED's LIB-rutin
  102.          LD   HL,TEDLIB
  103.          LD   (IX+14),L Ny LIB-rutin
  104.          LD   (IX+15),H f|r TED!
  105.          CALL INIT      Init av terminal
  106.          LD   (TEDSP),SP
  107.          LD   SP,STACK
  108.          JP   KERMIT
  109.  
  110. TEDFIX1  LD   (TEDSP),SP
  111.          LD   SP,(KERMSP)
  112.          RET
  113.  
  114. TEDSP    DW 0
  115. KERMSP   DW 0
  116.  
  117. TERMBILD DS 24*80
  118.          DW 0:2
  119. KERMBILD DS 24*80
  120.          DW 0:2
  121.  
  122. VISABILD LD   IX,3:116
  123.          LD   B,24
  124. VB1      PUSH BC
  125.          LD   E,(IX+0)
  126.          LD   D,(IX+1)
  127.          INC  IX
  128.          INC  IX
  129.          LD   A,(1:216) 40 eller 80
  130.          LD   C,A
  131.          LD   B,0
  132.          LDIR
  133.          CP   40
  134.          JRNZ VB2
  135.          LD   C,A
  136.          ADD  HL,BC
  137. VB2      POP  BC
  138.          DJNZ VB1
  139.          LD   E,(HL)
  140.          INC  HL
  141.          LD   D,(HL)
  142.          LD   (253:243),DE Mark|r
  143.          RET
  144.  
  145. SPARBILD LD   IX,3:116
  146.          LD   B,24
  147. SB1      PUSH BC
  148.          LD   L,(IX+0)
  149.          LD   H,(IX+1)
  150.          INC  IX
  151.          INC  IX
  152.          LD   A,(1:216) 40 eller 80
  153.          LD   C,A
  154.          LD   B,0
  155.          LDIR
  156.          CP   40
  157.          JRNZ SB2
  158.          LD   L,E
  159.          LD   H,D
  160.          LD   (HL),32
  161.          INC  DE
  162.          LD   BC,39
  163.          LDIR
  164.          INC  HL
  165. SB2      POP  BC
  166.          DJNZ SB1
  167.          LD   HL,(253:243) Mark|r
  168.          EX   DE,HL
  169.          LD   (HL),E
  170.          INC  HL
  171.          LD   (HL),D
  172.          RET
  173.  
  174. ;Filhantering, tar hand om ev fel
  175. FILCONTR PUSH HL
  176.          LD   HL,FILC3
  177.          EX   (SP),HL
  178.          LD   (254:54),SP RUN-timestack
  179.          PUSH HL
  180.          LD   HL,FILC2
  181.          LD   (IY+30),L ONERRORGOTO
  182.          LD   (IY+31),H
  183.          LD   (IY+14),0 RUN-mode
  184.          LD   (IY+15),0 NOTRACE
  185.          LD   HL,FILC1
  186.          EX   (SP),HL
  187.          PUSH DE
  188.          RET
  189.  
  190. FILC1    INC  SP
  191.          INC  SP
  192.          RET
  193.  
  194. FILC2    DB   4,0,1,145 BASIC-return
  195.  
  196. FILC3    LD   A,(IY+34) Errcode
  197.          AND  127
  198.          SCF
  199.          RET
  200.  
  201. PREPARE  LD   A,1
  202.          JR   OPEN1
  203.  
  204. PREPBAC  LD   A,4
  205.          JR   OPEN1
  206.  
  207. OPEN     XOR  A
  208. OPEN1    LD   IX,FIL
  209.          LD   DE,0:62
  210.          CALL FILCONTR
  211.          RET
  212.  
  213. ERROR    AND  127
  214.          LD   L,A
  215.          LD   H,0
  216.          PUSH HL
  217.          LD   HL,ERROR1
  218.          LD   BC,ERROR2-ERROR1
  219.          CALL 0:11
  220.          POP  HL
  221.          CALL SKRIVTAL
  222.          CALL 7:66
  223.          RET
  224.  
  225. ERROR1   DM 13,10,7,"ERR "
  226. ERROR2
  227.  
  228. ;Omvandla str{ng i buffert till tal DE
  229. G\RTAL   LD   A,(24:30)
  230.          CP   126
  231.          JPZ  24:30
  232.          JP   24:28
  233.  
  234. ;Omvandla tal till str{ng i buffert
  235. SKRIVTA1 LD   DE,253:213 Tempbuffer
  236.          PUSH DE
  237.          LD   A,(24:96) Kolla checksumma
  238.          CP   175
  239.          PUSH AF
  240.          CALLZ 24:96    \vers{tt till
  241.          POP  AF        ASCII
  242.          CALLNZ 24:98
  243.          EX   DE,HL
  244.          POP  DE
  245.          AND  A         Ber{kna l{ngd
  246.          SBC  HL,DE     p} str{ngen
  247.          LD   C,L
  248.          LD   B,H
  249.          EX   DE,HL
  250.          RET
  251.  
  252. ;Skriv ut talet HL
  253. SKRIVTAL CALL SKRIVTA1
  254.          CALL 0:11      Skriv ut str{ng
  255.          RET
  256.  
  257. ;Skriver talet HL som max kan best}
  258. ;av x tecken. X lagras i A innan anrop
  259. ;varefter talet skrivs ut h|gerst{llt.
  260. SKRTAL   PUSH DE        Spara utfyllnad
  261.          PUSH AF
  262.          CALL SKRIVTA1
  263.          POP  AF
  264.          EX   (SP),HL
  265.          PUSH BC
  266.          SUB  C
  267.          LD   C,A
  268.          CALLNZ 0:11    Skriv utfyllnad
  269.          POP  BC
  270.          POP  HL
  271.          CALL 0:11
  272.          RET
  273.  
  274. ;Kollar om wildcard finns. Fixar
  275. ;i ordning filnamn.
  276. DRIVEFIX RST  32
  277.          LD   (WILDSTR),HL
  278.          LD   BC,7:0
  279.          LD   (WILDANT),BC
  280.          PUSH HL
  281.          LD   BC,0:255
  282.          DEC  HL
  283. DF1      LD   E,A       Spara f|reg tkn
  284.          RST  24
  285.          INC  C         R{kna antal tkn
  286.          CP   "*"
  287.          JRZ  DF2
  288.          CP   "?"
  289.          JRNZ DF3
  290. DF2      INC  B         R{kna wildcards
  291. DF3      CP   ","
  292.          JRNZ DF4
  293.          LD   A,13
  294.          LD   (HL),A    Byt "," till CR
  295.          INC  HL        Filnamn-2
  296. DF4      CP   13
  297.          JRNZ DF1
  298.          RST  32
  299.          LD   (FILPEK),HL Spara fil-2
  300.          POP  HL
  301.          LD   A,E       Sista tecknet
  302.          CP   ":"
  303.          JRZ  DF5       Endast enhet!
  304.          LD   A,B
  305.          LD   (WILDFLG),A
  306.          AND  A
  307.          JRZ  DF6       Inga wildcards!
  308. DF5      LD   A,(HL)
  309.          AND  95
  310.          XOR  "D"
  311.          RETNZ
  312.          RST  24
  313.          AND  95
  314.          XOR  "R"
  315.          RETNZ
  316.          RST  24
  317.          SUB  48
  318.          CCF
  319.          RETNC
  320.          CP   8
  321.          RETNC
  322.          LD   C,A       Spara drive-nr
  323.          RST  24
  324.          XOR  ":"
  325.          RETNZ
  326.          RST  24
  327.          LD   (WILDSTR),HL Skippa enhet
  328.          LD   B,1          En drive
  329.          LD   (WILDANT),BC
  330.          AND  A
  331.          RET
  332.  
  333. DF6      LD   DE,255:150 BC=l{ngd
  334.          CALL 0:65      Fixa filnamn
  335.          RETC           Fel!
  336.          LD   HL,255:150+11
  337.          LD   DE,255:128
  338.          LD   BC,3
  339.          LD   A,(HL)
  340.          LDIR
  341.          CP   32
  342.          JRZ  DF7       Enhet saknas
  343.          LD   A,":"
  344. DF7      LD   (DE),A
  345.          INC  DE
  346.          LD   HL,255:150
  347.          LD   C,8
  348.          LDIR
  349.          LD   A,"."
  350.          LD   (DE),A
  351.          INC  DE
  352.          LD   C,3
  353.          LDIR
  354.          LD   A,13
  355.          LD   (DE),A
  356.          AND  A
  357.          RET
  358.  
  359.  
  360. ;J{mf|r str{ng med wildcard, om str{ng
  361. ;passar s{tts carry. Rekursiv rutin.
  362. ;DE! str{ng
  363. WILDCARD LD   HL,(WILDSTR)
  364. WC1      RST  32
  365.          EX   DE,HL
  366.          RST  32
  367.          EX   DE,HL
  368.          CP   13
  369.          JRNZ WC2
  370.          LD   A,(HL)
  371.          CP   13
  372.          SCF
  373.          RETZ
  374.          XOR  "*"
  375.          RETNZ
  376.          PUSH HL
  377.          RST  24
  378.          POP  HL
  379.          XOR  13
  380.          RETNZ
  381.          SCF
  382.          RET
  383.  
  384. WC2      LD   A,(HL)
  385.          CP   13
  386.          RETZ
  387.          LD   A,(DE)
  388.          CP   96
  389.          JRC  WC3
  390.          AND  95
  391. WC3      CP   (HL)
  392.          JRNZ WC5
  393. WC4      PUSH HL
  394.          PUSH DE
  395.          INC  HL
  396.          INC  DE
  397.          CALL WC1
  398.          POP  DE
  399.          POP  HL
  400.          RET
  401.  
  402. WC5      LD   A,(HL)
  403.          CP   "?"
  404.          JRZ  WC4
  405.          XOR  "*"
  406.          RETNZ
  407.          PUSH HL
  408.          PUSH DE
  409.          INC  HL
  410.          CALL WC1
  411.          POP  DE
  412.          POP  HL
  413.          RETC
  414.          PUSH HL
  415.          PUSH DE
  416.          INC  DE
  417.          CALL WC1
  418.          POP  DE
  419.          POP  HL
  420.          RET
  421.  
  422. WILDSTR  DW 0   Pekar p} wildcard
  423. WILDANT  DW 0   C=n{sta drive B=antal
  424. WILDFLG  DB 0   Finns wildcards?
  425. FILPEK   DW 0   Peka p} ev filnamn-2
  426.  
  427. ;Leta efter ord i tabell
  428. STRSCAN  LD   C,0
  429.          PUSH DE
  430.          CALL STR
  431.          POP  DE
  432.          RETZ           Hittat
  433.          RETM           Finns ej
  434.          PUSH HL
  435.          PUSH DE
  436.          LD   HL,STRSC1
  437.          LD   BC,STRSC2-STRSC1
  438.          CALL 0:11
  439.          POP  DE
  440.          POP  HL
  441.          LD   C,128
  442.          CALL STR
  443.          CALL 7:66
  444.          SCF
  445.          RET
  446.  
  447. STRSC1   DM 13,10,7,"Be more specific"
  448. STRSC2
  449.  
  450. ;Leta i tabell
  451. ;IN HL! text
  452. ;   DE! tabell
  453. ;    C  0=leta 128=skriv alla ounika
  454. ;UT  Z  funnen
  455. ;    M  ej hittad
  456. ;    P  ej unikt
  457. ;    A  ev kod
  458. ;   HL  ev n{sta ord
  459. STR      RST  32
  460.          XOR  13
  461.          DEC  A
  462.          RETM           Tom textrad
  463.          EXX
  464.          LD   B,1       CRLF f|re f|rsta
  465.          EXX
  466.          EX   DE,HL     HL! tabell
  467. STR1     LD   B,(HL)    Spara tabellkod
  468.          LD   (STR8),HL Spara tabellord
  469.          PUSH DE        Spara text
  470. STR2     LD   A,(DE)    Tecken i text
  471.          INC  DE
  472.          CP   96
  473.          JRC  STR3
  474.          AND  95        G|r versal
  475. STR3     INC  HL
  476.          CP   (HL)      J{mf|r tkn
  477.          JRZ  STR2      Lika
  478.          CP   32
  479.          JRZ  STR4
  480.          CP   ","
  481.          JRZ  STR4
  482.          CP   13
  483.          JRNZ STR6      Textord ej slut
  484. STR4     DEC  DE        Peka p} tkn
  485.          LD   (STR9),DE Spara n{sta ord
  486.          LD   A,B
  487.          EX   AF        Spara kod & NC!
  488.          INC  C         R{kna tr{ffar
  489.          BIT  7,C
  490.          JRZ  STR6      Skriv ej ounika
  491.          EXX
  492.          DJNZ STR5
  493.          CALL 7:66
  494.          LD   B,3       Tre ord/rad
  495.          LD   A,(1:216)
  496.          CP   40
  497.          JRZ  STR5
  498.          LD   B,5
  499. STR5     LD   HL,(STR8)
  500.          LD   A,-10     Rak v{nsterkant
  501.          LD   DE,SPACE  Avskiljare
  502.          CALL SKRIVTAB  Skriv tabellord
  503.          EXX
  504. STR6     LD   A,(HL)
  505.          INC  HL
  506.          BIT  7,A
  507.          JRZ  STR6      Leta tabordslut
  508.          DEC  HL
  509.          INC  A
  510.          JRZ  STR7      Slut p} tabell
  511.          POP  DE        Peka p} text
  512.          JR   STR1
  513.  
  514. STR7     POP  DE        Text
  515.          LD   HL,(STR9) N{sta ord
  516.          RST  32
  517.          EX   AF        ]terst{ll kod
  518.          AND  A         Clear carry
  519.          RES  7,C
  520.          DEC  C
  521.          RETZ           Hittad (NC)
  522.          EX   DE,HL     HL! text
  523.          RET
  524.  
  525. STR8     DW 0
  526. STR9     DW 0
  527.  
  528.  
  529. ;Spara tecken i TED
  530. TEDSPAR  LD   A,(TEDFLG)
  531.          AND  A
  532.          RETZ           TED ej i minnet
  533.          LD   IX,TEDKOL
  534.          LD   A,(SLASK)
  535.          CP   32
  536.          JRNC TS2
  537.          CP   9
  538.          JRZ  TS3
  539.          CP   10
  540.          JRZ  TS5
  541.          CP   12
  542.          JRZ  TS4
  543.          CP   13
  544.          JRZ  TS1
  545.          CP   8
  546.          RETNZ
  547.          DEC  (IX+0)
  548.          RETP
  549. TS1      LD   (IX+0),0
  550.          RET
  551.  
  552. TS2      LD   HL,FLAGG
  553.          SET  5,(HL)    Data i buffer
  554.          LD   HL,BUFFTED
  555.          LD   E,(IX+0)
  556.          LD   D,0
  557.          ADD  HL,DE
  558.          LD   (HL),A    Spara tecken
  559. TS3      INC  (IX+0)    \ka kolumn
  560.          LD   A,(IX+0)
  561.          CP   160
  562.          RETNZ          Rad ej full
  563. TS4      LD   (IX+0),0
  564. TS5      LD   DE,(TEDINRAD)
  565.          PUSH DE
  566.          LD   HL,(253:243)
  567.          PUSH HL        Spara mark|r
  568.          CALL SPARRAD
  569.          POP  HL
  570.          POP  DE
  571.          JRC  TS6
  572.          INC  DE
  573.          LD   (TEDINRAD),DE
  574.          CALL TILLBUFF
  575.          LD   HL,FLAGG
  576.          RES  5,(HL)    Buffer t|md
  577.          RET
  578.  
  579. TS6      LD   (253:243),HL
  580.          XOR  A
  581.          LD   (TEDSAVE),A
  582.          LD   DE,(3:162)
  583.          CALL 2:103     Blanka rad 23
  584.          LD   HL,FLAGG
  585.          SET  0,(HL)    L{mna terminal
  586.          SET  6,(HL)    TED full
  587.          LD   A,3
  588.          LD   (FELKOD),A
  589.          RET
  590.  
  591. TEDSEND  LD   A,(TEDSAVE)
  592.          XOR  2
  593.          RETNZ
  594.          LD   A,(TEDFLG)
  595.          AND  A
  596.          RETZ           TED ej i minnet
  597.          LD   A,(TEDKOL)
  598.          AND  A
  599.          JRNZ TSE4      TED-buff ej tom
  600.          LD   HL,(TEDANRAD)
  601.          LD   A,H
  602.          OR   L
  603.          JRNZ TSE1      Fler rader kvar
  604.          XOR  A
  605.          LD   (TEDSAVE),A
  606.          RET
  607.  
  608. TSE1     DEC  HL
  609.          LD   (TEDANRAD),HL
  610.          LD   HL,BUFFTED
  611.          LD   (TEDUTPOS),HL
  612.          LD   DE,(TEDUTRAD)
  613.          INC  DE
  614.          LD   (TEDUTRAD),DE
  615.          CALL TILLBUFF
  616.          LD   HL,BUFFTED+159
  617.          LD   B,160
  618.          LD   A,32
  619. TSE2     CP   (HL)
  620.          DEC  HL
  621.          JRNZ TSE3
  622.          DJNZ TSE2
  623.          DEC  HL
  624. TSE3     INC  HL
  625.          INC  HL
  626.          LD   (HL),13
  627.          LD   A,B
  628.          INC  A         R{kna med CR
  629. TSE4     DEC  A
  630.          LD   (TEDKOL),A
  631.          LD   HL,(TEDUTPOS)
  632.          LD   A,(HL)
  633.          INC  HL
  634.          LD   (TEDUTPOS),HL
  635.          SCF            Flagga
  636.          RET
  637.  
  638. TEDINRAD DW 0
  639. TEDUTRAD DW 0
  640. TEDANRAD DW 0
  641. TEDUTPOS DW 0
  642. TEDKOL   DB 0
  643.