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

  1. ;****************************************************************
  2. ;*                                *
  3. ;*       SDS VDB 8024 VIDEO DISPLAY BOARD FIRMWARE        *
  4. ;*        TO EMULATE AN ADM-31 OR TVI-912            *
  5. ;*                                *
  6. ;****************************************************************
  7. ;
  8. ;        Date    5th October, 1980
  9. ;
  10. ;        Version 1.71
  11. ;
  12. ;        Modifications for ADM/TVI emulation
  13. ;        by:
  14. ;            Bill Bolton
  15. ;            Software Tools
  16. ;            P.O. Box 80
  17. ;            Newport Beach
  18. ;            NSW, 2106
  19. ;            AUSTRALIA
  20. ;
  21. ;
  22. REG0    EQU    80H        ;HORIZONTAL LINE COUNT
  23. REG1    EQU    81H        ;MODE/HSYNC WIDTH/HSYNC DELAY
  24. REG2    EQU    82H        ;SCANS PER DATA ROW/CHARS PER DATA ROW
  25. REG3    EQU    83H        ;SKEW BITS/DATA ROWS PER FRAME
  26. REG4    EQU    84H        ;SCAN LINES PER FRAME
  27. REG5    EQU    85H        ;VERTICAL DATA START
  28. REG6    EQU    86H        ;LAST DISPLAYED DATA ROW
  29. RESET    EQU    8AH        ;RESET 5027
  30. WCCHAR    EQU    8CH        ;WRITE CURSOR CHARACTER/COLUMN ADDRESS
  31. WCLINE    EQU    8DH        ;WRITE CURSOR LINE ADDRESS
  32. STIME    EQU    8EH        ;START TIMING CHAIN
  33. ;
  34. VDBIN    EQU    20H        ;INPUT PORT FOR CHARACTERS FROM SYSTEM
  35. ROWS    EQU    24        ;NUMBER OF ROWS
  36. COLUMN    EQU    80        ;NUMBER OF COLUMNS
  37. STACK    EQU    2000H        ;STACK TOP
  38. SCREEN    EQU    1000H        ;START OF DISPLAY MEMORY
  39. ;
  40. SPACE    EQU    20H        ;ASCII BLANK
  41. ;
  42. ;
  43.     NAME    VDB171
  44. ;
  45.     ORG    0
  46. ;
  47. ;    POWER UP INITIALISATION
  48. ;
  49. START:
  50.     LD    SP,STACK
  51.     IN    A,(VDBIN)    ;CLEAR INTERUPT FLIP FLOP
  52.     IN    A,(030H)    ;CLEAR KEYBOARD READY
  53.     EXX
  54.     LD    L,0
  55.     EXX
  56.     CALL    INIT
  57.     CALL    CLEAR
  58.     LD    HL,SCREEN    ;DISPLAY MEMORY ADDRESS
  59.     IM    1
  60.     SCF
  61.     EI
  62.     HALT
  63. ;
  64. ;    START OF INTERUPT DRIVEN PROGRAM
  65. ;
  66.     ORG    00038H
  67. ;
  68.     RET    NC
  69.     POP    IY
  70.     EXX
  71.     BIT    7,L
  72.     EXX
  73.     IN    A,(VDBIN)    ;GET A CHARACTER
  74.     RES    7,A
  75.     JR    Z,NEXT
  76.     OR    080H
  77. NEXT:
  78.     BIT    6,A            ;CONTROL CHARACTER ?
  79.     JP    NZ,TDIS
  80.     BIT    5,A
  81.     JP    Z,CTR
  82. TDIS:
  83.     CALL    PROTECT
  84. ;
  85. ;    DISPLAY A CHARACTER
  86. ;
  87. DISPLAY:
  88.     LD    (HL),A            ;MOVE CHAR TO DISPLAY MEMORY
  89. NODIS:
  90.     INC    D
  91. CHECK:
  92.     LD    A,COLUMN
  93.     CP    D        ;END OF LINE ?
  94.     JP    Z,LFCR
  95.     INC    HL
  96.     LD    A,D
  97.     OUT    (WCCHAR),A    ;MOVE CURSOR TO NEXT SPACE
  98.     SCF
  99.     EI
  100.     HALT
  101. ;
  102. ;    CONTROL CHARCTER DISPATCHER
  103. ;
  104. CTR:
  105.     LD    IY,HLT
  106.     PUSH    IY        ;SAVE RETURN ADDRESS
  107.     RES    7,A
  108.     CP    00AH        ;LINE FEED
  109.     JP    Z,LF
  110.     CP    00DH        ;CARRIAGE RETURN
  111.     JP    Z,CR
  112.     CP    008H        ;BACKSPACE
  113.     JP    Z,CTRH
  114.     CP    009H        ;TAB MODULO 8
  115.     JP    Z,TAB
  116.     CP    00BH        ;CURSOR UP
  117.     JP    Z,UPLINE
  118.     CP    00CH        ;CURSOR RIGHT
  119.     JP    Z,RIGHT
  120.     CP    01AH        ;CLEAR SCREEN
  121.     JP    Z,CLEAR
  122.     CP    01BH        ;ESCAPE
  123.     JP    Z,ESC
  124.     CP    01EH        ;HOME CURSOR
  125.     JP    Z,HOME
  126.     CP    01FH        ;NEW LINE
  127.     JP    Z,LFCR
  128.     POP    IY
  129.     JR    HLT
  130. ;
  131. ;    INITIALISE CRT 5027 VIDEO CHIP
  132. ;
  133. INIT:
  134.     OUT    (STIME),A
  135.     OUT    (RESET),A
  136.     LD    A,065H
  137.     OUT    (REG0),A
  138.     LD    A,04BH
  139.     OUT    (REG1),A
  140.     LD    A,04DH
  141.     OUT    (REG2),A
  142.     LD    A,0D7H
  143.     OUT    (REG3),A
  144.     LD    A,01DH
  145.     OUT    (REG4),A
  146.     LD    A,025H
  147.     OUT    (REG5),A
  148.     LD    A,017H
  149.     LD    B,A
  150.     OUT    (REG6),A
  151.     LD    A,0
  152.     OUT    (WCCHAR),A
  153.     OUT    (WCLINE),A
  154.     OUT    (STIME),A
  155.     LD    DE,0
  156.     RET
  157. ;
  158. ;    NEW LINE
  159. ;
  160. LFCR:
  161.     CALL    LF
  162.     CALL    CR
  163. HLT:
  164.     SCF            ;RETURN FROM CONTROLS
  165.     EI
  166.     HALT
  167. ;
  168. ;    LINE FEED
  169. ;
  170. LF:
  171.     LD    A,E
  172.     CP    B
  173.     CALL    Z,SCRL
  174.     INC    A
  175.     CP    ROWS
  176.     JP    NZ,LFRT
  177.     LD    A,0
  178. LFRT:
  179.     LD    E,A        ;REG E HAS LINE NO.
  180.     OUT    (WCLINE),A
  181.     LD    L,D
  182.     LD    H,E
  183.     RL    L
  184.     RR    H
  185.     RR    L
  186.     SET    4,H
  187.     RET
  188. ;
  189. ;    CARRIAGE RETURN
  190. ;
  191. CR:
  192.     LD    D,0
  193.     LD    A,D
  194.     OUT    (WCCHAR),A
  195.     LD    A,080H
  196.     AND    L
  197.     LD    L,A
  198.     RET
  199. ;
  200. ;    BACKSPACE (CURSOR LEFT)
  201. ;
  202. CTRH:
  203.     LD    A,0
  204.     CP    D
  205.     RET    Z
  206.     DEC    D
  207.     DEC    HL
  208.     LD    A,D
  209.     OUT    (WCCHAR),A
  210.     RET
  211. ;
  212. ;    SCROLL SCREEN UP
  213. ;
  214. SCRL:
  215.     INC    B
  216.     LD    A,B
  217.     CP    ROWS
  218.     JP    NZ,SCR2
  219.     LD    B,0
  220. SCR2:
  221.     LD    L,0
  222.     LD    H,B
  223.     RR    H
  224.     RR    L
  225.     SET    4,H
  226.     LD    C,SPACE
  227.     LD    A,COLUMN
  228.     ADD    A,L
  229. SCRLP:
  230.     LD    (HL),C
  231.     INC    HL
  232.     CP    L
  233.     JP    NZ,SCRLP
  234.     LD    A,B
  235.     OUT    (REG6),A
  236.     LD    A,E
  237.     JP    PLACE
  238. ;
  239. ;    FILL SCREEN WITH BLANK CHARACTERS
  240. ;
  241. CLEAR:
  242.     LD    A,008H
  243.     OUT    (010H),A
  244.     LD    HL,SCREEN
  245.     LD    C,SPACE
  246. CLR1:
  247.     LD    A,COLUMN
  248. CLR:
  249.     LD    (HL),C
  250.     INC    HL
  251.     CP    L
  252.     JP    NZ,CLR
  253.     LD    A,0D0H
  254. CLR2:
  255.     LD    (HL),C
  256.     INC    HL
  257.     CP    L
  258.     JP    NZ,CLR2
  259.     LD    A,01BH
  260.     CP    H
  261.     JP    NZ,CLR1
  262.     CALL    HOME
  263.     LD    A,SPACE
  264.     OUT    (010H),A
  265.     EX    AF,AF'
  266.     RET
  267. ;
  268. ;    CURSOR UP
  269. ;
  270. UPLINE:
  271.     LD    A,E
  272.     CP    0
  273.     JP    NZ,UPLD
  274.     LD    A,ROWS
  275. UPLD:
  276.     DEC    A
  277.     CP    B
  278.     RET    Z
  279.     LD    E,A
  280. ;
  281. ;    PLACE CURSOR AT POSITION SPECIFIED IN DE
  282. ;
  283. PLACE:
  284.     LD    H,E
  285.     LD    L,D
  286.     RL    L
  287.     RR    H
  288.     RR    L
  289.     SET    4,H
  290.     LD    A,D
  291.     OUT    (WCCHAR),A
  292.     LD    A,E
  293.     OUT    (WCLINE),A
  294.     RET
  295. ;
  296. ;    CURSOR RIGHT
  297. ;
  298. RIGHT:
  299.     INC    D
  300.     POP    IX
  301.     JP    CHECK
  302. ;
  303. ;    HOME CURSOR
  304. ;
  305. HOME:
  306.     LD    D,0
  307.     LD    A,B
  308.     INC    A
  309.     CP    ROWS
  310.     JP    NZ,HOLP
  311.     LD    A,0
  312. HOLP:
  313.     LD    E,A
  314.     CALL    PLACE
  315.     RET
  316. ;
  317. ;    ESCAPE SEQUENCES
  318. ;
  319. ESC:
  320.     SCF
  321.     CCF            ;CLEAR CARRY FLAG, WILL CAUSE
  322.     EI            ;  RETURN AFTER INTERUPT
  323.     HALT
  324. ;
  325.     IN    A,(VDBIN)    ;GET A CHARACTER
  326.     RES    7,A
  327.     CP    '='        ;POSITION CURSOR?
  328.     JP    Z,POSIT
  329.     CP    '*'        ;CLEAR SCREEN?
  330.     JP    Z,CLEAR
  331.     CP    ':'        ;CLEAR SCREEN?
  332.     JP    Z,CLEAR
  333.     CP    'T'        ;ERASE TO EOL?
  334.     JP    Z,EOL
  335.     CP    'Y'        ;ERASE TO END OF SCREEN?
  336.     JP    Z,EOS
  337.     CP    'E'        ;INSERT LINE?
  338.     JP    Z,HLT
  339.     CP    'R'        ;DELETE LINE?
  340.     JP    Z,HLT
  341.     CP    'G'        ;ATTRIBUTE?
  342.     JP    Z,ATTRIB
  343.     CP    '&'        ;HALF INTENSITY?
  344.     JP    Z,HALF
  345.     CP    27H        ;FULL INTENSITY (27H=')
  346.     JP    Z,FULL
  347.     RET
  348.  
  349.  
  350. POSIT:
  351.     SCF
  352.     CCF
  353.     EI
  354.     HALT
  355. ;
  356.     IN    A,(VDBIN)    ;GET Y VALUE
  357.     RES    7,A
  358.     SUB    SPACE
  359.     RET    M
  360.     CP    ROWS        ;TEST FOR > 24
  361.     RET    P
  362.     ADD    A,B
  363.     INC    A
  364.     CP    ROWS
  365.     JP    M,ESLP
  366.     SUB    ROWS
  367. ESLP:
  368.     LD    C,A
  369.     SCF
  370.     CCF
  371.     EI
  372.     HALT
  373. ;
  374.     IN    A,(VDBIN)    ;GET X VALUE
  375.     RES    7,A
  376.     SUB    SPACE
  377.     RET    M
  378.     CP    COLUMN        ;TEST FOR > 80
  379.     RET    P
  380.     LD    E,C
  381.     LD    D,A
  382.     CALL    PLACE
  383.     RET
  384. ;
  385. ;    TAB SET EVERY 8 SPACES
  386. ;
  387. TAB:
  388.     LD    A,0F8H
  389.     AND    D
  390.     ADD    A,008H
  391.     CP    COLUMN
  392.     RET    Z
  393.     LD    D,A
  394.     CALL    PLACE
  395.     RET
  396. ;
  397. ;
  398. ;    AF' REG CONTAINS SPECIAL CONTROL STATUS
  399. ;    ENHANCEMENT FUNCTION, CONTROLLED THROUGH
  400. ;    PORT 10H
  401. ;
  402. ;
  403. ;    BIT 7    CONTROLS ENHANCEMENT FIELD
  404. ;    BIT 6    CONTROLS SPECIAL BIT #1
  405. ;    BIT 5    CONTROLS RUNNING TIME
  406. ;    BIT 4    CONTROLS UNDERLINE
  407. ;    BIT 3    CONTROLS BLANKING
  408. ;    BIT 2    CONTROLS REVERSE
  409. ;    BIT 1    CONTROLS BLINKING
  410. ;    BIT 0    CONTROLS SPECIAL BIT #2
  411. ;
  412. ;
  413. BLINK:
  414.     EX    AF,AF'
  415.     AND    069H
  416.     OR    022H
  417.     OUT    (010H),A
  418.     EX    AF,AF'
  419.     JR    ENHANC
  420. ;
  421. RVS:
  422.     EX    AF,AF'
  423.     AND    069H
  424.     OR    024H
  425.     OUT    (010H),A
  426.     EX    AF,AF'
  427.     JR    ENHANC
  428. ;
  429. RVB:
  430.     EX    AF,AF'
  431.     AND    069H
  432.     OR    026H
  433.     OUT    (010H),A
  434.     EX    AF,AF'
  435. ENHANC:
  436.     EXX
  437.     SET    7,L
  438.     EXX
  439.     RET
  440. ;
  441. QUIT:
  442.     EX    AF,AF'
  443.     RES    7,A
  444.     OUT    (010H),A
  445.     EX    AF,AF'
  446. QUIT1:
  447.     EXX
  448.     RES    7,L
  449.     EXX
  450.     RET
  451. ;
  452. ;    SET HALF INTENSITY
  453. ;
  454. HALF:
  455.     EX    AF,AF'
  456.     SET    6,A
  457.     OUT    (010H),A
  458.     EX    AF,AF'
  459.     RET
  460. ;
  461. ;    SET FULL INTENSITY
  462. ;
  463. FULL:
  464.     EX    AF,AF'
  465.     RES    6,A
  466.     OUT    (010H),A
  467.     EX    AF,AF'
  468.     RET
  469. ;
  470. SC2:
  471.     EX    AF,AF'
  472.     SET    0,A
  473.     OUT    (010H),A
  474.     EX    AF,AF'
  475.     RET
  476. ;
  477. RC2:
  478.     EX    AF,AF'
  479.     RES    0,A
  480.     OUT    (010H),A
  481.     EX    AF,AF'
  482.     RET
  483. ;
  484. ;    PROTECTED FIELD MODE
  485. ;
  486. PROTECT:
  487.     EXX
  488.     BIT    0,L            ;BIT 0 OF REG L' SETS PROTECT
  489.     EXX
  490.     RET    Z
  491.     BIT    7,(HL)            ;BIT 7 OF MEMORY IS PROTECT BIT
  492.     RET    Z
  493.     POP    IY
  494.     JP    NODIS
  495. ;
  496. NFD:
  497.     EX    AF,AF'
  498.     AND    069H
  499.     SET    7,A
  500.     OUT    (010H),A
  501.     EX    AF,AF'
  502.     JP    QUIT1
  503. ;
  504. PFD:
  505.     EXX
  506.     SET    0,L
  507.     EXX
  508.     RET
  509. ;
  510. UNPFD:
  511.     EXX
  512.     RES    0,L
  513.     EXX
  514.     RET
  515. ;
  516. ;    ERASE TO END OF LINE
  517. ;
  518. EOL:
  519.     LD    A,D        ;A <--- COLUMN NO.
  520.     PUSH    HL        ;SAVE CURSOR LOCATION
  521.     LD    C,SPACE
  522. ELOOP:
  523.     LD    (HL),C        ;WRITE A SPACE
  524.     INC    A
  525.     INC    HL
  526.     CP    COLUMN        ;AT LAST COLUMN?
  527.     JR    NZ,ELOOP        ;NO
  528.     POP    HL        ;YES, GET CURSOR LOCATION
  529.     RET
  530. ;
  531. ;    ERASE TO END OF SCREEN
  532. ;
  533. EOS:
  534.     PUSH    DE        ;SAVE ROW/COLUMN VALUES
  535. SLOOP:
  536.     CALL    EOL        ;ERASE TO END OF CURRENT LINE
  537.     LD    D,0        ;ERASE ENTIRE LINE
  538.     CALL    LF        ;NEXT LINE
  539.     LD    A,B
  540.     CP    E        ;ON FINAL ROW?
  541.     JR    NZ,SLOOP    ;NO
  542.     CALL    EOL        ;YES,ERASE LAST LINE
  543.     POP    DE        ;GET ROW/COLUMN VALUES
  544.     CALL    PLACE        ;RESTORE CURSOR
  545.     RET
  546. ;
  547. ;    VIDEO ATTRIBUTES
  548. ;
  549. ATTRIB:
  550.     SCF
  551.     CCF
  552.     EI
  553.     HALT
  554. ;
  555.     IN    A,(VDBIN)    ;GET NEXT CHARACTER
  556.     RES    7,A
  557.     CP    '0'        ;RESET TO STANDARD VIDEO?
  558.     JP    Z,QUIT
  559.     CP    '2'        ;SET BLINK VIDEO
  560.     JP    Z,BLINK
  561.     CP    '4'        ;SET REVERSE VIDEO?
  562.     JP    Z,RVS
  563.     CP    '6'        ;SET REVERSE & BLINK VIDEO?
  564.     JP    Z,RVB
  565.     RET
  566. ;
  567.     END    START
  568.  
  569.