* *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=* * * * STDIO.MAC * * * * AUTHOR: NATHAN RIGGS * * CONTACT: NATHAN.RIGGS@ * * OUTLOOK.COM * * * * VERSION: 0.2.0 * * DATE: 12-DEC-2018 * * ASSEMBLER: MERLIN 8 PRO * * LICENSE: APACHE 2.0 * * OS: DOS 3.3 * * * *------------------------------* * * * THIS IS A MACRO LIBRARY FOR * * STANDARD INPUT AND OUTPUT. * * * * SUBROUTINES FILES USED: * * * * SUB.XPRINT * * SUB.DPRINT * * SUB.SINPUT * * SUB.GKEY * * SUB.CURSOR * * SUB.GPBX * * SUB.TVLINE * * SUB.THLINE * * SUB.TFILLA * * SUB.TXTPUT * * * *------------------------------* * * * LIST OF MACROS * * * * PRN : FLEXIBLE PRINT * * INP : STRING INPUT * * GKEY : GET SINGLE KEY * * SCPOS : SET CURS POS AT X,Y * * SETCX : SET CURSOR X * * SETCY : SET CURSOR Y * * CURF : CURSOR FORWARD * * CURB : CURSOR BACKWARD * * CURU : CURSOR UP * * CURD : CURSOR DOWN * * RCPOS : READ CURSOR POSITION * * PDL : READ PADDLE STATE * * PBX : READ PDL BTN X * * TVLIN : TEXT VERTICAL LINE * * THLIN : TEXT HORIZ LINE * * TFILL : TEXT FILL AREA * * TPUT : TEXT CHAR PLOT AT XY * * COL40 : FORCE 40COL MODE * * COL80 : FORCE 80COL MODE * * DIE80 : KILL 80COL FIRMWARE * * MTXT0 : DISABLE MOUSETEXT * * MTXT1 : ENABLE MOUSETEXT * * WAIT : WAIT FOR KEYPRESS * * * *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=* * *``````````````````````````````* * PRN :: PRINT (NO ) * *- -* * EITHER PRINTS A STRING OF * * TEXT PROVIDED, OR PRINTS THE * * DATA FOUND AT THE SPECIFIED * * MEMORY LOCATION. * *- -* * PARAMETERS * * * * IF FIRST LETTER OF VAR1 IS * * A QUOTATION MARK, THEN PASS * * CONTROL TO XPRINT. * * * * IF FIRST LETTER OF VAR1 IS * * A DOLLAR SIGN, THEN IT IS A * * MEMORY LOCATION, SO PASS TO * * DPRINT. * *- -* * SAMPLE USAGE: * * * * PRN "HELLO!" * * PRN $300 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * PRN MAC IF ",]1 ; --- IF PARAM=STRING JSR XPRINT ; SPECIAL PRINT ASC ]1 ; PUT STRING HERE HEX 00 ; STRING TERMINATE ELSE ; ELSE, PARAM IS ; MEMORY LOCATION _ISLIT ]1 JSR DPRINT FIN <<< * *``````````````````````````````* * INP: INPUT MACRO * * * * INPUTS A STRING FROM KEYBRD * * AND STORES IT IN [RETURN] * *- -* * SAMPLE USAGE: * * * * INP * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * INP MAC JSR SINPUT <<< * *``````````````````````````````* * GKEY GETKEY * * * * WAITS FOR USER TO PRESS A * * KEY, THEN STORES THAT IN .A * *- -* * SAMPLE USAGE: * * * * GKEY * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * GKEY MAC JSR GETKEY LDY #0 STY STROBE <<< * *``````````````````````````````* * SCPOS : POSITION CURSOR X,Y * *- -* * SETS THE CURSOR POSITION. * *- -* * PARAMETERS * * * * ]1 = X POSITION * * ]2 = Y POSITION * *- -* * SAMPLE USAGE: * * * * SCPOS #10;#10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * ** WARNING: NO ERROR CONTROL * SCPOS MAC LDX ]1 LDY ]2 STX CURSH STY CURSV JSR VTAB <<< * *``````````````````````````````* * SETCX : SET CURSOR HORIZ * *- -* * SETS THE HORIZONTAL POSITION * * OF THE TEXT CURSOR. * *- -* * PARAMETERS * * * * ]1 = X POSITION * *- -* * SAMPLE USAGE: SETCX #10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * ** WARNING: NO ERROR CONTROL * SETCX MAC LDX ]1 STX CURSH JSR VTAB <<< * *``````````````````````````````* * SETCY: POSITION CURSOR VERT * *- -* * SET CURSOR VERTICAL POSITION * *- -* * PARAMETERS * * * * ]1 = Y POSITION * *- -* * SAMPLE USAGE: SETCY #10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * ** WARNING: NO ERROR CONTROL * SETCY MAC LDY ]1 STY CURSV JSR VTAB <<< * *``````````````````````````````* * CURF : TEXT CURSOR FORWRD * *- -* * MOVES THE CURSOR FORWARD BY * * SPECIFIED AMOUNT. * *- -* * PARAMETERS * * * * ]1 = NUMBER TO MOVE FORWARD * *- -* * SAMPLE USAGE: CURF #10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * CURF MAC LDA ]1 JSR CURSFOR <<< * *``````````````````````````````* * CURB :: TEXT CURSOR BACKWD * *- -* * MOVES THE CURSOR BACKWARD BY * * SPECIFIED AMOUNT. * *- -* * PARAMETERS * * * * ]1 = AMOUNT TO MOVE BACKWARD * *- -* * SAMPLE USAGE: CURB #10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * CURB MAC LDA ]1 JSR CURSBAK <<< * *``````````````````````````````* * CURU :: TEXT CURSOR UP * *- -* * MOVES THE CURSOR UP BY * * SPECIFIED AMOUNT. * *- -* * PARAMETERS * * * * ]1 = AMOUNT TO MOVE UP * *- -* * SAMPLE USAGE: CURU #10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * CURU MAC LDA ]1 JSR CURSUP <<< * *``````````````````````````````* * CURD :: TEXT CURSOR DOWN * *- -* * MOVES THE CURSOR DOWN BY * * SPECIFIED AMOUNT. * *- -* * PARAMETERS * * * * ]1 = AMOUNT TO MOVE DOWN * *- -* * SAMPLE USAGE: CURD #10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * CURD MAC LDA ]1 JSR CURSDN <<< * *``````````````````````````````* * RCPOS :: READ SCREEN AT XY * *- -* * READ THE CHARACTER AT POS * * X,Y AND LOADS INTO ACCUM * *- -* * PARAMETERS * * * * ]1 = X POSITION * * ]2 = Y POSITION * *- -* * SAMPLE USAGE: _RCXY #3;#9 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * ** WARNING: NO ERROR CONTROL * RCPOS MAC LDA ]1 ; ROW LDY ]2 ; COLUMN JSR $F847 ; GBASCALC ROUTINE LDA ($26),Y ; LOW OF ADDR OF CHAR <<< * *``````````````````````````````* * PDL PADDLE / MOUSE INPUT * *- -* * SIMPLY READS STATE OF PADDLE * * NUMBER [NUM] AND STORES IT * * IN THE Y REGISTER. * *- -* * PARAMETERS * * * * ]1 = PADDLE NUMBER TO READ * *- -* * SAMPLE USAGE: PDL #0 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * ** WARNING: NO ERROR CONTROL * PDL MAC ; GET PADDLE VALUE LDX ]1 ; READ PADDLE # ]1 (USUALLY 0) JSR PREAD ; PADDLE READING STORED IN Y <<< * *``````````````````````````````* * PBX :: PADDLE BUTTON X * * * * STORE 1 IN ACCUMULATOR IF * * PADDLE BUTTON X IS PRESSED, * * OTHERWISE STORE 0 IN ACCUM. * *- -* * PARAMETERS * * * * ]1 = PADDLE BUTTON TO READ * * * * PB0: $C061 PB1: $C062 * * PB2: $C063 PB4: $C060 * *- -* * SAMPLE USAGE: PBX $C061 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * PBX MAC _ISLIT ]1 JSR GPBX <<< * *``````````````````````````````* * TVLIN :: TEXT VERTICAL LINE * *- -* * CREATES A VERTICAL LINE OF * * TEXT AT THE CURRENT CURSOR * * COLUMN CONSISTING OF THE * * SPECIFIED CHARACTER. * *- -* * PARAMETERS * * * * ]1 = START OF VERTICAL LINE * * ]2 = END OF VERTICAL LINE * * ]3 = X POSITION OF LINE * * ]4 = FILL CHARACTER * *- -* * SAMPLE USAGE: * * * * TVLIN #0;#10;#3;#$18 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * TVLIN MAC LDA ]1 ; Y START PHA LDA ]2 ; Y END PHA LDA ]3 ; X POSITION PHA LDA ]4 ; CHARACTER PHA JSR TVLINE <<< * *``````````````````````````````* * THLIN : TEXT HORIZONTAL LINE * * * * CREATES A HORIZONTAL LINE OF * * TEXT FROM X1,Y TO X2,Y WITH * * THE SPECIFIED CHARACTER. * *- -* * PARAMETERS * * * * ]1 = START OF HORIZONTL LINE * * ]2 = END OF HORIZONTAL LINE * * ]3 = Y POSITION OF LINE * * ]4 = FILL CHARACTER * *- -* * SAMPLE USAGE: * * * * THLIN #0;#10;#12;#$18 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * THLIN MAC LDA ]1 ; X START PHA LDA ]2 ; X END PHA LDA ]3 ; Y POS PHA LDA ]4 ; FILL CHAR PHA JSR THLINE <<< * *``````````````````````````````* * TFILL :: TEXT FILL * *- -* * FILL X1,Y1 TO X2,Y2 WITH * * SPECIFIED CHARACTER. * *- -* * PARAMETERS * * * * PARAM1 = X1 * * PARAM2 = Y1 * * PARAM3 = X2 * * PARAM4 = Y2 * *- -* * SAMPLE USAGE: * * * * TFILL #0;#10;#0;#10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * TFILL MAC LDA ]1 ; LEFT BOUNDARY PHA LDA ]2 ; TOP BOUNDARY PHA LDA ]3 ; RIGHT BOUNDARY PHA LDA ]4 ; BOTTOM BOUNDARY PHA LDA ]5 ; FILL CHAR PHA JSR TFILLA <<< * *``````````````````````````````* * TPUT :: TEXT CHARACTER PLOT * *- -* * PLOT A TEXT CHARACTER AT X,Y * * DIRECTLY TO MEMORY. * *- -* * PARAMETERS * * * * PARAM1 = X * * PARAM2 = Y * * PARAM3 = CHARACTER * *- -* * SAMPLE USAGE: * * * * TPUT #$AA;#10;#10 * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * TPUT MAC LDA ]1 PHA LDA ]2 PHA LDA ]3 PHA JSR TXTPUT <<< * *``````````````````````````````* * DIE80 : KILL 80-COLUMN FIRMW * *- -* * SEND CTRL-U TO COUT, FORCING * * 40 COLUMN MODE. * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * DIE80 MAC LDA #21 JSR COUT <<< * *``````````````````````````````* * COL80 : FORCE 80 COLUMN MODE * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * COL80 MAC LDA #18 JSR COUT <<< * *``````````````````````````````* * COL40 : FORCE 40 COLUMN MODE * *- -* * SEND CTRL-U TO COUT, FORCING * * 40 COLUMN MODE. * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * COL40 MAC LDA #17 JSR COUT <<< * *``````````````````````````````* * MTXT0 : DISABLE MOUSETEXT * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * MTXT0 MAC LDA #24 JSR COUT <<< * *``````````````````````````````* * MTXT1 : DISABLE MOUSETEXT * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * MTXT1 MAC LDA #27 JSR COUT <<< * *``````````````````````````````* * WAIT : WAIT FOR KEYPRESS, NO * * COUT INTERFERENCE * * * * KEYCODE STORED IN .A * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * WAIT MAC ]WTLP LDA $C000 BPL ]WTLP AND #$7F STA $C010 <<< *