*   
*            * ALS8 FILENAME "DOSIO" *
*   
* THIS IS AN INPUT/OUTPUT ROUTINE FOR THE NORTHSTAR
*   MICRODISK DOS TO BE USED WITH A SOL COMPUTER.
*          IT HAS THE FOLLOWING FEATURES:
*   
* SPEED CONTROL FOR VIDEO SCROLLING SIMILAR TO ALS8
*  SPACE BAR HALT FOR VIEWING SIMILAR TO SOLOS DUMP
*   PRINT DEVICE SELECTION SIMILAR TO THAT OF CP/M
*   SOL MODE KEY CAN BE USED FOR PROGRAM INTERUPT
*    RETURN TO SOLOS MONITOR BY USE OF ESCAPE KEY
*     SIGN ON MESSAGE AND INITIALIZATION OF VDM
*     NORTHSTAR SOFTWARE ACCEPTS SOL DELETE KEY
*      USE OF CLEAR KEY TO ERASE VIDEO SCREEN
*   
* THE ENTRY POINTS OF THE NORTHSTAR DOS SHOULD BE
*  PATCHED AS FOLLOWS:  (STANDARD DOS AT 2000H)
*   
*        200D  C3 20 29    COUT
*        2010  C3 00 29    CIN
*        2013  C3 50 29    TINIT
*        2016  C3 60 29    CONTC
*   
  ORG 2900H
*   
*       * SYSTEM EQUATES *
*   
SINP EQU 0C01FH  SOL SYSTEM INPUT
SOUT EQU 0C019H  SOL SYSTEM OUTPUT
SOLOS EQU 0C004H  SOLOS MONITOR
SDROT EQU 0C04AH  SOL SERIAL OUTPUT
PROUT EQU 0C2E6H  SOL PARALLEL OUTPUT
SPEED EQU 0C80BH  VDM SPEED BYTE
*   
START EQU $
*   
*       * CHARACTER INPUT ROUTINE *
*   
* THE INPUT ROUTINE CHECKS FOR ESCAPE, CLEAR,
* DELETE AND CONTROL/P KEYS AS WELL AS NORMAL
* DATA ENTRY.  CONTROL/P <PORT> WILL DIRECT
* THE OUTPUT THE SAME AS IF SET WITH THE SOLOS
* SET O=<PORT> COMMAND. PORT NUMBERS RANGE
* FROM 0-3.  OUTPUT IS ALSO ECHOED TO THE VDM.
* THE NORTHSTAR BASIC PRINT#- AND LIST#- ARE
* FULLY SUPPORTED BUT DOES NOT ECHO TO THE VDM.
* THESE DIRECTIVES TAKE PRIORITY OVER CONTROL/P.
* THE SOL DELETE CHARACTER (7F) IS CHANGED TO
* THAT RECOGNIZED BY NORTHSTAR SOFTWARE. (5F)
*   
INPUT CALL SINP
 JZ INPUT
 ANI 7FH
 CPI 1BH   ESCAPE KEY?
 JZ SOLOS  RETURN TO SOLOS
 CPI 0BH   CLEAR KEY?
 JZ CLEAR
 CPI 10H  CONTROL/P?
 JZ PRINT
 CPI 7FH  DELETE?
 RNZ
 MVI A,5FH  CHANGE TO N*
 RET
*   
*    * CHARACTER OUTPUT ROUTINE *
*   
 ORG START+20H
*   
OUTPUT CPI 1  1=SERIAL OUTPUT PORT
 JZ SERIO
 CPI 2  2=PARALLEL OUTPUT PORT
 JZ PARAO
 CPI 3  3=CUSTOM OUTPUT ROUTINE
 JZ CUSTO
 CALL SOUT  DEFAULT IS VIDEO SCREEN
 LDA STORE  IS CONTROL/P PRINT ON?
 CPI 31H  SERIAL PORT OUT
 JZ SERIO
 CPI 32H  PARALLEL PORT OUT
 JZ PARAO
 CPI 33H  CUSTOM OUTPUT ROUTINE
 JZ CUSTO
 MOV A,B
 RET
*   
*    * INITIALIZATION ROUTINE *
*   
 ORG START+50H
*   
WRITE LXI H,MSG  CLEAR SCREEN AND
 MVI C,38H  PUT OUT SIGN ON MESSAGE
W1 MOV B,M
 XRA A
 CALL SOUT
 INX H
 DCR C
 JNZ W1
 RET
*   
*    * SCROLL SPEED AND PROGRAM ABORT *
*   
CONTC  IN 0FCH  SOL KEYBOARD PORT
 ANI 7FH
 RZ $  MODE KEY ABORT?
 CPI 3  CONTROL/C TOO!
 RZ 
 CPI 20H
*   
*        SPACE BAR HALT?
*        SPACE BAR GIVES ONE LINE
*        ANY OTHER KEY KEEPS GOING
*   
 CZ WAIT
*   
*    * SCROLL SPEED CONTROL ROUTINE *
*   
* HIT ANY NUMBER KEY DURING OUTPUT TO CHANGE
* VIDEO DISPLAY SPEED. 9=SLOWEST, 0=FASTEST.
*   
 CPI 3AH
 RNC
 CPI 30H
 RC 
 ANI 0FH
 RAL
 RAL $  FOR MORE DELAY PUT
 NOP $  ANOTHER RAL HERE
 STA SPEED
 ORI 1  RESET ZERO FLAG
 RET
*   
*    * OUTPUT DEVICE SELECT ROUTINE *
*   
PRINT CALL SINP
 JZ PRINT
 ANI 7FH
 CPI 34H
 JNC P1
 CPI 30H
 JC P1
 STA STORE
 JMP INPUT
P1 STA STORE
 RET
*   
WAIT CALL SINP
 JZ WAIT
 RET
*   
CLEAR MVI B,0BH
 CALL SOUT
 JMP INPUT
*   
* SERIAL OUTPUT
*   
SERIO JMP SDROT  SOLOS SERIAL OUTPUT
*   
* PARALLEL OUTPUT
*   
PARAO JMP PROUT  SOLOS PARALLEL OUTPUT
*   
* CUSTOM OUTPUT ROUTINE
*   
CUSTO MOV A,B
 DB 0C3H,0,0  PUT YOUR JUMP HERE
*   
* SIGN ON MESSAGE
*   
MSG DB 0BH,0AH,0DH
 ASC #NORTHSTAR DOS 4.0 (SOL)#
 DW 0A0DH
 ASC #CONTROL/P <PORT> FOR PRINT#
 DW 0A0DH
*   
 ORG START+0FFH
*   
STORE DB 0
*   
