home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol058 / tiosp.sqc / TIOSP.SRC
Encoding:
Text File  |  1985-02-10  |  9.3 KB  |  405 lines

  1. ;    TRSDOS SYSTEM EQUATE
  2.  
  3. SYSTEM    EQU    402DH
  4.  
  5. ;               PIXEL SET ROUTINE FROM TRS-80 ASSEMBLY
  6. ;               LANGUAGE PROGRAMMING BY BARDEN PAGE 178.
  7.  
  8. ;               ENTRY:  D CONTAINS Y: (0<=Y<=47)
  9. ;                       E CONTAINS X: (0<=X<=127)
  10.  
  11. ;               THIS ROUTINE USES Z80 INSTRUCTIONS
  12.  
  13. SET$PIXEL:
  14.         MOV     A,D
  15.         MVI     B,0FFH
  16. SET01:
  17.         INR     B
  18.         SUI     3
  19.         JP      SET01
  20.         ADI     3
  21.         DB      0CBH,27H                ; SLA A
  22.         MOV     C,A
  23.         MOV     L,B
  24.         MVI     H,0
  25.         MVI     B,6
  26. SET02:
  27.         DAD     H
  28.         DCR     B
  29.         JNZ     SET02
  30.         MVI     D,0
  31.         DB      0CBH,3BH                ; SRL E
  32.         JNC     SET03
  33.         INR     C
  34. SET03:
  35.         DAD     D
  36.         LXI     D,3C00H
  37.         DAD     D
  38.         DB      0CBH,21H                ; SLA C
  39.         DB      0CBH,21H
  40.         DB      0CBH,21H
  41.         MVI     A,0C6H
  42.         ADD     C
  43.         STA     SET04+1
  44. SET04:
  45.         DB      0CBH,00H
  46.         DB      0CBH,0FEH               ; SET 7,(HL)
  47.         RET
  48.  
  49. ;    ENVIRONMENT RETRIEVAL ROUTINE
  50.  
  51. BEGIN:
  52.     IF    PERCUSSION
  53.     MVI    A,0D3H
  54.     STA    PR21
  55.     STA    PR31
  56.     STA    PR41
  57.     MVI    A,0F5H
  58.     STA    PR21+1
  59.     STA    PR31+1
  60.     STA    PR41+1
  61.     ENDIF
  62.     LDA    DAC
  63.     STA    X22+1
  64.     STA    X33+1
  65.     STA    X44+1
  66.     RET
  67.  
  68.  
  69. ; TRS-80 DEFINITIONS
  70.  
  71. BLOCK:  DS      0
  72.  
  73. CPU:    DB      3
  74. CLOCK:  DB      95H,58H,8DH,80H
  75.  
  76. DAC:   DB       0FCH
  77.  
  78. CRLF:    DB    0DH,00H,'$'
  79.  
  80. MXCOL:  DW      64
  81. MXROW:  DW      16
  82.  
  83. CEOS:   DB      31
  84. CEOL:   DB      30
  85.  
  86. SCRL:   DB      42      ; ASTERISK
  87. HOME:   DB      59      ; SEMICOLON
  88. UP$ARROW: DB    91
  89. LEFT$ARROW: DB  8
  90. DOWN$ARROW: DB  10
  91. RITE$ARROW: DB  9
  92. RETURN: DB      0DH
  93. QUIT:   DB      36      ; DOLLAR SIGN
  94. CANCEL: DB      39      ; SINGLE QUOTE
  95.  
  96. PAGE$HEIGHT: DW 50
  97. PAGE$FEED: DB   0
  98. PAGE$SPACE: DB  0
  99.  
  100. ;       JUMP TABLE FOR TRSDOS 2.1
  101.  
  102. CURSOR  EQU     4020H           ; CURSOR ADDRESS
  103.  
  104. JGTCH:  JMP     002BH           ; GET CHARACTER
  105. JWTCH:  JMP     0033H           ; WRITE CHARACTER
  106. JREWRT: JMP     4420H           ; CREATE FILE
  107. JRESET: JMP     4424H           ; OPEN FILE
  108. JCLOS:  JMP     4428H           ; CLOSE FILE
  109. JDELE:  JMP     442CH           ; DELETE FILE
  110. JWRIT:  JMP     443CH           ; WRITE TO FILE
  111. JREAD:  JMP     4436H           ; READ FROM FILE
  112.  
  113.  
  114. ;       LOGICAL I/O SYSTEM FOR TRS-80 LEVEL 2
  115.  
  116. ;               GET CHARACTER (W/OUT ECHO) FROM CONSOLE
  117. ;               OUTPUTS:        A = CHARACTER
  118.  
  119. FGTCH:
  120.         MVI     A,15
  121.         CALL    JWTCH
  122.         CALL    FGTC01
  123.         MVI     A,14
  124.         CALL    JWTCH
  125.         CALL    FGTC01
  126.         JMP     FGTCH
  127. FGTC01:
  128.         MVI     B,10
  129. FGTC02:
  130.         LXI     D,-1
  131.         LXI     H,1000
  132. FGTC03:
  133.         DAD     D
  134.         JC      FGTC03
  135.         PUSH    B
  136.         CALL    JGTCH           ; FGTCH=002BH
  137.         POP     B
  138.         ORA     A               ; TEST FOR
  139.         JNZ     FGTC04          ; ANY CHAR
  140.         DCR     B
  141.         JNZ     FGTC02
  142.         RET
  143. FGTC04:
  144.         POP     H
  145.         ANI     7FH             ; CLEAR PARITY
  146.         MOV     B,A
  147.         LDA     CANCEL          ; TEST FOR CANCEL
  148.         CMP     B
  149.         JZ      BOOT
  150.         LDA     FLOWER
  151.         CMP     B               ; ADJUST
  152.         JP      FGTC05          ; LOWER
  153.         CPI     '{'             ; CASE
  154.         JP      FGTC05
  155.         MOV     A,B
  156.         ANI     5FH
  157.         MOV     B,A
  158. FGTC05:
  159.         MVI     A,60H
  160.         STA     FLOWER
  161.         MOV     A,B
  162.         RET
  163. FLOWER: DB      60H
  164.  
  165. ;               GET CHARACTER (W/ECHO) FROM CONSOLE
  166. ;               OUTPUTS:        A = CHARACTER
  167.  
  168. FRDCH:
  169.         CALL    FGTCH
  170.         CPI     20H
  171.         JP      FRDC01
  172.         CPI     0DH
  173.         JZ      FRDC01
  174.         ORI     20H
  175. FRDC01:
  176.         CALL    FWTCH
  177.         RET
  178.  
  179.  
  180. ;               READ LINE FROM CONSOLE
  181.  
  182. ;               INPUT:          HL = @(BUFFER)
  183. ;                               A = S(BUFFER)
  184. ;               OUTPUT:         BUFFER WITH GOODIES
  185.  
  186. FRDLN:
  187.         DCX     H               ; POINT
  188.         DCX     H               ; TO MAX
  189.         SHLD    FTEMP           ; SIZE
  190.         MOV     M,A             ; SAVE SIZE
  191.         INX     H
  192.         MVI     M,0             ; RESET POINTER
  193. FFRD01:
  194.         INX     H               ; AND
  195.         MVI     M,' '           ; CLEAR
  196.         DCR     A               ; BUFFER
  197.         JNZ     FFRD01
  198. FFRD02:
  199.         CALL    FGTCH           ; GET A CHAR
  200.         CPI     ' '             ; TEST FOR
  201.         JM      FFRD03          ; CONTROL
  202.         CALL    FWTCH
  203.         CALL    FFRD04
  204.         LHLD    FTEMP
  205.         MOV     A,M
  206.         INX     H
  207.         MOV     B,M             ; TEST
  208.         CMP     B               ; FOR
  209.         JNZ     FFRD02          ; DONE
  210.         RET
  211. FFRD03:
  212.         CPI     0DH             ; TEST FOR
  213.         RZ                      ; DONE
  214.         MOV     B,A
  215.         LDA     LEFT$ARROW      ; TEST FOR
  216.         CMP     B
  217.         JNZ     FFRD02          ; RUB-OUT
  218.         LHLD    FTEMP
  219.         INX     H               ; TEST SIZE
  220.         MOV     A,M
  221.         ORA     A               ; ONLY FOR
  222.         JZ      FFRD02          ; NON-ZERO
  223.         DCR     A               ; BACK UP
  224.     MOV    M,A        ; POINTER
  225.     MVI    A,8        ; BACK UP
  226.         CALL    FWTCH           ; CURSOR
  227.     MVI    A,' '        ; UPDATE
  228.         CALL    FFRD04          ; BUFFER
  229.         DCR     E               ; BACK UP
  230.         MOV     M,E             ; BUFFER
  231.         JMP     FFRD02
  232. FFRD04:
  233.         LHLD    FTEMP           ; RETRIEVE
  234.         INX     H               ; ADDRESS
  235.         MVI     D,0
  236.         MOV     E,M
  237.         INX     D
  238.         DAD     D
  239.         MOV     M,A             ; SAVE CHAR
  240.         LHLD    FTEMP
  241.         INX     H               ; UPDATE
  242.         MOV     M,E             ; ADDR
  243.         RET
  244.  
  245. ;               WRITE CHARACTER TO CONSOLE
  246. ;               INPUTS:         A = CHARACTER
  247.  
  248. FWTCH:
  249.         PUSH    PSW
  250.     CPI    13        ; CHECK FOR CR
  251.     JNZ    FWTCH1
  252.     LDA    CRLF
  253. FWTCH1:
  254.     CPI    10        ; CHECK FOR LF
  255.     JNZ    FWTCH2
  256.     LDA    CRLF+1
  257. FWTCH2:
  258.         CALL    JWTCH           ; JWTCH=0033H
  259.         POP     PSW
  260.         RET
  261.  
  262. ;               WRITE LINE TO CONSOLE
  263.  
  264. ;               INPUTS:         HL=@(LINE)
  265. ;                               LINE TERMINATED BY '$'
  266.  
  267. FWRTLN:
  268.         SHLD    FTEMP
  269. FWRT01:
  270.         LHLD    FTEMP
  271.         MOV     A,M
  272.         CPI     '$'
  273.         RZ
  274.         INX     H
  275.         SHLD    FTEMP
  276.         CALL    FWTCH
  277.         JMP     FWRT01
  278.  
  279.  
  280. ;               GOTOXY CURSOR CONTROL FOR CRT
  281.  
  282. ;               INPUT:          A = ROW
  283. ;                               B = COLUMN
  284. ;               CURSOR ADDRESS := 3C00H + 64 * ROW + COLUMN
  285.  
  286. GOTOXY:
  287.         MVI     H,0
  288.         MOV     L,A
  289.         MVI     D,0
  290.         MOV     E,B
  291.         PUSH    H
  292.         PUSH    D
  293.         MVI     A,15
  294.         CALL    JWTCH
  295.         POP     D
  296.         POP     H
  297.         DAD     H               ; COMPUTE
  298.         DAD     H
  299.         DAD     H               ; CURSOR
  300.         DAD     H
  301.         DAD     H               ; ADDRESS
  302.         DAD     H
  303.         DAD     D
  304.         LXI     D,3C00H         ; DISPLAY AREA
  305.         DAD     D
  306.         SHLD    CURSOR          ; CURSOR VARIABLE
  307.         RET
  308.  
  309. ;               FCB BUILDER
  310.  
  311. ;               PREPARES FCB FOR I/O
  312.  
  313. ;               INPUTS:         DE = @(FCB)
  314. ;                               HL = @(FCB$NAME)
  315.  
  316. FFCB: 
  317.         CALL    FCMPR           ; COMPRESS
  318.         XCHG
  319.         SHLD    FTEMP           ; SAVE FCB ADDR
  320.         MVI     A,32            ; AND
  321. FFCB01:
  322.         MVI     M,' '           ; CLEAR
  323.         INX     H               ; ENTIRE
  324.         DCR     A               ; FCB
  325.         JNZ     FFCB01
  326.         XCHG
  327.         DCX     H               ; GET
  328.         MOV     B,M             ; SIZE
  329.         INX     H
  330.         XCHG
  331.         LHLD    FTEMP
  332. FFCB02:
  333.         LDAX    D               ; MOVE
  334.         MOV     M,A             ; NAME
  335.         INX     D               ; TO
  336.         INX     H               ; FCB
  337.         DCR     B
  338.         JNZ     FFCB02
  339.         RET
  340. FCMPR:
  341.         PUSH    D
  342.         MOV     D,H
  343.         MOV     E,L
  344.         DCX     H
  345.         PUSH    H
  346.         MOV     B,M
  347.         MVI     C,0
  348.         INX     H
  349. FCMP01:
  350.         MOV     A,M
  351.         CPI     '.'
  352.         JM      FCMP02
  353.         CPI     '['
  354.         JP      FCMP02
  355.         STAX    D
  356.         INX     D
  357.         INR     C
  358. FCMP02:
  359.         INX     H
  360.         DCR     B
  361.         JNZ     FCMP01
  362.         POP     H
  363.         MOV     M,C
  364.         INX     H
  365.         POP     D
  366.         RET
  367.  
  368. ;               OPEN A DISK FILE
  369.  
  370. ;               INPUT:          DE = @(FCB)
  371. ;               OUTPUT:         CARRY = ERROR
  372.  
  373. FRESET:
  374.         MVI     B,1
  375.         LXI     H,FBUF
  376.         CALL    JRESET          ; JRESET=4424H
  377.         STC
  378.         RNZ
  379.         CMC
  380.         RET
  381.  
  382. ;               READ BYTE FROM DISK
  383.  
  384. ;               INPUT:          DE = @(FCB)
  385. ;               OUTPUT:         A = BYTE
  386. ;                               CARRY = ERROR
  387.  
  388. FREAD:
  389.         LXI     H,FTEMP
  390.         CALL    JREAD           ; JREAD=4436H
  391.         STC
  392.         RNZ
  393.         LDA     FTEMP
  394.         CMC
  395.         RET
  396.  
  397. ;               DATA STORAGE
  398.  
  399. FTEMP:  DS      2
  400. FTOP:    DS    2
  401. FNEXT:    DS    2
  402. FCB:    DS      32
  403. FBUF:   DS      256
  404.  
  405.