*
********************************
*                              *
*      -< STDIO DEMO >-        *
*                              *
*       VERSION 00.03.00       *
*                              *
*         13-JAN-2019          *
*                              *
********************************
*                              *
*       NATHAN D. RIGGS        *
*   NATHAN.RIGGS@OUTLOOK.COM   *
*                              *
********************************
*
** ASSEMBLER DIRECTIVES
*
         CYC   AVE
         EXP   OFF
         TR    ON
         DSK   STDIO.DEMO
         OBJ   $BFE0
         ORG   $6000
*
*``````````````````````````````*
*  TOP INCLUDES (HOOKS,MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
         PUT   MIN.VARS.REQUIRED
         PUT   MIN.HOOKS.REQUIRED
         USE   MIN.MAC.REQUIRED
         USE   MIN.MAC.STDIO
         PUT   MIN.HOOKS.STDIO
*
*``````````````````````````````*
*      PROGRAM MAIN BODY       *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
         JSR   HOME       ; CLEAR SCREEN
*
** SINCE THE STDIO LIBRARY HAS MACROS IN
** ADDITION TO ROUTINES THAT FUNCTION ON
** THEIR OWN, THIS DEMO WILL PRIMARILY USE
** MACROS TO ILLUSTRATE THEIR FUNCTIONS.
*
** PRN SIMPLY PRINTS A STRING OF TEXT TO THE
** SCREEN AT THE CURRENT CURSOR POSITION, OR
** PRINTS THE DATA AT A PARTICULAR MEMORY ADDRESS.
** IT ACCOMPLISHES THIS BY DETERMINING IF THE
** PARAMETER IS A STRING OR AN ADDRESS, THEN CALLING
** EITHER XPRINT OR DPRINT.
*
** THE ROUTINE QUITS PRINTING ONCE THE VALUE
** OF 00 IS ENCOUNTERED, IN THE CASE OF PRINTING
** PROM MEMORY.
*
** MACRO: PRN "STRING" <OR> PRN STRING_ADDRESS
*
         PRN   "THE PRN MACRO SIMPLY ",8D
         PRN   "DISPLAYS A LITERAL STRING ",8D
         PRN   "OR DATA LOCATED AT A SPECIFIC ",8D
         PRN   "ADDRESS (THE LATTER WILL BE SHOWN",8D
         PRN   "AFTER THE INP MACRO.",8D8D
         PRN   "NOTE THAT A NEW LINE CAN BE SENT ",8D
         PRN   "BY ADDING ,8D AFTER THE ENDING ",8D
         PRN   "STRING DELIMITER.",8D8D
         _WAIT
*
** MACRO: PCR, NO PARAMETERS
*
         PRN   "YOU CAN ALSO GET A NEWLINE",8D
         PRN   "BY USING THE PCR"
         PCR
         PCR
         PCR
         PRN   "ROUTINE."
         PCR
         PCR
         PCR
         _WAIT
*
** MACRO: INP, NO PARAMETERS
*
         JSR   HOME
         PRN   "THE INP MACRO ACCEPTS UP TO",8D
         PRN   "255 CHARACTERS AND STORES THEM",8D
         PRN   "IN [RETURN]. THIS CAN BE EASILY",8D
         PRN   "PRINTED IMMEDIATELY WITH PRN BY",8D
         PRN   "USING THE ADDRESS MODE.",8D8D
         PRN   "ENTER SOMETHING: "
         INP
         PCR
         PCR
         PRN   "YOU WROTE: ",8D8D
         PRN RETURN
         PCR
         PCR
         _WAIT
*
** MACRO: GKEY, NO PARAMETERS
*
         PRN   "THE GKEY MACRO SIMPLY GETS",8D
         PRN   "A SINGLE KEYPRESS, STORED IN .A",8D8D
         GKEY
*
** MACRO: SCPOS X_POSITION;Y_POSITION
** MACRO: SETCX X_POSITION
** MACRO: SETCY Y_POSITION
*
         JSR   HOME
         SCPOS #10;#15
         PRN   "SCPOS POSITIONS THE CURSOR"
         PRN   " AT THE GIVEN X,Y."
         _WAIT
         SETCY #20
         SETCX #1
         PRN   "SETCX SETS X POSITION "
         SETCY #22
         PRN   "SETCY SETS THE Y"
         _WAIT
*
** MACRO: CURF NUMBER_OF_SPACES
**        CURB NUMBER_OF_SPACES
**        CURU NUMBER_OF_SPACES
**        CURD NUMBER_OF_SPACES
*
         JSR   HOME
         PRN   "THE CURSOR CAN ALSO BE MOVED"
         _WAIT
         CURF  #10
         PRN   "RELATIVE TO THE CURRENT"
         _WAIT
         CURD  #03
         PRN   "POSITION WITH THE CURF,CURD,"
         _WAIT
         CURD  #8
         SETCX #12
         CURB  #10
         PRN   "CURB AND"
         CURU  #05
         PRN   "CURU (FORWARD, DOWN, BACK, UP)"
         _WAIT
*
** MACRO: RCPOS X_POSITION;Y_POSITION
*
         JSR   HOME
         PRN   "AAAAAAAAAA"
         SCPOS #05;#05
         PRN   "AABBCC",8D8D8D
         RCPOS #05;#05
         STA   $300
         PCR
         PRN   "THE RCPOS MACRO RETURNS THE",8D
         PRN   "CHARACTER AT THE GIVEN X,Y",8D
         PRN   "LOCATION. THE CHAR A 5,5",8D
         PRN   "IS: "
         LDA   $300
         JSR   COUT1
         PCR
         PCR
         _WAIT
*
** MACRO: PDL PADDLE_NUMBER
*
         JSR   HOME
         PRN   "THE PDL MACRO READS THE",8D
         PRN   "CURRENT STATE OF THE PADDLE",8D
         PRN   "AND RETURNS THAT STATE",8D
         PRN   "IN .Y.",8D8D
         PRN   "MOVE THE PADDLE A BIT TO SEE",8D
         PRN   "THE VALUE OF Y CHANGE.",8D8D
         PRN   "(PRESS A KEY FIRST, TO START)"
         _WAIT
         LDA   #0
         STA   $300
         LDA   #0
         STA   $310
         JSR   HOME
PLP
         PDL   0
         TYA
         JSR   COUT1
         INC   $300
         LDA   $300
         CMP   #255
         BNE   PLP
         INC   $310
         LDA   $310
         CMP   #4
         BEQ   XPLP
         BNE   PLP
XPLP
*
** MACRO: PBX PADDLE_BUTTON_NUMBER
*
         JSR   HOME
         PRN   "THE PBX MACRO RETURNS 1 INTO",8D
         PRN   "THE ACCUMULATOR IF THE PROMPTED",8D
         PRN   "PADDLE BUTTON IS PRESSED. THIS",8D
         PRN   "IS USUALLY PB0 OR PB1. THE",8D
         PRN   "APPLE KEYS ARE ALSO MAPPED HERE.",8D
         PRN   "PRESS PADDLE BUTTON ZERO OR OPEN",8D
         PRN   "APPLE TO CONTINUE."
         LDA   #0
PBLP
         PBX   PB0
         CMP   #1
         BNE   PBLP
*
** MACRO: TVLIN Y_START;Y_END;X_POSITION;FILL_CHAR
**        THLIN X_START;X_END;Y_POSITION;FILL_CHAR
*
**        TFILL X_START;X_END;Y_START;Y_ENDLFILL_CHAR
*
         JSR   HOME
         PRN   "TVLIN CREATES A VERTICAL LINE",8D
         PRN   "OF TEXT, WHILE THLIN CREATES",8D
         PRN   "A HORIZONTAL LINE OF TEXT. YOU",8D
         PRN   "SPECIFY THE COORDS / FILL CHAR.",8D8D
         TVLIN #08;#18;#10;#$AA
         _WAIT
         THLIN #10;#30;#08;#$AA
         _WAIT
         TVLIN #8;#18;#30;#$AA
         THLIN #10;#31;#17;#$AA
         _WAIT
         THLIN #0;#39;#0;#$AA
         TVLIN #0;#23;#0;#$AA
         THLIN #0;#39;#23;#$AA
         TVLIN #00;#23;#39;#$AA
         _WAIT
         TFILL #0;#0;#39;#23;#$AA
         _WAIT
         TFILL #10;#5;#30;#17;#$A0
         _WAIT
         SCPOS #12;#7
         PRN   "AND TFILL FILLS A",8D
         SCPOS #12;#9
         PRN   "GIVEN AREA WITH"
         SCPOS #12;#11
         PRN   "A FILL CHAR"
         _WAIT
         JSR   HOME
         PRN   "LASTLY, THE TPUT MACRO SIMPLY",8D
         PRN   "PLOTS A GIVEN CHARACTER TO THE",8D
         PRN   "SCREEN VIA DIRECT MEMORY ACCESS."
         PRN   " ",8D8D
         _WAIT
         TPUT  #10;#10;#$AA
         TPUT  #11;#11;#$AA
         TPUT  #12;#12;#$AA
         TPUT  #13;#13;#$AA
         TPUT  #14;#14;#$AA
         _WAIT
         JSR   HOME
         PRN   "FIN.",8D8D8D
         TPUT  #39;#23;#$AA
*
         JMP   REENTRY
*
*``````````````````````````````*
*        BOTTOM INCLUDES       *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
         PUT   MIN.LIB.REQUIRED
*
** INDIVIDUAL SUBROUTINE INCLUDES
*
*  STDIO SUBROUTINES
*
         PUT   MIN.SUB.XPRINT
         PUT   MIN.SUB.DPRINT
         PUT   MIN.SUB.THLINE
         PUT   MIN.SUB.TVLINE
         PUT   MIN.SUB.CURSORUDBF
         PUT   MIN.SUB.TFILLA
         PUT   MIN.SUB.SINPUT
         PUT   MIN.SUB.GPBX
         PUT   MIN.SUB.TXTPUT
*
