diff --git a/include/apple1/screen.a02 b/include/apple1/screen.a02 index 16c57bf..18a139a 100644 --- a/include/apple1/screen.a02 +++ b/include/apple1/screen.a02 @@ -1,8 +1,26 @@ ;Screen Control Assembly Lanuage Routines for Apple 1 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR: RTS ;Do Nothing (Drop to RTS) +;Move Cursor Home +CRSRHM EQU CLRSCR ;No Action + ;Move Cursor to Specified Coordinates SETPOS EQU CLRSCR ;No Action diff --git a/include/apple1/screen.h02 b/include/apple1/screen.h02 index dbe2649..f1ece37 100644 --- a/include/apple1/screen.h02 +++ b/include/apple1/screen.h02 @@ -2,6 +2,10 @@ * screen - Screen Control Routines for C02 * ********************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -13,6 +17,10 @@ void crsrhm(); * cursor row */ char getpos(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Get Screen Size * * Returns: width in columns * * height in rows */ @@ -22,3 +30,9 @@ char getsiz(); * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/apple2/screen.a02 b/include/apple2/screen.a02 index 3ff8bd4..98b4020 100644 --- a/include/apple2/screen.a02 +++ b/include/apple2/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for Apple II + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR: EQU $FC58 ;Applesoft Routine HOME diff --git a/include/apple2/screen.h02 b/include/apple2/screen.h02 index dbe2649..fe1d2c5 100644 --- a/include/apple2/screen.h02 +++ b/include/apple2/screen.h02 @@ -1,6 +1,10 @@ -/******************************************** - * screen - Screen Control Routines for C02 * - ********************************************/ +/***************************************** + * Screen Control Functions for Apple II * + ****************************************/ + +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) /* Clear the Screen */ void clrscn(); @@ -18,7 +22,17 @@ char getpos(); * height in rows */ char getsiz(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Move Cursor to Specified Position * * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/c64/screen.a02 b/include/c64/screen.a02 index 0bfe9e9..ce03dd3 100644 --- a/include/c64/screen.a02 +++ b/include/c64/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for VIC-20 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR EQU $E544 ;Aliased to CLSR Routine diff --git a/include/c64/screen.h02 b/include/c64/screen.h02 index 6ae0141..1592d68 100644 --- a/include/c64/screen.h02 +++ b/include/c64/screen.h02 @@ -2,6 +2,10 @@ * Screen Control Functions and Constants for VIC-20 * *****************************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -18,7 +22,17 @@ char getpos(); * height in rows */ char getsiz(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Move Cursor to Specified Position * * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/orao/screen.a02 b/include/orao/screen.a02 new file mode 100644 index 0000000..b0ac3d5 --- /dev/null +++ b/include/orao/screen.a02 @@ -0,0 +1,39 @@ +;Screen Control Assembly Lanuage Routines for C02 +;Skeleton Code for Systems with no Screen Control + + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + +;Clear the Screen +CLRSCR: LDA #$0C ;Print Form Feed + JMP PUTCHR ;and Return + +;Move Cursor Home +CRSRHM EQU $E395 ;Aliad to HOME Routine + +;Move Cursor to Specified Coordinates +SETPOS: STA $E9 ;Set CURCOL + STY $E8 ;Set CURROW + JMP $E39D ;Set Pointers and Return + +;Get Cursor Position +GETPOS: LDA $E9 ;Load Column Position + LDY $E8 ;Load Row Position + RTS ;Return Cursor Column in A, Row in Y + +;Get Screen Size +GETSIZ: LDA #32 ;Return 32 Columns + TAY ;and 32 Rows + RTS diff --git a/include/orao/screen.h02 b/include/orao/screen.h02 new file mode 100644 index 0000000..df50301 --- /dev/null +++ b/include/orao/screen.h02 @@ -0,0 +1,38 @@ +/********************************************* + * Screen Control Routines for Orao Computer * + *********************************************/ + +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + +/* Clear the Screen */ +void clrscn(); + +/* Move Cursor to Top Left of Screen */ +void crsrhm(); + +/* Get Current Cursor Position * + * Returns: cursor column * + * cursor row */ +char getpos(); + +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + +/* Get Screen Size * + * Returns: width in columns * + * height in rows */ +char getsiz(); + +/* Move Cursor to Specified Position * + * Args: column - screen column (0 = left) * + * row - screen line (0 = top) */ +void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/oric/screen.a02 b/include/oric/screen.a02 index 4f2272c..5a0e71e 100644 --- a/include/oric/screen.a02 +++ b/include/oric/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for Oric-1 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR EQU $CC0A ;Basic CLS Routine (Atmos = $CCCE) diff --git a/include/oric/screen.h02 b/include/oric/screen.h02 index 3b8b6b0..a4b81e6 100644 --- a/include/oric/screen.h02 +++ b/include/oric/screen.h02 @@ -2,6 +2,10 @@ * Screen Control Functions for Oric-1 * ***************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -13,6 +17,10 @@ void crsrhm(); ( cursor row */ char getpos(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Get Screen Size * * Returns: width in columns * * height in rows */ @@ -22,3 +30,9 @@ char getsiz(); * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/screen.a02 b/include/screen.a02 index 47d791f..f025045 100644 --- a/include/screen.a02 +++ b/include/screen.a02 @@ -1,6 +1,19 @@ ;Screen Control Assembly Lanuage Routines for C02 ;Skeleton Code for Systems with no Screen Control + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Not Default Text + BEQ GETPOS ;Return Error + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR: RTS ;No Action @@ -17,3 +30,4 @@ GETPOS: LDA #$FF ;Return Error ;Get Screen Size GETSIZ EQU GETPOS ;Return Error + diff --git a/include/screen.h02 b/include/screen.h02 index dbe2649..265f78d 100644 --- a/include/screen.h02 +++ b/include/screen.h02 @@ -1,6 +1,11 @@ -/******************************************** - * screen - Screen Control Routines for C02 * - ********************************************/ +/*********************************** + * Screen Control Routines for C02 * + ***********************************/ + +/* Screen Modes for getscr() and setscr() * + * Invalid Modes have value $FF */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Usuallu 80 Columns) /* Clear the Screen */ void clrscn(); @@ -18,7 +23,17 @@ char getpos(); * height in rows */ char getsiz(); -/* Move Cursor to Specified Position * - * Args: column - screen column (0 = left) * - * row - screen line (0 = top) */ +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + +/* Move Cursor to Specified Position * + * Args: char col - screen column (0 = left) * + * char row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/vic/screen.a02 b/include/vic/screen.a02 index 7e16bde..f262a18 100644 --- a/include/vic/screen.a02 +++ b/include/vic/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for VIC-20 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR EQU $E55F ;Aliased to CLSR Routine diff --git a/include/vic/screen.h02 b/include/vic/screen.h02 index 595c261..f45edd6 100644 --- a/include/vic/screen.h02 +++ b/include/vic/screen.h02 @@ -2,6 +2,10 @@ * Screen Control Functions for VIC-20 * ***************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -13,6 +17,10 @@ void crsrhm(); ( cursor row */ char getpos(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Get Screen Size * * Returns: width in columns * * height in rows */ @@ -22,3 +30,9 @@ char getsiz(); * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/x16/screen.a02 b/include/x16/screen.a02 new file mode 100644 index 0000000..43ff8ca --- /dev/null +++ b/include/x16/screen.a02 @@ -0,0 +1,45 @@ +;Screen Control Assembly Lanuage Routines for VIC-20 + + ;SUBROUTINE + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $02 ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: SEC ;Set Carry + JSR $FF5F ;Call SCRMOD + LDA #0 ;Set Return Value to Zero + BCC .RETURN ;If Carry Set + DEC ; Return 255 (Error) +.RETURN RTS + +;Get Screen Mode +GETSCR: CLC ;Clear Carry + JMP $FF5F ;Execute SCRMOD + RTS + +;Clear the Screen +CLRSCR LDA #$93 ;Load CLR/HOME Character + JMP PUTCHR ;and Print to Screen + +;Move Cursor To Home Position +CRSRHM LDA #$13 ;Load HOME Character + JMP PUTCHR ;and Print to Screen + +;Move Cursor to Specified Coordinates +SETPOS: .DC $5A ;PHY Copy Row + .DC $FA ;PLX to X Register, + TAY ;Column to Y Register + CLC ;Set Carry + JMP $FFF0 ;and Execute Plot + +;Get Cursor Position +GETPOS: LDY $D6 ;Load Cursor Row + LDA $D3 ;Load Cursor Column + RTS + +;Get Screen Size +GETSIZ: JSR $FFED ;Call SCREEN Kernal Routine + TXA ;Transfer Width to Accumulator + RTS + diff --git a/include/x16/screen.h02 b/include/x16/screen.h02 new file mode 100644 index 0000000..052b196 --- /dev/null +++ b/include/x16/screen.h02 @@ -0,0 +1,38 @@ +/***************************************************** + * Screen Control Functions and Constants for VIC-20 * + *****************************************************/ + +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //Default Text Mode (40x30) +#define SMWIDE $02 //Wide Screen Text Mode (80x60) + +/* Clear the Screen */ +void clrscn(); + +/* Move Cursor to Top Left of Screen */ +void crsrhm(); + +/* Get Current Cursor Position * + * Returns: cursor column * + ( cursor row */ +char getpos(); + +/* Get Screen Size * + * Returns: width in columns * + * height in rows */ +char getsiz(); + +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + +/* Move Cursor to Specified Position * + * Args: column - screen column (0 = left) * + * row - screen line (0 = top) */ +void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/test/scrntst.c02 b/test/scrntst.c02 index 9a5a8c0..5b3887f 100644 --- a/test/scrntst.c02 +++ b/test/scrntst.c02 @@ -25,7 +25,6 @@ main: for (modex=0; modex<@modes; modex++) { mode = modes[modex]; - putstr("MODE $"); prbyte(mode); newlin(); if (mode == $FF) continue; //Unsupported Mode if (setscr(mode)=$FF) putlin("ERROR IN SETSCR()");