;       PROGRAM NECSET.ASM
;
;       WRITTEN BY KENT WALKER
;       OCTOBER, 1982
;
;       8080 ASSEMBLER CODE
;       USING CP/M BDOS FUNCTIONS
;
;       THIS PROGRAM IS DESIGNED
;       TO SET THE
;       >>>>>>>>NEC-8023A-C<<<<<<<<
;       PRINTER PARAMETERS
;       VIA KEYBOARD INPUT.
;
;       A TABLE OF OPTIONS IS PRESENTED ON THE MONITOR.
;       INPUT IS TERMINATED BY A CARRIAGE RETURN.
;       INPUT CHARACTERS MUST BE IN UPPER CASE.
;
       ORG     100H
BDOS    EQU     0005H
INCHR   EQU     1       ;KEYBOARD INPUT FUNCTION
LSTCHR  EQU     5       ;CHARACTER TO LIST DEVICE FUNCTION
CR      EQU     000DH   ;CARRIAGE RETURN
LF      EQU     000AH   ;LINE FEED
TAB     EQU     0009H   ;TAB CHARACTER
CLRSCR  EQU     001AH   ;CLEAR SCREEN - CTRL Z - OSBORNE & TELEVIDEO
ESC     EQU     001BH   ;ESCAPE CODE
SO      EQU     000EH   ;SOCODE
SI      EQU     000FH   ;SI CODE
PRSTR   EQU     9       ;PRINT STRING FUNCTION
BOOT    EQU     0       ;WARM BOOT
;
       LXI     SP,STACK        ;SET UP STACK
       LXI     D,MESAGE        ;POINT TO MESSAGE
       MVI     C,PRSTR         ;STRING PRINT FUNCTION
       CALL    BDOS
;
LOOP    MVI     C,INCHR
       CALL    BDOS
       CPI     CR              ;CARRIAGE RETURN ENDS INPUT
       JZ      BOOT
;
       LXI     H,PICA          ;TEST FOR 'B'
       CPI     'B'
       JZ      LIST
;
       LXI     H,ELITE         ;TEST FOR 'C'
       CPI     'C'
       JZ      LIST
;
       LXI     H,MICRON        ;TEST FOR 'D'
       CPI     'D'
       JZ      LIST
;
       LXI     H,PROP          ;TEST FOR 'P'
       CPI     'P'
       JZ      LIST
;
       LXI     H,EMPH          ;TEST FOR 'E'
       CPI     'E'
       JZ      LIST
;
       LXI     H,NOEMPH        ;TEST FOR 'F'
       CPI     'F'
       JZ      LIST
;
       LXI     H,DBLWD         ;TEST FOR '2'
       CPI     '2'
       JZ      LIST
;
       LXI     H,SNGLWD        ;TEST FOR '1'
       CPI     '1'
       JZ      LIST
;
       LXI     H,SIXLPI        ;TEST FOR '6'
       CPI     '6'
       JZ      LIST
;
       LXI     H,EITLPI        ;TEST FOR '8'
       CPI     '8'
       JZ      LIST
;
       JMP     LOOP
;
;
;       SUBROUTINE TO OUTPUT ESCAPE CODE TO PRINTER
;
LIST    MOV     E,M     ;MOVE CHAR TO REG E
       PUSH    H       ;SAVE STRING POINTER
       MVI     C,LSTCHR ;SET UP FOR LINE PRINTER
       CALL    BDOS    ;PRINT CHARACTER
       POP     H       ;RESTORE STRING POINTER
       INX     H       ;POINT TO NEXT CHAR
       MOV     A,M     ;MOVE NEXT CHAR TO REG A
       CPI     '$'     ;IS IT THE TERMINATOR ($) ?
       JZ      LOOP    ;RETURN IF YES
       JMP     LIST    ;ELSE REPEAT
;
;       END OF SUBROUTINE
;
;
;               MESSAGES
;
MESAGE  DB      CLRSCR,TAB,'NEC-8023 PRINTER FUNCTIONS',CR,LF,LF
       DB      TAB,'B = 10 CHARACTERS PER INCH',CR,LF
       DB      TAB,'C = 12 CHARACTERS PER INCH',CR,LF
       DB      TAB,'D = 17 CHATACTERS PER INCH',CR,LF
       DB      TAB,'P = PROPORTIONAL SPACING'  ,CR,LF,LF
       DB      TAB,'E = EMPHASIZED PRINT'      ,CR,LF
       DB      TAB,'F = NON-EMPHASIZED PRINT'  ,CR,LF,LF
       DB      TAB,'2 = DOUBLE WIDTH PRINT'    ,CR,LF
       DB      TAB,'1 = SINGLE WIDTH PRINT'    ,CR,LF,LF
       DB      TAB,'6 = 6 LINES PER INCH'      ,CR,LF
       DB      TAB,'8 = 8 LINES PER INCH'      ,CR,LF,LF
       DB      '$'
;
;       TABLE OF PRINTER ESCAPE CODES
;
PICA    DB      ESC,'N$'
ELITE   DB      ESC,'E$'
MICRON  DB      ESC,'Q$'
PROP    DB      ESC,'P$'
EMPH    DB      ESC,'!$'
NOEMPH  DB      ESC,'"$'
DBLWD   DB      SO, '$'
SNGLWD  DB      SI, '$'
SIXLPI  DB      ESC,'A$'
EITLPI  DB      ESC,'B$'
;
;       STACK AREA
;
       DS      10H
STACK
;
       END