home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol009 / mikebios.asm < prev    next >
Assembly Source File  |  1984-04-29  |  8KB  |  314 lines

  1. *****************************************************
  2. ;FLASH WRITER CUSTOM CPM IO ROUTINES FOR 2D
  3. ;THINKERTOY.  DRIVER IS FOR PASCAL.
  4. ; MODES M.JACOBY  OCT.28,79
  5. **************************************************
  6.  ;    SYSTEM EQUATES
  7. ******************************************************
  8.  MSIZE    EQU    48        ;CP/M SYSTEM SIZE IN KBYTES
  9.  BIAS    EQU    (MSIZE-16)*1024
  10.  CPMB    EQU    2600H+BIAS    ;LOCATION OF CCP
  11.  BDOS    EQU    2E00H+BIAS    ;LOCATION OF BDOS
  12.  BIOS    EQU    3B00H+BIAS    ;LOCATION OF BIOS
  13.  USER    EQU    BIOS+380H    ;START OF USER AREA
  14.  OFFSET    EQU    1E80H-BIOS    ;TO SYSGEN IMAGE
  15.  ;
  16.  ;*********************************************************
  17.  ;    DISK PARAMETERS - DOUBLE DENSITY DISK JOCKEY
  18.  ;*********************************************************
  19.  ;    ON DISK            IN SYSGEN    IN 24K SYSTEM
  20.  ;    TRACK    SECTOR        ADDRESS
  21.  ;BOOT    0    1         900H        0E700H
  22.  ;CCP    1    1        0980H        4600H
  23.  ;BDOS    1    17        1180H        4E00H
  24.  ;BIOS    1    43        1E80H        5B00H
  25.  ;MODE    1    49        21FFH        5E7FH
  26.  ;USER    1    50-52        2200H        5E80H
  27.  ;TOP OF SYSTEM            237FH        5FFFH
  28.  ;
  29.  ;DOUBLE DENSITY SKIP TABLE
  30.  ;    1,2,19,20,37,38,3,4,21,22,39,40,5,6,23,24,41,42
  31.  ;    7,8,25,26,43,44,9,10,27,28,45,46,11,12,29,30,47,48
  32.  ;    13,14,31,32,49,50,15,16,33,34,51,52,17,18,35,36
  33.  ;
  34.  ;*********************************************************
  35.  ;MODE BYTE OPTIONS AND DENSITY SETTINGS OF VARIOUS DRIVES
  36.  ;*********************************************************
  37.  ;
  38.      ORG    USER-8        ;5E78H IN 24K SYSTEM
  39.  DNSTY:    DB    1,0,1,1        ;DRIVE B SD, OTHERS DD
  40.          ;B0=DENSITY    0=SNGL,    1=DBL
  41.      DB    0        ;RESERVED
  42.  MODE:    DB    1        ;MODE BYTE
  43.          ;BIT0=1 DOES AUTO ON COLD BOOT
  44.          ;BIT1=1 DOES AUTO ON WARM BOOT
  45.  ;
  46.   ;*********************************************************
  47.  ;    SAMPLE USER AREA
  48.  ;*********************************************************
  49.  ;
  50.  ;TTY EQUATES
  51.  STATUS    EQU    0        ;TTY STATUS PORT
  52.  DATA    EQU    1        ;TTY DATA PORT
  53.  RDA    EQU    10H        ;DATA AVAILABLE MASK
  54.  RDAMSK    EQU    RDA        ;SENSE IS ACTIVE LOW
  55.  TBE    EQU    20H        ;BUFFER EMPTY MASK
  56.  TBEMSK    EQU    TBE        ;SENSE IS ACTIVE LOW
  57.  STOPCHR EQU    'Q'-40H        ;STOPS EVERYTHING
  58.  ;
  59.      ORG    USER        ;5E80H IN DIST SYSTEM
  60.  ;
  61.  ;JUMP TABLE - JMPS MUST REMAIN HERE, IN SAME ORDER
  62.  INIT    JMP    INITR        ;INITIALIZATION
  63.  CONST    JMP    TTYST        ;CONSOLE STATUS
  64.  CONIN    JMP    TTYIN        ;CONSOLE INPUT
  65.  CONOUT    JMP    DRIVE        ;CONSOLE OUTPUT FLASHWRITER
  66.  LIST    JMP    TTYOUT        ;LIST OUTPUT
  67.  PUNCH    JMP    TTYOUT        ;PUNCH OUTPUT
  68.  READER    JMP    TTYIN        ;READER INPUT
  69.  PRST    JMP    TTYPRST        ;PRINTER STATUS
  70.  ;
  71.  ;*********************************************************
  72.  ;CONSOLE INPUT CHAR TO REGISTER A
  73.  ;*********************************************************
  74.  TTYIN:
  75.      IN STATUS        ;GET STATUS BYTE
  76.      ANI RDA            ;EXAMINE STATUS BIT
  77.      XRI    RDAMSK        ;MAKE ACTIVE LOW
  78.      JNZ    TTYIN        ;LOOP FOR CHARACTER
  79.      IN    DATA        ;INPUT THE CHARACTER
  80.      ANI    7FH        ;STRIP PARITY
  81.      RET
  82.  ;*********************************************************
  83.  ;CONSOLE STATUS AND STOP ROUTINE
  84.  ;*********************************************************
  85.  TTYST:
  86.      IN    STATUS        ;KEY PRESSED ?
  87.      ANI    RDA
  88.      XRI    RDAMSK
  89.      MVI    A,0        ;NO  A=0
  90.      RNZ            ;EXIT
  91.      CMA
  92.     RET
  93. ;     IN    DATA        ;YES
  94. ;     ANI    7FH        ;GET CHARACTER
  95. ;     CPI    STOPCHR        ;CHARACTER=STOP?
  96. ;     JZ    ST1
  97. ;     MVI    A,0        ;NO
  98. ;     RET            ;   EXIT
  99.                    ;CHECK FOR STOP KEY TO CONTINUE
  100. ; ST1    IN    STATUS        ;KEY PRESSED ?
  101. ;     ANI     RDA
  102. ;     XRI    RDAMSK
  103. ;     MVI    A,0
  104. ;      JNZ    ST1        ;N0  GO BACK CHECK AGAIN
  105. ;     RET            ;YES ALL DONE
  106.  ;
  107.  ;
  108.  ;*********************************************************
  109.  ;CONSOLE OUTPUT CHAR FROM REGISTER C
  110.  ;*********************************************************
  111.  TTYOUT:
  112.      IN    STATUS        ;GET STATUS BYTE
  113.      ANI    TBE        ;EXAMINE STATUS BIT
  114.      XRI    TBEMSK        ;MAKE ACTIVE LOW
  115.      JNZ    TTYOUT        ;LOOP FOR CHAR
  116.      MOV    A,C        ;CHAR INTO C REG
  117.      OUT    DATA        ;AND OUTPUT
  118.      RET
  119.  ;
  120.  ;*********************************************************
  121.  ;PRINTER STATUS CHECK, NOT YET IMPLEMENTED
  122.  ;*********************************************************
  123.  TTYPRST:
  124.      XRA    A        ;NO CHAR READY
  125.      RET            ;SO RET WITH ACC=0
  126.  ;
  127.  ;*********************************************************
  128.  ;INITIALIZATION ROUTINE GOES HERE IF NEEDED
  129.  ;MAKE SURE IT ENDS WITH A RET.
  130.  ;*********************************************************
  131. INITR:;    LXI    H,VADD
  132. ;     SHLD    CURS
  133.            MVI    C,16H    ;CLEAR SCREAN SYM.
  134.      CALL    DRIVE
  135.     RET
  136.  ;***********************************************************
  137.  ;THIS AREA DEFINES THE EQUATES USED BY THE FLWR TYPE
  138.  ;VIDEO DRIVERS.
  139.  VADD    EQU    0F000H    ;FLASHWRT BOARD RAM
  140.  HADD    EQU    0F0H    ;HI BYTE OF ADDRESS
  141.  BS    EQU    'H'-40H    ;BACK-SPACE
  142.  LF    EQU    0AH    ;LINE FEED
  143.  ETB    EQU    'W'-40H ;CURSOR UP SYM
  144.  DC3    EQU    'S'-40H    ;CURSOR RIGHT.
  145.  SYN    EQU    16H    ;HOME AND CLEAR SCREEN
  146.  RUB1    EQU    95H    ;RUB CHAR
  147.  SSEQ    EQU    1DH    ;GOTOXY START SEQUENCE BYTE.
  148.  ;
  149.  ;**** DRIVE
  150.  ;FLWR DRIVER WITH X-Y CURSOR ADDRESSING.
  151.  ;CURSOR ADDRESSING IS DONE WITH THE SEQUENCE:
  152.  ; 1DH,Y-BYTE,X-BYTE  (1DH,HORIZ,VERT).
  153.  ;
  154.  DRIVE:
  155.     MOV    A,C
  156.      PUSH PSW    ;SAVE REGISTERS
  157.      PUSH B
  158.      PUSH D
  159.      PUSH H
  160.      MOV    B,A
  161.      LHLD    XYADD    ;SETUP FOR XY
  162.      LDA    XYFLAG    ;OPERATION
  163.      ORA    A    ;HAS IT BEEN SET
  164.      JNZ    DOX    ;X-Y SEQ HAS STARTED.
  165.      MOV     A,B    ;GET BACK ACCUM.
  166.      CPI    SSEQ    ;CHECK FOR FIRST GOTXY REQUEST.
  167.      JZ    STARTXY    ;YEP, IT STARTED.
  168.     CPI    07H    ;BELL?
  169.     JZ    GOBACK
  170.     ORA    A    ;NULL?
  171.     JZ    GOBACK
  172. DISPL    LHLD    CURS
  173.     MOV    A,M    ;TURN OF CURSER
  174.     ANI    7FH
  175.     MOV    M,A
  176.     MOV    A,B
  177.     CPI    BS    ;(8)  BACKSPACE?
  178.     JZ    BKSPC
  179.     CPI    LF    ;(10) LINEFEED?
  180.     JZ    LNFD
  181.     CPI    0DH    ;(13)  CARRAIGE RETURN?
  182.     JZ    CURET
  183.     CPI    ETB    ;(23)  REVERSE LINEFEED?
  184.     JZ    RLINFD
  185.     CPI    DC3    ;(19)  FORWARD SPACE?
  186.     JZ    FWSPC
  187.     CPI    02H    ;(2)   HOME CURSER
  188.     JZ    HOMER
  189.     CPI    SYN    ;(22)  CLEAR AND HOME SCREEN?
  190.     JZ    CLRSC
  191.     CPI    RUB1    ;(95)  RUBOUT?
  192.     JZ    BKSPC
  193.     CPI    1AH    ;(26)  CLEAR WHOLE LINE?
  194.     JZ    BLKLN
  195.     CPI    1CH    ;(28)  CLEAR TO END OF LINE?
  196.     JZ    CLRLN
  197.     CPI    19H    ;(25)  CLEAR TO END OF SCREEN?
  198.     JZ    CLR
  199.     ANI    07FH
  200.     MOV    M,A
  201. FWSPC:
  202.     MOV    A,L
  203.     ANI    3FH
  204.     CPI    3FH
  205.     JZ    RETRN
  206.     INX    H
  207. ONSCR    MOV    A,L
  208.     ANI    3FH
  209.     CPI    3FH
  210.     JZ    RETRN
  211.     MOV    A,H
  212.     CPI    HADD+4
  213.     JNZ    RETRN
  214.     LXI    H,VADD
  215.     LXI    D,VADD+64
  216. SCROL    LDAX    D
  217.     MOV    M,A
  218.     INX    D
  219.     INX    H
  220.     MOV    A,D
  221.     CPI    HADD+4
  222.     JNZ    SCROL
  223. BLKLN    MOV    A,L
  224.     ANI    0C0H
  225.     MOV    L,A
  226.     SHLD    CURS
  227. CLRLN    MVI    M,020H
  228.     MOV    A,L
  229.     ANI    3FH
  230.     CPI    3FH
  231.     INX    H
  232.     JNZ    CLRLN
  233.     LHLD    CURS
  234. RETRN    MOV    A,M    ;TURN ON CURSER
  235.     ORI    80H
  236.     MOV    M,A
  237.     SHLD    CURS
  238. GOBACK    POP    H
  239.     POP    D
  240.     POP    B
  241.     POP    PSW
  242.     RET
  243. CLRSC    LXI    H,VADD
  244.     SHLD    CURS
  245. CLR    LHLD    CURS
  246. WRSPC    MVI    M,20H
  247.     INX    H
  248.     MOV    A,H
  249.     CPI    HADD+8
  250.     JNZ    WRSPC
  251.     JMP    RETRN-3
  252. LNFD    LXI    D,64
  253.     DAD    D
  254.     JMP    ONSCR
  255. BKSPC    DCX    H
  256.     JMP    RETRN
  257. RLINFD    LXI    D,-64        ;REVERSE LINE FEED
  258.     DAD    D
  259.     JMP    RETRN
  260. CURET:    MOV    A,L
  261.     ANI    0C0H
  262.     MOV    L,A
  263.     JMP    RETRN
  264. HOMER:    LXI    H,VADD
  265.     JMP    RETRN
  266. ;BEGINNING OF XY ROUTINES
  267. STARTXY MVI    L,0FFH
  268.     SHLD    XYADD
  269.     MOV    A,L
  270.     STA    XYFLAG
  271.     JMP    GOBACK
  272.  DOX:    MVI    A,0FFH        ;GETS HERE IF L HAS BEEN
  273.      CMP    L        ;SET
  274.      JNZ    DOXY        ;IF NO MATCH,STAGE IS SET
  275.      MOV    A,B        ;A CONTAINS Y-BYTE NOW
  276.     SUI    20H
  277.     ANI    3FH
  278.      MOV    L,A        ;BINARY VAL. TO L
  279.      SHLD    XYADD        ;SAVE IT
  280.      JMP    GOBACK        ;FOR LATER
  281.  DOXY:    PUSH    H    ;SAVE H,L
  282.      LHLD    CURS    ;GET OLD CURSOR LOCATION
  283.     MOV    A,M
  284.     ANI    7FH
  285.      MOV    M,A    ;RESTORE CHAR AND WIPE OUT CURSOR.
  286.      POP    H    ;RESTORE LATEST H,L
  287.      MOV    A,B    ;B CONTAINS X-BYTE NOW
  288.     SUI    20H
  289.     ANI    0FH
  290.      ORA    A        ;IS IT A ZERO?
  291.      JZ    FIXCUR        ;IF SO,SKIP DADS.
  292.      LXI    D,64        ;NO. OF CHARS/LINE.
  293. LDOWN:    DAD    D        ;DOWN ONE LINE
  294.      DCR    A        ;COUNT IT WITH X-BYTE
  295.      JNZ    LDOWN
  296. FIXCUR:    XCHG        ;H,L TO D,E
  297.      LXI    H,VADD        ;GET BEGINNING
  298.      DAD    D        ;H,L NOW POINTS AT X-Y ADDR.
  299. CHKLOC: MOV    A,H
  300.     CPI    HADD+4
  301.     JM    ONSCRN
  302.     JMP    ZIPIT
  303. ONSCRN: SHLD    CURS        ;X-Y ADDR IN CURS
  304.  ZIPIT:    LXI    H,0        ;BIG ZERO
  305.      SHLD    XYADD        ;ZERO THIS, WE ARE DONE
  306.      XRA    A        ;SMALL ZERO
  307.     STA    XYFLAG    ;SET THIS ALSO
  308.     JMP    RETRN-3
  309.  ;DEFINE STORAGE AREA FOR FLW DRIVER
  310.  ;
  311.  CURS    DW    VADD        ;INITIALLY BOARD ADDRESS
  312.  XYFLAG    DB    0        ;INITIALLY ZERO
  313.  XYADD    DW    0
  314.